microeye 2.3.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. microEye/__init__.py +47 -0
  2. microEye/_version.py +2 -0
  3. microEye/analysis/__init__.py +1 -0
  4. microEye/analysis/checklist_dialog.py +143 -0
  5. microEye/analysis/cmosMaps.py +228 -0
  6. microEye/analysis/filters/__init__.py +9 -0
  7. microEye/analysis/filters/base.py +21 -0
  8. microEye/analysis/filters/spatial.py +338 -0
  9. microEye/analysis/filters/temporal.py +76 -0
  10. microEye/analysis/fitting/__init__.py +0 -0
  11. microEye/analysis/fitting/fit.py +680 -0
  12. microEye/analysis/fitting/nena.py +375 -0
  13. microEye/analysis/fitting/phasor_fit.py +90 -0
  14. microEye/analysis/fitting/processing.py +317 -0
  15. microEye/analysis/fitting/psf/__init__.py +6 -0
  16. microEye/analysis/fitting/psf/extract.py +1129 -0
  17. microEye/analysis/fitting/psf/rubost_mean.py +150 -0
  18. microEye/analysis/fitting/psf/spline.py +167 -0
  19. microEye/analysis/fitting/psf/stats/__init__.py +12 -0
  20. microEye/analysis/fitting/psf/stats/core.py +295 -0
  21. microEye/analysis/fitting/psf/stats/curve_fit.py +708 -0
  22. microEye/analysis/fitting/psf/stats/io.py +104 -0
  23. microEye/analysis/fitting/psf/stats/slope_fit.py +171 -0
  24. microEye/analysis/fitting/psf/temp.py +147 -0
  25. microEye/analysis/fitting/psf/test.py +47 -0
  26. microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUfunctions.py +657 -0
  27. microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUmleFit_LM.py +1336 -0
  28. microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUsplineLib.py +270 -0
  29. microEye/analysis/fitting/pyfit3Dcspline/CPU/__init__.py +1 -0
  30. microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUfunctions.py +609 -0
  31. microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_EMCCD.py +1396 -0
  32. microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_sCMOS.py +1426 -0
  33. microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUsplineLib.py +231 -0
  34. microEye/analysis/fitting/pyfit3Dcspline/GPU/__init__.py +2 -0
  35. microEye/analysis/fitting/pyfit3Dcspline/__init__.py +10 -0
  36. microEye/analysis/fitting/pyfit3Dcspline/constants.py +27 -0
  37. microEye/analysis/fitting/pyfit3Dcspline/mainfunctions.py +903 -0
  38. microEye/analysis/fitting/results.py +917 -0
  39. microEye/analysis/fitting/results_stats.py +251 -0
  40. microEye/analysis/fitting/tardis.py +209 -0
  41. microEye/analysis/multi_viewer.py +568 -0
  42. microEye/analysis/processing/__init__.py +1 -0
  43. microEye/analysis/processing/frc.py +120 -0
  44. microEye/analysis/rendering/__init__.py +3 -0
  45. microEye/analysis/rendering/base.py +452 -0
  46. microEye/analysis/rendering/cloud.py +215 -0
  47. microEye/analysis/rendering/core.py +47 -0
  48. microEye/analysis/rendering/volumetric.py +198 -0
  49. microEye/analysis/tools/__init__.py +0 -0
  50. microEye/analysis/tools/kymograms.py +1079 -0
  51. microEye/analysis/tools/roi_selectors.py +556 -0
  52. microEye/analysis/utils/__init__.py +3 -0
  53. microEye/analysis/utils/coordinates.py +18 -0
  54. microEye/analysis/utils/images.py +68 -0
  55. microEye/analysis/utils/windows.py +19 -0
  56. microEye/analysis/viewer/__init__.py +3 -0
  57. microEye/analysis/viewer/image_options_widget.py +615 -0
  58. microEye/analysis/viewer/images.py +1225 -0
  59. microEye/analysis/viewer/layers_widget.py +415 -0
  60. microEye/analysis/viewer/localizations.py +1304 -0
  61. microEye/analysis/viewer/psf.py +1003 -0
  62. microEye/analysis/viewer/volume.py +456 -0
  63. microEye/hardware/__init__.py +3 -0
  64. microEye/hardware/cams/__init__.py +29 -0
  65. microEye/hardware/cams/camera_calibration.py +99 -0
  66. microEye/hardware/cams/camera_list.py +528 -0
  67. microEye/hardware/cams/camera_options.py +694 -0
  68. microEye/hardware/cams/camera_panel.py +941 -0
  69. microEye/hardware/cams/dummy/__init__.py +1 -0
  70. microEye/hardware/cams/dummy/dummy_panel.py +759 -0
  71. microEye/hardware/cams/jobs.py +497 -0
  72. microEye/hardware/cams/line_profiler.py +99 -0
  73. microEye/hardware/cams/linescan/IR_Cam.py +474 -0
  74. microEye/hardware/cams/linescan/__init__.py +1 -0
  75. microEye/hardware/cams/micam.py +524 -0
  76. microEye/hardware/cams/pco/__init__.py +58 -0
  77. microEye/hardware/cams/pco/enums.py +382 -0
  78. microEye/hardware/cams/pco/pco_cam.py +761 -0
  79. microEye/hardware/cams/pco/pco_panel.py +477 -0
  80. microEye/hardware/cams/shortcuts.py +312 -0
  81. microEye/hardware/cams/thorlabs/__init__.py +1 -0
  82. microEye/hardware/cams/thorlabs/thorlabs.py +1508 -0
  83. microEye/hardware/cams/thorlabs/thorlabs_panel.py +850 -0
  84. microEye/hardware/cams/ueye/__init__.py +1 -0
  85. microEye/hardware/cams/ueye/ueye_camera.py +1023 -0
  86. microEye/hardware/cams/ueye/ueye_panel.py +861 -0
  87. microEye/hardware/cams/vimba/__init__.py +1 -0
  88. microEye/hardware/cams/vimba/vimba_cam.py +1000 -0
  89. microEye/hardware/cams/vimba/vimba_panel.py +813 -0
  90. microEye/hardware/device.py +60 -0
  91. microEye/hardware/lasers/__init__.py +13 -0
  92. microEye/hardware/lasers/io_matchbox.py +791 -0
  93. microEye/hardware/lasers/io_params.py +85 -0
  94. microEye/hardware/lasers/io_single_laser.py +742 -0
  95. microEye/hardware/lasers/laser_relay.py +594 -0
  96. microEye/hardware/mieye/__init__.py +1 -0
  97. microEye/hardware/mieye/acquisition_manager.py +467 -0
  98. microEye/hardware/mieye/devices_manager.py +533 -0
  99. microEye/hardware/mieye/miEye.py +659 -0
  100. microEye/hardware/misc/__init__.py +0 -0
  101. microEye/hardware/misc/acquisition_view.py +71 -0
  102. microEye/hardware/misc/reglo.py +761 -0
  103. microEye/hardware/misc/temp.py +188 -0
  104. microEye/hardware/port_config.py +59 -0
  105. microEye/hardware/protocols/__init__.py +2 -0
  106. microEye/hardware/protocols/actions.py +402 -0
  107. microEye/hardware/protocols/actions_items.py +703 -0
  108. microEye/hardware/protocols/designer.py +244 -0
  109. microEye/hardware/protocols/scene_manager.py +191 -0
  110. microEye/hardware/protocols/serialization.py +97 -0
  111. microEye/hardware/pycromanager/__init__.py +16 -0
  112. microEye/hardware/pycromanager/core.py +1433 -0
  113. microEye/hardware/pycromanager/devices.py +461 -0
  114. microEye/hardware/pycromanager/enums.py +107 -0
  115. microEye/hardware/pycromanager/headless.py +153 -0
  116. microEye/hardware/pycromanager/utils.py +34 -0
  117. microEye/hardware/pycromanager/widgets/__init__.py +5 -0
  118. microEye/hardware/pycromanager/widgets/bridges.py +407 -0
  119. microEye/hardware/pycromanager/widgets/headless_manager.py +258 -0
  120. microEye/hardware/pycromanager/widgets/headless_options.py +224 -0
  121. microEye/hardware/pycromanager/widgets/pycro_panel.py +455 -0
  122. microEye/hardware/stages/__init__.py +18 -0
  123. microEye/hardware/stages/elliptec/__init__.py +5 -0
  124. microEye/hardware/stages/elliptec/baseDevice.py +314 -0
  125. microEye/hardware/stages/elliptec/device.py +384 -0
  126. microEye/hardware/stages/elliptec/deviceID.py +212 -0
  127. microEye/hardware/stages/elliptec/devicePort.py +379 -0
  128. microEye/hardware/stages/elliptec/deviceStatus.py +65 -0
  129. microEye/hardware/stages/elliptec/devicesView.py +706 -0
  130. microEye/hardware/stages/elliptec/ellDevices.py +134 -0
  131. microEye/hardware/stages/elliptec/messageUpdater.py +34 -0
  132. microEye/hardware/stages/elliptec/motorInfo.py +153 -0
  133. microEye/hardware/stages/elliptec/stage.py +62 -0
  134. microEye/hardware/stages/elliptec/test.py +139 -0
  135. microEye/hardware/stages/kinesis/__init__.py +1 -0
  136. microEye/hardware/stages/kinesis/kdc101/__init__.py +1 -0
  137. microEye/hardware/stages/kinesis/kdc101/enums.py +1002 -0
  138. microEye/hardware/stages/kinesis/kdc101/factory.py +171 -0
  139. microEye/hardware/stages/kinesis/kdc101/kdc101.py +718 -0
  140. microEye/hardware/stages/kinesis/kinesis.py +776 -0
  141. microEye/hardware/stages/piezo_concept.py +607 -0
  142. microEye/hardware/stages/stabilizer.py +785 -0
  143. microEye/hardware/stages/stage.py +89 -0
  144. microEye/hardware/widgets/__init__.py +10 -0
  145. microEye/hardware/widgets/controller.py +246 -0
  146. microEye/hardware/widgets/devices.py +133 -0
  147. microEye/hardware/widgets/focusWidget.py +264 -0
  148. microEye/hardware/widgets/qlist_slider.py +113 -0
  149. microEye/hardware/widgets/scan_acquisition.py +424 -0
  150. microEye/icons/1024.png +0 -0
  151. microEye/icons/128.png +0 -0
  152. microEye/icons/16.png +0 -0
  153. microEye/icons/24.png +0 -0
  154. microEye/icons/256.png +0 -0
  155. microEye/icons/32.png +0 -0
  156. microEye/icons/48.png +0 -0
  157. microEye/icons/512.png +0 -0
  158. microEye/icons/64.png +0 -0
  159. microEye/icons/__init__.py +0 -0
  160. microEye/icons/close.svg +88 -0
  161. microEye/icons/mieye.png +0 -0
  162. microEye/icons/min.svg +83 -0
  163. microEye/icons/viewer.png +0 -0
  164. microEye/launcher.py +42 -0
  165. microEye/qt.py +181 -0
  166. microEye/utils/__init__.py +2 -0
  167. microEye/utils/enum_encoder.py +10 -0
  168. microEye/utils/expandable_groupbox.py +93 -0
  169. microEye/utils/gui_helper.py +457 -0
  170. microEye/utils/hid/__init__.py +8 -0
  171. microEye/utils/hid/controller.py +153 -0
  172. microEye/utils/hid/device.py +63 -0
  173. microEye/utils/hid/enums.py +140 -0
  174. microEye/utils/hid/utils.py +58 -0
  175. microEye/utils/labelled_slider.py +134 -0
  176. microEye/utils/metadata.py +599 -0
  177. microEye/utils/metadata_tree.py +718 -0
  178. microEye/utils/micro_launcher.py +245 -0
  179. microEye/utils/parameter_tree.py +325 -0
  180. microEye/utils/pyscripting.py +444 -0
  181. microEye/utils/retry_exec.py +35 -0
  182. microEye/utils/start_gui.py +112 -0
  183. microEye/utils/thread_worker.py +115 -0
  184. microEye/utils/uImage.py +1512 -0
  185. microeye-2.3.2.dist-info/METADATA +401 -0
  186. microeye-2.3.2.dist-info/RECORD +190 -0
  187. microeye-2.3.2.dist-info/WHEEL +5 -0
  188. microeye-2.3.2.dist-info/entry_points.txt +2 -0
  189. microeye-2.3.2.dist-info/licenses/LICENSE +674 -0
  190. microeye-2.3.2.dist-info/top_level.txt +1 -0
@@ -0,0 +1,382 @@
1
+ from enum import Enum
2
+ from typing import Union
3
+
4
+
5
+ class DescriptionKeys(Enum):
6
+ SERIAL = ('serial', int)
7
+ '''Serial number of the camera'''
8
+
9
+ TYPE = ('type', str)
10
+ '''Sensor type'''
11
+
12
+ SUB_TYPE = ('sub type', int)
13
+ '''Sensor sub type'''
14
+
15
+ INTERFACE_TYPE = ('interface type', str)
16
+ '''Interface type'''
17
+
18
+ MIN_EXPOSURE_TIME = ('min exposure time', float)
19
+ '''Minimal possible exposure time [s]'''
20
+
21
+ MAX_EXPOSURE_TIME = ('max exposure time', float)
22
+ '''Maximal possible exposure time [s]'''
23
+
24
+ MIN_EXPOSURE_STEP = ('min exposure step', float)
25
+ '''Minimal possible exposure step [s]'''
26
+
27
+ MIN_DELAY_TIME = ('min delay time', float)
28
+ '''Minimal possible delay time [s]'''
29
+
30
+ MAX_DELAY_TIME = ('max delay time', float)
31
+ '''Maximal possible delay time [s]'''
32
+
33
+ MIN_DELAY_STEP = ('min delay step', float)
34
+ '''Minimal possible delay step [s]'''
35
+
36
+ MIN_WIDTH = ('min width', int)
37
+ '''Minimal possible image width (hardware ROI)'''
38
+
39
+ MIN_HEIGHT = ('min height', int)
40
+ '''Minimal possible image height (hardware ROI)'''
41
+
42
+ MAX_WIDTH = ('max width', int)
43
+ '''Maximal possible image width (hardware ROI)'''
44
+
45
+ MAX_HEIGHT = ('max height', int)
46
+ '''Maximal possible image height (hardware ROI)'''
47
+
48
+ ROI_STEPS = ('roi steps', tuple[int, int])
49
+ '''Hardware ROI stepping as tuple of (horz, vert)'''
50
+
51
+ ROI_IS_HORZ_SYMMETRIC = ('roi is horz symmetric', bool)
52
+ '''Flag if hardware ROI has to be horizontally symmetric'''
53
+
54
+ ROI_IS_VERT_SYMMETRIC = ('roi is vert symmetric', bool)
55
+ '''Flag if hardware ROI has to be vertically symmetric'''
56
+
57
+ BIT_RESOLUTION = ('bit resolution', int)
58
+ '''Bit-resolution of the sensor'''
59
+
60
+ HAS_TIMESTAMP = ('has timestamp', bool)
61
+ '''Flag if camera supports the timestamp setting'''
62
+
63
+ HAS_ASCII_ONLY_TIMESTAMP = ('has ascii-only timestamp', bool)
64
+ '''Flag if camera supports setting the timestamp to ascii-only'''
65
+
66
+ PIXELRATES = ('pixelrates', list[int])
67
+ '''list containing all possible pixelrate frequencies (index 0 is default)'''
68
+
69
+ HAS_ACQUIRE = ('has acquire', bool)
70
+ '''Flag if camera supports the acquire mode setting'''
71
+
72
+ HAS_EXTERN_ACQUIRE = ('has extern acquire', bool)
73
+ '''Flag if camera supports the external acquire setting'''
74
+
75
+ HAS_METADATA = ('has metadata', bool)
76
+ '''Flag if metadata can be activated for the camera'''
77
+
78
+ HAS_RAM = ('has ram', bool)
79
+ '''Flag if camera has internal memory'''
80
+
81
+ BINNING_HORZ_VEC = ('binning horz vec', list[int])
82
+ '''list containing all possible horizontal binning values'''
83
+
84
+ BINNING_VERT_VEC = ('binning vert vec', list[int])
85
+ '''list containing all possible vertical binning values'''
86
+
87
+ HAS_AVERAGE_BINNING = ('has average binning', bool)
88
+ '''Flag if camera supports average binning'''
89
+
90
+
91
+ class ConfigKeys(Enum):
92
+ EXPOSURE_TIME = ('exposure time', float)
93
+ '''Exposure time [s]'''
94
+
95
+ DELAY_TIME = ('delay time', float)
96
+ '''Delay time [s]'''
97
+
98
+ ROI = ('roi', tuple) # tuple[int, int, int, int])
99
+ '''Hardware ROI as tuple of (x0, y0, x1, y1)'''
100
+
101
+ TIMESTAMP = ('timestamp', str)
102
+ '''Timestamp mode'''
103
+
104
+ PIXEL_RATE = ('pixel rate', int)
105
+ '''Pixelrate'''
106
+
107
+ TRIGGER = ('trigger', str)
108
+ '''Trigger mode'''
109
+
110
+ ACQUIRE = ('acquire', str)
111
+ '''Acquire mode'''
112
+
113
+ METADATA = ('metadata', str)
114
+ '''Metadata mode'''
115
+
116
+ NOISE_FILTER = ('noise filter', str)
117
+ '''Noise filter mode'''
118
+
119
+ BINNING = ('binning', tuple) # tuple[int, int, str])
120
+ '''Binning setting as tuple of (horz, vert, mode)'''
121
+
122
+ AUTO_EXPOSURE = ('auto exposure', tuple) # tuple[str, int, int])
123
+ '''Auto-Exposure setting as tuple of (region-type, min exposure, max exposure)'''
124
+
125
+
126
+ class RecorderModes(Enum):
127
+ SEQUENCE = ('sequence', 'Memory', True)
128
+ '''Record a sequence of images.'''
129
+
130
+ SEQUENCE_NON_BLOCKING = ('sequence non blocking', 'Memory', False)
131
+ '''Record a sequence of images, do not wait until record is finished.'''
132
+
133
+ RING_BUFFER = ('ring buffer', 'Memory', False)
134
+ '''Continuously record images in a ringbuffer,
135
+ once the buffer is full, old images are overwritten.'''
136
+
137
+ FIFO = ('fifo', 'Memory', False)
138
+ '''Record images in fifo mode, i.e. you will always read images sequentially and
139
+ once the buffer is full, recording will pause until older images have been read.'''
140
+
141
+ SEQUENCE_DPCORE = ('sequence dpcore', 'Memory', True)
142
+ '''Same as sequence, but with DotPhoton preparation enabled.'''
143
+
144
+ SEQUENCE_NON_BLOCKING_DPCORE = ('sequence non blocking dpcore', 'Memory', False)
145
+ '''Same as sequence_non_blocking, but with DotPhoton preparation enabled.'''
146
+
147
+ RING_BUFFER_DPCORE = ('ring buffer dpcore', 'Memory', False)
148
+ '''Same as ring_buffer, but with DotPhoton preparation enabled.'''
149
+
150
+ FIFO_DPCORE = ('fifo dpcore', 'Memory', False)
151
+ '''Same as fifo, but with DotPhoton preparation enabled.'''
152
+
153
+ TIF = ('tif', 'File', False)
154
+ '''Record images directly as tif files.'''
155
+
156
+ MULTITIF = ('multitif', 'File', False)
157
+ '''Record images directly as one or more multitiff file(s).'''
158
+
159
+ PCORAW = ('pcoraw', 'File', False)
160
+ '''Record images directly as one pcoraw file.'''
161
+
162
+ DICOM = ('dicom', 'File', False)
163
+ '''Record images directly as dicom files.'''
164
+
165
+ MULTIDICOM = ('multidicom', 'File', False)
166
+ '''Record images directly as one or more multidicom file(s).'''
167
+
168
+ CAMRAM_SEGMENT = ('camram_segment', 'Camera RAM', False)
169
+ '''Record images to camera memory. Stops when segment is full.'''
170
+
171
+ CAMRAM_RING = ('camram_ring', 'Camera RAM', False)
172
+ '''Record images to camera memory. Ram segment is used as ring buffer.'''
173
+
174
+
175
+ class ImageFormats(Enum):
176
+ MONO8 = 'mono8'
177
+ '''Get image as 8 bit grayscale data.'''
178
+
179
+ MONO16 = 'mono16'
180
+ '''Get image as 16 bit grayscale/raw data.'''
181
+
182
+ BGR8 = 'bgr8'
183
+ '''Get image as 24 bit color data in bgr format.'''
184
+
185
+ RGB8 = 'rgb8'
186
+ '''Get image as 24 bit color data in rgb format.'''
187
+
188
+ BGRA8 = 'bgra8'
189
+ '''Get image as 32 bit color data (with alpha channel) in bgra format.'''
190
+
191
+ RGBA8 = 'rgba8'
192
+ '''Get image as 32 bit color data (with alpha channel) in rgba format.'''
193
+
194
+ BGR16 = 'bgr16'
195
+ '''Get image as 48 bit color data in bgr format
196
+ (only possible for color cameras).'''
197
+
198
+ RGB16 = 'rgb16'
199
+ '''Get image as 48 bit color data in rgb format
200
+ (only possible for color cameras).'''
201
+
202
+
203
+ class ExposureRegionType(Enum):
204
+ BALANCED = 'balanced'
205
+ '''Balanced exposure region'''
206
+
207
+ CENTER_BASED = 'center based'
208
+ '''Center based exposure region'''
209
+
210
+ CORNER_BASED = 'corner based'
211
+ '''Corner based exposure region'''
212
+
213
+ FULL = 'full'
214
+ '''Full exposure region'''
215
+
216
+ class ConvertControlKeys(Enum):
217
+ SHARPEN = (
218
+ 'sharpen',
219
+ bool,
220
+ [ImageFormats.MONO8, ImageFormats.BGR8, ImageFormats.BGR16],
221
+ )
222
+ '''Sharpen: <bool> Supported formats: Mono8, BGR8, BGR16'''
223
+
224
+ ADAPTIVE_SHARPEN = (
225
+ 'adaptive_sharpen',
226
+ bool,
227
+ [ImageFormats.MONO8, ImageFormats.BGR8, ImageFormats.BGR16],
228
+ )
229
+ '''Adaptive Sharpen: <bool> Supported formats: Mono8, BGR8, BGR16'''
230
+
231
+ FLIP_VERTICAL = (
232
+ 'flip_vertical',
233
+ bool,
234
+ [ImageFormats.MONO8, ImageFormats.BGR8, ImageFormats.BGR16],
235
+ )
236
+ '''Flip Vertical: <bool> Supported formats: Mono8, BGR8, BGR16'''
237
+
238
+ AUTO_MINMAX = (
239
+ 'auto_minmax',
240
+ bool,
241
+ [ImageFormats.MONO8, ImageFormats.BGR8, ImageFormats.BGR16],
242
+ )
243
+ '''Auto MinMax: <bool> Supported formats: Mono8, BGR8, BGR16'''
244
+
245
+ ADD_CONV_FLAGS = (
246
+ 'add_conv_flags',
247
+ int,
248
+ [ImageFormats.MONO8, ImageFormats.BGR8, ImageFormats.BGR16],
249
+ )
250
+ '''Add Conv Flags: <int> Supported formats: Mono8, BGR8, BGR16'''
251
+
252
+ MIN_LIMIT = (
253
+ 'min_limit',
254
+ int,
255
+ [ImageFormats.MONO8, ImageFormats.BGR8, ImageFormats.BGR16],
256
+ )
257
+ '''Min Limit: <int> Supported formats: Mono8, BGR8, BGR16'''
258
+
259
+ MAX_LIMIT = (
260
+ 'max_limit',
261
+ int,
262
+ [ImageFormats.MONO8, ImageFormats.BGR8, ImageFormats.BGR16],
263
+ )
264
+ '''Max Limit: <int> Supported formats: Mono8, BGR8, BGR16'''
265
+
266
+ GAMMA = (
267
+ 'gamma',
268
+ float,
269
+ [ImageFormats.MONO8, ImageFormats.BGR8, ImageFormats.BGR16],
270
+ )
271
+ '''Gamma: <double> Supported formats: Mono8, BGR8, BGR16'''
272
+
273
+ CONTRAST = (
274
+ 'contrast',
275
+ int,
276
+ [ImageFormats.MONO8, ImageFormats.BGR8, ImageFormats.BGR16],
277
+ )
278
+ '''Contrast: <int> Supported formats: Mono8, BGR8, BGR16'''
279
+
280
+ COLOR_TEMPERATURE = (
281
+ 'color_temperature',
282
+ int,
283
+ [ImageFormats.BGR8, ImageFormats.BGR16],
284
+ )
285
+ '''Color Temperature: <int> Supported formats: BGR8, BGR16'''
286
+
287
+ COLOR_SATURATION = (
288
+ 'color_saturation',
289
+ int,
290
+ [ImageFormats.BGR8, ImageFormats.BGR16],
291
+ )
292
+ '''Color Saturation: <int> Supported formats: BGR8, BGR16'''
293
+
294
+ COLOR_VIBRANCE = ('color_vibrance', int, [ImageFormats.BGR8, ImageFormats.BGR16])
295
+ '''Color Vibrance: <int> Supported formats: BGR8, BGR16'''
296
+
297
+ COLOR_TINT = ('color_tint', int, [ImageFormats.BGR8, ImageFormats.BGR16])
298
+ '''Color Tint: <int> Supported formats: BGR8, BGR16'''
299
+
300
+ LUT_FILE = ('lut_file', str, [ImageFormats.BGR8])
301
+ '''LUT File: <file_path> Supported formats: BGR8 for non-colored cameras'''
302
+
303
+ class MetadataKeys(Enum):
304
+ DATA_FORMAT = ('data format', str)
305
+ '''Data format: <str> Supported formats:
306
+ "Mono8", "Mono16", "BGR8", "BGR16", "CompressedMono8" '''
307
+
308
+ RECORDER_IMAGE_NUMBER = ('recorder image number', int)
309
+ '''Recorder image number: <int> from pco.recorder'''
310
+
311
+ TIMESTAMP = ('timestamp', dict[str, Union[int, float]])
312
+ '''Timestamp: <dict> {
313
+ "image counter": <int>, "year": <int>, "month": <int>,"day": <int>,
314
+ "hour": <int>, "minute": <int>, "second": <float>, "status": <int>}'''
315
+
316
+ VERSION = ('version', int)
317
+ '''Version: <int> from PCO_METADATA_STRUCT'''
318
+
319
+ EXPOSURE_TIME = ('exposure time', int)
320
+ '''Exposure time: <int> from PCO_METADATA_STRUCT'''
321
+
322
+ FRAMERATE = ('framerate', float)
323
+ '''Framerate: <float> in Hz'''
324
+
325
+ SENSOR_TEMPERATURE = ('sensor temperature', int)
326
+ '''Sensor temperature: <int> from PCO_METADATA_STRUCT'''
327
+
328
+ PIXEL_CLOCK = ('pixel clock', int)
329
+ '''Pixel clock: <int> from PCO_METADATA_STRUCT'''
330
+
331
+ CONVERSION_FACTOR = ('conversion factor', int)
332
+ '''Conversion factor: <int> from PCO_METADATA_STRUCT'''
333
+
334
+ SERIAL_NUMBER = ('serial number', int)
335
+ '''Serial number: <int> from PCO_METADATA_STRUCT'''
336
+
337
+ CAMERA_TYPE = ('camera type', int)
338
+ '''Camera type: <int> from PCO_METADATA_STRUCT'''
339
+
340
+ BIT_RESOLUTION = ('bit resolution', int)
341
+ '''Bit resolution: <int> from PCO_METADATA_STRUCT'''
342
+
343
+ SYNC_STATUS = ('sync status', int)
344
+ '''Sync status: <int> from PCO_METADATA_STRUCT'''
345
+
346
+ DARK_OFFSET = ('dark offset', int)
347
+ '''Dark offset: <int> from PCO_METADATA_STRUCT'''
348
+
349
+ TRIGGER_MODE = ('trigger mode', int)
350
+ '''Trigger mode: <int> from PCO_METADATA_STRUCT'''
351
+
352
+ DOUBLE_IMAGE_MODE = ('double image mode', int)
353
+ '''Double image mode: <int> from PCO_METADATA_STRUCT'''
354
+
355
+ CAMERA_SYNC_MODE = ('camera sync mode', int)
356
+ '''Camera sync mode: <int> from PCO_METADATA_STRUCT'''
357
+
358
+ IMAGE_TYPE = ('image type', int)
359
+ '''Image type: <int> from PCO_METADATA_STRUCT'''
360
+
361
+ COLOR_PATTERN = ('color pattern', int)
362
+ '''Color pattern: <int> from PCO_METADATA_STRUCT'''
363
+
364
+ IMAGE_SIZE = ('image size', int)
365
+ '''Image size: <int> from PCO_METADATA_STRUCT'''
366
+
367
+ BINNING = ('binning', int)
368
+ '''Binning: <int> from PCO_METADATA_STRUCT'''
369
+
370
+ CAMERA_SUBTYPE = ('camera subtype', int)
371
+ '''Camera subtype: <int> from PCO_METADATA_STRUCT'''
372
+
373
+ EVENT_NUMBER = ('event number', int)
374
+ '''Event number: <int> from PCO_METADATA_STRUCT'''
375
+
376
+ IMAGE_SIZE_OFFSET = ('image size offset', int)
377
+ '''Image size offset: <int> from PCO_METADATA_STRUCT'''
378
+
379
+ TIMESTAMP_BCD = ('timestamp bcd', dict[str, Union[int, float]])
380
+ '''Timestamp BCD: <dict> {
381
+ "image counter": <int>, "year": <int>, "month": <int>, "day": <int>,
382
+ "hour": <int>, "minute": <int>, "second": <float>, "status": <int>}'''