Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update CL metadata in dm-reader #2894

Merged
merged 10 commits into from Mar 15, 2022
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
115 changes: 81 additions & 34 deletions hyperspy/io_plugins/digital_micrograph.py
Expand Up @@ -858,6 +858,25 @@ def _get_EELS_exposure_time(self, tags):
else:
_logger.info("EELS exposure time can't be read.")

def _get_CL_detector_type(self, tags):
if "Acquisition_Mode" in tags and tags["Acquisition_Mode"] == "Parallel dispersive":
return "CCD"
elif "Acquisition_Mode" in tags and tags["Acquisition_Mode"] == "Serial dispersive":
return "PMT"
else:
_logger.info("CL detector type can't be read.")

def _get_CL_exposure_time(self, tags):
jlaehne marked this conversation as resolved.
Show resolved Hide resolved
if 'Integration_time_s' in tags:
return float(tags["Integration_time_s"])
elif 'Exposure_s' in tags:
frame_number = 1
if "Number_of_frames" in tags:
frame_number = float(tags["Number_of_frames"])
return float(tags["Exposure_s"]) * frame_number
else:
_logger.info("CL exposure time can't be read.")

def get_mapping(self):
if 'source' in self.imdict.ImageTags.keys():
# For stack created with the stack builder plugin
Expand All @@ -868,27 +887,32 @@ def get_mapping(self):
tags_path = 'ImageList.TagGroup0.ImageTags'
image_tags_dict = self.imdict.ImageTags
is_scanning = "DigiScan" in image_tags_dict.keys()
# check if instrument is SEM or TEM
if "Microscope Info" in self.imdict.ImageTags and "Illumination Mode" in self.imdict.ImageTags["Microscope Info"]:
microscope = "SEM" if self._get_mode(self.imdict.ImageTags["Microscope Info"]["Illumination Mode"]) == "SEM" else "TEM"
else:
microscope = "TEM"
mapping = {
"{}.DataBar.Acquisition Date".format(tags_path): (
"General.date", self._get_date),
"{}.DataBar.Acquisition Time".format(tags_path): (
"General.time", self._get_time),
"{}.Microscope Info.Voltage".format(tags_path): (
"Acquisition_instrument.TEM.beam_energy", lambda x: x / 1e3),
"Acquisition_instrument.%s.beam_energy" % microscope, lambda x: x / 1e3),
"{}.Microscope Info.Stage Position.Stage Alpha".format(tags_path): (
"Acquisition_instrument.TEM.Stage.tilt_alpha", None),
"Acquisition_instrument.%s.Stage.tilt_alpha" % microscope, None),
"{}.Microscope Info.Stage Position.Stage Beta".format(tags_path): (
"Acquisition_instrument.TEM.Stage.tilt_beta", None),
"Acquisition_instrument.%s.Stage.tilt_beta" % microscope, None),
"{}.Microscope Info.Stage Position.Stage X".format(tags_path): (
"Acquisition_instrument.TEM.Stage.x", lambda x: x * 1e-3),
"Acquisition_instrument.%s.Stage.x" % microscope, lambda x: x * 1e-3),
"{}.Microscope Info.Stage Position.Stage Y".format(tags_path): (
"Acquisition_instrument.TEM.Stage.y", lambda x: x * 1e-3),
"Acquisition_instrument.%s.Stage.y" % microscope, lambda x: x * 1e-3),
"{}.Microscope Info.Stage Position.Stage Z".format(tags_path): (
"Acquisition_instrument.TEM.Stage.z", lambda x: x * 1e-3),
"Acquisition_instrument.%s.Stage.z" % microscope, lambda x: x * 1e-3),
"{}.Microscope Info.Illumination Mode".format(tags_path): (
"Acquisition_instrument.TEM.acquisition_mode", self._get_mode),
"Acquisition_instrument.%s.acquisition_mode" % microscope, self._get_mode),
"{}.Microscope Info.Probe Current (nA)".format(tags_path): (
"Acquisition_instrument.TEM.beam_current", None),
"Acquisition_instrument.%s.beam_current" % microscope, None),
"{}.Session Info.Operator".format(tags_path): (
"General.authors", self._parse_string),
"{}.Session Info.Specimen".format(tags_path): (
Expand Down Expand Up @@ -921,16 +945,16 @@ def get_mapping(self):
else:
mapping.update({
"{}.Microscope Info.STEM Camera Length".format(tags_path): (
"Acquisition_instrument.TEM.camera_length",
"Acquisition_instrument.%s.camera_length" % microscope,
None),
"{}.Microscope Info.Indicated Magnification".format(tags_path): (
"Acquisition_instrument.TEM.magnification",
"Acquisition_instrument.%s.magnification" % microscope,
None),
})

mapping.update({
tags_path: (
"Acquisition_instrument.TEM.microscope",
"Acquisition_instrument.%s.microscope" % microscope,
self._get_microscope_name),
})
if "SI" in self.imdict.ImageTags.keys():
Expand Down Expand Up @@ -1001,59 +1025,82 @@ def get_mapping(self):
"Acquisition_instrument.TEM.Detector.EDS.real_time",
None),
})
elif self.signal_type == "CL":
elif self.signal_type == "CL" or ("Acquisition" in image_tags_dict.keys() and "Monarc_Spectrometer" in image_tags_dict["Acquisition"].keys()):
jlaehne marked this conversation as resolved.
Show resolved Hide resolved
mapping.update({
"{}.CL.Acquisition.Date".format(tags_path): (
"General.date", self._get_date),
"{}.CL.Acquisition.Start_time".format(tags_path): (
"General.time", self._get_time),
"{}.Meta_Data.Acquisition_Mode".format(tags_path): (
"Acquisition_instrument.CL.acquisition_mode", None),
"Acquisition_instrument.Spectrometer.acquisition_mode", None),
"{}.Meta_Data.Format".format(tags_path): (
"Signal.format", None),
"{}.Meta_Data".format(tags_path): (
"Acquisition_instrument.Detector.detector_type",
self._get_CL_detector_type),
"{}.Acquisition.Monarc_Spectrometer.Grating".format(tags_path): (
"Acquisition_instrument.Spectrometer.Grating.groove_density",
lambda string: self._parse_string(string,
convert_to_float=True,
tag_name='Grating')),
"{}.CL.Acquisition.Dispersion_grating_(lines/mm)".format(tags_path): (
"Acquisition_instrument.CL.dispersion_grating", None),
"Acquisition_instrument.Spectrometer.Grating.groove_density", None),
"{}.Acquisition.Monarc_Spectrometer.Slit_Width".format(tags_path): (
"Acquisition_instrument.Spectrometer.entrance_slit_width", None),
"{}.Acquisition.Monarc_Spectrometer.Bandpass".format(tags_path): (
"Acquisition_instrument.Spectrometer.bandpass", None),
# Parallel spectrum
"{}.CL.Acquisition.Central_wavelength_(nm)".format(tags_path): (
"Acquisition_instrument.CL.central_wavelength", None),
"Acquisition_instrument.Spectrometer.central_wavelength", None),
"{}.CL.Acquisition.Exposure_(s)".format(tags_path): (
"Acquisition_instrument.CL.exposure", None),
"Acquisition_instrument.Detector.exposure_per_frame", None),
"{}.CL.Acquisition.Number_of_frames".format(tags_path): (
"Acquisition_instrument.CL.frame_number", None),
"{}.CL.Acquisition.Integration_time_(s)".format(tags_path): (
"Acquisition_instrument.CL.integration_time", None),
"Acquisition_instrument.Detector.frames", None),
"{}.CL.Acquisition".format(tags_path): (
"Acquisition_instrument.Detector.integration_time",
self._get_CL_exposure_time),
"{}.CL.Acquisition.Saturation_fraction".format(tags_path): (
"Acquisition_instrument.CL.saturation_fraction", None),
"Acquisition_instrument.Detector.saturation_fraction", None),
"{}.Acquisition.Parameters.High_Level.Binning".format(tags_path): (
"Acquisition_instrument.CL.CCD.binning", None),
"Acquisition_instrument.Detector.binning", None),
"{}.Acquisition.Parameters.High_Level.CCD_Read_Area".format(tags_path): (
"Acquisition_instrument.CL.CCD.read_area", None),
"Acquisition_instrument.Detector.sensor_roi", None),
"{}.Acquisition.Parameters.High_Level.Processing".format(tags_path): (
"Acquisition_instrument.CL.CCD.processing", None),
"Acquisition_instrument.Detector.processing", None),
"{}.Acquisition.Device.CCD.Pixel_Size_um".format(tags_path): (
"Acquisition_instrument.Detector.pixel_size",
lambda x: x[0] if (isinstance(x, tuple) and x[0] == x[1]) else x),
# Serial Spectrum
"{}.CL.Acquisition.Acquisition_begin".format(tags_path): (
"General.date", self._get_date),
"{}.CL.Acquisition.Detector_type".format(tags_path): (
"Acquisition_instrument.CL.detector_type", None),
"{}.CL.Acquisition.Dwell_time_(s)".format(tags_path): (
"Acquisition_instrument.CL.dwell_time", None),
"Acquisition_instrument.Detector.integration_time", None),
"{}.CL.Acquisition.Start_wavelength_(nm)".format(tags_path): (
"Acquisition_instrument.CL.start_wavelength", None),
"Acquisition_instrument.Spectrometer.start_wavelength", None),
"{}.CL.Acquisition.Step-size_(nm)".format(tags_path): (
"Acquisition_instrument.CL.step_size", None),
"Acquisition_instrument.Spectrometer.step_size", None),
# PMT image
"{}.Acquisition.Monarc_Spectrometer.PMT_HV".format(tags_path): (
"Acquisition_instrument.Detector.pmt_voltage", None),
"{}.DigiScan.Sample Time".format(tags_path): (
"Acquisition_instrument.%s.dwell_time" % microscope,
lambda x: x / 1e6),
# SI
"{}.DataBar.Acquisition_Date".format(tags_path): (
"General.date", self._get_date),
"{}.DataBar.Acquisition_Time".format(tags_path): (
"General.time", self._get_time),
"{}.SI.Acquisition.SI_Application_Mode.Name".format(tags_path): (
"Acquisition_instrument.Spectrum_image.mode", None),
"{}.SI.Acquisition.Artefact_Correction.Spatial_Drift.Periodicity".format(tags_path): (
"Acquisition_instrument.CL.SI.drift_correction_periodicity", None),
"Acquisition_instrument.Spectrum_image.drift_correction_periodicity", None),
"{}.SI.Acquisition.Artefact_Correction.Spatial_Drift.Units".format(tags_path): (
"Acquisition_instrument.CL.SI.drift_correction_units", None),
"{}.SI.Acquisition.SI_Application_Mode.Name".format(tags_path): (
"Acquisition_instrument.CL.SI.mode", None),

"Acquisition_instrument.Spectrum_image.drift_correction_units", None),
})
elif "DigiScan" in image_tags_dict.keys():
mapping.update({
"{}.DigiScan.Sample Time".format(tags_path): (
"Acquisition_instrument.TEM.dwell_time",
"Acquisition_instrument.%s.dwell_time" % microscope,
lambda x: x / 1e6),
})
else:
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.