python-microscopy 25.6.5__cp39-cp39-win_amd64.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 (1277) hide show
  1. PYME/Acquire/ActionManager.py +450 -0
  2. PYME/Acquire/ExecTools.py +235 -0
  3. PYME/Acquire/Hardware/AAOptoelectronics/MDS.py +175 -0
  4. PYME/Acquire/Hardware/AAOptoelectronics/__init__.py +0 -0
  5. PYME/Acquire/Hardware/ARCoptix/__init__.py +0 -0
  6. PYME/Acquire/Hardware/ARCoptix/lcdriver.py +149 -0
  7. PYME/Acquire/Hardware/ARCoptix/lcserver32.py +123 -0
  8. PYME/Acquire/Hardware/AndorIXon/AndorCam.py +1095 -0
  9. PYME/Acquire/Hardware/AndorIXon/AndorControlFrame.py +312 -0
  10. PYME/Acquire/Hardware/AndorIXon/AndorIXon.py +737 -0
  11. PYME/Acquire/Hardware/AndorIXon/__init__.py +27 -0
  12. PYME/Acquire/Hardware/AndorNeo/AndorNeo.py +644 -0
  13. PYME/Acquire/Hardware/AndorNeo/AndorNeoControlFrame.py +161 -0
  14. PYME/Acquire/Hardware/AndorNeo/AndorZyla.py +761 -0
  15. PYME/Acquire/Hardware/AndorNeo/SDK3.py +307 -0
  16. PYME/Acquire/Hardware/AndorNeo/SDK3Cam.py +171 -0
  17. PYME/Acquire/Hardware/AndorNeo/ZylaControlPanel.py +105 -0
  18. PYME/Acquire/Hardware/AndorNeo/__init__.py +22 -0
  19. PYME/Acquire/Hardware/AndorNeo/parseAtdebug.py +46 -0
  20. PYME/Acquire/Hardware/AndorNeo/plotTimings.py +73 -0
  21. PYME/Acquire/Hardware/AndorNeo/testNeo.py +62 -0
  22. PYME/Acquire/Hardware/Camera.py +1199 -0
  23. PYME/Acquire/Hardware/CameraSkeleton.py +642 -0
  24. PYME/Acquire/Hardware/Coherent/OBIS.py +147 -0
  25. PYME/Acquire/Hardware/Coherent/Sapphire.py +162 -0
  26. PYME/Acquire/Hardware/Coherent/__init__.py +0 -0
  27. PYME/Acquire/Hardware/DMDGui.py +198 -0
  28. PYME/Acquire/Hardware/DigiData/DigiData.py +95 -0
  29. PYME/Acquire/Hardware/DigiData/DigiDataClient.py +30 -0
  30. PYME/Acquire/Hardware/DigiData/RemoteDigiData.py +51 -0
  31. PYME/Acquire/Hardware/DigiData/__init__.py +24 -0
  32. PYME/Acquire/Hardware/DigiData/axDD132x.py +348 -0
  33. PYME/Acquire/Hardware/EMCCDTheory.py +41 -0
  34. PYME/Acquire/Hardware/ExciterWheel.py +167 -0
  35. PYME/Acquire/Hardware/FilterWheel.py +184 -0
  36. PYME/Acquire/Hardware/FocCorr.py +106 -0
  37. PYME/Acquire/Hardware/FocCorrR.py +196 -0
  38. PYME/Acquire/Hardware/FrFilter.py +51 -0
  39. PYME/Acquire/Hardware/GCS/GCS_DLL.py +370 -0
  40. PYME/Acquire/Hardware/GCS/__init__.py +0 -0
  41. PYME/Acquire/Hardware/GCS/gcs.py +210 -0
  42. PYME/Acquire/Hardware/HamamatsuDCAM/HamamatsuDCAM.py +662 -0
  43. PYME/Acquire/Hardware/HamamatsuDCAM/HamamatsuORCA.py +602 -0
  44. PYME/Acquire/Hardware/HamamatsuDCAM/Hamamatsu_control_panel.py +54 -0
  45. PYME/Acquire/Hardware/HamamatsuDCAM/__init__.py +23 -0
  46. PYME/Acquire/Hardware/LaserControlFrame.py +160 -0
  47. PYME/Acquire/Hardware/MPBCommunications/MPBCW.py +132 -0
  48. PYME/Acquire/Hardware/MPBCommunications/__init__.py +0 -0
  49. PYME/Acquire/Hardware/Mercury/Mercury.py +269 -0
  50. PYME/Acquire/Hardware/Mercury/PI_Mercury_GCS_DLL.py +857 -0
  51. PYME/Acquire/Hardware/Mercury/__init__.py +22 -0
  52. PYME/Acquire/Hardware/Mercury/mercuryStepper.py +203 -0
  53. PYME/Acquire/Hardware/Mercury/mercuryStepperGCS.py +281 -0
  54. PYME/Acquire/Hardware/NikonTE2000.py +68 -0
  55. PYME/Acquire/Hardware/NikonTi.py +214 -0
  56. PYME/Acquire/Hardware/NikonTiGUI.py +81 -0
  57. PYME/Acquire/Hardware/OrielCornerstone.py +125 -0
  58. PYME/Acquire/Hardware/PM100USB.py +51 -0
  59. PYME/Acquire/Hardware/Piezos/__init__.py +22 -0
  60. PYME/Acquire/Hardware/Piezos/base_piezo.py +108 -0
  61. PYME/Acquire/Hardware/Piezos/offsetPiezo.py +162 -0
  62. PYME/Acquire/Hardware/Piezos/offsetPiezoREST.py +308 -0
  63. PYME/Acquire/Hardware/Piezos/piezo_c867.py +486 -0
  64. PYME/Acquire/Hardware/Piezos/piezo_e255.py +68 -0
  65. PYME/Acquire/Hardware/Piezos/piezo_e662.py +61 -0
  66. PYME/Acquire/Hardware/Piezos/piezo_e709.py +434 -0
  67. PYME/Acquire/Hardware/Piezos/piezo_e816.py +452 -0
  68. PYME/Acquire/Hardware/Piezos/piezo_e816_corr.py +70 -0
  69. PYME/Acquire/Hardware/Piezos/piezo_e816_dll.py +518 -0
  70. PYME/Acquire/Hardware/Piezos/piezo_e816b.py +70 -0
  71. PYME/Acquire/Hardware/Piezos/piezo_pipython_gcs.py +560 -0
  72. PYME/Acquire/Hardware/Piezos/piezo_test.py +55 -0
  73. PYME/Acquire/Hardware/Simulator/EmpiricalHist.py +273 -0
  74. PYME/Acquire/Hardware/Simulator/__init__.py +22 -0
  75. PYME/Acquire/Hardware/Simulator/dSimControl.py +961 -0
  76. PYME/Acquire/Hardware/Simulator/fakeCam.py +651 -0
  77. PYME/Acquire/Hardware/Simulator/fakePiezo.py +95 -0
  78. PYME/Acquire/Hardware/Simulator/fluor.py +336 -0
  79. PYME/Acquire/Hardware/Simulator/illuminate.cp39-win_amd64.dll.a +0 -0
  80. PYME/Acquire/Hardware/Simulator/illuminate.cp39-win_amd64.pyd +0 -0
  81. PYME/Acquire/Hardware/Simulator/illuminate.pyx +93 -0
  82. PYME/Acquire/Hardware/Simulator/lasersliders.py +90 -0
  83. PYME/Acquire/Hardware/Simulator/rend_im.py +446 -0
  84. PYME/Acquire/Hardware/Simulator/setup.py +69 -0
  85. PYME/Acquire/Hardware/Simulator/simcontrol.py +348 -0
  86. PYME/Acquire/Hardware/Simulator/simui_wx.py +794 -0
  87. PYME/Acquire/Hardware/Tango/__init__.py +0 -0
  88. PYME/Acquire/Hardware/Tango/marzhauser_tango.py +583 -0
  89. PYME/Acquire/Hardware/TiLightCrafter.py +388 -0
  90. PYME/Acquire/Hardware/__init__.py +22 -0
  91. PYME/Acquire/Hardware/aotf.py +271 -0
  92. PYME/Acquire/Hardware/arclampshutterpanel.py +71 -0
  93. PYME/Acquire/Hardware/cameraSoftwareBuffer.py +215 -0
  94. PYME/Acquire/Hardware/camera_noise.py +270 -0
  95. PYME/Acquire/Hardware/ccdAdjPanel.py +188 -0
  96. PYME/Acquire/Hardware/ccdCalibrator.py +161 -0
  97. PYME/Acquire/Hardware/cobaltLaser.py +108 -0
  98. PYME/Acquire/Hardware/cobaltLaser561.py +94 -0
  99. PYME/Acquire/Hardware/comports.py +26 -0
  100. PYME/Acquire/Hardware/driftTrackGUI.py +488 -0
  101. PYME/Acquire/Hardware/driftTracking.py +595 -0
  102. PYME/Acquire/Hardware/fakeShutters.py +52 -0
  103. PYME/Acquire/Hardware/focusKeys.py +204 -0
  104. PYME/Acquire/Hardware/focus_locks/__init__.py +0 -0
  105. PYME/Acquire/Hardware/focus_locks/reflection_focus_lock.py +684 -0
  106. PYME/Acquire/Hardware/frZStage.py +117 -0
  107. PYME/Acquire/Hardware/fw102.py +38 -0
  108. PYME/Acquire/Hardware/ids_peak_cam.py +561 -0
  109. PYME/Acquire/Hardware/ioslave.py +305 -0
  110. PYME/Acquire/Hardware/lasers.py +292 -0
  111. PYME/Acquire/Hardware/matchboxLaser.py +58 -0
  112. PYME/Acquire/Hardware/microscope_adapter.py +104 -0
  113. PYME/Acquire/Hardware/mpd_picosecond_delayer.py +395 -0
  114. PYME/Acquire/Hardware/multiview.py +287 -0
  115. PYME/Acquire/Hardware/olympusix81.py +59 -0
  116. PYME/Acquire/Hardware/pco/__init__.py +0 -0
  117. PYME/Acquire/Hardware/pco/pco_cam.py +348 -0
  118. PYME/Acquire/Hardware/pco/pco_edge_42_lt.py +34 -0
  119. PYME/Acquire/Hardware/pco/pco_sdk.py +1645 -0
  120. PYME/Acquire/Hardware/pco/pco_sdk_cam.py +518 -0
  121. PYME/Acquire/Hardware/pco/pco_sdk_cam_control_panel.py +54 -0
  122. PYME/Acquire/Hardware/phoxxLaser.py +199 -0
  123. PYME/Acquire/Hardware/phoxxLaserOLD.py +242 -0
  124. PYME/Acquire/Hardware/priorLumen.py +102 -0
  125. PYME/Acquire/Hardware/priorarclampshutter.py +52 -0
  126. PYME/Acquire/Hardware/setup.py +50 -0
  127. PYME/Acquire/Hardware/spacenav.py +148 -0
  128. PYME/Acquire/Hardware/splitter.py +394 -0
  129. PYME/Acquire/Hardware/thorlabsPiezo.py +98 -0
  130. PYME/Acquire/Hardware/thorlabs_cam.py +136 -0
  131. PYME/Acquire/Hardware/thorlabs_mff_flipper.py +400 -0
  132. PYME/Acquire/Hardware/toptica_ibeam.py +51 -0
  133. PYME/Acquire/Hardware/uc480/AndorControlFrame.py +308 -0
  134. PYME/Acquire/Hardware/uc480/__init__.py +27 -0
  135. PYME/Acquire/Hardware/uc480/uCam480.py +695 -0
  136. PYME/Acquire/Hardware/uc480/uc480.py +189 -0
  137. PYME/Acquire/Hardware/uc480/uc480Deprecated.py +87 -0
  138. PYME/Acquire/Hardware/uc480/uc480_h.py +767 -0
  139. PYME/Acquire/Hardware/uc480/uc480_h_gen.py +62 -0
  140. PYME/Acquire/Hardware/uc480/ucCamControlFrame.py +83 -0
  141. PYME/Acquire/Hardware/ueye.py +702 -0
  142. PYME/Acquire/PYMEAcquire.py +186 -0
  143. PYME/Acquire/Protocols/DMDMFM.py +74 -0
  144. PYME/Acquire/Protocols/__init__.py +22 -0
  145. PYME/Acquire/Protocols/darkCalibrate.py +56 -0
  146. PYME/Acquire/Protocols/dual671_470.py +45 -0
  147. PYME/Acquire/Protocols/dual671_488.py +46 -0
  148. PYME/Acquire/Protocols/gainCal.py +53 -0
  149. PYME/Acquire/Protocols/htsms-cal-psf.py +32 -0
  150. PYME/Acquire/Protocols/htsms-cal-registration.py +52 -0
  151. PYME/Acquire/Protocols/htsms-flow.py +29 -0
  152. PYME/Acquire/Protocols/htsms-staggered.py +31 -0
  153. PYME/Acquire/Protocols/htsms-tile.py +68 -0
  154. PYME/Acquire/Protocols/htsms-two-color.py +29 -0
  155. PYME/Acquire/Protocols/htsms-widefield.py +32 -0
  156. PYME/Acquire/Protocols/paint671.py +61 -0
  157. PYME/Acquire/Protocols/photoconversion.py +52 -0
  158. PYME/Acquire/Protocols/photoconversion2.py +55 -0
  159. PYME/Acquire/Protocols/prebleach488.py +70 -0
  160. PYME/Acquire/Protocols/prebleach490.py +69 -0
  161. PYME/Acquire/Protocols/prebleach561.py +72 -0
  162. PYME/Acquire/Protocols/prebleach561NeomEos2.py +70 -0
  163. PYME/Acquire/Protocols/prebleach561NeomEos2ND1.py +70 -0
  164. PYME/Acquire/Protocols/prebleach642.py +70 -0
  165. PYME/Acquire/Protocols/prebleach671.py +69 -0
  166. PYME/Acquire/Protocols/prebleach671ND1.py +58 -0
  167. PYME/Acquire/Protocols/prebleach671ND2.py +57 -0
  168. PYME/Acquire/Protocols/prebleach671Neo.py +69 -0
  169. PYME/Acquire/Protocols/recover671.py +62 -0
  170. PYME/Acquire/Protocols/sequence642_488.py +85 -0
  171. PYME/Acquire/Protocols/sequence642_561.py +87 -0
  172. PYME/Acquire/Protocols/shiftfield.py +198 -0
  173. PYME/Acquire/Protocols/simul488.py +59 -0
  174. PYME/Acquire/Protocols/simul642.py +63 -0
  175. PYME/Acquire/Protocols/simul642HTSMS.py +63 -0
  176. PYME/Acquire/Protocols/simulPA.py +37 -0
  177. PYME/Acquire/Protocols/simulSIM.py +76 -0
  178. PYME/Acquire/Protocols/simulStep.py +62 -0
  179. PYME/Acquire/Protocols/spdscan.py +178 -0
  180. PYME/Acquire/Protocols/standard470.py +45 -0
  181. PYME/Acquire/Protocols/standard488.py +47 -0
  182. PYME/Acquire/Protocols/standard671.py +48 -0
  183. PYME/Acquire/Protocols/standard671_no532.py +47 -0
  184. PYME/Acquire/Protocols/standardArclamp.py +46 -0
  185. PYME/Acquire/Protocols/strip_tile.py +204 -0
  186. PYME/Acquire/Protocols/tile.py +204 -0
  187. PYME/Acquire/Protocols/tile3D.py +192 -0
  188. PYME/Acquire/Protocols/tile671.py +190 -0
  189. PYME/Acquire/Protocols/tile_triggered.py +189 -0
  190. PYME/Acquire/Scripts/init.py +232 -0
  191. PYME/Acquire/Scripts/init_N1_Ti_Exeter_ZIx.py +374 -0
  192. PYME/Acquire/Scripts/init_N2_Ti_Zyla_lasers.py +290 -0
  193. PYME/Acquire/Scripts/init_Neo.py +266 -0
  194. PYME/Acquire/Scripts/init_NeoSim.py +159 -0
  195. PYME/Acquire/Scripts/init_TIRF.py +232 -0
  196. PYME/Acquire/Scripts/init_TIRF_Neo.py +242 -0
  197. PYME/Acquire/Scripts/init_TIRF_NeoO.py +241 -0
  198. PYME/Acquire/Scripts/init_TIRF_onecam.py +233 -0
  199. PYME/Acquire/Scripts/init_Ti.py +257 -0
  200. PYME/Acquire/Scripts/init_UOA_n.py +256 -0
  201. PYME/Acquire/Scripts/init_UOA_n2.py +246 -0
  202. PYME/Acquire/Scripts/init_Y1.py +249 -0
  203. PYME/Acquire/Scripts/init_Zyla.py +260 -0
  204. PYME/Acquire/Scripts/init_drift_tracking.py +80 -0
  205. PYME/Acquire/Scripts/init_emccd_basic.py +277 -0
  206. PYME/Acquire/Scripts/init_htsms.py +277 -0
  207. PYME/Acquire/Scripts/init_htsms_focus_lock.py +132 -0
  208. PYME/Acquire/Scripts/init_micrpi.py +45 -0
  209. PYME/Acquire/Scripts/init_orca.py +70 -0
  210. PYME/Acquire/Scripts/init_pco.py +49 -0
  211. PYME/Acquire/Scripts/init_rev.py +74 -0
  212. PYME/Acquire/Scripts/init_sim100.py +169 -0
  213. PYME/Acquire/Scripts/init_sim103.py +169 -0
  214. PYME/Acquire/Scripts/init_sim2.py +211 -0
  215. PYME/Acquire/Scripts/init_sim50.py +169 -0
  216. PYME/Acquire/Scripts/init_sim75.py +169 -0
  217. PYME/Acquire/Scripts/init_sim_drift_tracking.py +166 -0
  218. PYME/Acquire/Scripts/init_sim_htsms.py +224 -0
  219. PYME/Acquire/Scripts/init_sim_htsms_n.py +233 -0
  220. PYME/Acquire/Scripts/init_sim_main.py +229 -0
  221. PYME/Acquire/Scripts/init_sim_min.py +197 -0
  222. PYME/Acquire/Scripts/init_sim_rem.py +176 -0
  223. PYME/Acquire/Scripts/init_smi1.py +110 -0
  224. PYME/Acquire/Scripts/init_spectro.py +78 -0
  225. PYME/Acquire/Scripts/init_spim.py +116 -0
  226. PYME/Acquire/Scripts/init_thorcam.py +62 -0
  227. PYME/Acquire/Scripts/init_twophoton.py +112 -0
  228. PYME/Acquire/Scripts/init_uc480.py +262 -0
  229. PYME/Acquire/Scripts/init_ueye.py +261 -0
  230. PYME/Acquire/SpoolController.py +958 -0
  231. PYME/Acquire/Utils/MultiPointScanner.py +80 -0
  232. PYME/Acquire/Utils/__init__.py +13 -0
  233. PYME/Acquire/Utils/failsafe.py +157 -0
  234. PYME/Acquire/Utils/fastTiler.py +153 -0
  235. PYME/Acquire/Utils/pointScanner.py +496 -0
  236. PYME/Acquire/Utils/sarcSpacing.py +86 -0
  237. PYME/Acquire/Utils/strip_tiler.py +93 -0
  238. PYME/Acquire/Utils/tiler.py +464 -0
  239. PYME/Acquire/Utils/vibrationAnalysis.py +65 -0
  240. PYME/Acquire/__init__.py +44 -0
  241. PYME/Acquire/acquire_client.py +90 -0
  242. PYME/Acquire/acquire_server.py +316 -0
  243. PYME/Acquire/acquirebase.py +139 -0
  244. PYME/Acquire/acquiremainframe.py +716 -0
  245. PYME/Acquire/acquirewx.py +61 -0
  246. PYME/Acquire/acquisition_base.py +148 -0
  247. PYME/Acquire/actions.py +209 -0
  248. PYME/Acquire/autofocus.py +54 -0
  249. PYME/Acquire/eventLog.py +95 -0
  250. PYME/Acquire/event_loop.py +119 -0
  251. PYME/Acquire/frameWrangler.py +530 -0
  252. PYME/Acquire/htsms/__init__.py +8 -0
  253. PYME/Acquire/htsms/rule_ui.py +970 -0
  254. PYME/Acquire/htsms/rule_ui_v2.py +573 -0
  255. PYME/Acquire/htsms/tweeter.py +222 -0
  256. PYME/Acquire/microscope.py +1050 -0
  257. PYME/Acquire/positionTracker.py +181 -0
  258. PYME/Acquire/protocol.py +299 -0
  259. PYME/Acquire/protocol_acquisition.py +404 -0
  260. PYME/Acquire/sampleInformation.py +591 -0
  261. PYME/Acquire/sampleInformationDjangoDirect.py +446 -0
  262. PYME/Acquire/setup.py +52 -0
  263. PYME/Acquire/stackSettings.py +295 -0
  264. PYME/Acquire/stage_leveling.py +285 -0
  265. PYME/Acquire/ui/AnalysisSettingsUI.py +184 -0
  266. PYME/Acquire/ui/HDFSpoolFrame.py +584 -0
  267. PYME/Acquire/ui/__init__.py +0 -0
  268. PYME/Acquire/ui/actionUI.py +892 -0
  269. PYME/Acquire/ui/focus_lock_gui.py +149 -0
  270. PYME/Acquire/ui/intensity_trace.py +143 -0
  271. PYME/Acquire/ui/intsliders.py +222 -0
  272. PYME/Acquire/ui/lasersliders.py +329 -0
  273. PYME/Acquire/ui/mpd_picosecond_delay_panel.py +69 -0
  274. PYME/Acquire/ui/multiview_select.py +77 -0
  275. PYME/Acquire/ui/positionUI.py +519 -0
  276. PYME/Acquire/ui/preflight.py +58 -0
  277. PYME/Acquire/ui/scanner_panel.py +41 -0
  278. PYME/Acquire/ui/selectCameraPanel.py +46 -0
  279. PYME/Acquire/ui/seqdialog.py +501 -0
  280. PYME/Acquire/ui/splashScreen.py +175 -0
  281. PYME/Acquire/ui/spool_panel.py +830 -0
  282. PYME/Acquire/ui/tile_panel.py +556 -0
  283. PYME/Acquire/ui/tilesettingsui.py +91 -0
  284. PYME/Acquire/ui/voxelSizeDialog.py +149 -0
  285. PYME/Acquire/webui/__init__.py +36 -0
  286. PYME/Acquire/webui/ipy.py +361 -0
  287. PYME/Acquire/webui/static/css/pyme-bootstrap.css +9908 -0
  288. PYME/Acquire/webui/static/css/pymeacquire.css +85 -0
  289. PYME/Acquire/webui/static/js/pymeacquire.js +375 -0
  290. PYME/Acquire/webui/static/js/pzf.js +95 -0
  291. PYME/Acquire/webui/templates/PYMEAcquire.html +232 -0
  292. PYME/Acquire/webui/templates/login.html +84 -0
  293. PYME/Acquire/webui/templates/xtermpage.html +106 -0
  294. PYME/Acquire/xyztc.py +418 -0
  295. PYME/Acquire/zScanner.py +287 -0
  296. PYME/Analysis/BleachProfile/__init__.py +26 -0
  297. PYME/Analysis/BleachProfile/deMod.py +91 -0
  298. PYME/Analysis/BleachProfile/fitRecover.py +90 -0
  299. PYME/Analysis/BleachProfile/intensProf.py +519 -0
  300. PYME/Analysis/BleachProfile/kinModels.py +507 -0
  301. PYME/Analysis/BleachProfile/rawIntensity.py +227 -0
  302. PYME/Analysis/BleachProfile/rollins.py +555 -0
  303. PYME/Analysis/Colocalisation/__init__.py +27 -0
  304. PYME/Analysis/Colocalisation/colocScaleDep.py +126 -0
  305. PYME/Analysis/Colocalisation/correlationCoeffs.py +198 -0
  306. PYME/Analysis/Colocalisation/distColoc.py +110 -0
  307. PYME/Analysis/Colocalisation/edtColoc.py +191 -0
  308. PYME/Analysis/MetaData.py +278 -0
  309. PYME/Analysis/PSFEst/__init__.py +27 -0
  310. PYME/Analysis/PSFEst/dec.py +283 -0
  311. PYME/Analysis/PSFEst/extractImages.py +316 -0
  312. PYME/Analysis/PSFEst/fit_psf_zernikes.py +194 -0
  313. PYME/Analysis/PSFEst/psfQuality.py +225 -0
  314. PYME/Analysis/PSFGen/__init__.py +40 -0
  315. PYME/Analysis/PSFGen/fourier.py +138 -0
  316. PYME/Analysis/PSFGen/fourierHNA.py +1108 -0
  317. PYME/Analysis/PSFGen/fourierHNA2.py +979 -0
  318. PYME/Analysis/PSFGen/genCRBcurves.py +185 -0
  319. PYME/Analysis/PSFGen/nijboer_zernike.py +79 -0
  320. PYME/Analysis/PSFGen/ps_app.cp39-win_amd64.dll.a +0 -0
  321. PYME/Analysis/PSFGen/ps_app.cp39-win_amd64.pyd +0 -0
  322. PYME/Analysis/PSFGen/test_ps_app.py +24 -0
  323. PYME/Analysis/Tracking/__init__.py +3 -0
  324. PYME/Analysis/Tracking/msd.py +57 -0
  325. PYME/Analysis/Tracking/trackUtils.py +528 -0
  326. PYME/Analysis/Tracking/tracking.py +152 -0
  327. PYME/Analysis/__init__.py +30 -0
  328. PYME/Analysis/_fithelpers.py +161 -0
  329. PYME/Analysis/angleFilter.py +287 -0
  330. PYME/Analysis/annealThresh.py +157 -0
  331. PYME/Analysis/autoencoder_classifier.py +45 -0
  332. PYME/Analysis/binAvg.py +144 -0
  333. PYME/Analysis/composite.py +183 -0
  334. PYME/Analysis/cramerRao.py +259 -0
  335. PYME/Analysis/deTile.py +441 -0
  336. PYME/Analysis/density_filter.py +45 -0
  337. PYME/Analysis/distributed_pyramid.py +426 -0
  338. PYME/Analysis/fiducial_matching.py +220 -0
  339. PYME/Analysis/gen_sCMOS_maps.py +355 -0
  340. PYME/Analysis/graphing_filters.py +311 -0
  341. PYME/Analysis/implicitFilter.py +359 -0
  342. PYME/Analysis/keep_pairs.py +69 -0
  343. PYME/Analysis/optic_flow.py +108 -0
  344. PYME/Analysis/piecewise.py +36 -0
  345. PYME/Analysis/piecewiseMapping.py +304 -0
  346. PYME/Analysis/piezo_movement_correction.py +153 -0
  347. PYME/Analysis/points/DeClump/__init__.py +78 -0
  348. PYME/Analysis/points/DeClump/deClump.cp39-win_amd64.dll.a +0 -0
  349. PYME/Analysis/points/DeClump/deClump.cp39-win_amd64.pyd +0 -0
  350. PYME/Analysis/points/DeClump/deClumpGUI.py +87 -0
  351. PYME/Analysis/points/DeClump/pyDeClump.py +284 -0
  352. PYME/Analysis/points/DeClump/testClump.py +40 -0
  353. PYME/Analysis/points/DistHist/__init__.py +25 -0
  354. PYME/Analysis/points/DistHist/distHist.cp39-win_amd64.dll.a +0 -0
  355. PYME/Analysis/points/DistHist/distHist.cp39-win_amd64.pyd +0 -0
  356. PYME/Analysis/points/DistHist/distHistThreaded.py +71 -0
  357. PYME/Analysis/points/DistHist/setup.py +54 -0
  358. PYME/Analysis/points/EdgeDB/__init__.py +24 -0
  359. PYME/Analysis/points/EdgeDB/edgeDB.cp39-win_amd64.dll.a +0 -0
  360. PYME/Analysis/points/EdgeDB/edgeDB.cp39-win_amd64.pyd +0 -0
  361. PYME/Analysis/points/EdgeDB/edgeTest.py +66 -0
  362. PYME/Analysis/points/EdgeDB/edges.py +102 -0
  363. PYME/Analysis/points/EdgeDB/segment.py +75 -0
  364. PYME/Analysis/points/EdgeDB/setup.py +54 -0
  365. PYME/Analysis/points/QuadTree/QTrend.py +232 -0
  366. PYME/Analysis/points/QuadTree/__init__.py +25 -0
  367. PYME/Analysis/points/QuadTree/pointQT.py +227 -0
  368. PYME/Analysis/points/QuadTree/pointQTF.py +254 -0
  369. PYME/Analysis/points/QuadTree/qtUtils.py +36 -0
  370. PYME/Analysis/points/QuadTree/rendQT.py +118 -0
  371. PYME/Analysis/points/SoftRend/__init__.py +24 -0
  372. PYME/Analysis/points/SoftRend/setup.py +61 -0
  373. PYME/Analysis/points/SoftRend/testTetrahedra.py +41 -0
  374. PYME/Analysis/points/SoftRend/triRend.cp39-win_amd64.dll.a +0 -0
  375. PYME/Analysis/points/SoftRend/triRend.cp39-win_amd64.pyd +0 -0
  376. PYME/Analysis/points/__init__.py +3 -0
  377. PYME/Analysis/points/arcfit/__init__.py +1 -0
  378. PYME/Analysis/points/arcfit/arcmf.cp39-win_amd64.dll.a +0 -0
  379. PYME/Analysis/points/arcfit/arcmf.cp39-win_amd64.pyd +0 -0
  380. PYME/Analysis/points/arcfit/setup.py +51 -0
  381. PYME/Analysis/points/astigmatism/__init__.py +0 -0
  382. PYME/Analysis/points/astigmatism/astigTools.py +338 -0
  383. PYME/Analysis/points/astigmatism/astiglookup.cp39-win_amd64.dll.a +0 -0
  384. PYME/Analysis/points/astigmatism/astiglookup.cp39-win_amd64.pyd +0 -0
  385. PYME/Analysis/points/astigmatism/setup.py +54 -0
  386. PYME/Analysis/points/cluster_morphology.py +199 -0
  387. PYME/Analysis/points/coordinate_tools.py +278 -0
  388. PYME/Analysis/points/features/__init__.py +0 -0
  389. PYME/Analysis/points/features/metal.py +46 -0
  390. PYME/Analysis/points/features/shaders/vect_feat_3d.metal +49 -0
  391. PYME/Analysis/points/fiducials.py +142 -0
  392. PYME/Analysis/points/gen3DTriangs.py +796 -0
  393. PYME/Analysis/points/moments.py +143 -0
  394. PYME/Analysis/points/multiview.py +458 -0
  395. PYME/Analysis/points/objectMeasure.py +206 -0
  396. PYME/Analysis/points/qpaint.py +97 -0
  397. PYME/Analysis/points/rings.py +372 -0
  398. PYME/Analysis/points/ripleys.py +427 -0
  399. PYME/Analysis/points/segmentLL.py +134 -0
  400. PYME/Analysis/points/setup.py +56 -0
  401. PYME/Analysis/points/spherical_harmonics.py +909 -0
  402. PYME/Analysis/points/surfit.py +829 -0
  403. PYME/Analysis/points/tCluster.py +75 -0
  404. PYME/Analysis/points/traveling_salesperson/__init__.py +0 -0
  405. PYME/Analysis/points/traveling_salesperson/queue_opt.py +117 -0
  406. PYME/Analysis/points/traveling_salesperson/sectioned_two_opt.py +327 -0
  407. PYME/Analysis/points/traveling_salesperson/setup.py +40 -0
  408. PYME/Analysis/points/traveling_salesperson/sort.py +78 -0
  409. PYME/Analysis/points/traveling_salesperson/two_opt.py +189 -0
  410. PYME/Analysis/points/traveling_salesperson/two_opt_utils.cp39-win_amd64.dll.a +0 -0
  411. PYME/Analysis/points/traveling_salesperson/two_opt_utils.cp39-win_amd64.pyd +0 -0
  412. PYME/Analysis/points/traveling_salesperson/two_opt_utils.pyx +41 -0
  413. PYME/Analysis/points/twoColour.py +572 -0
  414. PYME/Analysis/points/twoColourPlot.py +107 -0
  415. PYME/Analysis/processLogger.py +129 -0
  416. PYME/Analysis/profile_extraction.py +72 -0
  417. PYME/Analysis/setup.py +60 -0
  418. PYME/Analysis/splitting.py +372 -0
  419. PYME/Analysis/svmSegment.py +214 -0
  420. PYME/Analysis/thresholding.py +192 -0
  421. PYME/Analysis/tile_pyramid.py +938 -0
  422. PYME/Analysis/widefieldify.py +54 -0
  423. PYME/DSView/DisplayOptionsPanel.py +503 -0
  424. PYME/DSView/LUT/__init__.py +33 -0
  425. PYME/DSView/LUT/lut.cp39-win_amd64.dll.a +0 -0
  426. PYME/DSView/LUT/lut.cp39-win_amd64.pyd +0 -0
  427. PYME/DSView/LUT/setup.py +54 -0
  428. PYME/DSView/OpenSequenceDialog.py +83 -0
  429. PYME/DSView/OverlaysPanel.py +111 -0
  430. PYME/DSView/__init__.py +32 -0
  431. PYME/DSView/arrayViewPanel.py +1035 -0
  432. PYME/DSView/displayOptions.py +453 -0
  433. PYME/DSView/displaySettingsPanel.py +271 -0
  434. PYME/DSView/dsviewer.py +542 -0
  435. PYME/DSView/eventLogViewer.py +805 -0
  436. PYME/DSView/fitInfo.py +486 -0
  437. PYME/DSView/htmlServe.py +72 -0
  438. PYME/DSView/logparser.py +100 -0
  439. PYME/DSView/modules/LMAnalysis.py +1053 -0
  440. PYME/DSView/modules/LMDisplay.py +194 -0
  441. PYME/DSView/modules/__init__.py +162 -0
  442. PYME/DSView/modules/_base.py +39 -0
  443. PYME/DSView/modules/annotation.py +725 -0
  444. PYME/DSView/modules/arrayView.py +71 -0
  445. PYME/DSView/modules/blobFinding.py +455 -0
  446. PYME/DSView/modules/blobMeasure.py +1093 -0
  447. PYME/DSView/modules/camera_maps.py +38 -0
  448. PYME/DSView/modules/coloc.py +414 -0
  449. PYME/DSView/modules/composite.py +715 -0
  450. PYME/DSView/modules/convnet.py +24 -0
  451. PYME/DSView/modules/cropping.py +133 -0
  452. PYME/DSView/modules/dark_and_flatfield.py +31 -0
  453. PYME/DSView/modules/deconvolution.py +499 -0
  454. PYME/DSView/modules/eventView.py +80 -0
  455. PYME/DSView/modules/extractBlobs.py +46 -0
  456. PYME/DSView/modules/fastGraphPanel.py +85 -0
  457. PYME/DSView/modules/filtering.py +335 -0
  458. PYME/DSView/modules/flowView.py +268 -0
  459. PYME/DSView/modules/fourierRingCorrelation.py +172 -0
  460. PYME/DSView/modules/gl_image_view.py +12 -0
  461. PYME/DSView/modules/graphViewPanel.py +272 -0
  462. PYME/DSView/modules/measure/__init__.py +1 -0
  463. PYME/DSView/modules/measure/filterPan.py +239 -0
  464. PYME/DSView/modules/metadataView.py +28 -0
  465. PYME/DSView/modules/multithreshold.py +98 -0
  466. PYME/DSView/modules/neuroglancer.py +129 -0
  467. PYME/DSView/modules/object_tagging.py +157 -0
  468. PYME/DSView/modules/particleTracking.py +463 -0
  469. PYME/DSView/modules/playback.py +256 -0
  470. PYME/DSView/modules/prebleachExtraction.py +75 -0
  471. PYME/DSView/modules/profileFitting.py +137 -0
  472. PYME/DSView/modules/profilePlotting.py +408 -0
  473. PYME/DSView/modules/projections.py +48 -0
  474. PYME/DSView/modules/psfExtraction.py +570 -0
  475. PYME/DSView/modules/psfGeneration.py +138 -0
  476. PYME/DSView/modules/psfTools.py +661 -0
  477. PYME/DSView/modules/pupilTools.py +204 -0
  478. PYME/DSView/modules/pupilView.py +139 -0
  479. PYME/DSView/modules/recipes.py +266 -0
  480. PYME/DSView/modules/redimension.py +75 -0
  481. PYME/DSView/modules/segmentation.py +192 -0
  482. PYME/DSView/modules/sheetView.py +24 -0
  483. PYME/DSView/modules/shell.py +39 -0
  484. PYME/DSView/modules/shiftfield_estimation.py +433 -0
  485. PYME/DSView/modules/sparkprepare.py +94 -0
  486. PYME/DSView/modules/splitter.py +148 -0
  487. PYME/DSView/modules/synchronise.py +64 -0
  488. PYME/DSView/modules/templates/astigCal.html +42 -0
  489. PYME/DSView/modules/templates/measureView.html +69 -0
  490. PYME/DSView/modules/templates/measureView2.html +48 -0
  491. PYME/DSView/modules/templates/measureView3.html +98 -0
  492. PYME/DSView/modules/templates/trackView.html +139 -0
  493. PYME/DSView/modules/templates/tracksOverview.html +21 -0
  494. PYME/DSView/modules/tiling.py +147 -0
  495. PYME/DSView/modules/unmixing.py +148 -0
  496. PYME/DSView/modules/vis3D.py +320 -0
  497. PYME/DSView/modules/visgui.py +163 -0
  498. PYME/DSView/modules/webview.py +14 -0
  499. PYME/DSView/overlays.py +295 -0
  500. PYME/DSView/scrolledImagePanel.py +188 -0
  501. PYME/DSView/setup.py +53 -0
  502. PYME/DSView/splashScreen.py +158 -0
  503. PYME/DSView/voxSizeDialog.py +84 -0
  504. PYME/Deconv/__init__.py +35 -0
  505. PYME/Deconv/beadGen.py +55 -0
  506. PYME/Deconv/dec.py +659 -0
  507. PYME/Deconv/decTask.py +65 -0
  508. PYME/Deconv/decThread.py +113 -0
  509. PYME/Deconv/dec_test.py +47 -0
  510. PYME/Deconv/deconvDialogs.py +417 -0
  511. PYME/Deconv/fftwWisdom.py +62 -0
  512. PYME/Deconv/richardsonLucy.py +141 -0
  513. PYME/Deconv/richardsonLucyMV.py +151 -0
  514. PYME/Deconv/richardsonLucyMVM.py +218 -0
  515. PYME/Deconv/test_block_dec.py +46 -0
  516. PYME/Deconv/tq_block_dec.py +331 -0
  517. PYME/Deconv/wiener.py +163 -0
  518. PYME/IO/DataSources/AlignDataSource.py +91 -0
  519. PYME/IO/DataSources/ArrayDataSource.py +260 -0
  520. PYME/IO/DataSources/BGSDataSource.py +353 -0
  521. PYME/IO/DataSources/BaseDataSource.py +457 -0
  522. PYME/IO/DataSources/BioformatsDataSource.py +178 -0
  523. PYME/IO/DataSources/BufferedDataSource.py +99 -0
  524. PYME/IO/DataSources/ClusterPZFDataSource.py +124 -0
  525. PYME/IO/DataSources/ConcatenatedDataSource.py +56 -0
  526. PYME/IO/DataSources/CropDataSource.py +243 -0
  527. PYME/IO/DataSources/DcimgDataSource.py +54 -0
  528. PYME/IO/DataSources/ElectronsPerSecondDataSource.py +61 -0
  529. PYME/IO/DataSources/FlatFieldDataSource.py +77 -0
  530. PYME/IO/DataSources/HDFDataSource.py +160 -0
  531. PYME/IO/DataSources/HTTPDataSource.py +80 -0
  532. PYME/IO/DataSources/ImageSeriesDataSource.py +123 -0
  533. PYME/IO/DataSources/MultiviewDataSource.py +99 -0
  534. PYME/IO/DataSources/OBFDataSource.py +67 -0
  535. PYME/IO/DataSources/RandomDataSource.py +23 -0
  536. PYME/IO/DataSources/SupertileDatasource.py +148 -0
  537. PYME/IO/DataSources/TQDataSource.py +41 -0
  538. PYME/IO/DataSources/TiffDataSource.py +193 -0
  539. PYME/IO/DataSources/TileDataSource.py +91 -0
  540. PYME/IO/DataSources/UnsplitDataSource.py +92 -0
  541. PYME/IO/DataSources/__init__.py +59 -0
  542. PYME/IO/FileUtils/IJLut.py +43 -0
  543. PYME/IO/FileUtils/RawToHdf5.py +105 -0
  544. PYME/IO/FileUtils/SPAD.py +54 -0
  545. PYME/IO/FileUtils/TiffSeqToHdf5.py +87 -0
  546. PYME/IO/FileUtils/__init__.py +24 -0
  547. PYME/IO/FileUtils/compHdf.py +39 -0
  548. PYME/IO/FileUtils/fileID.py +246 -0
  549. PYME/IO/FileUtils/fnlGen.py +40 -0
  550. PYME/IO/FileUtils/freeSpace.py +59 -0
  551. PYME/IO/FileUtils/h5-thumbnailer.py +85 -0
  552. PYME/IO/FileUtils/h5ExFrames.py +98 -0
  553. PYME/IO/FileUtils/h5ToTiffSeries.py +50 -0
  554. PYME/IO/FileUtils/h5r-thumbnailer.py +118 -0
  555. PYME/IO/FileUtils/h5rFormatDef.py +99 -0
  556. PYME/IO/FileUtils/h5rToTxt.py +77 -0
  557. PYME/IO/FileUtils/nameUtils.py +300 -0
  558. PYME/IO/FileUtils/obf_support.py +538 -0
  559. PYME/IO/FileUtils/ply.py +147 -0
  560. PYME/IO/FileUtils/readSpeckle.py +78 -0
  561. PYME/IO/FileUtils/readTiff.py +64 -0
  562. PYME/IO/FileUtils/saveTiffStack.py +137 -0
  563. PYME/IO/FileUtils/setup.py +36 -0
  564. PYME/IO/FileUtils/sf-thumbnailer.py +76 -0
  565. PYME/IO/FileUtils/stl.py +44 -0
  566. PYME/IO/FileUtils/thumbnailDatabase.py +104 -0
  567. PYME/IO/HTTPSpooler_v2.py +141 -0
  568. PYME/IO/MetaDataHandler.py +1072 -0
  569. PYME/IO/PZFFormat.py +375 -0
  570. PYME/IO/Spooler.py +279 -0
  571. PYME/IO/__init__.py +12 -0
  572. PYME/IO/acquisition_backends.py +353 -0
  573. PYME/IO/buffer_helpers.cp39-win_amd64.dll.a +0 -0
  574. PYME/IO/buffer_helpers.cp39-win_amd64.pyd +0 -0
  575. PYME/IO/buffer_helpers.pyx +190 -0
  576. PYME/IO/buffers.py +291 -0
  577. PYME/IO/clusterDuplication.py +204 -0
  578. PYME/IO/clusterExport.py +152 -0
  579. PYME/IO/clusterGlob.py +108 -0
  580. PYME/IO/clusterIO.py +1076 -0
  581. PYME/IO/clusterListing.py +232 -0
  582. PYME/IO/clusterResults.py +206 -0
  583. PYME/IO/clusterUpload.py +49 -0
  584. PYME/IO/cluster_directory.py +419 -0
  585. PYME/IO/cluster_streaming.py +216 -0
  586. PYME/IO/compatibility.py +12 -0
  587. PYME/IO/countdir/__init__.py +5 -0
  588. PYME/IO/countdir/setup.py +58 -0
  589. PYME/IO/csv_flavours.py +251 -0
  590. PYME/IO/dataExporter.py +470 -0
  591. PYME/IO/dataWrap.py +108 -0
  592. PYME/IO/dcimg.py +167 -0
  593. PYME/IO/events.py +161 -0
  594. PYME/IO/h5File.py +148 -0
  595. PYME/IO/h5rFile.py +323 -0
  596. PYME/IO/image.py +1447 -0
  597. PYME/IO/load_psf.py +26 -0
  598. PYME/IO/pyme_h5ls.py +58 -0
  599. PYME/IO/ragged.py +138 -0
  600. PYME/IO/rgb_image.py +94 -0
  601. PYME/IO/tabular.py +1338 -0
  602. PYME/IO/testClusterSpooling.py +199 -0
  603. PYME/IO/unifiedIO.py +301 -0
  604. PYME/LMVis/Extras/QPobjectSegment.py +220 -0
  605. PYME/LMVis/Extras/__init__.py +55 -0
  606. PYME/LMVis/Extras/animation.py +359 -0
  607. PYME/LMVis/Extras/annotation.py +78 -0
  608. PYME/LMVis/Extras/clusterAnalysis.py +460 -0
  609. PYME/LMVis/Extras/dockedPanel.py +69 -0
  610. PYME/LMVis/Extras/extra_layers.py +373 -0
  611. PYME/LMVis/Extras/fiducial.py +230 -0
  612. PYME/LMVis/Extras/flagZMotionArtifacts.py +60 -0
  613. PYME/LMVis/Extras/fusionUtils.py +9 -0
  614. PYME/LMVis/Extras/multiColourAnalysis.py +103 -0
  615. PYME/LMVis/Extras/multiviewMapping.py +489 -0
  616. PYME/LMVis/Extras/objectMeasurements.py +246 -0
  617. PYME/LMVis/Extras/particleTracking.py +272 -0
  618. PYME/LMVis/Extras/perFrameVariable.py +77 -0
  619. PYME/LMVis/Extras/photophysics.py +72 -0
  620. PYME/LMVis/Extras/pointSetGeneration.py +232 -0
  621. PYME/LMVis/Extras/pointwiseColoc.py +54 -0
  622. PYME/LMVis/Extras/saved_views.py +125 -0
  623. PYME/LMVis/Extras/scaleBox.py +115 -0
  624. PYME/LMVis/Extras/sequentialSpecies.py +125 -0
  625. PYME/LMVis/Extras/setBGImage.py +74 -0
  626. PYME/LMVis/Extras/shiftmapGenerator.py +138 -0
  627. PYME/LMVis/Extras/showShortcuts.py +69 -0
  628. PYME/LMVis/Extras/snapshot.py +135 -0
  629. PYME/LMVis/Extras/spherical_harmonics.py +98 -0
  630. PYME/LMVis/Extras/subsets.py +15 -0
  631. PYME/LMVis/Extras/surface_fitting.py +52 -0
  632. PYME/LMVis/Extras/temperaturePlot.py +53 -0
  633. PYME/LMVis/Extras/vibration.py +112 -0
  634. PYME/LMVis/VisGUI.py +506 -0
  635. PYME/LMVis/__init__.py +39 -0
  636. PYME/LMVis/colourFilterGUI.py +77 -0
  637. PYME/LMVis/colourPanel.py +491 -0
  638. PYME/LMVis/displayPane.py +462 -0
  639. PYME/LMVis/dyeRatios.py +116 -0
  640. PYME/LMVis/genImageDialog.py +298 -0
  641. PYME/LMVis/gl_offScreenHandler.py +134 -0
  642. PYME/LMVis/gl_render.py +1302 -0
  643. PYME/LMVis/gl_render3D.py +1453 -0
  644. PYME/LMVis/gl_render3D_shaders.py +1213 -0
  645. PYME/LMVis/glcanvas_core.py +1157 -0
  646. PYME/LMVis/imageView.py +752 -0
  647. PYME/LMVis/imageView2.py +372 -0
  648. PYME/LMVis/importTextDialog.py +342 -0
  649. PYME/LMVis/layer_panel.py +231 -0
  650. PYME/LMVis/layers/AxesOverlayLayer.py +126 -0
  651. PYME/LMVis/layers/LUTOverlayLayer.py +346 -0
  652. PYME/LMVis/layers/OverlayLayer.py +46 -0
  653. PYME/LMVis/layers/ScaleBarOverlayLayer.py +97 -0
  654. PYME/LMVis/layers/ScaleBoxOverlayLayer.py +181 -0
  655. PYME/LMVis/layers/SelectionOverlayLayer.py +124 -0
  656. PYME/LMVis/layers/__init__.py +53 -0
  657. PYME/LMVis/layers/base.py +319 -0
  658. PYME/LMVis/layers/image_layer.py +363 -0
  659. PYME/LMVis/layers/labels.py +186 -0
  660. PYME/LMVis/layers/layer_defaults.py +97 -0
  661. PYME/LMVis/layers/mesh.py +378 -0
  662. PYME/LMVis/layers/octree.py +194 -0
  663. PYME/LMVis/layers/pointcloud.py +372 -0
  664. PYME/LMVis/layers/quiver.py +271 -0
  665. PYME/LMVis/layers/text.py +250 -0
  666. PYME/LMVis/layers/tracks.py +309 -0
  667. PYME/LMVis/mv_math.py +78 -0
  668. PYME/LMVis/objectDarkMeasure.py +120 -0
  669. PYME/LMVis/pipeline.py +1227 -0
  670. PYME/LMVis/pipelineView.py +115 -0
  671. PYME/LMVis/pointSettingsPanel.py +135 -0
  672. PYME/LMVis/progGraph.py +59 -0
  673. PYME/LMVis/quadTreeSettings.py +90 -0
  674. PYME/LMVis/rendGauss.py +158 -0
  675. PYME/LMVis/renderers.py +576 -0
  676. PYME/LMVis/sessionpaths.py +136 -0
  677. PYME/LMVis/setup.py +39 -0
  678. PYME/LMVis/setup_exe.py +71 -0
  679. PYME/LMVis/shader_programs/DefaultShaderProgram.py +149 -0
  680. PYME/LMVis/shader_programs/GLProgram.py +119 -0
  681. PYME/LMVis/shader_programs/GouraudShaderProgram.py +157 -0
  682. PYME/LMVis/shader_programs/PointSpriteShaderProgram.py +163 -0
  683. PYME/LMVis/shader_programs/ShaderProgramFactory.py +54 -0
  684. PYME/LMVis/shader_programs/TesselShaderProgram.py +47 -0
  685. PYME/LMVis/shader_programs/WireFrameShaderProgram.py +50 -0
  686. PYME/LMVis/shader_programs/__init__.py +20 -0
  687. PYME/LMVis/shader_programs/oit_compositor.py +23 -0
  688. PYME/LMVis/shader_programs/shader_loader.py +84 -0
  689. PYME/LMVis/shader_programs/shader_program.py +168 -0
  690. PYME/LMVis/shader_programs/shaders/bigflatpoints_fs.glsl +16 -0
  691. PYME/LMVis/shader_programs/shaders/bigpoints_gs.glsl +40 -0
  692. PYME/LMVis/shader_programs/shaders/bigpointsprites_fs.glsl +20 -0
  693. PYME/LMVis/shader_programs/shaders/bigspheres_fs.glsl +53 -0
  694. PYME/LMVis/shader_programs/shaders/compose_fs.glsl +41 -0
  695. PYME/LMVis/shader_programs/shaders/compose_vs.glsl +25 -0
  696. PYME/LMVis/shader_programs/shaders/default_fs.glsl +27 -0
  697. PYME/LMVis/shader_programs/shaders/default_vs.glsl +88 -0
  698. PYME/LMVis/shader_programs/shaders/flatpoints_fs.glsl +27 -0
  699. PYME/LMVis/shader_programs/shaders/gouraud_flatpoints_fs.glsl +30 -0
  700. PYME/LMVis/shader_programs/shaders/gouraud_fs.glsl +26 -0
  701. PYME/LMVis/shader_programs/shaders/gouraud_oit_fs.glsl +68 -0
  702. PYME/LMVis/shader_programs/shaders/gouraud_vs.glsl +135 -0
  703. PYME/LMVis/shader_programs/shaders/image_fs.glsl +60 -0
  704. PYME/LMVis/shader_programs/shaders/image_vs.glsl +79 -0
  705. PYME/LMVis/shader_programs/shaders/phong_fs.glsl +43 -0
  706. PYME/LMVis/shader_programs/shaders/phong_vs.glsl +45 -0
  707. PYME/LMVis/shader_programs/shaders/pointsprites_fs.glsl +33 -0
  708. PYME/LMVis/shader_programs/shaders/pointsprites_vs.glsl +77 -0
  709. PYME/LMVis/shader_programs/shaders/spheres_fs.glsl +102 -0
  710. PYME/LMVis/shader_programs/shaders/tessel_fs.glsl +23 -0
  711. PYME/LMVis/shader_programs/shaders/tessel_vs.glsl +37 -0
  712. PYME/LMVis/shader_programs/shaders/text_fs.glsl +42 -0
  713. PYME/LMVis/shader_programs/shaders/text_vs.glsl +84 -0
  714. PYME/LMVis/shader_programs/shaders/widelines_fs.glsl +19 -0
  715. PYME/LMVis/shader_programs/shaders/widelines_gs.glsl +56 -0
  716. PYME/LMVis/shader_programs/shaders/widelines_vs.glsl +51 -0
  717. PYME/LMVis/statusLog.py +57 -0
  718. PYME/LMVis/triBlobs.py +142 -0
  719. PYME/LMVis/view_clipping_pane.py +429 -0
  720. PYME/LMVis/views.py +275 -0
  721. PYME/LMVis/visCore.py +1005 -0
  722. PYME/LMVis/visHelpers.py +880 -0
  723. PYME/LMVis/visHelpersMin.py +230 -0
  724. PYME/LMVis/workspaceTree.py +238 -0
  725. PYME/__init__.py +22 -0
  726. PYME/cluster/HTTPDataServer.py +1063 -0
  727. PYME/cluster/HTTPRulePusher.py +382 -0
  728. PYME/cluster/HTTPTaskPusher.py +377 -0
  729. PYME/cluster/PYMERuleNodeServer.py +192 -0
  730. PYME/cluster/PYMERuleServer.py +109 -0
  731. PYME/cluster/__init__.py +0 -0
  732. PYME/cluster/clusterUI/accounts/__init__.py +0 -0
  733. PYME/cluster/clusterUI/accounts/admin.py +85 -0
  734. PYME/cluster/clusterUI/accounts/forms.py +8 -0
  735. PYME/cluster/clusterUI/accounts/migrations/0001_initial.py +31 -0
  736. PYME/cluster/clusterUI/accounts/migrations/__init__.py +0 -0
  737. PYME/cluster/clusterUI/accounts/models.py +44 -0
  738. PYME/cluster/clusterUI/accounts/templates/accounts/user_form.html +13 -0
  739. PYME/cluster/clusterUI/accounts/templates/registration/initial_complete.html +6 -0
  740. PYME/cluster/clusterUI/accounts/templates/registration/initial_confirm.html +13 -0
  741. PYME/cluster/clusterUI/accounts/templates/registration/initial_done.html +7 -0
  742. PYME/cluster/clusterUI/accounts/templates/registration/verification.html +2 -0
  743. PYME/cluster/clusterUI/accounts/templates/registration/verification_subject.txt +1 -0
  744. PYME/cluster/clusterUI/accounts/urls.py +19 -0
  745. PYME/cluster/clusterUI/accounts/views.py +36 -0
  746. PYME/cluster/clusterUI/clusterUI/__init__.py +0 -0
  747. PYME/cluster/clusterUI/clusterUI/settings.py +147 -0
  748. PYME/cluster/clusterUI/clusterUI/urls.py +31 -0
  749. PYME/cluster/clusterUI/clusterUI/wsgi.py +16 -0
  750. PYME/cluster/clusterUI/clusterbrowser/__init__.py +0 -0
  751. PYME/cluster/clusterUI/clusterbrowser/admin.py +3 -0
  752. PYME/cluster/clusterUI/clusterbrowser/apps.py +7 -0
  753. PYME/cluster/clusterUI/clusterbrowser/migrations/__init__.py +0 -0
  754. PYME/cluster/clusterUI/clusterbrowser/models.py +5 -0
  755. PYME/cluster/clusterUI/clusterbrowser/templates/base.html +129 -0
  756. PYME/cluster/clusterUI/clusterbrowser/templates/clusterbrowser/dirlisting.html +231 -0
  757. PYME/cluster/clusterUI/clusterbrowser/templates/clusterbrowser/form_new_folder.html +18 -0
  758. PYME/cluster/clusterUI/clusterbrowser/templates/clusterbrowser/form_upload_file.html +17 -0
  759. PYME/cluster/clusterUI/clusterbrowser/templates/clusterbrowser/lightlisting.html +25 -0
  760. PYME/cluster/clusterUI/clusterbrowser/templates/registration/login.html +38 -0
  761. PYME/cluster/clusterUI/clusterbrowser/urls.py +10 -0
  762. PYME/cluster/clusterUI/clusterbrowser/views.py +148 -0
  763. PYME/cluster/clusterUI/clusterstatus/__init__.py +0 -0
  764. PYME/cluster/clusterUI/clusterstatus/admin.py +3 -0
  765. PYME/cluster/clusterUI/clusterstatus/apps.py +7 -0
  766. PYME/cluster/clusterUI/clusterstatus/migrations/__init__.py +0 -0
  767. PYME/cluster/clusterUI/clusterstatus/models.py +5 -0
  768. PYME/cluster/clusterUI/clusterstatus/templates/clusterstatus/load_content.html +29 -0
  769. PYME/cluster/clusterUI/clusterstatus/templates/clusterstatus/queue_info.html +28 -0
  770. PYME/cluster/clusterUI/clusterstatus/templates/clusterstatus/queue_info_content.html +50 -0
  771. PYME/cluster/clusterUI/clusterstatus/templates/clusterstatus/status_dash.html +29 -0
  772. PYME/cluster/clusterUI/clusterstatus/templates/clusterstatus/status_dash_content.html +90 -0
  773. PYME/cluster/clusterUI/clusterstatus/urls.py +9 -0
  774. PYME/cluster/clusterUI/clusterstatus/views.py +69 -0
  775. PYME/cluster/clusterUI/clusterui_tornado.py +117 -0
  776. PYME/cluster/clusterUI/deploy.py +62 -0
  777. PYME/cluster/clusterUI/localization/__init__.py +0 -0
  778. PYME/cluster/clusterUI/localization/admin.py +3 -0
  779. PYME/cluster/clusterUI/localization/apps.py +7 -0
  780. PYME/cluster/clusterUI/localization/migrations/__init__.py +0 -0
  781. PYME/cluster/clusterUI/localization/models.py +5 -0
  782. PYME/cluster/clusterUI/localization/templates/localization/settings_form.html +67 -0
  783. PYME/cluster/clusterUI/localization/urls.py +10 -0
  784. PYME/cluster/clusterUI/localization/views.py +170 -0
  785. PYME/cluster/clusterUI/manage.py +17 -0
  786. PYME/cluster/clusterUI/recipes/__init__.py +0 -0
  787. PYME/cluster/clusterUI/recipes/admin.py +3 -0
  788. PYME/cluster/clusterUI/recipes/migrations/__init__.py +0 -0
  789. PYME/cluster/clusterUI/recipes/models.py +3 -0
  790. PYME/cluster/clusterUI/recipes/templates/recipes/extra_inputs.html +35 -0
  791. PYME/cluster/clusterUI/recipes/templates/recipes/form_recipe.html +82 -0
  792. PYME/cluster/clusterUI/recipes/templates/recipes/input_list.html +7 -0
  793. PYME/cluster/clusterUI/recipes/templates/recipes/recipe_editor.html +28 -0
  794. PYME/cluster/clusterUI/recipes/templates/recipes/recipe_editor_common.html +46 -0
  795. PYME/cluster/clusterUI/recipes/templates/recipes/recipe_editrun.html +93 -0
  796. PYME/cluster/clusterUI/recipes/templates/recipes/recipe_standalone.html +100 -0
  797. PYME/cluster/clusterUI/recipes/templates/recipes/recipe_template.html +109 -0
  798. PYME/cluster/clusterUI/recipes/urls.py +17 -0
  799. PYME/cluster/clusterUI/recipes/views.py +109 -0
  800. PYME/cluster/cluster_of_one.py +200 -0
  801. PYME/cluster/dataserver_wsgi.py +615 -0
  802. PYME/cluster/distribution.py +71 -0
  803. PYME/cluster/rulenodeserver.py +487 -0
  804. PYME/cluster/rules.py +979 -0
  805. PYME/cluster/ruleserver.py +1106 -0
  806. PYME/cluster/status.py +101 -0
  807. PYME/cluster/taskWorkerHTTP.py +522 -0
  808. PYME/cluster/webdav.py +1102 -0
  809. PYME/config.py +659 -0
  810. PYME/contrib/TextCtrlAutoComplete.py +582 -0
  811. PYME/contrib/__init__.py +7 -0
  812. PYME/contrib/aniso/__init__.py +2 -0
  813. PYME/contrib/aniso/aniso.py +268 -0
  814. PYME/contrib/auiFloatBook.py +94 -0
  815. PYME/contrib/congrid.py +127 -0
  816. PYME/contrib/dispatch/__init__.py +19 -0
  817. PYME/contrib/dispatch/dispatcher.py +289 -0
  818. PYME/contrib/gohlke/__init__.py +1 -0
  819. PYME/contrib/gohlke/_tifffile.cp39-win_amd64.dll.a +0 -0
  820. PYME/contrib/gohlke/_tifffile.cp39-win_amd64.pyd +0 -0
  821. PYME/contrib/gohlke/czifile.py +1289 -0
  822. PYME/contrib/gohlke/fcsfiles.py +514 -0
  823. PYME/contrib/gohlke/setup.py +54 -0
  824. PYME/contrib/gohlke/tifffile.py +3095 -0
  825. PYME/contrib/listctrlMixins.py +896 -0
  826. PYME/contrib/lzw.py +838 -0
  827. PYME/contrib/pad/__init__.py +13 -0
  828. PYME/contrib/pad/info_pad.py +18 -0
  829. PYME/contrib/pad/pad.py +670 -0
  830. PYME/contrib/setup.py +38 -0
  831. PYME/contrib/wxPlotPanel.py +137 -0
  832. PYME/experimental/SimReconstruction.py +49 -0
  833. PYME/experimental/__init__.pxd +0 -0
  834. PYME/experimental/__init__.py +4 -0
  835. PYME/experimental/_octree.cp39-win_amd64.dll.a +0 -0
  836. PYME/experimental/_octree.cp39-win_amd64.pyd +0 -0
  837. PYME/experimental/_octree.pyx +477 -0
  838. PYME/experimental/_treap.cp39-win_amd64.dll.a +0 -0
  839. PYME/experimental/_treap.cp39-win_amd64.pyd +0 -0
  840. PYME/experimental/_treap.pyx +267 -0
  841. PYME/experimental/_triangle_mesh.cp39-win_amd64.dll.a +0 -0
  842. PYME/experimental/_triangle_mesh.cp39-win_amd64.pyd +0 -0
  843. PYME/experimental/_triangle_mesh.pxd +149 -0
  844. PYME/experimental/_triangle_mesh.pyx +2787 -0
  845. PYME/experimental/aqavg.py +40 -0
  846. PYME/experimental/dcimgFileChucker.py +375 -0
  847. PYME/experimental/dcimgSpoolShim.py +174 -0
  848. PYME/experimental/dcimg_chuck_test.py +78 -0
  849. PYME/experimental/dual_marching_cubes.py +801 -0
  850. PYME/experimental/dual_marching_cubes_v2.py +645 -0
  851. PYME/experimental/expectationMaximisation.py +298 -0
  852. PYME/experimental/func_octree.cp39-win_amd64.dll.a +0 -0
  853. PYME/experimental/func_octree.cp39-win_amd64.pyd +0 -0
  854. PYME/experimental/func_octree.pyx +381 -0
  855. PYME/experimental/fusionRadial.py +520 -0
  856. PYME/experimental/fusionUtils.py +522 -0
  857. PYME/experimental/isosurface.py +147 -0
  858. PYME/experimental/labview_spooling_hacks.py +48 -0
  859. PYME/experimental/marching_cubes.py +811 -0
  860. PYME/experimental/marching_tetrahedra.py +343 -0
  861. PYME/experimental/modified_marching_cubes.py +1245 -0
  862. PYME/experimental/music.py +25 -0
  863. PYME/experimental/octree.py +188 -0
  864. PYME/experimental/pSpaceMap.py +34 -0
  865. PYME/experimental/pointFitConfoc.py +112 -0
  866. PYME/experimental/scanner_control.py +107 -0
  867. PYME/experimental/setup.py +109 -0
  868. PYME/experimental/spark.py +31 -0
  869. PYME/experimental/tcHist.py +71 -0
  870. PYME/experimental/treap.py +262 -0
  871. PYME/experimental/triangle_mesh.py +2287 -0
  872. PYME/experimental/triangle_mesh_utils.cp39-win_amd64.dll.a +0 -0
  873. PYME/experimental/triangle_mesh_utils.cp39-win_amd64.pyd +0 -0
  874. PYME/experimental/triangle_utils.py +87 -0
  875. PYME/experimental/triangular_mesh.py +2255 -0
  876. PYME/experimental/zMotionArtifactUtils.py +55 -0
  877. PYME/localization/FitFactories/AstigGaussFitFR.py +175 -0
  878. PYME/localization/FitFactories/AstigGaussGPUFitFR.py +326 -0
  879. PYME/localization/FitFactories/BeadConvolvedAstigGaussFit.py +206 -0
  880. PYME/localization/FitFactories/ChecksumFR.py +82 -0
  881. PYME/localization/FitFactories/ChecksumGPUFR.py +213 -0
  882. PYME/localization/FitFactories/ChecksumMultifitSR.py +86 -0
  883. PYME/localization/FitFactories/ConfocCOIR.py +93 -0
  884. PYME/localization/FitFactories/Dumbell3DFitR.py +193 -0
  885. PYME/localization/FitFactories/DumbellFitR.py +163 -0
  886. PYME/localization/FitFactories/FFBase.py +403 -0
  887. PYME/localization/FitFactories/Gauss3DFitR.py +213 -0
  888. PYME/localization/FitFactories/GaussFitConstrR.py +177 -0
  889. PYME/localization/FitFactories/GaussMultifitLinesR.py +351 -0
  890. PYME/localization/FitFactories/GaussMultifitR.py +326 -0
  891. PYME/localization/FitFactories/GaussMultifitSR.py +373 -0
  892. PYME/localization/FitFactories/InterpFitR.py +236 -0
  893. PYME/localization/FitFactories/InterpFitWFR.py +111 -0
  894. PYME/localization/FitFactories/Interpolators/CSInterpolator.py +148 -0
  895. PYME/localization/FitFactories/Interpolators/CubeSInterpolatorP.py +121 -0
  896. PYME/localization/FitFactories/Interpolators/CubicSplineInterpolator.py +69 -0
  897. PYME/localization/FitFactories/Interpolators/LinearInterpolator.py +135 -0
  898. PYME/localization/FitFactories/Interpolators/LinearPInterpolatorP.py +95 -0
  899. PYME/localization/FitFactories/Interpolators/__init__.py +33 -0
  900. PYME/localization/FitFactories/Interpolators/baseInterpolator.py +202 -0
  901. PYME/localization/FitFactories/LatFitCOIR.py +82 -0
  902. PYME/localization/FitFactories/LatGaussFitFR.py +220 -0
  903. PYME/localization/FitFactories/LatObjFindFR.py +85 -0
  904. PYME/localization/FitFactories/LatPSFFitR.py +142 -0
  905. PYME/localization/FitFactories/MultiviewFitInterpNR.py +400 -0
  906. PYME/localization/FitFactories/PRInterpFitQR.py +192 -0
  907. PYME/localization/FitFactories/PRInterpFitR.py +223 -0
  908. PYME/localization/FitFactories/ROIExtractNR.py +93 -0
  909. PYME/localization/FitFactories/SpecGaussFitFR.py +174 -0
  910. PYME/localization/FitFactories/SplitterFitCOIR.py +142 -0
  911. PYME/localization/FitFactories/SplitterFitFNR.py +312 -0
  912. PYME/localization/FitFactories/SplitterFitFusionR.py +318 -0
  913. PYME/localization/FitFactories/SplitterFitInterpBNR.py +357 -0
  914. PYME/localization/FitFactories/SplitterFitInterpNR.py +343 -0
  915. PYME/localization/FitFactories/SplitterFitScavNR.py +352 -0
  916. PYME/localization/FitFactories/SplitterMultifitSR.py +410 -0
  917. PYME/localization/FitFactories/SplitterObjFindR.py +194 -0
  918. PYME/localization/FitFactories/SplitterROIExtractNR.py +91 -0
  919. PYME/localization/FitFactories/SplitterShiftEstFR.py +230 -0
  920. PYME/localization/FitFactories/__init__.py +103 -0
  921. PYME/localization/FitFactories/fitCommon.py +195 -0
  922. PYME/localization/FitFactories/zEstimators/__init__.py +29 -0
  923. PYME/localization/FitFactories/zEstimators/astigEstimator.py +173 -0
  924. PYME/localization/FitFactories/zEstimators/biplaneEstimator.py +209 -0
  925. PYME/localization/FitFactories/zEstimators/genericDualEstimator.py +232 -0
  926. PYME/localization/FitFactories/zEstimators/genericEstimator.py +224 -0
  927. PYME/localization/FitFactories/zEstimators/priEstimator.py +255 -0
  928. PYME/localization/MetaDataEdit.py +543 -0
  929. PYME/localization/Test/30_9_series_A_1.sf +0 -0
  930. PYME/localization/Test/PRI.md +45 -0
  931. PYME/localization/Test/PRI_qr.md +52 -0
  932. PYME/localization/Test/PRI_r.md +52 -0
  933. PYME/localization/Test/__init__.py +22 -0
  934. PYME/localization/Test/astig.md +50 -0
  935. PYME/localization/Test/astigCOI.md +50 -0
  936. PYME/localization/Test/astig_gauss.md +52 -0
  937. PYME/localization/Test/astig_pe.md +50 -0
  938. PYME/localization/Test/astig_splitter.md +66 -0
  939. PYME/localization/Test/astig_splitterCOI.md +67 -0
  940. PYME/localization/Test/astig_splitterQ.md +66 -0
  941. PYME/localization/Test/astig_theory.md +50 -0
  942. PYME/localization/Test/astig_theory.psf +0 -0
  943. PYME/localization/Test/astig_theory.tif +0 -0
  944. PYME/localization/Test/beads1.psf +0 -0
  945. PYME/localization/Test/beads1.tif +0 -0
  946. PYME/localization/Test/biplane_splitter.md +75 -0
  947. PYME/localization/Test/biplane_splitter2.md +103 -0
  948. PYME/localization/Test/biplane_splitter3.md +115 -0
  949. PYME/localization/Test/defoc.md +48 -0
  950. PYME/localization/Test/dumbell_3d.md +52 -0
  951. PYME/localization/Test/fitTestJig.py +172 -0
  952. PYME/localization/Test/fitTestJigSCMOS.py +487 -0
  953. PYME/localization/Test/fitTestJigWC.py +225 -0
  954. PYME/localization/Test/gauss.md +50 -0
  955. PYME/localization/Test/gaussCOI.md +50 -0
  956. PYME/localization/Test/pri_pe.md +50 -0
  957. PYME/localization/Test/pri_theory.md +51 -0
  958. PYME/localization/Test/pri_theory.psf +0 -0
  959. PYME/localization/Test/pri_theory.tif +0 -0
  960. PYME/localization/Test/psf_astig.psf +0 -0
  961. PYME/localization/Test/psf_astig.tif +0 -0
  962. PYME/localization/Test/psf_astig_bg_d.psf +0 -0
  963. PYME/localization/Test/psf_astig_bg_d.tif +0 -0
  964. PYME/localization/Test/psf_astig_pe.psf +0 -0
  965. PYME/localization/Test/psf_astig_pe.tif +0 -0
  966. PYME/localization/Test/psf_decon.psf +0 -0
  967. PYME/localization/Test/psf_decon.tif +0 -0
  968. PYME/localization/Test/psf_decon_pe.psf +0 -0
  969. PYME/localization/Test/psf_decon_pe.tif +0 -0
  970. PYME/localization/Test/psf_guess.psf +0 -0
  971. PYME/localization/Test/splitter.md +63 -0
  972. PYME/localization/Test/splitter_scav.md +63 -0
  973. PYME/localization/Test/test.psf +0 -0
  974. PYME/localization/Test/test.tif +0 -0
  975. PYME/localization/Test/test_decon.psf +0 -0
  976. PYME/localization/Test/test_decon.tif +0 -0
  977. PYME/localization/Test/test_pe.psf +0 -0
  978. PYME/localization/Test/test_pe.tif +0 -0
  979. PYME/localization/Test/wf_theory.psf +0 -0
  980. PYME/localization/Test/wf_theory2.psf +0 -0
  981. PYME/localization/__init__.py +17 -0
  982. PYME/localization/autopsf/__init__.py +1 -0
  983. PYME/localization/autopsf/autopsf.py +486 -0
  984. PYME/localization/autopsf/roifit.py +310 -0
  985. PYME/localization/cInterp/__init__.py +24 -0
  986. PYME/localization/cInterp/cInterp.cp39-win_amd64.dll.a +0 -0
  987. PYME/localization/cInterp/cInterp.cp39-win_amd64.pyd +0 -0
  988. PYME/localization/cInterp/setup.py +54 -0
  989. PYME/localization/cModels/__init__.py +24 -0
  990. PYME/localization/cModels/gauss_app.cp39-win_amd64.dll.a +0 -0
  991. PYME/localization/cModels/gauss_app.cp39-win_amd64.pyd +0 -0
  992. PYME/localization/ofind.py +444 -0
  993. PYME/localization/ofind3d.py +306 -0
  994. PYME/localization/ofind_nofilt.py +128 -0
  995. PYME/localization/ofind_pri.py +478 -0
  996. PYME/localization/ofind_split.py +399 -0
  997. PYME/localization/ofind_xcorr.py +351 -0
  998. PYME/localization/ofind_xcorr_fw.py +441 -0
  999. PYME/localization/remFitBuf.py +657 -0
  1000. PYME/localization/setup.py +56 -0
  1001. PYME/localization/splitting.py +240 -0
  1002. PYME/localization/twist.py +60 -0
  1003. PYME/misc/TiSettings.py +36 -0
  1004. PYME/misc/TiffImagePlugin.py +838 -0
  1005. PYME/misc/VolProj.py +144 -0
  1006. PYME/misc/__init__.py +25 -0
  1007. PYME/misc/aligned_array.py +10 -0
  1008. PYME/misc/aniso.py +29 -0
  1009. PYME/misc/big_sur_fix.py +20 -0
  1010. PYME/misc/check_for_updates.py +139 -0
  1011. PYME/misc/colormaps.py +199 -0
  1012. PYME/misc/colorsys.py +201 -0
  1013. PYME/misc/computerName.py +33 -0
  1014. PYME/misc/coverslipGeometries.py +60 -0
  1015. PYME/misc/cython_numpy_monkey.py +40 -0
  1016. PYME/misc/depGraph.py +406 -0
  1017. PYME/misc/dirSize.py +31 -0
  1018. PYME/misc/diskCleanup.py +64 -0
  1019. PYME/misc/djangoRecarray.py +57 -0
  1020. PYME/misc/django_widgets.py +27 -0
  1021. PYME/misc/editgrid.py +101 -0
  1022. PYME/misc/eventSpy.py +122 -0
  1023. PYME/misc/exceptions.py +30 -0
  1024. PYME/misc/facsPlot.py +89 -0
  1025. PYME/misc/fbpIcons.py +90 -0
  1026. PYME/misc/fftw_compat.py +28 -0
  1027. PYME/misc/findCycles.py +91 -0
  1028. PYME/misc/fortran_interrupt_defeat.py +43 -0
  1029. PYME/misc/glassModel.py +64 -0
  1030. PYME/misc/hash32.py +41 -0
  1031. PYME/misc/hillcurve.py +88 -0
  1032. PYME/misc/hybrid_ns.py +84 -0
  1033. PYME/misc/kdFit.py +72 -0
  1034. PYME/misc/locate.py +10 -0
  1035. PYME/misc/memUsage.py +65 -0
  1036. PYME/misc/memmap.py +52 -0
  1037. PYME/misc/mock_ctypes.py +28 -0
  1038. PYME/misc/mock_traits.py +59 -0
  1039. PYME/misc/mock_traitsui.py +29 -0
  1040. PYME/misc/pyme_zeroconf.py +287 -0
  1041. PYME/misc/pyro_tracebacks.py +32 -0
  1042. PYME/misc/read_agf.py +605 -0
  1043. PYME/misc/sffake.py +16 -0
  1044. PYME/misc/snells.py +71 -0
  1045. PYME/misc/sqlite_ns.py +132 -0
  1046. PYME/misc/sqlitendarray.py +56 -0
  1047. PYME/misc/taskDef.py +44 -0
  1048. PYME/misc/tempDB.py +56 -0
  1049. PYME/misc/wxThread.py +33 -0
  1050. PYME/misc/zemax.py +259 -0
  1051. PYME/misc/zernike.py +151 -0
  1052. PYME/pyme_warnings.py +70 -0
  1053. PYME/recipes/Recipes/STEDDeconvolution.yaml +14 -0
  1054. PYME/recipes/Recipes/STEDMinistacks.yaml +15 -0
  1055. PYME/recipes/Recipes/STED_COP3.yaml +25 -0
  1056. PYME/recipes/Recipes/blobMeas.yaml +19 -0
  1057. PYME/recipes/Recipes/blobMeas2.yaml +37 -0
  1058. PYME/recipes/Recipes/blobMeasSR.yaml +66 -0
  1059. PYME/recipes/Recipes/coloc.yaml +43 -0
  1060. PYME/recipes/Recipes/coloc_roi_masked.yaml +46 -0
  1061. PYME/recipes/Recipes/multiblob.yaml +38 -0
  1062. PYME/recipes/Recipes/pre_particleTracking.yaml +30 -0
  1063. PYME/recipes/Recipes/segmentAndMeasureLoci.yaml +41 -0
  1064. PYME/recipes/__init__.py +6 -0
  1065. PYME/recipes/acquisition.py +158 -0
  1066. PYME/recipes/bakeshop.py +32 -0
  1067. PYME/recipes/base.py +1393 -0
  1068. PYME/recipes/batchProcess.py +147 -0
  1069. PYME/recipes/filters.py +394 -0
  1070. PYME/recipes/fudges.py +41 -0
  1071. PYME/recipes/graphing.py +108 -0
  1072. PYME/recipes/html_recipe_editor.py +90 -0
  1073. PYME/recipes/localisations.py +1386 -0
  1074. PYME/recipes/machine_learning.py +286 -0
  1075. PYME/recipes/measurement.py +1062 -0
  1076. PYME/recipes/modules.py +50 -0
  1077. PYME/recipes/multiview.py +435 -0
  1078. PYME/recipes/output.py +667 -0
  1079. PYME/recipes/pointcloud.py +510 -0
  1080. PYME/recipes/processing.py +2954 -0
  1081. PYME/recipes/pyramid.py +206 -0
  1082. PYME/recipes/recipe.py +965 -0
  1083. PYME/recipes/recipeGui.py +1029 -0
  1084. PYME/recipes/recipeLayout.py +499 -0
  1085. PYME/recipes/runRecipe.py +140 -0
  1086. PYME/recipes/setup.py +37 -0
  1087. PYME/recipes/simulation.py +91 -0
  1088. PYME/recipes/skfilters.py +143 -0
  1089. PYME/recipes/surface_fitting.py +776 -0
  1090. PYME/recipes/tablefilters.py +275 -0
  1091. PYME/recipes/tracking.py +343 -0
  1092. PYME/recipes/traits.py +157 -0
  1093. PYME/recipes/vertical_recipe_display.py +373 -0
  1094. PYME/resources/__init__.py +23 -0
  1095. PYME/resources/config_template/distributor.yaml +14 -0
  1096. PYME/resources/config_template/nodeserver.yaml +15 -0
  1097. PYME/resources/icons/LUT.png +0 -0
  1098. PYME/resources/icons/YSM_Shield.png +0 -0
  1099. PYME/resources/icons/YSM_logo.png +0 -0
  1100. PYME/resources/icons/arrow.png +0 -0
  1101. PYME/resources/icons/crosshairs.png +0 -0
  1102. PYME/resources/icons/line_select.png +0 -0
  1103. PYME/resources/icons/logo_fmhs.png +0 -0
  1104. PYME/resources/icons/media-playback-pause.png +0 -0
  1105. PYME/resources/icons/media-playback-start.png +0 -0
  1106. PYME/resources/icons/media-skip-backward.png +0 -0
  1107. PYME/resources/icons/media-skip-forward.png +0 -0
  1108. PYME/resources/icons/mesh.png +0 -0
  1109. PYME/resources/icons/mesh.svg +28 -0
  1110. PYME/resources/icons/pmacquire.icns +0 -0
  1111. PYME/resources/icons/pmacquire.ico +0 -0
  1112. PYME/resources/icons/pmanal.icns +0 -0
  1113. PYME/resources/icons/pmanal.ico +0 -0
  1114. PYME/resources/icons/pmvis.icns +0 -0
  1115. PYME/resources/icons/pmvis.ico +0 -0
  1116. PYME/resources/icons/points.png +0 -0
  1117. PYME/resources/icons/points.svg +16 -0
  1118. PYME/resources/icons/pymeLogo.png +0 -0
  1119. PYME/resources/icons/rect_select.png +0 -0
  1120. PYME/resources/icons/squiggle_select.png +0 -0
  1121. PYME/resources/icons/text3800.icns +0 -0
  1122. PYME/resources/icons/text3800.ico +0 -0
  1123. PYME/resources/icons/text3800.png +0 -0
  1124. PYME/resources/icons/text3800.tif +0 -0
  1125. PYME/resources/icons/text5377.icns +0 -0
  1126. PYME/resources/icons/text5377.ico +0 -0
  1127. PYME/resources/icons/text5377.png +0 -0
  1128. PYME/resources/icons/tracks.png +0 -0
  1129. PYME/resources/icons/tracks.svg +19 -0
  1130. PYME/resources/icons/view-front.png +0 -0
  1131. PYME/resources/icons/view-home.png +0 -0
  1132. PYME/resources/icons/view-right.png +0 -0
  1133. PYME/resources/icons/view-top.png +0 -0
  1134. PYME/resources/test_datasets/README.md +8 -0
  1135. PYME/resources/test_datasets/t_im.tif +0 -0
  1136. PYME/resources/test_datasets/test_csv.csv +4282 -0
  1137. PYME/resources/test_datasets/test_hdf.hdf +0 -0
  1138. PYME/resources/web/rule_inline.html +21 -0
  1139. PYME/resources/web/ruleserver.html +75 -0
  1140. PYME/resources/web/static/bootstrap.min.js +7 -0
  1141. PYME/resources/web/static/cluster.css +137 -0
  1142. PYME/resources/web/static/css/bootstrap-theme.css +587 -0
  1143. PYME/resources/web/static/css/bootstrap-theme.min.css +6 -0
  1144. PYME/resources/web/static/css/bootstrap.css +6757 -0
  1145. PYME/resources/web/static/css/bootstrap.min.css +6 -0
  1146. PYME/resources/web/static/css/flat_design_colors_full.css +306 -0
  1147. PYME/resources/web/static/css/recipe_editor.css +106 -0
  1148. PYME/resources/web/static/dashboard.css +106 -0
  1149. PYME/resources/web/static/fileselector.js +77 -0
  1150. PYME/resources/web/static/fonts/glyphicons-halflings-regular.eot +0 -0
  1151. PYME/resources/web/static/fonts/glyphicons-halflings-regular.svg +288 -0
  1152. PYME/resources/web/static/fonts/glyphicons-halflings-regular.ttf +0 -0
  1153. PYME/resources/web/static/fonts/glyphicons-halflings-regular.woff +0 -0
  1154. PYME/resources/web/static/fonts/glyphicons-halflings-regular.woff2 +0 -0
  1155. PYME/resources/web/static/images/osd_flat/LICENSE.txt +116 -0
  1156. PYME/resources/web/static/images/osd_flat/README.md +9 -0
  1157. PYME/resources/web/static/images/osd_flat/fullpage_grouphover.png +0 -0
  1158. PYME/resources/web/static/images/osd_flat/fullpage_hover.png +0 -0
  1159. PYME/resources/web/static/images/osd_flat/fullpage_pressed.png +0 -0
  1160. PYME/resources/web/static/images/osd_flat/fullpage_rest.png +0 -0
  1161. PYME/resources/web/static/images/osd_flat/home_grouphover.png +0 -0
  1162. PYME/resources/web/static/images/osd_flat/home_hover.png +0 -0
  1163. PYME/resources/web/static/images/osd_flat/home_pressed.png +0 -0
  1164. PYME/resources/web/static/images/osd_flat/home_rest.png +0 -0
  1165. PYME/resources/web/static/images/osd_flat/next_grouphover.png +0 -0
  1166. PYME/resources/web/static/images/osd_flat/next_hover.png +0 -0
  1167. PYME/resources/web/static/images/osd_flat/next_pressed.png +0 -0
  1168. PYME/resources/web/static/images/osd_flat/next_rest.png +0 -0
  1169. PYME/resources/web/static/images/osd_flat/previous_grouphover.png +0 -0
  1170. PYME/resources/web/static/images/osd_flat/previous_hover.png +0 -0
  1171. PYME/resources/web/static/images/osd_flat/previous_pressed.png +0 -0
  1172. PYME/resources/web/static/images/osd_flat/previous_rest.png +0 -0
  1173. PYME/resources/web/static/images/osd_flat/rotateleft_grouphover.png +0 -0
  1174. PYME/resources/web/static/images/osd_flat/rotateleft_hover.png +0 -0
  1175. PYME/resources/web/static/images/osd_flat/rotateleft_pressed.png +0 -0
  1176. PYME/resources/web/static/images/osd_flat/rotateleft_rest.png +0 -0
  1177. PYME/resources/web/static/images/osd_flat/rotateright_grouphover.png +0 -0
  1178. PYME/resources/web/static/images/osd_flat/rotateright_hover.png +0 -0
  1179. PYME/resources/web/static/images/osd_flat/rotateright_pressed.png +0 -0
  1180. PYME/resources/web/static/images/osd_flat/rotateright_rest.png +0 -0
  1181. PYME/resources/web/static/images/osd_flat/zoomin_grouphover.png +0 -0
  1182. PYME/resources/web/static/images/osd_flat/zoomin_hover.png +0 -0
  1183. PYME/resources/web/static/images/osd_flat/zoomin_pressed.png +0 -0
  1184. PYME/resources/web/static/images/osd_flat/zoomin_rest.png +0 -0
  1185. PYME/resources/web/static/images/osd_flat/zoomout_grouphover.png +0 -0
  1186. PYME/resources/web/static/images/osd_flat/zoomout_hover.png +0 -0
  1187. PYME/resources/web/static/images/osd_flat/zoomout_pressed.png +0 -0
  1188. PYME/resources/web/static/images/osd_flat/zoomout_rest.png +0 -0
  1189. PYME/resources/web/static/jigna-vue-bare.js +1395 -0
  1190. PYME/resources/web/static/jquery.min.js +2 -0
  1191. PYME/resources/web/static/jstree.min.js +6 -0
  1192. PYME/resources/web/static/openSeadragonGL.js +102 -0
  1193. PYME/resources/web/static/openseadragon-svg-overlay.js +103 -0
  1194. PYME/resources/web/static/openseadragon-viewerinputhook.min.js +6 -0
  1195. PYME/resources/web/static/openseadragon.min.js +9 -0
  1196. PYME/resources/web/static/recipe_editor.js +119 -0
  1197. PYME/resources/web/static/shaders/fragment/lut.glsl +20 -0
  1198. PYME/resources/web/static/shaders/fragment/none.glsl +17 -0
  1199. PYME/resources/web/static/shaders/fragment/outline.glsl +43 -0
  1200. PYME/resources/web/static/shaders/fragment/rect.glsl +7 -0
  1201. PYME/resources/web/static/shaders/fragment/sobel3.glsl +71 -0
  1202. PYME/resources/web/static/shaders/fragment/white.glsl +4 -0
  1203. PYME/resources/web/static/shaders/vertex/rect.glsl +22 -0
  1204. PYME/resources/web/static/shaders/vertex/square.glsl +9 -0
  1205. PYME/resources/web/static/utils.js +3 -0
  1206. PYME/resources/web/static/viaWebGL.js +217 -0
  1207. PYME/setup.py +109 -0
  1208. PYME/setup_exe.py +57 -0
  1209. PYME/simulation/__init__.py +0 -0
  1210. PYME/simulation/locify.py +319 -0
  1211. PYME/simulation/pointsets.py +279 -0
  1212. PYME/simulation/wormlike.py +99 -0
  1213. PYME/simulation/wormlike2.py +198 -0
  1214. PYME/simulation/wormlike3.py +197 -0
  1215. PYME/simulation/wormlike_curled.py +104 -0
  1216. PYME/tileviewer/__init__.py +0 -0
  1217. PYME/tileviewer/templates/roi_list.html +12 -0
  1218. PYME/tileviewer/templates/tileviewer.html +247 -0
  1219. PYME/tileviewer/tileviewer.py +207 -0
  1220. PYME/ui/AUIFrame.py +279 -0
  1221. PYME/ui/MetadataTree.py +469 -0
  1222. PYME/ui/__init__.py +4 -0
  1223. PYME/ui/about_dlg.py +29 -0
  1224. PYME/ui/autoFoldPanel.py +643 -0
  1225. PYME/ui/cascading_layout.py +45 -0
  1226. PYME/ui/crop_dialog.py +145 -0
  1227. PYME/ui/custom_traits_editors.py +508 -0
  1228. PYME/ui/editFilterDialog.py +80 -0
  1229. PYME/ui/editList.py +40 -0
  1230. PYME/ui/fastGraph.py +240 -0
  1231. PYME/ui/filterPane.py +348 -0
  1232. PYME/ui/histLimits.py +543 -0
  1233. PYME/ui/layerFoldPanel.py +232 -0
  1234. PYME/ui/manualFoldPanel.py +870 -0
  1235. PYME/ui/mytimer.py +116 -0
  1236. PYME/ui/patch_traitsui.py +151 -0
  1237. PYME/ui/progress.py +160 -0
  1238. PYME/ui/recArrayView.py +145 -0
  1239. PYME/ui/selection.py +71 -0
  1240. PYME/ui/shell.py +37 -0
  1241. PYME/ui/traitsui_constants.py +91 -0
  1242. PYME/ui/wx_compat.py +43 -0
  1243. PYME/update_version.py +159 -0
  1244. PYME/util/__init__.py +3 -0
  1245. PYME/util/authenticate.py +164 -0
  1246. PYME/util/execfile.py +21 -0
  1247. PYME/util/fProfile/__init__.py +1 -0
  1248. PYME/util/fProfile/convertProfile.py +117 -0
  1249. PYME/util/fProfile/fProfile.py +162 -0
  1250. PYME/util/fProfile/html/404.html +60 -0
  1251. PYME/util/fProfile/html/css/main.css +258 -0
  1252. PYME/util/fProfile/html/css/normalize.css +427 -0
  1253. PYME/util/fProfile/html/css/normalize.min.css +1 -0
  1254. PYME/util/fProfile/html/index.html +64 -0
  1255. PYME/util/fProfile/html/js/main.js +492 -0
  1256. PYME/util/fProfile/html/js/plugins.js +24 -0
  1257. PYME/util/fProfile/html/js/vendor/crossfilter.min.js +1 -0
  1258. PYME/util/fProfile/html/js/vendor/jquery-1.11.2.min.js +4 -0
  1259. PYME/util/fProfile/html/js/vendor/modernizr-2.8.3.min.js +4 -0
  1260. PYME/util/fProfile/html/js/vendor/tinycolor-min.js +4 -0
  1261. PYME/util/fProfile/viewProfile.py +30 -0
  1262. PYME/util/install_dependencies.py +95 -0
  1263. PYME/util/log_verbosity.py +11 -0
  1264. PYME/util/mProfile/__init__.py +1 -0
  1265. PYME/util/mProfile/colorize_db_t.py +297 -0
  1266. PYME/util/mProfile/mProfile.py +164 -0
  1267. PYME/util/mProfile/p.py +101 -0
  1268. PYME/util/mProfile/tProfile.py +165 -0
  1269. PYME/util/pymelauncher.py +47 -0
  1270. PYME/util/shmarray/__init__.py +0 -0
  1271. PYME/util/shmarray/shmTest.py +74 -0
  1272. PYME/util/shmarray/shmarray.py +165 -0
  1273. PYME/util/webframework.py +365 -0
  1274. PYME/version.py +65 -0
  1275. python_microscopy-25.6.5.dist-info/METADATA +68 -0
  1276. python_microscopy-25.6.5.dist-info/RECORD +1277 -0
  1277. python_microscopy-25.6.5.dist-info/WHEEL +4 -0
@@ -0,0 +1,1645 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ """
4
+ Created on Fri May 14 2021
5
+
6
+ @author: zacsimile
7
+
8
+ To run, install the pco. sdk, available at
9
+ https://www.pco.de/software/development-tools/pcosdk/, as admin.
10
+
11
+ The goal of this file is to provide Python access to pco.sdk as closely to how it
12
+ is implemented in pco.sdk as possible. There's no mapping of flags to readable
13
+ strings such as "on"/"off". The idea is to have raw access to the DLL. For a
14
+ friendlier--but less comprehensive--version, see sdk.py in https://pypi.org/project/pco/.
15
+
16
+ For more information, see the pco.sdk manual,
17
+ https://www.pco.de/fileadmin/fileadmin/user_upload/pco-manuals/pco.sdk_manual.pdf
18
+
19
+ NOTE: I cheated a little off https://pypi.org/project/pco/.
20
+ """
21
+
22
+ import ctypes
23
+ import ctypes.wintypes
24
+ import platform
25
+ import os
26
+ import sys
27
+
28
+ os_desc = platform.system()
29
+ if os_desc != 'Windows':
30
+ raise Exception("Operating system is not supported.")
31
+
32
+ dll = 'SC2_Cam.dll'
33
+ dll_path = "C:\\Program Files (x86)\\PCO Digital Camera Toolbox\\pco.sdk\\bin64\\" + dll
34
+ try:
35
+ sc2_cam = ctypes.windll.LoadLibrary(dll_path)
36
+ except:
37
+ raise
38
+
39
+ # ---------------------------------------------------------------------
40
+ # Structures and types
41
+ # ---------------------------------------------------------------------
42
+ class PCO_Description(ctypes.Structure):
43
+ # _pack_ = 1
44
+ _fields_ = [("wSize", ctypes.wintypes.WORD),
45
+ ("wSensorTypeDESC", ctypes.wintypes.WORD),
46
+ ("wSensorSubTypeDESC", ctypes.wintypes.WORD),
47
+ ("wMaxHorzResStdDESC", ctypes.wintypes.WORD),
48
+ ("wMaxVertResStdDESC", ctypes.wintypes.WORD),
49
+ ("wMaxHorzResExtDESC", ctypes.wintypes.WORD),
50
+ ("wMaxVertResExtDESC", ctypes.wintypes.WORD),
51
+ ("wDynResDESC", ctypes.wintypes.WORD),
52
+ ("wMaxBinHorzDESC", ctypes.wintypes.WORD),
53
+ ("wBinHorzSteppingDESC", ctypes.wintypes.WORD),
54
+ ("wMaxBinVertDESC", ctypes.wintypes.WORD),
55
+ ("wBinVertSteppingDESC", ctypes.wintypes.WORD),
56
+ ("wRoiHorStepsDESC", ctypes.wintypes.WORD),
57
+ ("wRoiVertStepsDESC", ctypes.wintypes.WORD),
58
+ ("wNumADCsDESC", ctypes.wintypes.WORD),
59
+ ("wMinSizeHorzDESC", ctypes.wintypes.WORD),
60
+ ("dwPixelRateDESC", ctypes.wintypes.DWORD * 4),
61
+ ("ZzdwDummypr", ctypes.wintypes.DWORD * 20),
62
+ ("wConvFactDESC", ctypes.wintypes.WORD * 4),
63
+ ("sCoolingSetpoints", ctypes.c_short * 10),
64
+ ("ZZdwDummycv", ctypes.wintypes.WORD * 8),
65
+ ("wSoftRoiHorStepsDESC", ctypes.wintypes.WORD),
66
+ ("wSoftRoiVertStepsDESC", ctypes.wintypes.WORD),
67
+ ("wIRDESC", ctypes.wintypes.WORD),
68
+ ("wMinSizeVertDESC", ctypes.wintypes.WORD),
69
+ ("dwMinDelayDESC", ctypes.wintypes.DWORD),
70
+ ("dwMaxDelayDESC", ctypes.wintypes.DWORD),
71
+ ("dwMinDelayStepDESC", ctypes.wintypes.DWORD),
72
+ ("dwMinExposDESC", ctypes.wintypes.DWORD),
73
+ ("dwMaxExposDESC", ctypes.wintypes.DWORD),
74
+ ("dwMinExposStepDESC", ctypes.wintypes.DWORD),
75
+ ("dwMinDelayIRDESC", ctypes.wintypes.DWORD),
76
+ ("dwMaxDelayIRDESC", ctypes.wintypes.DWORD),
77
+ ("dwMinExposIRDESC", ctypes.wintypes.DWORD),
78
+ ("dwMaxExposIRDESC", ctypes.wintypes.DWORD),
79
+ ("wTimeTableDESC", ctypes.wintypes.WORD),
80
+ ("wDoubleImageDESC", ctypes.wintypes.WORD),
81
+ ("sMinCoolSetDESC", ctypes.c_short),
82
+ ("sMaxCoolSetDESC", ctypes.c_short),
83
+ ("sDefaultCoolSetDESC", ctypes.c_short),
84
+ ("wPowerDownModeDESC", ctypes.wintypes.WORD),
85
+ ("wOffsetRegulationDESC", ctypes.wintypes.WORD),
86
+ ("wColorPatternDESC", ctypes.wintypes.WORD),
87
+ ("wPatternTypeDESC", ctypes.wintypes.WORD),
88
+ ("wDummy1", ctypes.wintypes.WORD),
89
+ ("wDummy2", ctypes.wintypes.WORD),
90
+ ("wNumCoolingSetpoints", ctypes.wintypes.WORD),
91
+ ("dwGeneralCapsDESC1", ctypes.wintypes.DWORD),
92
+ ("dwGeneralCapsDESC2", ctypes.wintypes.DWORD),
93
+ ("dwExtSyncFrequency", ctypes.wintypes.DWORD * 4),
94
+ ("dwGeneralCapsDESC3", ctypes.wintypes.DWORD),
95
+ ("dwGeneralCapsDESC4", ctypes.wintypes.DWORD),
96
+ ("ZzdwDummy", 40*ctypes.wintypes.DWORD)]
97
+ class PCO_SC2_Hardware_DESC(ctypes.Structure):
98
+ # _pack_ = 1
99
+ _fields_ = [
100
+ ("szName", ctypes.c_char * 16),
101
+ ("wBatchNo", ctypes.wintypes.WORD),
102
+ ("wRevision", ctypes.wintypes.WORD),
103
+ ("wVariant", ctypes.wintypes.WORD),
104
+ ("ZZwDummy", ctypes.wintypes.WORD * 20)]
105
+
106
+ class PCO_SC2_Firmware_DESC(ctypes.Structure):
107
+ # _pack_ = 1
108
+ _fields_ = [("szName", ctypes.c_char * 16),
109
+ ("bMinorRev", ctypes.c_byte),
110
+ ("bMajorRev", ctypes.c_byte),
111
+ ("wVariant", ctypes.wintypes.WORD),
112
+ ("ZZwDummy", ctypes.wintypes.WORD * 22)]
113
+
114
+ class PCO_HW_Vers(ctypes.Structure):
115
+ #_pack_ = 1
116
+ _fields_ = [
117
+ ("wBoardNum", ctypes.wintypes.WORD),
118
+ ("Board", PCO_SC2_Hardware_DESC * 10)]
119
+
120
+ class PCO_FW_Vers(ctypes.Structure):
121
+ # _pack_ = 1
122
+ _fields_ = [("wDeviceNum", ctypes.wintypes.WORD),
123
+ ("Device", PCO_SC2_Firmware_DESC * 10)]
124
+
125
+ class PCO_CameraType(ctypes.Structure):
126
+ # _pack_ = 1
127
+ _fields_ = [("wSize", ctypes.wintypes.WORD),
128
+ ("wCamType", ctypes.wintypes.WORD),
129
+ ("wCamSubType", ctypes.wintypes.WORD),
130
+ ("ZZwAlignDummy1", ctypes.wintypes.WORD),
131
+ ("dwSerialNumber", ctypes.wintypes.DWORD),
132
+ ("dwHWVersion", ctypes.wintypes.DWORD),
133
+ ("dwFWVersion", ctypes.wintypes.DWORD),
134
+ ("wInterfaceType", ctypes.wintypes.WORD),
135
+ ("strHardwareVersion", PCO_HW_Vers),
136
+ ("strFirmwareVersion", PCO_FW_Vers),
137
+ ("ZZwDummy", ctypes.wintypes.PWORD)] # ("ZZwDummy", ctypes.wintypes.WORD * 39)
138
+
139
+ class PCO_ImageTiming(ctypes.Structure):
140
+ # _pack_ = 1
141
+ _fields_ = [("wSize", ctypes.wintypes.WORD),
142
+ ("wDummy", ctypes.wintypes.WORD),
143
+ ("FrameTime_ns", ctypes.wintypes.DWORD),
144
+ ("FrameTime_s", ctypes.wintypes.DWORD),
145
+ ("ExposureTime_ns", ctypes.wintypes.DWORD),
146
+ ("ExposureTime_s", ctypes.wintypes.DWORD),
147
+ ("TriggerSystemDelay_ns", ctypes.wintypes.DWORD),
148
+ ("TriggerSystemJitter_ns", ctypes.wintypes.DWORD),
149
+ ("TriggerDelay_ns", ctypes.wintypes.DWORD),
150
+ ("TriggerDelay_s", ctypes.wintypes.DWORD),
151
+ ("ZZdwDummy", ctypes.wintypes.DWORD)]
152
+
153
+ class PCO_Recording(ctypes.Structure):
154
+ # _pack_ = 1
155
+ _fields_ = [("wSize", ctypes.wintypes.WORD),
156
+ ("wStorageMode", ctypes.wintypes.WORD),
157
+ ("wRecSubmode", ctypes.wintypes.WORD),
158
+ ("wRecState", ctypes.wintypes.WORD),
159
+ ("wAcquMode", ctypes.wintypes.WORD),
160
+ ("wAcquEnableStatus", ctypes.wintypes.WORD),
161
+ ("ucDay", ctypes.c_byte),
162
+ ("ucMonth", ctypes.c_byte),
163
+ ("wYear", ctypes.wintypes.WORD),
164
+ ("wHour", ctypes.wintypes.WORD),
165
+ ("ucMin", ctypes.c_byte),
166
+ ("ucSec", ctypes.c_byte),
167
+ ("wTimeStampMode", ctypes.wintypes.WORD),
168
+ ("wRecordStopEventMode", ctypes.wintypes.WORD),
169
+ ("dwRecordStopDelayImages", ctypes.wintypes.DWORD),
170
+ ("wMetaDataMode", ctypes.wintypes.WORD),
171
+ ("wMetaDataSize", ctypes.wintypes.WORD),
172
+ ("wMetaDataVersion", ctypes.wintypes.WORD),
173
+ ("ZZwDummy1", ctypes.wintypes.WORD),
174
+ ("dwAcquModeExNumberImages", ctypes.wintypes.DWORD),
175
+ ("dwAcquModeExReserved", ctypes.wintypes.DWORD * 4),
176
+ ("ZZwDummy", ctypes.wintypes.WORD * 22)]
177
+
178
+ class PCO_Metadata_Struct(ctypes.Structure):
179
+ # _pack_ = 1
180
+ _fields_ = [("wSize", ctypes.wintypes.WORD),
181
+ ("wVersion", ctypes.wintypes.WORD),
182
+ ("bIMAGE_COUNTER_BCD", ctypes.c_byte * 4),
183
+ ("bIMAGE_TIME_US_BCD", ctypes.c_byte * 3),
184
+ ("bIMAGE_TIME_SEC_BCD", ctypes.c_byte),
185
+ ("bIMAGE_TIME_MIN_BCD", ctypes.c_byte),
186
+ ("bIMAGE_TIME_HOUR_BCD", ctypes.c_byte),
187
+ ("bIMAGE_TIME_DAY_BCD", ctypes.c_byte),
188
+ ("bIMAGE_TIME_MON_BCD", ctypes.c_byte),
189
+ ("bIMAGE_TIME_YEAR_BCD", ctypes.c_byte),
190
+ ("bIMAGE_TIME_STATUS", ctypes.c_byte),
191
+ ("wEXPOSURE_TIME_BASE", ctypes.wintypes.WORD),
192
+ ("dwEXPOSURE_TIME", ctypes.wintypes.DWORD),
193
+ ("dwFRAMERATE_MILLIHZ", ctypes.wintypes.DWORD),
194
+ ("sSENSOR_TEMPERATURE", ctypes.c_short),
195
+ ("wIMAGE_SIZE_X", ctypes.wintypes.WORD),
196
+ ("wIMAGE_SIZE_Y", ctypes.wintypes.WORD),
197
+ ("bBINNING_X", ctypes.c_byte),
198
+ ("bBINNING_Y", ctypes.c_byte),
199
+ ("dwSENSOR_READOUT_FREQUENCY", ctypes.wintypes.DWORD),
200
+ ("wSENSOR_CONV_FACTOR", ctypes.wintypes.WORD),
201
+ ("dwCAMERA_SERIAL_NO", ctypes.wintypes.DWORD),
202
+ ("wCAMERA_TYPE", ctypes.wintypes.WORD),
203
+ ("bBIT_RESOLUTION", ctypes.c_byte),
204
+ ("bSYNC_STATUS", ctypes.c_byte),
205
+ ("wDARK_OFFSET", ctypes.wintypes.WORD),
206
+ ("bTRIGGER_MODE", ctypes.c_byte),
207
+ ("bDOUBLE_IMAGE_MODE", ctypes.c_byte),
208
+ ("bCAMERA_SYNC_MODE", ctypes.c_byte),
209
+ ("bIMAGE_TYPE", ctypes.c_byte),
210
+ ("wCOLOR_PATTERN", ctypes.wintypes.WORD)]
211
+
212
+ PCO_NOERROR = 0x00000000
213
+ class PCO_Buflist(ctypes.Structure):
214
+ # _pack_ = 1
215
+ _fields_ = [("SBufNr", ctypes.c_short),
216
+ ("reserved", ctypes.wintypes.WORD),
217
+ ("dwStatusDll", ctypes.wintypes.DWORD), # PCO_BUFFER_ALLOCATED, PCO_BUFFER_CREATED, PCO_BUFFER_EXTERNAL, PCO_BUFFER_SET
218
+ ("dwStatusDrv", ctypes.wintypes.DWORD)] # PCO_NOERROR or see pco.sdk for error codes
219
+
220
+ PCO_CAMERA_TYPES = {
221
+ 0x1300 : 'pco.edge 5.5 CL',
222
+ 0x1302 : 'pco.edge 4.2 CL',
223
+ 0x1310 : 'pco.edge GL',
224
+ 0x1320 : 'pco.edge USB3',
225
+ 0x1340 : 'pco.edge CLHS',
226
+ 0x1304 : 'pco.edge MT',
227
+ 0x1000 : 'pco.dimax',
228
+ 0x1010 : 'pco.dimax_TV',
229
+ 0x1020 : 'pco.dimax CS',
230
+ 0x1400 : 'pco.flim',
231
+ 0x1500 : 'pco.panda',
232
+ 0x0800 : 'pco.pixelfly usb',
233
+ 0x0100 : 'pco.1200HS',
234
+ 0x0200 : 'pco.1300',
235
+ 0x0220 : 'pco.1600',
236
+ 0x0240 : 'pco.2000',
237
+ 0x0260 : 'pco.4000',
238
+ 0x0830 : 'pco.1400'
239
+ }
240
+
241
+ PCO_INTERFACE_TYPES = {
242
+ 0x0001 : 'FireWire',
243
+ 0x0002 : 'Camera Link',
244
+ 0x0003 : 'USB 2.0',
245
+ 0x0004 : 'GigE',
246
+ 0x0005 : 'Serial Interface',
247
+ 0x0006 : 'USB 3.0',
248
+ 0x0007 : 'CLHS'
249
+ }
250
+
251
+ PCO_TRIGGER_MODES = {
252
+ 0x0000 : 'auto sequence',
253
+ 0x0001 : 'software trigger',
254
+ 0x0002 : 'external exposure start & software trigger',
255
+ 0x0003 : 'external exposure control',
256
+ 0x0004 : 'external synchronized',
257
+ 0x0005 : 'fast external exposure control',
258
+ 0x0006 : 'external CDS control',
259
+ 0x0007 : 'slow external exposure control',
260
+ 0x0102 : 'external synchronized HDSDI'
261
+ }
262
+
263
+ # ---------------------------------------------------------------------
264
+ # Error handling
265
+ # ---------------------------------------------------------------------
266
+ class PcoSdkException(Exception):
267
+ def __init__(self, message):
268
+ Exception.__init__(self, message)
269
+
270
+ # TODO: Instead of wrapping everything with check_status, move to ctypes
271
+ # errcheck https://docs.python.org/3/library/ctypes.html#ctypes._FuncPtr.errcheck
272
+ def check_status(err, function_name=None):
273
+ if err:
274
+ if function_name is None:
275
+ function_name = sys._getframe(1).f_code.co_name # who called me?
276
+ err_desc = get_error_text(err)
277
+ raise PcoSdkException(f"Error during {function_name}: {err_desc}")
278
+
279
+ # ---------------------------------------------------------------------
280
+ # 2.1.1 PCO_OpenCamera
281
+ # ---------------------------------------------------------------------
282
+ sc2_cam.PCO_OpenCamera.argtypes = [ctypes.POINTER(ctypes.wintypes.HANDLE),
283
+ ctypes.wintypes.WORD]
284
+ def open_camera():
285
+ """
286
+ Open a pco. camera, return the handle to that camera.
287
+ This uses a scan process, so call this multiple times
288
+ to open multiple cameras. Call get_camera_type() to
289
+ figure out which camera was grabbed.
290
+
291
+ To open a specific camera, use open_camera_ex().
292
+
293
+ Returns
294
+ -------
295
+ handle : ctypes.wintypes.HANDLE
296
+ Unique pco. camera handle (pointer).
297
+ """
298
+ handle = ctypes.c_void_p(0)
299
+ cam_num = ctypes.wintypes.WORD() # unused
300
+ check_status(sc2_cam.PCO_OpenCamera(handle, cam_num))
301
+ return handle
302
+ # ---------------------------------------------------------------------
303
+ # 2.1.2 PCO_OpenCameraEx
304
+ # ---------------------------------------------------------------------
305
+ def open_camera_ex(**kwargs):
306
+ """
307
+ Choose which camera to open, rather than using a scan mode.
308
+ """
309
+ raise NotImplementedError("Not implemented, but shouldn't be too hard. Check pco.sdk for details.")
310
+
311
+ # ---------------------------------------------------------------------
312
+ # 2.1.3 PCO_CloseCamera
313
+ # ---------------------------------------------------------------------
314
+ sc2_cam.PCO_CloseCamera.argtypes = [ctypes.wintypes.HANDLE]
315
+ def close_camera(handle):
316
+ """
317
+ Close a pco. camera.
318
+
319
+ Parameters
320
+ ----------
321
+ handle : ctypes.wintypes.HANDLE
322
+ Unique pco. camera handle (pointer).
323
+ """
324
+ check_status(sc2_cam.PCO_CloseCamera(handle))
325
+
326
+ # ---------------------------------------------------------------------
327
+ # 2.1.4 PCO_ResetLib
328
+ # ---------------------------------------------------------------------
329
+ def reset_lib():
330
+ """
331
+ Reset the pco.sdk to its initial state. Can only be called when
332
+ no cameras are open.
333
+ """
334
+ check_status(sc2_cam.PCO_ResetLib())
335
+
336
+ # ---------------------------------------------------------------------
337
+ # 2.2.1 PCO_GetCameraDescription
338
+ # ---------------------------------------------------------------------
339
+ sc2_cam.PCO_GetCameraDescription.argtypes = [ctypes.wintypes.HANDLE,
340
+ ctypes.POINTER(PCO_Description)]
341
+ def get_camera_description(handle):
342
+ """
343
+ Get camera description. Includes properties such as image size, pixel rate, etctypes.,
344
+ but not camera names, serial numbers, etctypes. For the latter, call get_camera_type().
345
+
346
+ Parameters
347
+ ----------
348
+ handle : ctypes.wintypes.HANDLE
349
+ Unique pco. camera handle (pointer).
350
+
351
+ Returns
352
+ -------
353
+ PCO_Description
354
+ Struct of camera properties.
355
+ """
356
+ desc = PCO_Description()
357
+ desc.wSize = ctypes.sizeof(PCO_Description)
358
+ check_status(sc2_cam.PCO_GetCameraDescription(handle, desc))
359
+ return desc
360
+
361
+ # ---------------------------------------------------------------------
362
+ # 2.3.2 PCO_GetCameraType
363
+ # ---------------------------------------------------------------------
364
+ sc2_cam.PCO_GetCameraType.argtypes = [ctypes.wintypes.HANDLE, ctypes.POINTER(PCO_CameraType)]
365
+ def get_camera_type(handle):
366
+ """
367
+ Get camera name, serial number, etc.
368
+
369
+ Parameters
370
+ ----------
371
+ handle : ctypes.wintypes.HANDLE
372
+ Unique pco. camera handle (pointer).
373
+
374
+ Returns
375
+ -------
376
+ PCO_CameraType
377
+ Struct containing hardware/firmware version, serial number, etc.
378
+ """
379
+ camera_type = PCO_CameraType()
380
+ camera_type.wSize = ctypes.sizeof(PCO_CameraType)
381
+ check_status(sc2_cam.PCO_GetCameraType(handle, camera_type))
382
+ return camera_type
383
+
384
+ # ---------------------------------------------------------------------
385
+ # 2.3.3 PCO_GetCameraHealthStatus
386
+ # ---------------------------------------------------------------------
387
+ sc2_cam.PCO_GetCameraHealthStatus.argtypes = [ctypes.wintypes.HANDLE,
388
+ ctypes.wintypes.PDWORD,
389
+ ctypes.wintypes.PDWORD,
390
+ ctypes.wintypes.PDWORD]
391
+ def get_camera_health_status(handle):
392
+ """
393
+ Get information about how well the camera is doing. See pco.sdk
394
+ manual for bit definitions. Generally, things are OK as long as
395
+ all the bits are 0, and bad otherwise. Except a status bit of 1
396
+ is OK.
397
+
398
+ Parameters
399
+ ----------
400
+ handle : ctypes.wintypes.HANDLE
401
+ Unique pco. camera handle (pointer).
402
+
403
+ Returns
404
+ -------
405
+ warn : int
406
+ Warning bit
407
+ err : int
408
+ Error bit
409
+ status : int
410
+ Status bit
411
+ """
412
+ warn = ctypes.wintypes.DWORD()
413
+ err = ctypes.wintypes.DWORD()
414
+ status = ctypes.wintypes.DWORD()
415
+ check_status(sc2_cam.PCO_GetCameraHealthStatus(handle, warn, err, status))
416
+ return warn.value, err.value, status.value
417
+
418
+ # ---------------------------------------------------------------------
419
+ # 2.3.4 PCO_GetTemperature
420
+ # ---------------------------------------------------------------------
421
+ sc2_cam.PCO_GetTemperature.argtypes = [ctypes.wintypes.HANDLE,
422
+ ctypes.POINTER(ctypes.c_short),
423
+ ctypes.POINTER(ctypes.c_short),
424
+ ctypes.POINTER(ctypes.c_short)]
425
+ def get_temperature(handle):
426
+ """
427
+ Get camera temperatures.
428
+
429
+ Parameters
430
+ ----------
431
+ handle : ctypes.wintypes.HANDLE
432
+ Unique pco. camera handle (pointer).
433
+
434
+ Returns
435
+ -------
436
+ ccd_temp : int
437
+ Image sensor temp in 1/10 degree i.e. 100 = 10.0 C
438
+ cam_temp : int
439
+ Internal camera temp in C
440
+ pow_temp : int
441
+ Temp of additional devices (e.g. power supply)
442
+ """
443
+ ccd_temp = ctypes.c_short()
444
+ cam_temp = ctypes.c_short()
445
+ pow_temp = ctypes.c_short()
446
+ check_status(sc2_cam.PCO_GetTemperature(handle, ccd_temp, cam_temp, pow_temp))
447
+ return (ccd_temp.value/10.0), cam_temp.value, pow_temp.value
448
+
449
+
450
+ # ---------------------------------------------------------------------
451
+ # 2.3.6 PCO_GetCameraName
452
+ # ---------------------------------------------------------------------
453
+ sc2_cam.PCO_GetCameraName.argtypes = [ctypes.wintypes.HANDLE, ctypes.c_char_p,
454
+ ctypes.wintypes.WORD]
455
+ def get_camera_name(handle):
456
+ """
457
+ Get the camera name
458
+
459
+ Parameters
460
+ ----------
461
+ handle : ctypes.wintypes.HANDLE
462
+ Unique pco. camera handle (pointer).
463
+
464
+ Returns
465
+ -------
466
+ string
467
+ Camera name.
468
+ """
469
+ c_buf_len = 40
470
+ c_buf = ctypes.create_string_buffer(c_buf_len)
471
+
472
+ check_status(sc2_cam.PCO_GetCameraName(handle, c_buf, ctypes.wintypes.WORD(c_buf_len)))
473
+
474
+ return str(c_buf.value.decode('ascii'))
475
+
476
+ # ---------------------------------------------------------------------
477
+ # 2.4.1 PCO_ArmCamera
478
+ # ---------------------------------------------------------------------
479
+ sc2_cam.PCO_ArmCamera.argtypes = [ctypes.wintypes.HANDLE]
480
+ def arm_camera(handle):
481
+ """
482
+ Prepare the camera for recording. Must be called after the change of
483
+ any camera parameter except for delay and exposure time.
484
+
485
+ Parameters
486
+ ----------
487
+ handle : ctypes.wintypes.HANDLE
488
+ Unique pco. camera handle (pointer).
489
+ """
490
+ check_status(sc2_cam.PCO_ArmCamera(handle))
491
+
492
+ # ---------------------------------------------------------------------
493
+ # 2.4.3 PCO_SetImageParameters
494
+ # ---------------------------------------------------------------------
495
+ sc2_cam.PCO_SetImageParameters.argtypes = [ctypes.wintypes.HANDLE,
496
+ ctypes.wintypes.WORD,
497
+ ctypes.wintypes.WORD,
498
+ ctypes.wintypes.DWORD,
499
+ ctypes.c_void_p,
500
+ ctypes.c_int]
501
+ PCO_IMAGEPARAMETERS_READ_WHILE_RECORDING = 0x00000001
502
+ PCO_IMAGEPARAMETERS_READ_FROM_SEGMENTS = 0x00000002
503
+ def set_image_parameters(handle, lx, ly, image_flag):
504
+ """
505
+ Set image parameters for internal allocated resources before image transfer.
506
+
507
+ Parameters
508
+ ----------
509
+ handle : ctypes.wintypes.HANDLE
510
+ Unique pco. camera handle (pointer).
511
+ lx : int
512
+ Image width
513
+ ly : int
514
+ Image height
515
+ image_flag : int
516
+ PCO_IMAGEPARAMETERS_READ_WHILE_RECORDING or PCO_IMAGEPARAMETERS_READ_FROM_SEGMENTS
517
+ """
518
+ param = ctypes.c_void_p(0)
519
+ ilen = ctypes.c_int(0)
520
+ check_status(sc2_cam.PCO_SetImageParameters(handle, ctypes.wintypes.WORD(lx),
521
+ ctypes.wintypes.WORD(ly),
522
+ ctypes.wintypes.DWORD(image_flag),
523
+ param, ilen))
524
+
525
+ # ---------------------------------------------------------------------
526
+ # 2.4.4 PCO_ResetSettingsToDefault
527
+ # ---------------------------------------------------------------------
528
+ sc2_cam.PCO_ResetSettingsToDefault.argtypes = [ctypes.wintypes.HANDLE]
529
+ def reset_settings_to_default(handle):
530
+ """
531
+ Reset the camera settings to default. Executed by default during
532
+ camera power-up.
533
+
534
+ Parameters
535
+ ----------
536
+ handle : ctypes.wintypes.HANDLE
537
+ Unique pco. camera handle (pointer).
538
+ """
539
+ check_status(sc2_cam.PCO_ResetSettingsToDefault(handle))
540
+
541
+
542
+ # ---------------------------------------------------------------------
543
+ # 2.4.10 PCO_GetFanControlParameters
544
+ # ---------------------------------------------------------------------
545
+ sc2_cam.PCO_GetFanControlParameters.argtypes = [ctypes.wintypes.HANDLE,
546
+ ctypes.wintypes.PWORD,
547
+ ctypes.wintypes.PWORD,
548
+ ctypes.wintypes.PWORD,
549
+ ctypes.wintypes.WORD]
550
+ PCO_FAN_CONTROL_MODE_AUTO = 0x0000
551
+ PCO_FAN_CONTROL_MODE_USER = 0x0001
552
+ def get_fan_control_parameters(handle):
553
+ """
554
+ Get fan speed
555
+
556
+ Parameters
557
+ ----------
558
+ handle : ctypes.wintypes.HANDLE
559
+ Unique pco. camera handle (pointer).
560
+
561
+ Returns
562
+ -------
563
+ mode : int
564
+ FAN_CONTROL_MODE_AUTO or FAN_CONTROL_MODE_USER
565
+ speed : int
566
+ Fan speed in range (slowest) 0..100 (fastest)
567
+ """
568
+ mode = ctypes.wintypes.WORD()
569
+ speed = ctypes.wintypes.WORD()
570
+ reserved = ctypes.wintypes.WORD()
571
+ num_reserved = ctypes.wintypes.WORD(0)
572
+ check_status(sc2_cam.PCO_GetFanControlParameters(handle, mode, speed,
573
+ reserved, num_reserved))
574
+ return mode.value, speed.value
575
+
576
+ # ---------------------------------------------------------------------
577
+ # 2.4.11 PCO_SetFanControlParameters
578
+ # ---------------------------------------------------------------------
579
+ sc2_cam.PCO_SetFanControlParameters.argtypes = [ctypes.wintypes.HANDLE,
580
+ ctypes.wintypes.WORD,
581
+ ctypes.wintypes.WORD,
582
+ ctypes.wintypes.WORD]
583
+ def set_fan_control_parameters(handle, mode, speed):
584
+ """
585
+ Set image parameters for internal allocated resources before image transfer.
586
+
587
+ Parameters
588
+ ----------
589
+ handle : ctypes.wintypes.HANDLE
590
+ Unique pco. camera handle (pointer).
591
+ mode : int
592
+ FAN_CONTROL_MODE_AUTO or FAN_CONTROL_MODE_USER
593
+ speed : int
594
+ Fan speed in range (slowest) 0..100 (fastest)
595
+ """
596
+ reserved = ctypes.wintypes.WORD()
597
+ check_status(sc2_cam.PCO_SetFanControlParameters(handle, ctypes.wintypes.WORD(mode),
598
+ ctypes.wintypes.WORD(speed),
599
+ reserved))
600
+
601
+ # ---------------------------------------------------------------------
602
+ # 2.5.3 PCO_GetSizes
603
+ # ---------------------------------------------------------------------
604
+ sc2_cam.PCO_GetSizes.argtypes = [ctypes.wintypes.HANDLE,
605
+ ctypes.wintypes.PWORD,
606
+ ctypes.wintypes.PWORD,
607
+ ctypes.wintypes.PWORD,
608
+ ctypes.wintypes.PWORD]
609
+ def get_sizes(handle):
610
+ """
611
+ Get the current image size of the camera.
612
+
613
+ Parameters
614
+ ----------
615
+ handle : ctypes.wintypes.HANDLE
616
+ Unique pco. camera handle (pointer).
617
+
618
+ Returns
619
+ -------
620
+ lx : int
621
+ Image width
622
+ ly : int
623
+ Image height
624
+ lx_max : int
625
+ Max image width
626
+ ly_max : int
627
+ Max image height
628
+ """
629
+ lx = ctypes.wintypes.WORD()
630
+ ly = ctypes.wintypes.WORD()
631
+ lx_max = ctypes.wintypes.WORD()
632
+ ly_max = ctypes.wintypes.WORD()
633
+ check_status(sc2_cam.PCO_GetSizes(handle, lx, ly, lx_max, ly_max))
634
+ return lx.value, ly.value, lx_max.value, ly_max.value
635
+
636
+ # ---------------------------------------------------------------------
637
+ # 2.5.6 PCO_GetROI
638
+ # ---------------------------------------------------------------------
639
+ sc2_cam.PCO_GetROI.argtypes = [ctypes.wintypes.HANDLE,
640
+ ctypes.wintypes.PWORD,
641
+ ctypes.wintypes.PWORD,
642
+ ctypes.wintypes.PWORD,
643
+ ctypes.wintypes.PWORD]
644
+ def get_roi(handle):
645
+ """
646
+ Get the current region of interest as (horiz. start coordinate, vert.
647
+ start coordinate, horiz. end coordinate, vert. end coordinate).
648
+
649
+ Parameters
650
+ ----------
651
+ handle : ctypes.wintypes.HANDLE
652
+ Unique pco. camera handle (pointer).
653
+
654
+ Returns
655
+ -------
656
+ x0 : int
657
+ Horizontal (column) start coordinate
658
+ y0 : int
659
+ Vertical (row) start coordinate
660
+ x1 : int
661
+ Horizontal end coordinate
662
+ y1 : int
663
+ Vertical end coordinate
664
+ """
665
+ x0 = ctypes.wintypes.WORD()
666
+ x1 = ctypes.wintypes.WORD()
667
+ y0 = ctypes.wintypes.WORD()
668
+ y1 = ctypes.wintypes.WORD()
669
+ check_status(sc2_cam.PCO_GetROI(handle, x0, y0, x1, y1))
670
+ return x0.value, x1.value, y0.value, y1.value
671
+
672
+ # ---------------------------------------------------------------------
673
+ # 2.5.7 PCO_SetROI
674
+ # ---------------------------------------------------------------------
675
+ sc2_cam.PCO_SetROI.argtypes = [ctypes.wintypes.HANDLE,
676
+ ctypes.wintypes.WORD,
677
+ ctypes.wintypes.WORD,
678
+ ctypes.wintypes.WORD,
679
+ ctypes.wintypes.WORD]
680
+ def set_roi(handle, x0, y0, x1, y1):
681
+ """
682
+ Set the current region of interest as (horiz. start coordinate, vert.
683
+ start coordinate, horiz. end coordinate, vert. end coordinate).
684
+
685
+ Parameters
686
+ ----------
687
+ handle : ctypes.wintypes.HANDLE
688
+ Unique pco. camera handle (pointer).
689
+ x0 : int
690
+ Horizontal (column) start coordinate
691
+ y0 : int
692
+ Vertical (row) start coordinate
693
+ x1 : int
694
+ Horizontal end coordinate
695
+ y1 : int
696
+ Vertical end coordinate
697
+ """
698
+ check_status(sc2_cam.PCO_SetROI(handle, ctypes.wintypes.WORD(x0),
699
+ ctypes.wintypes.WORD(y0),
700
+ ctypes.wintypes.WORD(x1),
701
+ ctypes.wintypes.WORD(y1)))
702
+
703
+ # ---------------------------------------------------------------------
704
+ # 2.5.8 PCO_GetBinning
705
+ # ---------------------------------------------------------------------
706
+ sc2_cam.PCO_GetBinning.argtypes = [ctypes.wintypes.HANDLE,
707
+ ctypes.wintypes.PWORD,
708
+ ctypes.wintypes.PWORD]
709
+ def get_binning(handle):
710
+ """
711
+ Get horizontal and vertical binning on the camera.
712
+
713
+ Parameters
714
+ ----------
715
+ handle : ctypes.wintypes.HANDLE
716
+ Unique pco. camera handle (pointer).
717
+
718
+ Returns
719
+ -------
720
+ bin_horiz : int
721
+ Horizontal (column) binning in pixels
722
+ bin_vert : int
723
+ Vertical (row) binning in pixels
724
+ """
725
+ bin_horiz = ctypes.wintypes.WORD()
726
+ bin_vert = ctypes.wintypes.WORD()
727
+ check_status(sc2_cam.PCO_GetBinning(handle, bin_horiz, bin_vert))
728
+ return bin_horiz.value, bin_vert.value
729
+
730
+ # ---------------------------------------------------------------------
731
+ # 2.5.9 PCO_SetBinning
732
+ # ---------------------------------------------------------------------
733
+ sc2_cam.PCO_SetBinning.argtypes = [ctypes.wintypes.HANDLE,
734
+ ctypes.wintypes.WORD,
735
+ ctypes.wintypes.WORD]
736
+ def set_binning(handle, bin_horiz, bin_vert):
737
+ """
738
+ Set the horizonal and vertical binning on the camera. Possible
739
+ values can be calculate from the binning parameters returned in
740
+ get_camera_description(). set_roi() must be called after set_binning()
741
+ and before arm_camera().
742
+
743
+
744
+ Parameters
745
+ ----------
746
+ handle : ctypes.wintypes.HANDLE
747
+ Unique pco. camera handle (pointer).
748
+ bin_horiz : int
749
+ Horizontal (column) binning in pixels
750
+ bin_vert : int
751
+ Vertical (row) binning in pixels
752
+ """
753
+ check_status(sc2_cam.PCO_SetBinning(handle, ctypes.wintypes.WORD(bin_horiz),
754
+ ctypes.wintypes.WORD(bin_vert)))
755
+
756
+ # ---------------------------------------------------------------------
757
+ # 2.5.10 PCO_GetPixelRate
758
+ # ---------------------------------------------------------------------
759
+ sc2_cam.PCO_GetPixelRate.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.PDWORD]
760
+ def get_pixel_rate(handle):
761
+ """
762
+ Get the current pixel rate (sensor readout speed) of the camera in Hz.
763
+
764
+ Parameters
765
+ ----------
766
+ handle : ctypes.wintypes.HANDLE
767
+ Unique pco. camera handle (pointer).
768
+
769
+ Returns
770
+ -------
771
+ pixel_rate : int
772
+ Pixel rate of the camera in Hz
773
+ """
774
+ pixel_rate = ctypes.wintypes.DWORD()
775
+ check_status(sc2_cam.GetPixelRate(handle, pixel_rate))
776
+ return pixel_rate.value
777
+
778
+ # ---------------------------------------------------------------------
779
+ # 2.5.10 PCO_SetPixelRate
780
+ # ---------------------------------------------------------------------
781
+ sc2_cam.PCO_SetPixelRate.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.DWORD]
782
+ def set_pixel_rate(handle, pixel_rate):
783
+ """
784
+ Set the current pixel rate (sensor readout speed) of the camera in Hz.
785
+
786
+ Parameters
787
+ ----------
788
+ handle : ctypes.wintypes.HANDLE
789
+ Unique pco. camera handle (pointer).
790
+ pixel_rate : int
791
+ Pixel rate of the camera in Hz
792
+ """
793
+ check_status(sc2_cam.SetPixelRate(handle, ctypes.wintypes.DWORD(pixel_rate)))
794
+
795
+ # ---------------------------------------------------------------------
796
+ # 2.5.20 PCO_GetCoolingSetpointTemperature
797
+ # ---------------------------------------------------------------------
798
+ sc2_cam.PCO_GetCoolingSetpointTemperature.argtypes = [ctypes.wintypes.HANDLE,
799
+ ctypes.POINTER(ctypes.c_short)]
800
+ def get_cooling_setpoint_temperature(handle):
801
+ """
802
+ Get temperature set point for image sensor.
803
+
804
+ Parameters
805
+ ----------
806
+ handle : ctypes.wintypes.HANDLE
807
+ Unique pco. camera handle (pointer).
808
+
809
+ Returns
810
+ -------
811
+ temp : int
812
+ Setpoint in degrees C
813
+ """
814
+ temp = ctypes.c_short()
815
+ check_status(sc2_cam.PCO_GetCoolingSetpointTemperature(handle,temp))
816
+ return temp.value
817
+
818
+ # ---------------------------------------------------------------------
819
+ # 2.5.21 PCO_SetCoolingSetpointTemperature
820
+ # ---------------------------------------------------------------------
821
+ sc2_cam.PCO_SetCoolingSetpointTemperature.argtypes = [ctypes.wintypes.HANDLE, ctypes.c_short]
822
+ def set_cooling_setpoint_temperature(handle, temp):
823
+ """
824
+ Set temperature set point for image sensor.
825
+
826
+ Parameters
827
+ ----------
828
+ handle : ctypes.wintypes.HANDLE
829
+ Unique pco. camera handle (pointer).
830
+ temp : int
831
+ Setpoint in degrees C. Must be in between sMinCoolSetDESC and
832
+ sMaxCoolSetDESC (see output of get_camera_description())
833
+ """
834
+ check_status(sc2_cam.PCO_SetCoolingSetpointTemperature(handle, ctypes.c_short(temp)))
835
+ # ---------------------------------------------------------------------
836
+ # 2.6.4 PCO_GetDelayExposureTime
837
+ # ---------------------------------------------------------------------
838
+ sc2_cam.PCO_GetDelayExposureTime.argtypes = [ctypes.wintypes.HANDLE,
839
+ ctypes.wintypes.PDWORD,
840
+ ctypes.wintypes.PDWORD,
841
+ ctypes.wintypes.PWORD,
842
+ ctypes.wintypes.PWORD]
843
+ PCO_TIMEBASE_NS = 0x0000 # nanoseconds
844
+ PCO_TIMEBASE_US = 0x0001 # microseconds
845
+ PCO_TIMEBASE_MS = 0x0002 # milliseconds
846
+ def get_delay_exposure_time(handle):
847
+ """
848
+ Get delay and exposure times for camera sensor.
849
+
850
+ Parameters
851
+ ----------
852
+ handle : ctypes.wintypes.HANDLE
853
+ Unique pco. camera handle (pointer).
854
+
855
+ Returns
856
+ -------
857
+ delay : unsigned long int
858
+ Delay time in units of timebase_delay
859
+ exposure : unsigned long int
860
+ Exposure time in units of timebase_exposure
861
+ timebase_delay : unsigned short int
862
+ Unit for delay time. One of PCO_TIMEBASE_NS, PCO_TIMEBASE_US, PCO_TIMEBASE_MS.
863
+ timebase_exposure : unsigned short int
864
+ Unit for exposure time. One of PCO_TIMEBASE_NS, PCO_TIMEBASE_US, PCO_TIMEBASE_MS.
865
+ """
866
+ delay = ctypes.wintypes.DWORD()
867
+ exposure = ctypes.wintypes.DWORD()
868
+ timebase_delay = ctypes.wintypes.WORD()
869
+ timebase_exposure = ctypes.wintypes.WORD()
870
+ check_status(sc2_cam.PCO_GetDelayExposureTime(handle, delay, exposure,
871
+ timebase_delay, timebase_exposure))
872
+ return delay.value, exposure.value, timebase_delay.value, timebase_exposure.value
873
+
874
+ # ---------------------------------------------------------------------
875
+ # 2.6.5 PCO_SetDelayExposureTime
876
+ # ---------------------------------------------------------------------
877
+ sc2_cam.PCO_SetDelayExposureTime.argtypes = [ctypes.wintypes.HANDLE,
878
+ ctypes.wintypes.DWORD,
879
+ ctypes.wintypes.DWORD,
880
+ ctypes.wintypes.WORD,
881
+ ctypes.wintypes.WORD]
882
+ def set_delay_exposure_time(handle, delay, exposure, timebase_delay, timebase_exposure):
883
+ """
884
+ Set delay and exposure times for camera sensor.
885
+
886
+ Parameters
887
+ ----------
888
+ handle : ctypes.wintypes.HANDLE
889
+ Unique pco. camera handle (pointer).
890
+ delay : int
891
+ Delay time in units of timebase_delay. In range
892
+ dwMinDelayDESC .. dwMinDelayStepDESC .. dwMaxDelayDESC
893
+ (see output of get_camera_description()).
894
+ exposure : int
895
+ Exposure time in units of timebase_exposure. In range
896
+ dwMinExposDESC .. dwMinExposStepDESC .. dwMaxExposDESC
897
+ (see output of get_camera_description()).
898
+ timebase_delay : int
899
+ Unit for delay time. One of PCO_TIMEBASE_NS, PCO_TIMEBASE_US, PCO_TIMEBASE_MS.
900
+ timebase_exposure : int
901
+ Unit for exposure time. One of PCO_TIMEBASE_NS, PCO_TIMEBASE_US, PCO_TIMEBASE_MS.
902
+ """
903
+ check_status(sc2_cam.PCO_SetDelayExposureTime(handle, ctypes.wintypes.DWORD(delay),
904
+ ctypes.wintypes.DWORD(exposure),
905
+ ctypes.wintypes.WORD(timebase_delay),
906
+ ctypes.wintypes.WORD(timebase_exposure)))
907
+
908
+ # ---------------------------------------------------------------------
909
+ # 2.6.12 PCO_GetTriggerMode
910
+ # ---------------------------------------------------------------------
911
+ sc2_cam.PCO_GetTriggerMode.argtypes = [ctypes.wintypes.HANDLE,
912
+ ctypes.wintypes.PWORD]
913
+ def get_trigger_mode(handle, mode):
914
+ """
915
+ Get the camera trigger mode. See pco.sdk for details.
916
+
917
+ Parameters
918
+ ----------
919
+ handle : ctypes.wintypes.HANDLE
920
+ Unique pco. camera handle (pointer).
921
+
922
+ Returns
923
+ -------
924
+ mode : unsigned short int
925
+ Trigger mode. One of PCO_TRIGGER_MODES.
926
+ """
927
+ mode = ctypes.wintypes.WORD()
928
+ check_status(sc2_cam.PCO_GetTriggerMode(handle, mode))
929
+
930
+ return mode.value
931
+ # ---------------------------------------------------------------------
932
+ # 2.6.13 PCO_SetTriggerMode
933
+ # ---------------------------------------------------------------------
934
+ sc2_cam.PCO_SetTriggerMode.argtypes = [ctypes.wintypes.HANDLE,
935
+ ctypes.wintypes.WORD]
936
+ def set_trigger_mode(handle, mode):
937
+ """
938
+ Set the camera trigger mode. See pco.sdk for details.
939
+
940
+ Parameters
941
+ ----------
942
+ handle : ctypes.wintypes.HANDLE
943
+ Unique pco. camera handle (pointer).
944
+ mode : int
945
+ Trigger mode. One of PCO_TRIGGER_MODES.
946
+ """
947
+ check_status(sc2_cam.PCO_SetTriggerMode(handle, ctypes.wintypes.WORD(mode)))
948
+
949
+ # ---------------------------------------------------------------------
950
+ # 2.6.14 PCO_ForceTrigger
951
+ # ---------------------------------------------------------------------
952
+ sc2_cam.PCO_ForceTrigger.argtypes = [ctypes.wintypes.HANDLE,
953
+ ctypes.wintypes.PWORD]
954
+ TRIGGER_FAIL = 0x0000
955
+ TRIGGER_SUCCESS = 0x0001 # NOTE: This is counter to every other function
956
+ # where a 0 indicates success
957
+ def force_trigger(handle):
958
+ """
959
+ Trigger image acquisition in software triggered mode.
960
+
961
+ Parameters
962
+ ----------
963
+ handle : ctypes.wintypes.HANDLE
964
+ Unique pco. camera handle (pointer).
965
+
966
+ Returns
967
+ -------
968
+ triggered : unsigned short int
969
+ Sucess of trigger call, one of TRIGGER_FAIL (0), TRIGGER_SUCCESS (1)
970
+ """
971
+ triggered = ctypes.wintypes.WORD()
972
+ check_status(sc2_cam.PCO_ForceTrigger(handle, triggered))
973
+ return triggered.value
974
+
975
+ # ---------------------------------------------------------------------
976
+ # 2.6.15 PCO_GetCameraBusyStatus
977
+ # ---------------------------------------------------------------------
978
+ sc2_cam.PCO_GetCameraBusyStatus.argtypes = [ctypes.wintypes.HANDLE,
979
+ ctypes.wintypes.PWORD]
980
+ PCO_CAMERA_NOT_BUSY = 0x0000
981
+ PCO_CAMERA_BUSY = 0x0001
982
+ def get_camera_busy_status(handle):
983
+ """
984
+ Return the busy status of the camera. Ideally checked before
985
+ a force_trigger() call.
986
+
987
+ Parameters
988
+ ----------
989
+ handle : ctypes.wintypes.HANDLE
990
+ Unique pco. camera handle (pointer).
991
+
992
+ Returns
993
+ -------
994
+ state : unsigned short int
995
+ Camera busy status, one of PCO_CAMERA_NOT_BUSY (0), PCO_CAMERA_BUSY (1)
996
+ """
997
+ state = ctypes.wintypes.WORD()
998
+ check_status(sc2_cam.PCO_GetCameraBusyStatus(handle, state))
999
+ return state.value
1000
+
1001
+ # ---------------------------------------------------------------------
1002
+ # 2.6.26 PCO_GetImageTiming
1003
+ # ---------------------------------------------------------------------
1004
+ sc2_cam.PCO_GetImageTiming.argtypes = [ctypes.wintypes.HANDLE, ctypes.POINTER(PCO_ImageTiming)]
1005
+ def get_image_timing(handle):
1006
+ """
1007
+ Get image timing with nanosecond resolution, plus additional trigger
1008
+ system information. Necessary for accurate timing information on pco.edge.
1009
+
1010
+ Parameters
1011
+ ----------
1012
+ handle : ctypes.wintypes.HANDLE
1013
+ Unique pco. camera handle (pointer).
1014
+
1015
+ Returns
1016
+ -------
1017
+ image_timing : PCO_ImageTiming
1018
+ Struct of precise image timing and trigger information.
1019
+ """
1020
+ image_timing = PCO_ImageTiming()
1021
+ check_status(sc2_cam.PCO_GetImageTiming(handle, image_timing))
1022
+ return image_timing
1023
+
1024
+ # ---------------------------------------------------------------------
1025
+ # 2.7.3 PCO_GetRecordingState
1026
+ # ---------------------------------------------------------------------
1027
+ sc2_cam.PCO_GetRecordingState.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.PWORD]
1028
+ PCO_CAMERA_STOPPED = 0x0000
1029
+ PCO_CAMERA_RUNNING = 0x0001
1030
+ def get_recording_state(handle):
1031
+ """
1032
+ Get the current recording state of the camera.
1033
+
1034
+ Parameters
1035
+ ----------
1036
+ handle : ctypes.wintypes.HANDLE
1037
+ Unique pco. camera handle (pointer).
1038
+
1039
+ Returns
1040
+ -------
1041
+ state : int
1042
+ Recording state, one of PCO_CAMERA_STOPPED (0), PCO_CAMERA_RUNNING (1).
1043
+ """
1044
+ state = ctypes.wintypes.WORD()
1045
+ check_status(sc2_cam.PCO_GetRecordingState(handle, state))
1046
+ return state.value
1047
+
1048
+ # ---------------------------------------------------------------------
1049
+ # 2.7.4 PCO_SetRecordingState
1050
+ # ---------------------------------------------------------------------
1051
+ sc2_cam.PCO_SetRecordingState.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.WORD]
1052
+ def set_recording_state(handle, state):
1053
+ """
1054
+ Set the current recording state of the camera.
1055
+
1056
+ Parameters
1057
+ ----------
1058
+ handle : ctypes.wintypes.HANDLE
1059
+ Unique pco. camera handle (pointer).
1060
+ state : int
1061
+ Recording state, one of PCO_CAMERA_STOPPED (0), PCO_CAMERA_RUNNING (1).
1062
+ """
1063
+ check_status(sc2_cam.PCO_SetRecordingState(handle, ctypes.wintypes.WORD(state)))
1064
+
1065
+ # ---------------------------------------------------------------------
1066
+ # 2.7.5 PCO_GetStorageMode
1067
+ # ---------------------------------------------------------------------
1068
+ sc2_cam.PCO_GetStorageMode.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.PWORD]
1069
+ PCO_STORAGE_RECORDER = 0x0000
1070
+ PCO_STORAGE_FIFO = 0x0001
1071
+ def get_storage_mode(handle):
1072
+ """
1073
+ Get camera image storage mode. One of "recorder" or "FIFO buffer".
1074
+
1075
+ Parameters
1076
+ ----------
1077
+ handle : ctypes.wintypes.HANDLE
1078
+ Unique pco. camera handle (pointer).
1079
+
1080
+ Returns
1081
+ -------
1082
+ mode : int
1083
+ Camera image storage mode. One of PCO_STORAGE_RECORDER (0) or PCO_STORAGE_FIFO (1).
1084
+ """
1085
+ mode = ctypes.wintypes.WORD()
1086
+ check_status(sc2_cam.PCO_GetStorageMode(handle, mode))
1087
+ return mode.value
1088
+
1089
+ # ---------------------------------------------------------------------
1090
+ # 2.7.6 PCO_SetStorageMode
1091
+ # ---------------------------------------------------------------------
1092
+ sc2_cam.PCO_SetStorageMode.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.WORD]
1093
+ def set_storage_mode(handle, mode):
1094
+ """
1095
+ Get camera image storage mode. One of "recorder" or "FIFO buffer".
1096
+
1097
+ Parameters
1098
+ ----------
1099
+ handle : ctypes.wintypes.HANDLE
1100
+ Unique pco. camera handle (pointer).
1101
+ mode : unsigned short int
1102
+ Camera image storage mode. One of PCO_STORAGE_RECORDER (0) or PCO_STORAGE_FIFO (1).
1103
+ """
1104
+ check_status(sc2_cam.PCO_SetStorageMode(handle, ctypes.wintypes.WORD(mode)))
1105
+
1106
+ # ---------------------------------------------------------------------
1107
+ # 2.7.9 PCO_GetAcquireMode
1108
+ # ---------------------------------------------------------------------
1109
+ sc2_cam.PCO_GetAcquireMode.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.PWORD]
1110
+ PCO_ACQUIRE_AUTO = 0x0000
1111
+ PCO_ACQUIRE_EXTERNAL = 0x0000
1112
+ PCO_ACQUIRE_EXTERNAL_MODULATE = 0x0000
1113
+ def get_acquire_mode(handle):
1114
+ """
1115
+ Get the current acquisition mode of the camera. One of "auto",
1116
+ "external" or "external modulate".
1117
+
1118
+ Parameters
1119
+ ----------
1120
+ handle : ctypes.wintypes.HANDLE
1121
+ Unique pco. camera handle (pointer).
1122
+
1123
+ Returns
1124
+ -------
1125
+ mode : unsigned short int
1126
+ Camera acquisition mode. One of PCO_ACQUIRE_AUTO (0), PCO_ACQUIRE_EXTERNAL (1),
1127
+ PCO_ACQUIRE_EXTERNAL_MODULATE (2).
1128
+ """
1129
+ mode = ctypes.wintypes.WORD()
1130
+ check_status(sc2_cam.PCO_GetAcquireMode(handle, mode))
1131
+ return mode.value
1132
+
1133
+ # ---------------------------------------------------------------------
1134
+ # 2.7.10 PCO_SetAcquireMode
1135
+ # ---------------------------------------------------------------------
1136
+ sc2_cam.PCO_SetAcquireMode.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.WORD]
1137
+ def set_acquire_mode(handle, mode):
1138
+ """
1139
+ Set the current acquisition mode of the camera. One of "auto",
1140
+ "external" or "external modulate".
1141
+
1142
+ Parameters
1143
+ ----------
1144
+ handle : ctypes.wintypes.HANDLE
1145
+ Unique pco. camera handle (pointer).
1146
+ mode : unsigned short int
1147
+ Camera acquisition mode. One of PCO_ACQUIRE_AUTO (0), PCO_ACQUIRE_EXTERNAL (1),
1148
+ PCO_ACQUIRE_EXTERNAL_MODULATE (2).
1149
+ """
1150
+ check_status(sc2_cam.PCO_GetAcquireMode(handle, ctypes.wintypes.WORD(mode)))
1151
+
1152
+ # ---------------------------------------------------------------------
1153
+ # 2.7.14 PCO_GetMetaDataMode
1154
+ # ---------------------------------------------------------------------
1155
+ sc2_cam.PCO_GetMetaDataMode.argtypes = [ctypes.wintypes.HANDLE,
1156
+ ctypes.wintypes.PWORD,
1157
+ ctypes.wintypes.PWORD,
1158
+ ctypes.wintypes.PWORD]
1159
+ PCO_METADATA_OFF = 0x0000
1160
+ PCO_METADATA_ON = 0x0000
1161
+ def get_metadata_mode(handle):
1162
+ """
1163
+ Get the metadata mode of the camera and information about the size
1164
+ and version of the metadata block.
1165
+
1166
+ Parameters
1167
+ ----------
1168
+ handle : ctypes.wintypes.HANDLE
1169
+ Unique pco. camera handle (pointer).
1170
+
1171
+ Returns
1172
+ -------
1173
+ mode : unsigned short int
1174
+ Metadata mode. One of PCO_METADATA_OFF (0) or PCO_METADATA_ON (1).
1175
+ size : unsigned short int
1176
+ Size of the matadata block added to the image.
1177
+ version : unsigned short int
1178
+ Version number of the metadata mode
1179
+ """
1180
+ mode = ctypes.wintypes.WORD()
1181
+ size = ctypes.wintypes.WORD()
1182
+ version = ctypes.wintypes.WORD()
1183
+ check_status(sc2_cam.PCO_GetMetaDataMode(handle, mode, size, version))
1184
+ return mode.value, size.value, version.value
1185
+
1186
+ # ---------------------------------------------------------------------
1187
+ # 2.7.15 PCO_SetMetaDataMode
1188
+ # ---------------------------------------------------------------------
1189
+ sc2_cam.PCO_SetMetaDataMode.argtypes = [ctypes.wintypes.HANDLE,
1190
+ ctypes.wintypes.WORD,
1191
+ ctypes.wintypes.PWORD,
1192
+ ctypes.wintypes.PWORD]
1193
+ def set_metadata_mode(handle, mode):
1194
+ """
1195
+ Set the metadata mode of the camera and get information about the size
1196
+ and version of the metadata block.
1197
+
1198
+ Parameters
1199
+ ----------
1200
+ handle : ctypes.wintypes.HANDLE
1201
+ Unique pco. camera handle (pointer).
1202
+ mode : unsigned short int
1203
+ Metadata mode. One of PCO_METADATA_OFF (0) or PCO_METADATA_ON (1).
1204
+
1205
+ Returns
1206
+ -------
1207
+ size : unsigned short int
1208
+ Size of the matadata block added to the image.
1209
+ version : unsigned short int
1210
+ Version number of the metadata mode
1211
+ """
1212
+ size = ctypes.wintypes.WORD()
1213
+ version = ctypes.wintypes.WORD()
1214
+ check_status(sc2_cam.PCO_SetMetaDataMode(handle, ctypes.wintypes.WORD(mode),
1215
+ size, version))
1216
+ return size.value, version.value
1217
+
1218
+ # ---------------------------------------------------------------------
1219
+ # 2.9.5 PCO_GetBitAlignment
1220
+ # ---------------------------------------------------------------------
1221
+ sc2_cam.PCO_GetBitAlignment.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.PWORD]
1222
+ PCO_ALIGNMENT_MSB = 0x0000 # align to most significant bit
1223
+ PCO_ALIGNMENT_LSB = 0x0001 # align to least significant bit
1224
+ def get_bit_alignment(handle):
1225
+ """
1226
+ Get the bit alignment of the transferred image data.
1227
+
1228
+ Parameters
1229
+ ----------
1230
+ handle : ctypes.wintypes.HANDLE
1231
+ Unique pco. camera handle (pointer).
1232
+
1233
+ Returns
1234
+ -------
1235
+ alignment : unsigned short int
1236
+ Bit alignment of the transferred image data. One of PCO_ALIGNMENT_MSB (0)
1237
+ or PCO_ALIGNMENT_LSB (1).
1238
+ """
1239
+ alignment = ctypes.wintypes.WORD()
1240
+ check_status(sc2_cam.PCO_GetBitAlignment(handle, alignment))
1241
+ return alignment.value
1242
+
1243
+ # ---------------------------------------------------------------------
1244
+ # 2.9.6 PCO_SetBitAlignment
1245
+ # ---------------------------------------------------------------------
1246
+ sc2_cam.PCO_SetBitAlignment.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.WORD]
1247
+ def set_bit_alignment(handle, alignment):
1248
+ """
1249
+ Set the bit alignment of the transferred image data.
1250
+
1251
+ Parameters
1252
+ ----------
1253
+ handle : ctypes.wintypes.HANDLE
1254
+ Unique pco. camera handle (pointer).
1255
+ alignment : unsigned short int
1256
+ Bit alignment of the transferred image data. One of PCO_ALIGNMENT_MSB (0)
1257
+ or PCO_ALIGNMENT_LSB (1).
1258
+ """
1259
+ check_status(sc2_cam.PCO_SetBitAlignment(handle, ctypes.wintypes.WORD(alignment)))
1260
+
1261
+ # ---------------------------------------------------------------------
1262
+ # 2.9.7 PCO_GetHotPixelCorrectionMode
1263
+ # ---------------------------------------------------------------------
1264
+ sc2_cam.PCO_GetHotPixelCorrectionMode.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.PWORD]
1265
+ PCO_HOTPIXELCORRECTION_OFF = 0x0000
1266
+ PCO_HOTPIXELCORRECTION_ON = 0x0001
1267
+ def get_hot_pixel_correction_mode(handle):
1268
+ """
1269
+ Get camera chip hot pixel correction mode.
1270
+
1271
+ Parameters
1272
+ ----------
1273
+ handle : ctypes.wintypes.HANDLE
1274
+ Unique pco. camera handle (pointer).
1275
+
1276
+ Returns
1277
+ -------
1278
+ mode : unsigned short int
1279
+ Hot pixel correction mode. One of PCO_HOTPIXELCORRECTION_OFF (0) or
1280
+ PCO_HOTPIXELCORRECTION_ON (1).
1281
+ """
1282
+ mode = ctypes.wintypes.WORD()
1283
+ check_status(sc2_cam.PCO_GetHotPixelCorrectionMode(handle, mode))
1284
+ return mode.value
1285
+
1286
+ # ---------------------------------------------------------------------
1287
+ # 2.9.8 PCO_SetHotPixelCorrectionMode
1288
+ # ---------------------------------------------------------------------
1289
+ sc2_cam.PCO_SetHotPixelCorrectionMode.argtypes = [ctypes.wintypes.HANDLE, ctypes.wintypes.WORD]
1290
+ def set_hot_pixel_correction_mode(handle, mode):
1291
+ """
1292
+ Set camera chip hot pixel correction mode.
1293
+
1294
+ Parameters
1295
+ ----------
1296
+ handle : ctypes.wintypes.HANDLE
1297
+ Unique pco. camera handle (pointer).
1298
+ mode : unsigned short int
1299
+ Hot pixel correction mode. One of PCO_HOTPIXELCORRECTION_OFF (0) or
1300
+ PCO_HOTPIXELCORRECTION_ON (1).
1301
+ """
1302
+ check_status(sc2_cam.PCO_SetHotPixelCorrectionMode(handle, ctypes.wintypes.WORD(mode)))
1303
+
1304
+ # ---------------------------------------------------------------------
1305
+ # 2.10.1 PCO_AllocateBuffer
1306
+ # ---------------------------------------------------------------------
1307
+ sc2_cam.PCO_AllocateBuffer.argtypes = [ctypes.wintypes.HANDLE, ctypes.POINTER(ctypes.c_short),
1308
+ ctypes.wintypes.DWORD,
1309
+ ctypes.POINTER(ctypes.wintypes.PWORD),
1310
+ ctypes.POINTER(ctypes.wintypes.HANDLE)]
1311
+
1312
+ def allocate_buffer(handle, index, size, buffer=None, event=None):
1313
+ """
1314
+ Allocate a buffer
1315
+
1316
+ Parameters
1317
+ ----------
1318
+ handle : ctypes.wintypes.HANDLE
1319
+ Unique pco. camera handle (pointer).
1320
+ index : int
1321
+ Buffer index to access from a previous call
1322
+ or -1 to create a new buffer.
1323
+ size : int
1324
+ Buffer size in bytes
1325
+ buffer : double pointer
1326
+ Pointer to a memory block, default None (gets allocated internally)
1327
+ event : pointer
1328
+ Pointer to an event handle, default None (gets allocated internally)
1329
+
1330
+ Returns
1331
+ -------
1332
+ index : int
1333
+ Buffer index
1334
+ buffer : double pointer
1335
+ Pointer to a memory block
1336
+ event : pointer
1337
+ Pointer to an event handle
1338
+ """
1339
+ if buffer is None:
1340
+ buffer = ctypes.c_void_p(0)
1341
+ if event is None:
1342
+ event = ctypes.c_void_p(0)
1343
+ check_status(sc2_cam.PCO_AllocateBuffer(handle, ctypes.c_short(index), ctypes.wintypes.DWORD(size),
1344
+ buffer, event))
1345
+ if buffer is None and event is None:
1346
+ return index.contents, buffer, event
1347
+
1348
+ # ---------------------------------------------------------------------
1349
+ # 2.10.2 PCO_FreeBuffer
1350
+ # ---------------------------------------------------------------------
1351
+ sc2_cam.PCO_FreeBuffer.argtypes = [ctypes.wintypes.HANDLE, ctypes.c_short]
1352
+ def free_buffer(handle, index):
1353
+ """
1354
+ Release a previously-allocated buffer with the given index.
1355
+
1356
+ Parameters
1357
+ ----------
1358
+ handle : ctypes.wintypes.HANDLE
1359
+ Unique pco. camera handle (pointer).
1360
+ index : int
1361
+ Buffer index to free
1362
+ """
1363
+ check_status(sc2_cam.PCO_FreeBuffer(handle, ctypes.c_short(index)))
1364
+
1365
+ # ---------------------------------------------------------------------
1366
+ # 2.10.3 PCO_GetBufferStatus
1367
+ # ---------------------------------------------------------------------
1368
+ sc2_cam.PCO_GetBufferStatus.argtypes = [ctypes.wintypes.HANDLE,
1369
+ ctypes.c_short,
1370
+ ctypes.wintypes.PDWORD,
1371
+ ctypes.wintypes.PDWORD]
1372
+ PCO_BUFFER_ALLOCATED = 0x80000000 # Buffer is allocated
1373
+ PCO_BUFFER_CREATED = 0x40000000 # Buffer event created inside the SDK DLL
1374
+ PCO_BUFFER_EXTERNAL = 0x20000000 # Buffer is allocated externally
1375
+ PCO_BUFFER_SET = 0x00008000 # Buffer event is set
1376
+ def get_buffer_status(handle, index):
1377
+ """
1378
+ Parameters
1379
+ ----------
1380
+ handle : ctypes.wintypes.HANDLE
1381
+ Unique pco. camera handle (pointer).
1382
+ index : int
1383
+ Buffer index to get status
1384
+
1385
+ Returns
1386
+ -------
1387
+ status_dll : unsigned long int
1388
+ Status of buffer inside the DLL. One of PCO_BUFFER_ALLOCATED, PCO_BUFFER_CREATED,
1389
+ PCO_BUFFER_EXTERNAL, PCO_BUFFER_SET.
1390
+ status_drv : unsigned long int
1391
+ Status of the image transfer. One of PCO_NOERROR or see pco.sdk for error
1392
+ codes.
1393
+ """
1394
+ status_dll = ctypes.wintypes.DWORD()
1395
+ status_drv = ctypes.wintypes.DWORD()
1396
+ check_status(sc2_cam.PCO_GetBufferStatus(handle, ctypes.c_short(index),
1397
+ status_dll, status_drv))
1398
+ return status_dll.value, status_drv.value
1399
+
1400
+ # ---------------------------------------------------------------------
1401
+ # 2.10.4 PCO_GetBuffer
1402
+ # ---------------------------------------------------------------------
1403
+ sc2_cam.PCO_GetBuffer.argtypes = [ctypes.wintypes.HANDLE, ctypes.c_short,
1404
+ ctypes.POINTER(ctypes.wintypes.PWORD),
1405
+ ctypes.POINTER(ctypes.wintypes.HANDLE)]
1406
+ def get_buffer(handle, index):
1407
+ """
1408
+ Get the buffer at index.
1409
+
1410
+ Parameters
1411
+ ----------
1412
+ handle : ctypes.wintypes.HANDLE
1413
+ Unique pco. camera handle (pointer).
1414
+ index : int
1415
+ Buffer index to get
1416
+
1417
+ Returns
1418
+ -------
1419
+ buffer : double pointer
1420
+ Double pointer to a memory region
1421
+ event: pointer
1422
+ Pointer to event handle
1423
+ """
1424
+ buffer = ctypes.c_void_p(0)
1425
+ event = ctypes.c_void_p(0)
1426
+ check_status(sc2_cam.PCO_GetBuffer(handle, ctypes.c_short(index), buffer, event))
1427
+ return buffer, event
1428
+
1429
+ # ---------------------------------------------------------------------
1430
+ # 2.11.1 PCO_GetImageEx
1431
+ # ---------------------------------------------------------------------
1432
+ sc2_cam.PCO_GetImageEx.argtypes = [ctypes.wintypes.HANDLE,
1433
+ ctypes.wintypes.WORD,
1434
+ ctypes.wintypes.DWORD,
1435
+ ctypes.wintypes.DWORD,
1436
+ ctypes.c_short,
1437
+ ctypes.wintypes.WORD,
1438
+ ctypes.wintypes.WORD,
1439
+ ctypes.wintypes.WORD]
1440
+ def get_image_ex(handle, segment, first_image, buffer_index, lx, ly,
1441
+ bits_per_pixel):
1442
+ """
1443
+ Get a single image from the camera.
1444
+
1445
+ Parameters
1446
+ ----------
1447
+ handle : ctypes.wintypes.HANDLE
1448
+ Unique pco. camera handle (pointer).
1449
+ segment : int
1450
+ Index of memory segment. 1 is the default memory segment
1451
+ first_image : int
1452
+ Image number. 1 if PCO_GetRecordingState is PCO_CAMERA_STOPPED, 0 if it is PCO_CAMERA_RUNNING
1453
+ buffer_index : int
1454
+ Buffer index.
1455
+ lx : int
1456
+ Image width
1457
+ ly : int
1458
+ Image height
1459
+ bits_per_pixel : int
1460
+ Bit resolution of the transferred image (16 is the common choice, see pco.sdk manual)
1461
+ """
1462
+ image_index = ctypes.wintypes.DWORD(first_image)
1463
+ check_status(sc2_cam.PCO_GetImageEx(handle, ctypes.wintypes.WORD(segment), image_index,
1464
+ image_index, ctypes.c_short(buffer_index),
1465
+ ctypes.wintypes.WORD(lx), ctypes.wintypes.WORD(ly),
1466
+ ctypes.wintypes.WORD(bits_per_pixel)))
1467
+ # ---------------------------------------------------------------------
1468
+ # 2.11.3 PCO_AddBufferEx
1469
+ # ---------------------------------------------------------------------
1470
+ sc2_cam.PCO_AddBufferEx.argtypes = [ctypes.wintypes.HANDLE,
1471
+ ctypes.wintypes.DWORD,
1472
+ ctypes.wintypes.DWORD,
1473
+ ctypes.c_short,
1474
+ ctypes.wintypes.WORD,
1475
+ ctypes.wintypes.WORD,
1476
+ ctypes.wintypes.WORD]
1477
+ def add_buffer_ex(handle, first_image, buffer_index, lx, ly,
1478
+ bits_per_pixel):
1479
+ """
1480
+ Set up buffer for single image transfer from the camera. Can add multiple
1481
+ buffers for fast live recording.
1482
+
1483
+ Parameters
1484
+ ----------
1485
+ handle : ctypes.wintypes.HANDLE
1486
+ Unique pco. camera handle (pointer).
1487
+ first_image : int
1488
+ Image number. 1 if PCO_GetRecordingState is PCO_CAMERA_STOPPED, 0 if it is PCO_CAMERA_RUNNING
1489
+ buffer_index : int
1490
+ Buffer index.
1491
+ lx : int
1492
+ Image width
1493
+ ly : int
1494
+ Image height
1495
+ bits_per_pixel : int
1496
+ Bit resolution of the transferred image (16 is the common choice, see pco.sdk manual)
1497
+ """
1498
+ image_index = ctypes.wintypes.DWORD(first_image)
1499
+ check_status(sc2_cam.PCO_AddBufferEx(handle, image_index, image_index,
1500
+ ctypes.c_short(buffer_index),
1501
+ ctypes.wintypes.WORD(lx), ctypes.wintypes.WORD(ly),
1502
+ ctypes.wintypes.WORD(bits_per_pixel)))
1503
+
1504
+ # ---------------------------------------------------------------------
1505
+ # 2.11.5 PCO_AddBufferExtern
1506
+ # ---------------------------------------------------------------------
1507
+ sc2_cam.PCO_AddBufferExtern.argtypes = [ctypes.wintypes.HANDLE,
1508
+ ctypes.wintypes.HANDLE,
1509
+ ctypes.wintypes.WORD,
1510
+ ctypes.wintypes.DWORD,
1511
+ ctypes.wintypes.DWORD,
1512
+ ctypes.wintypes.DWORD,
1513
+ ctypes.c_void_p, # alternatively numpy.ctypeslib.ndpointer
1514
+ ctypes.wintypes.DWORD,
1515
+ ctypes.wintypes.PDWORD]
1516
+ def add_buffer_extern(handle, event, segment, first_image, buf, n_bytes, status):
1517
+ """
1518
+ Set up buffer for single image transfer from the camera. Can add multiple
1519
+ buffers for fast live recording. This function lets us use buffers we
1520
+ create externally from the pco.sdk DLL.
1521
+
1522
+ Parameters
1523
+ ----------
1524
+ handle : ctypes.wintypes.HANDLE
1525
+ Unique pco. camera handle (pointer).
1526
+ event : ctypes.wintypes.HANDLE
1527
+ Event handle
1528
+ segment : int
1529
+ Camera internal memory segment. Most of the time this will have a value
1530
+ of 1. In a default state, all memory is distributed to segement 1 and
1531
+ segment 1 is the active segment. Camera internal memory is arranged as
1532
+ an array with 4 segments.
1533
+ first_image : int
1534
+ Image number. 1 if PCO_GetRecordingState is PCO_CAMERA_STOPPED, 0 if it
1535
+ is PCO_CAMERA_RUNNING
1536
+ buf : ctypes.c_void_p
1537
+ Pointer to a 2D image buffer, probably a numpy array. See
1538
+ https://numpy.org/doc/stable/reference/routines.ctypeslib.html
1539
+ n_bytes : int
1540
+ Number of bytes in the 2D image buffer, buf
1541
+ status : ctypes.wintypes.PDWORD
1542
+ Pointer to buffer status bit
1543
+ """
1544
+ image_index = ctypes.wintypes.DWORD(first_image)
1545
+ synch = ctypes.wintypes.DWORD(0)
1546
+ check_status(sc2_cam.PCO_AddBufferExtern(handle, event, ctypes.wintypes.WORD(segment),
1547
+ image_index, image_index, synch, buf,
1548
+ ctypes.wintypes.DWORD(n_bytes),
1549
+ status))
1550
+
1551
+ # ---------------------------------------------------------------------
1552
+ # 2.11.6 PCO_CancelImages
1553
+ # ---------------------------------------------------------------------
1554
+ sc2_cam.PCO_CancelImages.argtypes = [ctypes.wintypes.HANDLE]
1555
+ def cancel_images(handle):
1556
+ """
1557
+
1558
+ Remove all remaining buffers from the internal queue, reset the internal queue
1559
+ and also reset the transfer state machine in the camera.
1560
+
1561
+ Parameters
1562
+ ----------
1563
+ handle : ctypes.wintypes.HANDLE
1564
+ Unique pco. camera handle (pointer).
1565
+ """
1566
+ check_status(sc2_cam.PCO_CancelImages(handle))
1567
+
1568
+ # ---------------------------------------------------------------------
1569
+ # 2.11.9 PCO_WaitforBuffer
1570
+ # ---------------------------------------------------------------------
1571
+ sc2_cam.PCO_WaitforBuffer.argtypes = [ctypes.wintypes.HANDLE, ctypes.c_int,
1572
+ ctypes.POINTER(PCO_Buflist),
1573
+ ctypes.c_int]
1574
+ def wait_for_buffer(handle, num_buffers, buffer_list, timeout):
1575
+ """
1576
+ Wait for one or buffers, which are in the requeest queue of the driver.
1577
+
1578
+ Parameters
1579
+ ----------
1580
+ handle : ctypes.wintypes.HANDLE
1581
+ Unique pco. camera handle (pointer).
1582
+ num_buffers : int
1583
+ How many buffers in buffer_list?
1584
+ buffer_list : list
1585
+ List of PCO_Buflist containing all allocated buffers
1586
+ we are waiting on.
1587
+ timeout : int
1588
+ Timeout in milliseconds.
1589
+ """
1590
+ check_status(sc2_cam.PCO_WaitForBuffer(handle, ctypes.c_int(num_buffers),
1591
+ buffer_list, ctypes.c_int(timeout)))
1592
+
1593
+ # ---------------------------------------------------------------------
1594
+ # 2.11.9 PCO_GetMetaData
1595
+ # ---------------------------------------------------------------------
1596
+ sc2_cam.PCO_GetMetaData.argtypes = [ctypes.wintypes.HANDLE, ctypes.c_short, PCO_Metadata_Struct,
1597
+ ctypes.wintypes.DWORD, ctypes.wintypes.DWORD]
1598
+ def get_metadata(handle, index):
1599
+ """
1600
+ Get metadata associated with image in the buffer index.
1601
+
1602
+ Parameters
1603
+ ----------
1604
+ handle : ctypes.wintypes.HANDLE
1605
+ Unique pco. camera handle (pointer).
1606
+ index : int
1607
+ Buffer index to get metadata
1608
+
1609
+ Returns
1610
+ -------
1611
+ metadata : PCO_Metadata_Struct
1612
+ Metadata from the buffer at index
1613
+ """
1614
+ reserved1 = ctypes.wintypes.DWORD()
1615
+ reserved2 = ctypes.wintypes.DWORD()
1616
+ metadata = PCO_Metadata_Struct()
1617
+ check_status(sc2_cam.PCO_GetMetaData(handle, ctypes.c_short(index), metadata,
1618
+ reserved1, reserved2))
1619
+ return metadata
1620
+
1621
+ # ---------------------------------------------------------------------
1622
+ # 5.1 PCO_GetErrorText
1623
+ # ---------------------------------------------------------------------
1624
+ sc2_cam.PCO_GetErrorText.argtypes = [ctypes.wintypes.DWORD,
1625
+ ctypes.c_char_p,
1626
+ ctypes.wintypes.DWORD]
1627
+ def get_error_text(err):
1628
+ """
1629
+ Get detailed description for a pco.sdk error.
1630
+
1631
+ Parameters
1632
+ ----------
1633
+ err : int
1634
+ Error number
1635
+
1636
+ Returns
1637
+ -------
1638
+ string
1639
+ Error description.
1640
+ """
1641
+ c_buf_len = 512
1642
+ c_buf = ctypes.create_string_buffer(c_buf_len)
1643
+ sc2_cam.PCO_GetErrorText(ctypes.wintypes.DWORD(err), c_buf, c_buf_len)
1644
+
1645
+ return str(c_buf.value.decode('ascii'))