diff --git a/rsciio/mrc/_api.py b/rsciio/mrc/_api.py index cfabfe9a..6f081767 100644 --- a/rsciio/mrc/_api.py +++ b/rsciio/mrc/_api.py @@ -168,21 +168,28 @@ def read_de_metadata_file(filename, nav_shape=None): value = value.strip() original_metadata[key] = value - in_stem_mode = original_metadata.get("Image Project TEMorSTEM Mode", -1) + in_stem_mode = int(original_metadata.get("Image Project TEMorSTEM Mode", -1)) scanning = original_metadata.get("Scan - Enable", "Disable") == "Enable" raster = original_metadata.get("Scan - Type", "Raster") == "Raster" - if not raster: + if not raster: # pragma: no cover _logger.warning( "Non-raster scans are not fully supported yet. Please raise an issue on GitHub" " if you need this feature." ) if in_stem_mode == -1: in_stem_mode = scanning - elif in_stem_mode == 0: + elif in_stem_mode == 0: # 0 -> TEM Mode in_stem_mode = False else: in_stem_mode = True + has_camera_length = original_metadata.get( + "Instrument Project Camera Length (centimeters)", -1 + ) + diffracting = ( + has_camera_length != -1 or in_stem_mode + ) # Force diffracting if in STEM mode + if in_stem_mode and scanning and raster or nav_shape is not None: axes_scales = np.array( [ @@ -225,11 +232,11 @@ def read_de_metadata_file(filename, nav_shape=None): navigate = [True, False, False] nav_shape = None # read from the .mrc file - frame_sum = original_metadata.get("Autosave Movie Sum Count", 1) - frame_time = original_metadata.get("Frames Per Second", 1) + frame_sum = float(original_metadata.get("Autosave Movie Sum Count", 1)) + frame_time = float(original_metadata.get("Frames Per Second", 1)) sec_per_frame = 1 / (frame_time * frame_sum) axes_shapes = [-1, -1, -1] # get from the .mrc file - if in_stem_mode: + if diffracting: axes_scales = np.array( [ sec_per_frame, diff --git a/rsciio/tests/data/mrc/3DSTEM_scan_info.txt b/rsciio/tests/data/mrc/3DSTEM_scan_info.txt new file mode 100644 index 00000000..967917dd --- /dev/null +++ b/rsciio/tests/data/mrc/3DSTEM_scan_info.txt @@ -0,0 +1,254 @@ +Server Software Version = 2.7.2.9048 +Timestamp (seconds since Epoch) = 1695682755 +Threshold - Method = FIXEDTOZERO +ADUs Per Electron - Autoload = False +ADUs Per Electron Bin1x = 300 +Autosave Counted Movie Pixel Format = uint8 +Autosave Directory = D:\DEOutput\CeleritasXS +Autosave File Format = MRC +Autosave Filename Suffix = +Autosave Final Frames Written = 0 +Autosave Final Image = Discard +Autosave Final Image File Path = +Autosave Final Image Sum Count = 0 +Autosave Integrated Movie Pixel Format = uint16 +Autosave Movie = Save +Autosave Movie File Format = DE5 +Autosave Movie Frames File Path = D:\DEOutput\CeleritasXS\20230925_01497_movie.de5 +Autosave Movie Frames Written = 16384 +Autosave Movie Sum Count = 1 +Autosave Status = In Progress +Autosave Virtual Image 0 = Discard +Autosave Virtual Image 0 File Path = +Autosave Virtual Image 0 Frames Written = 0 +Autosave Virtual Image 1 = Discard +Autosave Virtual Image 1 File Path = +Autosave Virtual Image 1 Frames Written = 0 +Autosave Virtual Image 2 = Discard +Autosave Virtual Image 2 File Path = +Autosave Virtual Image 2 Frames Written = 0 +Autosave Virtual Image 3 = Discard +Autosave Virtual Image 3 File Path = +Autosave Virtual Image 3 Frames Written = 0 +Autosave Virtual Image 4 = Discard +Autosave Virtual Image 4 File Path = +Autosave Virtual Image 4 Frames Written = 0 +Bind Dwell Time to Frame Time = Enable +Binning Method = Sum +Binning X = 1 +Binning Y = 1 +Camera Auto Retract Delay = 1 hour +Camera Model = CeleritasXS +Camera Name = CeleritasXS +Camera Position Control = Retract +Camera Position Status = Retracted +Camera SN = 812 +Check TEM-Channel = Off +Crop Offset X = 64 +Crop Offset Y = 0 +Crop Size X = 128 +Crop Size Y = 128 +Dataset Name = 20230925_01497 +Disk Space (GB) = 2655.5 +Event Counting - Method = Maxima +Event Counting - Sparseness = 275.8920898438 +Event Counting - Super Resolution = 1 +Exposure Mode = Normal +Exposure Rate (e-/pix/s) = -49261.08203125 +Exposure Time (seconds) = 0.3325952 +Faraday Plate - Beam Intensity (pA/cm^2) = 1.98 +Faraday Plate - Peak Intensity (e-/pix/frame) = 0.0000032834 +Faraday Plate - Peak Intensity (e-/pix/s) = 0.1617420409 +Faraday Plate - Peak Intensity (pA/cm^2) = 0.0115016562 +Faraday Plate - Total Dose (e-/pix) = 0 +Feature - AKRA = Off +Feature - Centered = On +Feature - Counting = On +Feature - Global Shutter = On +Feature - HDR = Global Shutter +Feature - HW ROI X = On +Feature - HW ROI Y = On +Feature - Off-chip CDS = On +Feature - Sensor Gain = Off +Firmware Version = Upr:1.12, Lwr:1.6, Utl:16.1, Vac:10.0, NormalBoot +Frame Count = 16384 +Frame Time (nanoseconds) = 20300 +Frames Per Second = 40000 +Frames Per Second (Max) = 49261.0837438424 +Grab Buffer Length (milliseconds) = 10196 +Grab Buffer Size = 981 +Hardware Frame Size X = 256 +Hardware Frame Size Y = 128 +Hardware ROI Offset X = 384 +Hardware ROI Offset Y = 448 +Hardware ROI Size X = 256 +Hardware ROI Size Y = 128 +Image Processing - Apply Gain on Final = Enable +Image Processing - Apply Gain on Movie = Enable +Image Processing - Edge Pixel Fill = Zero +Image Processing - Flatfield Correction = None +Image Processing - Flip Horizontally = Disable +Image Processing - Flip Vertically = Enable +Image Processing - Mode = Integrating +Image Processing - Output Buffer Size = 31 +Image Processing - Rotation = None +Image Processing - Scaling Factor = 1 +Image Size X (pixels) = 128 +Image Size Y (pixels) = 128 +Instrument Project Magnification = 1000 +Instrument Project Mode = -1 +Instrument Project Sub Mode = -1 +Level 0 Threshold Bin1x = 14 +License - 4D STEM Workflow = Valid (Perpetual) +License - Event Counting = Valid (Perpetual) +License - HDR Readout Modes = Not Licensed +Log Level = Info +Number of Frames Grabbed = 16384 +Number of Frames Processed = 16384 +Number of Frames Requested = 16384 +Post-Specimen Shutter Control = Auto +Pre-Exposure Time (seconds) = 0 +Pre-Specimen Blanker Control = Auto +Preset - Current = Rolling 128x128 +Preset - List = Rolling 1k,Rolling 512,Rolling 256,Rolling 256x128,Rolling 128x128,Rolling 256x64,Rolling 64x64,Last Used Parameters,Custom +Preset - Properties = Readout - Shutter:Rolling,Readout - CDS:On-chip,Hardware ROI Offset X:384,Hardware ROI Offset Y:448,Hardware ROI Size X:256,Hardware ROI Size Y:128,Crop Offset X:64,Crop Offset Y:0,Crop Size X:128,Crop Size Y:128,Binning X:1,Binning Y:1,Readout - Hardware HDR:1,Frames Per Second:49261.08203125 +Preset - Save = Rolling 128x128 +Protection Cover Delay (milliseconds) = 100 +Protection Cover Operation Mode = Open/Close During Each Exposure +Protection Cover Status = Open +Readout - CDS = On-chip +Readout - Frames to Ignore = 0 +Readout - Shutter = Rolling +Reference - Counting Gain Acquisitions = 0 +Reference - Counting Gain Exposure Time (seconds) = 1 +Reference - Counting Gain Target (e-/pix) = 2000 +Reference - Dark = None +Reference - Delay Between Multiple Acquisitions (milliseconds) = 0 +Reference - Gain = None +Reference - Integrating Gain Acquisitions = 0 +Reference - Integrating Gain Exposure Time (seconds) = 1 +Reference - Integrating Gain Target (ADU/pix) = 16000 +Reference - Match Frame Rate = Enable +Reference - Match Server Version = Enable +Reference - Save Copy = Save +Remaining Number of Acquisitions = 0 +Scan - Controller = External Controller +Scan - Dwell Time (microseconds) = 20.2999992371 +Scan - Enable = Disable +Scan - Flip Horizontally = Disable +Scan - Flip Vertically = Disable +Scan - Flyback Time Going Negative (microseconds) = 40.5999984741 +Scan - Flyback Time Going Positive (microseconds) = 40.5999984741 +Scan - Initial Delay (microseconds) = 0 +Scan - Park Enable = Disable +Scan - Park Position X = 0 +Scan - Park Position Y = 0 +Scan - Point Repeat = 1 +Scan - Points = 16384 +Scan - Preset Current = Custom +Scan - Preset List = Default,Last Used Parameters,Custom +Scan - Preset Save = Custom +Scan - ROI Enable = Disable +Scan - ROI Offset X = 31 +Scan - ROI Offset Y = 13 +Scan - ROI Size X = 56 +Scan - ROI Size Y = 98 +Scan - ROI Type = Raster +Scan - ROI Upsampling = 1 +Scan - Repeat Delay (seconds) = 3 +Scan - Repeats = 1 +Scan - Rotation = 0 +Scan - Size X = 8 +Scan - Size Y = 32 +Scan - Time (seconds) = 3.6651904583 +Scan - Trigger Source = Camera (Before Frame) +Scan - Type = Raster +Scan - Virtual Detector 0 Calculation = Sum +Scan - Virtual Detector 0 Name = Virt #0 +Scan - Virtual Detector 0 Shape = Rectangle +Scan - Virtual Detector 1 Calculation = Sum +Scan - Virtual Detector 1 Minus Center X = 512 +Scan - Virtual Detector 1 Minus Center Y = 512 +Scan - Virtual Detector 1 Minus Radius X = 256 +Scan - Virtual Detector 1 Minus Radius Y = 256 +Scan - Virtual Detector 1 Minus Thickness = 56 +Scan - Virtual Detector 1 Name = Virt #1 +Scan - Virtual Detector 1 Plus Center X = 64 +Scan - Virtual Detector 1 Plus Center Y = 64 +Scan - Virtual Detector 1 Plus Radius X = 128 +Scan - Virtual Detector 1 Plus Radius Y = 128 +Scan - Virtual Detector 1 Plus Thickness = 128 +Scan - Virtual Detector 1 Preset Current = Custom +Scan - Virtual Detector 1 Preset Save = Custom +Scan - Virtual Detector 1 Shape = Ellipse +Scan - Virtual Detector 2 Calculation = Sum +Scan - Virtual Detector 2 Minus Center X = 512 +Scan - Virtual Detector 2 Minus Center Y = 512 +Scan - Virtual Detector 2 Minus Radius X = 512 +Scan - Virtual Detector 2 Minus Radius Y = 512 +Scan - Virtual Detector 2 Minus Thickness = 256 +Scan - Virtual Detector 2 Name = Virt #2 +Scan - Virtual Detector 2 Plus Center X = 127 +Scan - Virtual Detector 2 Plus Center Y = 127 +Scan - Virtual Detector 2 Plus Radius X = 128 +Scan - Virtual Detector 2 Plus Radius Y = 128 +Scan - Virtual Detector 2 Plus Thickness = 128 +Scan - Virtual Detector 2 Preset Current = Custom +Scan - Virtual Detector 2 Preset Save = Custom +Scan - Virtual Detector 2 Shape = Ellipse +Scan - Virtual Detector 3 Calculation = Sum +Scan - Virtual Detector 3 Minus Center X = 512 +Scan - Virtual Detector 3 Minus Center Y = 512 +Scan - Virtual Detector 3 Minus Radius X = 100 +Scan - Virtual Detector 3 Minus Radius Y = 100 +Scan - Virtual Detector 3 Minus Thickness = 100 +Scan - Virtual Detector 3 Name = Virt #3 +Scan - Virtual Detector 3 Plus Center X = 127 +Scan - Virtual Detector 3 Plus Center Y = 127 +Scan - Virtual Detector 3 Plus Radius X = 128 +Scan - Virtual Detector 3 Plus Radius Y = 128 +Scan - Virtual Detector 3 Plus Thickness = 100 +Scan - Virtual Detector 3 Preset Current = Custom +Scan - Virtual Detector 3 Preset Save = Custom +Scan - Virtual Detector 3 Shape = Ellipse +Scan - Virtual Detector 4 Calculation = Sum +Scan - Virtual Detector 4 Minus Center X = 730 +Scan - Virtual Detector 4 Minus Center Y = 430 +Scan - Virtual Detector 4 Minus Radius X = 200 +Scan - Virtual Detector 4 Minus Radius Y = 200 +Scan - Virtual Detector 4 Minus Thickness = 200 +Scan - Virtual Detector 4 Name = Virt #4 +Scan - Virtual Detector 4 Plus Center X = 127 +Scan - Virtual Detector 4 Plus Center Y = 127 +Scan - Virtual Detector 4 Plus Radius X = 128 +Scan - Virtual Detector 4 Plus Radius Y = 128 +Scan - Virtual Detector 4 Plus Thickness = 128 +Scan - Virtual Detector 4 Preset Current = Custom +Scan - Virtual Detector 4 Preset Save = Custom +Scan - Virtual Detector 4 Shape = Ellipse +Scan - Virtual Detector Preset List = Default,Circular,Annular,DF256,Custom +Scan - Wait (seconds) = 30 +Scan - XY File = +Scan - XY File Pattern ID = 0 +Sensor Module SN = 0039CB12 +Sensor Pixel Depth = 12 +Sensor Pixel Pitch (micrometers) = 15 +Sensor Readout Delay (milliseconds) = 0 +Sensor Size X (pixels) = 1024 +Sensor Size Y (pixels) = 1024 +Server IP Addresss = 0.0.0.0 +Server Port Number = 13240 +Specimen Pixel Size X (nanometers) = 10 +Specimen Pixel Size Y (nanometers) = 10 +System Status = Saving frames... +Temperature - Chilled Water (Celsius) = 28.25 +Temperature - Chilled Water Status = OK +Temperature - Control = +Temperature - Detector (Celsius) = 25 +Temperature - Detector Status = Warmed +Test Pattern = Disabled +Threshold - Adaptive Thresholding Method = Mean +Total Number of Acquisitions = 2 +Vacuum State = Vacuum +Instrument Project TEMorSTEM Mode = 1 +Instrument Project Camera Length (centimeters) = 20 diff --git a/rsciio/tests/data/mrc/3DTEMDiffracting_scan_info.txt b/rsciio/tests/data/mrc/3DTEMDiffracting_scan_info.txt new file mode 100644 index 00000000..532b5835 --- /dev/null +++ b/rsciio/tests/data/mrc/3DTEMDiffracting_scan_info.txt @@ -0,0 +1,254 @@ +Server Software Version = 2.7.2.9048 +Timestamp (seconds since Epoch) = 1695682755 +Threshold - Method = FIXEDTOZERO +ADUs Per Electron - Autoload = False +ADUs Per Electron Bin1x = 300 +Autosave Counted Movie Pixel Format = uint8 +Autosave Directory = D:\DEOutput\CeleritasXS +Autosave File Format = MRC +Autosave Filename Suffix = +Autosave Final Frames Written = 0 +Autosave Final Image = Discard +Autosave Final Image File Path = +Autosave Final Image Sum Count = 0 +Autosave Integrated Movie Pixel Format = uint16 +Autosave Movie = Save +Autosave Movie File Format = DE5 +Autosave Movie Frames File Path = D:\DEOutput\CeleritasXS\20230925_01497_movie.de5 +Autosave Movie Frames Written = 16384 +Autosave Movie Sum Count = 1 +Autosave Status = In Progress +Autosave Virtual Image 0 = Discard +Autosave Virtual Image 0 File Path = +Autosave Virtual Image 0 Frames Written = 0 +Autosave Virtual Image 1 = Discard +Autosave Virtual Image 1 File Path = +Autosave Virtual Image 1 Frames Written = 0 +Autosave Virtual Image 2 = Discard +Autosave Virtual Image 2 File Path = +Autosave Virtual Image 2 Frames Written = 0 +Autosave Virtual Image 3 = Discard +Autosave Virtual Image 3 File Path = +Autosave Virtual Image 3 Frames Written = 0 +Autosave Virtual Image 4 = Discard +Autosave Virtual Image 4 File Path = +Autosave Virtual Image 4 Frames Written = 0 +Bind Dwell Time to Frame Time = Enable +Binning Method = Sum +Binning X = 1 +Binning Y = 1 +Camera Auto Retract Delay = 1 hour +Camera Model = CeleritasXS +Camera Name = CeleritasXS +Camera Position Control = Retract +Camera Position Status = Retracted +Camera SN = 812 +Check TEM-Channel = Off +Crop Offset X = 64 +Crop Offset Y = 0 +Crop Size X = 128 +Crop Size Y = 128 +Dataset Name = 20230925_01497 +Disk Space (GB) = 2655.5 +Event Counting - Method = Maxima +Event Counting - Sparseness = 275.8920898438 +Event Counting - Super Resolution = 1 +Exposure Mode = Normal +Exposure Rate (e-/pix/s) = -49261.08203125 +Exposure Time (seconds) = 0.3325952 +Faraday Plate - Beam Intensity (pA/cm^2) = 1.98 +Faraday Plate - Peak Intensity (e-/pix/frame) = 0.0000032834 +Faraday Plate - Peak Intensity (e-/pix/s) = 0.1617420409 +Faraday Plate - Peak Intensity (pA/cm^2) = 0.0115016562 +Faraday Plate - Total Dose (e-/pix) = 0 +Feature - AKRA = Off +Feature - Centered = On +Feature - Counting = On +Feature - Global Shutter = On +Feature - HDR = Global Shutter +Feature - HW ROI X = On +Feature - HW ROI Y = On +Feature - Off-chip CDS = On +Feature - Sensor Gain = Off +Firmware Version = Upr:1.12, Lwr:1.6, Utl:16.1, Vac:10.0, NormalBoot +Frame Count = 16384 +Frame Time (nanoseconds) = 20300 +Frames Per Second = 40000 +Frames Per Second (Max) = 49261.0837438424 +Grab Buffer Length (milliseconds) = 10196 +Grab Buffer Size = 981 +Hardware Frame Size X = 256 +Hardware Frame Size Y = 128 +Hardware ROI Offset X = 384 +Hardware ROI Offset Y = 448 +Hardware ROI Size X = 256 +Hardware ROI Size Y = 128 +Image Processing - Apply Gain on Final = Enable +Image Processing - Apply Gain on Movie = Enable +Image Processing - Edge Pixel Fill = Zero +Image Processing - Flatfield Correction = None +Image Processing - Flip Horizontally = Disable +Image Processing - Flip Vertically = Enable +Image Processing - Mode = Integrating +Image Processing - Output Buffer Size = 31 +Image Processing - Rotation = None +Image Processing - Scaling Factor = 1 +Image Size X (pixels) = 128 +Image Size Y (pixels) = 128 +Instrument Project Magnification = 1000 +Instrument Project Mode = -1 +Instrument Project Sub Mode = -1 +Level 0 Threshold Bin1x = 14 +License - 4D STEM Workflow = Valid (Perpetual) +License - Event Counting = Valid (Perpetual) +License - HDR Readout Modes = Not Licensed +Log Level = Info +Number of Frames Grabbed = 16384 +Number of Frames Processed = 16384 +Number of Frames Requested = 16384 +Post-Specimen Shutter Control = Auto +Pre-Exposure Time (seconds) = 0 +Pre-Specimen Blanker Control = Auto +Preset - Current = Rolling 128x128 +Preset - List = Rolling 1k,Rolling 512,Rolling 256,Rolling 256x128,Rolling 128x128,Rolling 256x64,Rolling 64x64,Last Used Parameters,Custom +Preset - Properties = Readout - Shutter:Rolling,Readout - CDS:On-chip,Hardware ROI Offset X:384,Hardware ROI Offset Y:448,Hardware ROI Size X:256,Hardware ROI Size Y:128,Crop Offset X:64,Crop Offset Y:0,Crop Size X:128,Crop Size Y:128,Binning X:1,Binning Y:1,Readout - Hardware HDR:1,Frames Per Second:49261.08203125 +Preset - Save = Rolling 128x128 +Protection Cover Delay (milliseconds) = 100 +Protection Cover Operation Mode = Open/Close During Each Exposure +Protection Cover Status = Open +Readout - CDS = On-chip +Readout - Frames to Ignore = 0 +Readout - Shutter = Rolling +Reference - Counting Gain Acquisitions = 0 +Reference - Counting Gain Exposure Time (seconds) = 1 +Reference - Counting Gain Target (e-/pix) = 2000 +Reference - Dark = None +Reference - Delay Between Multiple Acquisitions (milliseconds) = 0 +Reference - Gain = None +Reference - Integrating Gain Acquisitions = 0 +Reference - Integrating Gain Exposure Time (seconds) = 1 +Reference - Integrating Gain Target (ADU/pix) = 16000 +Reference - Match Frame Rate = Enable +Reference - Match Server Version = Enable +Reference - Save Copy = Save +Remaining Number of Acquisitions = 0 +Scan - Controller = External Controller +Scan - Dwell Time (microseconds) = 20.2999992371 +Scan - Enable = Disable +Scan - Flip Horizontally = Disable +Scan - Flip Vertically = Disable +Scan - Flyback Time Going Negative (microseconds) = 40.5999984741 +Scan - Flyback Time Going Positive (microseconds) = 40.5999984741 +Scan - Initial Delay (microseconds) = 0 +Scan - Park Enable = Disable +Scan - Park Position X = 0 +Scan - Park Position Y = 0 +Scan - Point Repeat = 1 +Scan - Points = 16384 +Scan - Preset Current = Custom +Scan - Preset List = Default,Last Used Parameters,Custom +Scan - Preset Save = Custom +Scan - ROI Enable = Disable +Scan - ROI Offset X = 31 +Scan - ROI Offset Y = 13 +Scan - ROI Size X = 56 +Scan - ROI Size Y = 98 +Scan - ROI Type = Raster +Scan - ROI Upsampling = 1 +Scan - Repeat Delay (seconds) = 3 +Scan - Repeats = 1 +Scan - Rotation = 0 +Scan - Size X = 8 +Scan - Size Y = 32 +Scan - Time (seconds) = 3.6651904583 +Scan - Trigger Source = Camera (Before Frame) +Scan - Type = Raster +Scan - Virtual Detector 0 Calculation = Sum +Scan - Virtual Detector 0 Name = Virt #0 +Scan - Virtual Detector 0 Shape = Rectangle +Scan - Virtual Detector 1 Calculation = Sum +Scan - Virtual Detector 1 Minus Center X = 512 +Scan - Virtual Detector 1 Minus Center Y = 512 +Scan - Virtual Detector 1 Minus Radius X = 256 +Scan - Virtual Detector 1 Minus Radius Y = 256 +Scan - Virtual Detector 1 Minus Thickness = 56 +Scan - Virtual Detector 1 Name = Virt #1 +Scan - Virtual Detector 1 Plus Center X = 64 +Scan - Virtual Detector 1 Plus Center Y = 64 +Scan - Virtual Detector 1 Plus Radius X = 128 +Scan - Virtual Detector 1 Plus Radius Y = 128 +Scan - Virtual Detector 1 Plus Thickness = 128 +Scan - Virtual Detector 1 Preset Current = Custom +Scan - Virtual Detector 1 Preset Save = Custom +Scan - Virtual Detector 1 Shape = Ellipse +Scan - Virtual Detector 2 Calculation = Sum +Scan - Virtual Detector 2 Minus Center X = 512 +Scan - Virtual Detector 2 Minus Center Y = 512 +Scan - Virtual Detector 2 Minus Radius X = 512 +Scan - Virtual Detector 2 Minus Radius Y = 512 +Scan - Virtual Detector 2 Minus Thickness = 256 +Scan - Virtual Detector 2 Name = Virt #2 +Scan - Virtual Detector 2 Plus Center X = 127 +Scan - Virtual Detector 2 Plus Center Y = 127 +Scan - Virtual Detector 2 Plus Radius X = 128 +Scan - Virtual Detector 2 Plus Radius Y = 128 +Scan - Virtual Detector 2 Plus Thickness = 128 +Scan - Virtual Detector 2 Preset Current = Custom +Scan - Virtual Detector 2 Preset Save = Custom +Scan - Virtual Detector 2 Shape = Ellipse +Scan - Virtual Detector 3 Calculation = Sum +Scan - Virtual Detector 3 Minus Center X = 512 +Scan - Virtual Detector 3 Minus Center Y = 512 +Scan - Virtual Detector 3 Minus Radius X = 100 +Scan - Virtual Detector 3 Minus Radius Y = 100 +Scan - Virtual Detector 3 Minus Thickness = 100 +Scan - Virtual Detector 3 Name = Virt #3 +Scan - Virtual Detector 3 Plus Center X = 127 +Scan - Virtual Detector 3 Plus Center Y = 127 +Scan - Virtual Detector 3 Plus Radius X = 128 +Scan - Virtual Detector 3 Plus Radius Y = 128 +Scan - Virtual Detector 3 Plus Thickness = 100 +Scan - Virtual Detector 3 Preset Current = Custom +Scan - Virtual Detector 3 Preset Save = Custom +Scan - Virtual Detector 3 Shape = Ellipse +Scan - Virtual Detector 4 Calculation = Sum +Scan - Virtual Detector 4 Minus Center X = 730 +Scan - Virtual Detector 4 Minus Center Y = 430 +Scan - Virtual Detector 4 Minus Radius X = 200 +Scan - Virtual Detector 4 Minus Radius Y = 200 +Scan - Virtual Detector 4 Minus Thickness = 200 +Scan - Virtual Detector 4 Name = Virt #4 +Scan - Virtual Detector 4 Plus Center X = 127 +Scan - Virtual Detector 4 Plus Center Y = 127 +Scan - Virtual Detector 4 Plus Radius X = 128 +Scan - Virtual Detector 4 Plus Radius Y = 128 +Scan - Virtual Detector 4 Plus Thickness = 128 +Scan - Virtual Detector 4 Preset Current = Custom +Scan - Virtual Detector 4 Preset Save = Custom +Scan - Virtual Detector 4 Shape = Ellipse +Scan - Virtual Detector Preset List = Default,Circular,Annular,DF256,Custom +Scan - Wait (seconds) = 30 +Scan - XY File = +Scan - XY File Pattern ID = 0 +Sensor Module SN = 0039CB12 +Sensor Pixel Depth = 12 +Sensor Pixel Pitch (micrometers) = 15 +Sensor Readout Delay (milliseconds) = 0 +Sensor Size X (pixels) = 1024 +Sensor Size Y (pixels) = 1024 +Server IP Addresss = 0.0.0.0 +Server Port Number = 13240 +Specimen Pixel Size X (nanometers) = 10 +Specimen Pixel Size Y (nanometers) = 10 +System Status = Saving frames... +Temperature - Chilled Water (Celsius) = 28.25 +Temperature - Chilled Water Status = OK +Temperature - Control = +Temperature - Detector (Celsius) = 25 +Temperature - Detector Status = Warmed +Test Pattern = Disabled +Threshold - Adaptive Thresholding Method = Mean +Total Number of Acquisitions = 2 +Vacuum State = Vacuum +Instrument Project TEMorSTEM Mode = 0 +Instrument Project Camera Length (centimeters) = 10 \ No newline at end of file diff --git a/rsciio/tests/data/mrc/3DTEM_scan_info.txt b/rsciio/tests/data/mrc/3DTEM_scan_info.txt new file mode 100644 index 00000000..a831396e --- /dev/null +++ b/rsciio/tests/data/mrc/3DTEM_scan_info.txt @@ -0,0 +1,254 @@ +Server Software Version = 2.7.2.9048 +Timestamp (seconds since Epoch) = 1695682755 +Threshold - Method = FIXEDTOZERO +ADUs Per Electron - Autoload = False +ADUs Per Electron Bin1x = 300 +Autosave Counted Movie Pixel Format = uint8 +Autosave Directory = D:\DEOutput\CeleritasXS +Autosave File Format = MRC +Autosave Filename Suffix = +Autosave Final Frames Written = 0 +Autosave Final Image = Discard +Autosave Final Image File Path = +Autosave Final Image Sum Count = 0 +Autosave Integrated Movie Pixel Format = uint16 +Autosave Movie = Save +Autosave Movie File Format = DE5 +Autosave Movie Frames File Path = D:\DEOutput\CeleritasXS\20230925_01497_movie.de5 +Autosave Movie Frames Written = 16384 +Autosave Movie Sum Count = 1 +Autosave Status = In Progress +Autosave Virtual Image 0 = Discard +Autosave Virtual Image 0 File Path = +Autosave Virtual Image 0 Frames Written = 0 +Autosave Virtual Image 1 = Discard +Autosave Virtual Image 1 File Path = +Autosave Virtual Image 1 Frames Written = 0 +Autosave Virtual Image 2 = Discard +Autosave Virtual Image 2 File Path = +Autosave Virtual Image 2 Frames Written = 0 +Autosave Virtual Image 3 = Discard +Autosave Virtual Image 3 File Path = +Autosave Virtual Image 3 Frames Written = 0 +Autosave Virtual Image 4 = Discard +Autosave Virtual Image 4 File Path = +Autosave Virtual Image 4 Frames Written = 0 +Bind Dwell Time to Frame Time = Enable +Binning Method = Sum +Binning X = 1 +Binning Y = 1 +Camera Auto Retract Delay = 1 hour +Camera Model = CeleritasXS +Camera Name = CeleritasXS +Camera Position Control = Retract +Camera Position Status = Retracted +Camera SN = 812 +Check TEM-Channel = Off +Crop Offset X = 64 +Crop Offset Y = 0 +Crop Size X = 128 +Crop Size Y = 128 +Dataset Name = 20230925_01497 +Disk Space (GB) = 2655.5 +Event Counting - Method = Maxima +Event Counting - Sparseness = 275.8920898438 +Event Counting - Super Resolution = 1 +Exposure Mode = Normal +Exposure Rate (e-/pix/s) = -49261.08203125 +Exposure Time (seconds) = 0.3325952 +Faraday Plate - Beam Intensity (pA/cm^2) = 1.98 +Faraday Plate - Peak Intensity (e-/pix/frame) = 0.0000032834 +Faraday Plate - Peak Intensity (e-/pix/s) = 0.1617420409 +Faraday Plate - Peak Intensity (pA/cm^2) = 0.0115016562 +Faraday Plate - Total Dose (e-/pix) = 0 +Feature - AKRA = Off +Feature - Centered = On +Feature - Counting = On +Feature - Global Shutter = On +Feature - HDR = Global Shutter +Feature - HW ROI X = On +Feature - HW ROI Y = On +Feature - Off-chip CDS = On +Feature - Sensor Gain = Off +Firmware Version = Upr:1.12, Lwr:1.6, Utl:16.1, Vac:10.0, NormalBoot +Frame Count = 16384 +Frame Time (nanoseconds) = 20300 +Frames Per Second = 40000 +Frames Per Second (Max) = 49261.0837438424 +Grab Buffer Length (milliseconds) = 10196 +Grab Buffer Size = 981 +Hardware Frame Size X = 256 +Hardware Frame Size Y = 128 +Hardware ROI Offset X = 384 +Hardware ROI Offset Y = 448 +Hardware ROI Size X = 256 +Hardware ROI Size Y = 128 +Image Processing - Apply Gain on Final = Enable +Image Processing - Apply Gain on Movie = Enable +Image Processing - Edge Pixel Fill = Zero +Image Processing - Flatfield Correction = None +Image Processing - Flip Horizontally = Disable +Image Processing - Flip Vertically = Enable +Image Processing - Mode = Integrating +Image Processing - Output Buffer Size = 31 +Image Processing - Rotation = None +Image Processing - Scaling Factor = 1 +Image Size X (pixels) = 128 +Image Size Y (pixels) = 128 +Instrument Project Magnification = 1000 +Instrument Project Mode = -1 +Instrument Project Sub Mode = -1 +Level 0 Threshold Bin1x = 14 +License - 4D STEM Workflow = Valid (Perpetual) +License - Event Counting = Valid (Perpetual) +License - HDR Readout Modes = Not Licensed +Log Level = Info +Number of Frames Grabbed = 16384 +Number of Frames Processed = 16384 +Number of Frames Requested = 16384 +Post-Specimen Shutter Control = Auto +Pre-Exposure Time (seconds) = 0 +Pre-Specimen Blanker Control = Auto +Preset - Current = Rolling 128x128 +Preset - List = Rolling 1k,Rolling 512,Rolling 256,Rolling 256x128,Rolling 128x128,Rolling 256x64,Rolling 64x64,Last Used Parameters,Custom +Preset - Properties = Readout - Shutter:Rolling,Readout - CDS:On-chip,Hardware ROI Offset X:384,Hardware ROI Offset Y:448,Hardware ROI Size X:256,Hardware ROI Size Y:128,Crop Offset X:64,Crop Offset Y:0,Crop Size X:128,Crop Size Y:128,Binning X:1,Binning Y:1,Readout - Hardware HDR:1,Frames Per Second:49261.08203125 +Preset - Save = Rolling 128x128 +Protection Cover Delay (milliseconds) = 100 +Protection Cover Operation Mode = Open/Close During Each Exposure +Protection Cover Status = Open +Readout - CDS = On-chip +Readout - Frames to Ignore = 0 +Readout - Shutter = Rolling +Reference - Counting Gain Acquisitions = 0 +Reference - Counting Gain Exposure Time (seconds) = 1 +Reference - Counting Gain Target (e-/pix) = 2000 +Reference - Dark = None +Reference - Delay Between Multiple Acquisitions (milliseconds) = 0 +Reference - Gain = None +Reference - Integrating Gain Acquisitions = 0 +Reference - Integrating Gain Exposure Time (seconds) = 1 +Reference - Integrating Gain Target (ADU/pix) = 16000 +Reference - Match Frame Rate = Enable +Reference - Match Server Version = Enable +Reference - Save Copy = Save +Remaining Number of Acquisitions = 0 +Scan - Controller = External Controller +Scan - Dwell Time (microseconds) = 20.2999992371 +Scan - Enable = Disable +Scan - Flip Horizontally = Disable +Scan - Flip Vertically = Disable +Scan - Flyback Time Going Negative (microseconds) = 40.5999984741 +Scan - Flyback Time Going Positive (microseconds) = 40.5999984741 +Scan - Initial Delay (microseconds) = 0 +Scan - Park Enable = Disable +Scan - Park Position X = 0 +Scan - Park Position Y = 0 +Scan - Point Repeat = 1 +Scan - Points = 16384 +Scan - Preset Current = Custom +Scan - Preset List = Default,Last Used Parameters,Custom +Scan - Preset Save = Custom +Scan - ROI Enable = Disable +Scan - ROI Offset X = 31 +Scan - ROI Offset Y = 13 +Scan - ROI Size X = 56 +Scan - ROI Size Y = 98 +Scan - ROI Type = Raster +Scan - ROI Upsampling = 1 +Scan - Repeat Delay (seconds) = 3 +Scan - Repeats = 1 +Scan - Rotation = 0 +Scan - Size X = 8 +Scan - Size Y = 32 +Scan - Time (seconds) = 3.6651904583 +Scan - Trigger Source = Camera (Before Frame) +Scan - Type = Raster +Scan - Virtual Detector 0 Calculation = Sum +Scan - Virtual Detector 0 Name = Virt #0 +Scan - Virtual Detector 0 Shape = Rectangle +Scan - Virtual Detector 1 Calculation = Sum +Scan - Virtual Detector 1 Minus Center X = 512 +Scan - Virtual Detector 1 Minus Center Y = 512 +Scan - Virtual Detector 1 Minus Radius X = 256 +Scan - Virtual Detector 1 Minus Radius Y = 256 +Scan - Virtual Detector 1 Minus Thickness = 56 +Scan - Virtual Detector 1 Name = Virt #1 +Scan - Virtual Detector 1 Plus Center X = 64 +Scan - Virtual Detector 1 Plus Center Y = 64 +Scan - Virtual Detector 1 Plus Radius X = 128 +Scan - Virtual Detector 1 Plus Radius Y = 128 +Scan - Virtual Detector 1 Plus Thickness = 128 +Scan - Virtual Detector 1 Preset Current = Custom +Scan - Virtual Detector 1 Preset Save = Custom +Scan - Virtual Detector 1 Shape = Ellipse +Scan - Virtual Detector 2 Calculation = Sum +Scan - Virtual Detector 2 Minus Center X = 512 +Scan - Virtual Detector 2 Minus Center Y = 512 +Scan - Virtual Detector 2 Minus Radius X = 512 +Scan - Virtual Detector 2 Minus Radius Y = 512 +Scan - Virtual Detector 2 Minus Thickness = 256 +Scan - Virtual Detector 2 Name = Virt #2 +Scan - Virtual Detector 2 Plus Center X = 127 +Scan - Virtual Detector 2 Plus Center Y = 127 +Scan - Virtual Detector 2 Plus Radius X = 128 +Scan - Virtual Detector 2 Plus Radius Y = 128 +Scan - Virtual Detector 2 Plus Thickness = 128 +Scan - Virtual Detector 2 Preset Current = Custom +Scan - Virtual Detector 2 Preset Save = Custom +Scan - Virtual Detector 2 Shape = Ellipse +Scan - Virtual Detector 3 Calculation = Sum +Scan - Virtual Detector 3 Minus Center X = 512 +Scan - Virtual Detector 3 Minus Center Y = 512 +Scan - Virtual Detector 3 Minus Radius X = 100 +Scan - Virtual Detector 3 Minus Radius Y = 100 +Scan - Virtual Detector 3 Minus Thickness = 100 +Scan - Virtual Detector 3 Name = Virt #3 +Scan - Virtual Detector 3 Plus Center X = 127 +Scan - Virtual Detector 3 Plus Center Y = 127 +Scan - Virtual Detector 3 Plus Radius X = 128 +Scan - Virtual Detector 3 Plus Radius Y = 128 +Scan - Virtual Detector 3 Plus Thickness = 100 +Scan - Virtual Detector 3 Preset Current = Custom +Scan - Virtual Detector 3 Preset Save = Custom +Scan - Virtual Detector 3 Shape = Ellipse +Scan - Virtual Detector 4 Calculation = Sum +Scan - Virtual Detector 4 Minus Center X = 730 +Scan - Virtual Detector 4 Minus Center Y = 430 +Scan - Virtual Detector 4 Minus Radius X = 200 +Scan - Virtual Detector 4 Minus Radius Y = 200 +Scan - Virtual Detector 4 Minus Thickness = 200 +Scan - Virtual Detector 4 Name = Virt #4 +Scan - Virtual Detector 4 Plus Center X = 127 +Scan - Virtual Detector 4 Plus Center Y = 127 +Scan - Virtual Detector 4 Plus Radius X = 128 +Scan - Virtual Detector 4 Plus Radius Y = 128 +Scan - Virtual Detector 4 Plus Thickness = 128 +Scan - Virtual Detector 4 Preset Current = Custom +Scan - Virtual Detector 4 Preset Save = Custom +Scan - Virtual Detector 4 Shape = Ellipse +Scan - Virtual Detector Preset List = Default,Circular,Annular,DF256,Custom +Scan - Wait (seconds) = 30 +Scan - XY File = +Scan - XY File Pattern ID = 0 +Sensor Module SN = 0039CB12 +Sensor Pixel Depth = 12 +Sensor Pixel Pitch (micrometers) = 15 +Sensor Readout Delay (milliseconds) = 0 +Sensor Size X (pixels) = 1024 +Sensor Size Y (pixels) = 1024 +Server IP Addresss = 0.0.0.0 +Server Port Number = 13240 +Specimen Pixel Size X (nanometers) = 10 +Specimen Pixel Size Y (nanometers) = 10 +System Status = Saving frames... +Temperature - Chilled Water (Celsius) = 28.25 +Temperature - Chilled Water Status = OK +Temperature - Control = +Temperature - Detector (Celsius) = 25 +Temperature - Detector Status = Warmed +Test Pattern = Disabled +Threshold - Adaptive Thresholding Method = Mean +Total Number of Acquisitions = 2 +Vacuum State = Vacuum +Instrument Project TEMorSTEM Mode = 0 +Instrument Project Camera Length (centimeters) = -1 \ No newline at end of file diff --git a/rsciio/tests/data/mrc/4DSTEM_scan_info.txt b/rsciio/tests/data/mrc/4DSTEM_scan_info.txt index ef7a8165..c844a1fb 100644 --- a/rsciio/tests/data/mrc/4DSTEM_scan_info.txt +++ b/rsciio/tests/data/mrc/4DSTEM_scan_info.txt @@ -250,3 +250,4 @@ Test Pattern = Disabled Threshold - Adaptive Thresholding Method = Mean Total Number of Acquisitions = 2 Vacuum State = Vacuum +Instrument Project TEMorSTEM Mode = 1 \ No newline at end of file diff --git a/rsciio/tests/test_mrc.py b/rsciio/tests/test_mrc.py index b16bd6d9..93ed1824 100644 --- a/rsciio/tests/test_mrc.py +++ b/rsciio/tests/test_mrc.py @@ -146,3 +146,23 @@ def test_mrc_metadata_auto(): + s.axes_manager._signal_shape_in_array ) assert s.data.shape == shape + + +@pytest.mark.parametrize( + "metadata_file", + [ + TEST_DATA_DIR / "3DSTEM_scan_info.txt", + TEST_DATA_DIR / "3DTEM_scan_info.txt", + TEST_DATA_DIR / "3DTEMDiffracting_scan_info.txt", + ], +) +def test_mrc_metadata_modes(metadata_file): + s = hs.load(TEST_DATA_DIR / "4DSTEM_scan_movie.mrc", metadata_file=metadata_file) + diffracting = "STEM" in metadata_file.name or "Diffracting" in metadata_file.name + s.axes_manager.navigation_axes[0].units = "sec" + if diffracting: + s.axes_manager.signal_axes[0].units = "nm^-1" + s.axes_manager.signal_axes[1].units = "nm^-1" + else: + s.axes_manager.signal_axes[0].units = "nm" + s.axes_manager.signal_axes[1].units = "nm"