cgse 2024.7.0__py3-none-any.whl → 2025.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (664) hide show
  1. README.md +27 -0
  2. bump.py +85 -0
  3. cgse-2025.0.2.dist-info/METADATA +38 -0
  4. cgse-2025.0.2.dist-info/RECORD +5 -0
  5. {cgse-2024.7.0.dist-info → cgse-2025.0.2.dist-info}/WHEEL +1 -2
  6. cgse-2024.7.0.dist-info/COPYING +0 -674
  7. cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
  8. cgse-2024.7.0.dist-info/METADATA +0 -144
  9. cgse-2024.7.0.dist-info/RECORD +0 -660
  10. cgse-2024.7.0.dist-info/entry_points.txt +0 -75
  11. cgse-2024.7.0.dist-info/top_level.txt +0 -2
  12. egse/__init__.py +0 -12
  13. egse/__main__.py +0 -32
  14. egse/aeu/aeu.py +0 -5238
  15. egse/aeu/aeu_awg.yaml +0 -265
  16. egse/aeu/aeu_crio.yaml +0 -273
  17. egse/aeu/aeu_cs.py +0 -627
  18. egse/aeu/aeu_devif.py +0 -321
  19. egse/aeu/aeu_main_ui.py +0 -903
  20. egse/aeu/aeu_metrics.py +0 -131
  21. egse/aeu/aeu_protocol.py +0 -463
  22. egse/aeu/aeu_psu.yaml +0 -204
  23. egse/aeu/aeu_ui.py +0 -873
  24. egse/aeu/arbdata/FccdRead.arb +0 -2
  25. egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
  26. egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
  27. egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
  28. egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
  29. egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
  30. egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
  31. egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
  32. egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
  33. egse/aeu/arbdata/ccdRead25.arb +0 -2
  34. egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
  35. egse/aeu/arbdata/ccdRead31_25.arb +0 -2
  36. egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
  37. egse/aeu/arbdata/ccdRead37_50.arb +0 -2
  38. egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
  39. egse/aeu/arbdata/ccdRead43_75.arb +0 -2
  40. egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
  41. egse/aeu/arbdata/ccdRead50.arb +0 -2
  42. egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
  43. egse/alert/__init__.py +0 -1049
  44. egse/alert/alertman.yaml +0 -37
  45. egse/alert/alertman_cs.py +0 -233
  46. egse/alert/alertman_ui.py +0 -600
  47. egse/alert/gsm/beaglebone.py +0 -138
  48. egse/alert/gsm/beaglebone.yaml +0 -51
  49. egse/alert/gsm/beaglebone_cs.py +0 -108
  50. egse/alert/gsm/beaglebone_devif.py +0 -122
  51. egse/alert/gsm/beaglebone_protocol.py +0 -46
  52. egse/bits.py +0 -318
  53. egse/camera.py +0 -44
  54. egse/collimator/__init__.py +0 -0
  55. egse/collimator/fcul/__init__.py +0 -0
  56. egse/collimator/fcul/ogse.py +0 -1077
  57. egse/collimator/fcul/ogse.yaml +0 -14
  58. egse/collimator/fcul/ogse_cs.py +0 -154
  59. egse/collimator/fcul/ogse_devif.py +0 -358
  60. egse/collimator/fcul/ogse_protocol.py +0 -132
  61. egse/collimator/fcul/ogse_sim.py +0 -431
  62. egse/collimator/fcul/ogse_ui.py +0 -1108
  63. egse/command.py +0 -699
  64. egse/config.py +0 -410
  65. egse/confman/__init__.py +0 -1058
  66. egse/confman/confman.yaml +0 -70
  67. egse/confman/confman_cs.py +0 -240
  68. egse/confman/confman_ui.py +0 -381
  69. egse/confman/setup_ui.py +0 -565
  70. egse/control.py +0 -632
  71. egse/coordinates/__init__.py +0 -534
  72. egse/coordinates/avoidance.py +0 -100
  73. egse/coordinates/cslmodel.py +0 -127
  74. egse/coordinates/laser_tracker_to_dict.py +0 -122
  75. egse/coordinates/point.py +0 -707
  76. egse/coordinates/pyplot.py +0 -194
  77. egse/coordinates/referenceFrame.py +0 -1279
  78. egse/coordinates/refmodel.py +0 -737
  79. egse/coordinates/rotationMatrix.py +0 -85
  80. egse/coordinates/transform3d_addon.py +0 -419
  81. egse/csl/__init__.py +0 -50
  82. egse/csl/commanding.py +0 -78
  83. egse/csl/icons/hexapod-connected-selected.svg +0 -30
  84. egse/csl/icons/hexapod-connected.svg +0 -30
  85. egse/csl/icons/hexapod-homing-selected.svg +0 -68
  86. egse/csl/icons/hexapod-homing.svg +0 -68
  87. egse/csl/icons/hexapod-retract-selected.svg +0 -56
  88. egse/csl/icons/hexapod-retract.svg +0 -51
  89. egse/csl/icons/hexapod-zero-selected.svg +0 -56
  90. egse/csl/icons/hexapod-zero.svg +0 -56
  91. egse/csl/icons/logo-puna.svg +0 -92
  92. egse/csl/icons/stop.svg +0 -1
  93. egse/csl/initialisation.py +0 -102
  94. egse/csl/mech_pos_settings.yaml +0 -18
  95. egse/das.py +0 -1240
  96. egse/das.yaml +0 -7
  97. egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
  98. egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
  99. egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
  100. egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
  101. egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
  102. egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
  103. egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
  104. egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
  105. egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
  106. egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
  107. egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
  108. egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
  109. egse/decorators.py +0 -514
  110. egse/device.py +0 -269
  111. egse/dpu/__init__.py +0 -2698
  112. egse/dpu/ccd_ui.py +0 -514
  113. egse/dpu/dpu.py +0 -783
  114. egse/dpu/dpu.yaml +0 -153
  115. egse/dpu/dpu_cs.py +0 -272
  116. egse/dpu/dpu_ui.py +0 -671
  117. egse/dpu/fitsgen.py +0 -2096
  118. egse/dpu/fitsgen_ui.py +0 -399
  119. egse/dpu/hdf5_model.py +0 -332
  120. egse/dpu/hdf5_ui.py +0 -277
  121. egse/dpu/hdf5_viewer.py +0 -506
  122. egse/dpu/hk_ui.py +0 -468
  123. egse/dpu_commands.py +0 -81
  124. egse/dsi/__init__.py +0 -33
  125. egse/dsi/_libesl.py +0 -232
  126. egse/dsi/constants.py +0 -296
  127. egse/dsi/esl.py +0 -630
  128. egse/dsi/rmap.py +0 -444
  129. egse/dsi/rmapci.py +0 -39
  130. egse/dsi/spw.py +0 -335
  131. egse/dsi/spw_state.py +0 -29
  132. egse/dummy.py +0 -318
  133. egse/dyndummy.py +0 -179
  134. egse/env.py +0 -278
  135. egse/exceptions.py +0 -88
  136. egse/fdir/__init__.py +0 -26
  137. egse/fdir/fdir_manager.py +0 -85
  138. egse/fdir/fdir_manager.yaml +0 -37
  139. egse/fdir/fdir_manager_controller.py +0 -136
  140. egse/fdir/fdir_manager_cs.py +0 -164
  141. egse/fdir/fdir_manager_interface.py +0 -15
  142. egse/fdir/fdir_remote.py +0 -73
  143. egse/fdir/fdir_remote.yaml +0 -30
  144. egse/fdir/fdir_remote_controller.py +0 -30
  145. egse/fdir/fdir_remote_cs.py +0 -94
  146. egse/fdir/fdir_remote_interface.py +0 -9
  147. egse/fdir/fdir_remote_popup.py +0 -26
  148. egse/fee/__init__.py +0 -106
  149. egse/fee/f_fee_register.yaml +0 -43
  150. egse/fee/feesim.py +0 -914
  151. egse/fee/n_fee_hk.py +0 -768
  152. egse/fee/nfee.py +0 -188
  153. egse/filterwheel/__init__.py +0 -4
  154. egse/filterwheel/eksma/__init__.py +0 -49
  155. egse/filterwheel/eksma/fw8smc4.py +0 -657
  156. egse/filterwheel/eksma/fw8smc4.yaml +0 -121
  157. egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
  158. egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
  159. egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
  160. egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
  161. egse/filterwheel/eksma/fw8smc5.py +0 -115
  162. egse/filterwheel/eksma/fw8smc5.yaml +0 -105
  163. egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
  164. egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
  165. egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
  166. egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
  167. egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
  168. egse/filterwheel/eksma/testpythonfw.py +0 -215
  169. egse/fov/__init__.py +0 -65
  170. egse/fov/fov_hk.py +0 -710
  171. egse/fov/fov_ui.py +0 -859
  172. egse/fov/fov_ui_controller.py +0 -140
  173. egse/fov/fov_ui_model.py +0 -200
  174. egse/fov/fov_ui_view.py +0 -345
  175. egse/gimbal/__init__.py +0 -32
  176. egse/gimbal/symetrie/__init__.py +0 -26
  177. egse/gimbal/symetrie/alpha.py +0 -586
  178. egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
  179. egse/gimbal/symetrie/gimbal.py +0 -877
  180. egse/gimbal/symetrie/gimbal.yaml +0 -168
  181. egse/gimbal/symetrie/gimbal_cs.py +0 -183
  182. egse/gimbal/symetrie/gimbal_protocol.py +0 -138
  183. egse/gimbal/symetrie/gimbal_ui.py +0 -361
  184. egse/gimbal/symetrie/pmac.py +0 -1006
  185. egse/gimbal/symetrie/pmac_regex.py +0 -83
  186. egse/graph.py +0 -132
  187. egse/gui/__init__.py +0 -47
  188. egse/gui/buttons.py +0 -378
  189. egse/gui/focalplane.py +0 -1285
  190. egse/gui/formatter.py +0 -10
  191. egse/gui/led.py +0 -162
  192. egse/gui/limitswitch.py +0 -143
  193. egse/gui/mechanisms.py +0 -587
  194. egse/gui/states.py +0 -148
  195. egse/gui/stripchart.py +0 -729
  196. egse/gui/styles.qss +0 -48
  197. egse/gui/switch.py +0 -112
  198. egse/h5.py +0 -274
  199. egse/help/__init__.py +0 -0
  200. egse/help/help_ui.py +0 -126
  201. egse/hexapod/__init__.py +0 -32
  202. egse/hexapod/symetrie/__init__.py +0 -137
  203. egse/hexapod/symetrie/alpha.py +0 -874
  204. egse/hexapod/symetrie/dynalpha.py +0 -1387
  205. egse/hexapod/symetrie/hexapod_ui.py +0 -1516
  206. egse/hexapod/symetrie/pmac.py +0 -1010
  207. egse/hexapod/symetrie/pmac_regex.py +0 -83
  208. egse/hexapod/symetrie/puna.py +0 -1167
  209. egse/hexapod/symetrie/puna.yaml +0 -193
  210. egse/hexapod/symetrie/puna_cs.py +0 -195
  211. egse/hexapod/symetrie/puna_protocol.py +0 -134
  212. egse/hexapod/symetrie/puna_ui.py +0 -433
  213. egse/hexapod/symetrie/punaplus.py +0 -107
  214. egse/hexapod/symetrie/zonda.py +0 -872
  215. egse/hexapod/symetrie/zonda.yaml +0 -337
  216. egse/hexapod/symetrie/zonda_cs.py +0 -172
  217. egse/hexapod/symetrie/zonda_devif.py +0 -414
  218. egse/hexapod/symetrie/zonda_protocol.py +0 -123
  219. egse/hexapod/symetrie/zonda_ui.py +0 -449
  220. egse/hk.py +0 -791
  221. egse/icons/aeu-cs-start.svg +0 -117
  222. egse/icons/aeu-cs-stop.svg +0 -118
  223. egse/icons/aeu-cs.svg +0 -107
  224. egse/icons/aeu_cs-started.svg +0 -112
  225. egse/icons/aeu_cs-stopped.svg +0 -112
  226. egse/icons/aeu_cs.svg +0 -55
  227. egse/icons/alert.svg +0 -1
  228. egse/icons/arrow-double-left.png +0 -0
  229. egse/icons/arrow-double-right.png +0 -0
  230. egse/icons/arrow-up.svg +0 -11
  231. egse/icons/backward.svg +0 -1
  232. egse/icons/busy.svg +0 -1
  233. egse/icons/cleaning.svg +0 -115
  234. egse/icons/color-scheme.svg +0 -1
  235. egse/icons/cs-connected-alert.svg +0 -91
  236. egse/icons/cs-connected-disabled.svg +0 -43
  237. egse/icons/cs-connected.svg +0 -89
  238. egse/icons/cs-not-connected.svg +0 -44
  239. egse/icons/double-left-arrow.svg +0 -1
  240. egse/icons/double-right-arrow.svg +0 -1
  241. egse/icons/erase-disabled.svg +0 -19
  242. egse/icons/erase.svg +0 -59
  243. egse/icons/fitsgen-start.svg +0 -47
  244. egse/icons/fitsgen-stop.svg +0 -48
  245. egse/icons/fitsgen.svg +0 -1
  246. egse/icons/forward.svg +0 -1
  247. egse/icons/fov-hk-start.svg +0 -33
  248. egse/icons/fov-hk-stop.svg +0 -37
  249. egse/icons/fov-hk.svg +0 -1
  250. egse/icons/front-desk.svg +0 -1
  251. egse/icons/home-actioned.svg +0 -15
  252. egse/icons/home-disabled.svg +0 -15
  253. egse/icons/home.svg +0 -13
  254. egse/icons/info.svg +0 -1
  255. egse/icons/invalid.png +0 -0
  256. egse/icons/led-green.svg +0 -20
  257. egse/icons/led-grey.svg +0 -20
  258. egse/icons/led-orange.svg +0 -20
  259. egse/icons/led-red.svg +0 -20
  260. egse/icons/led-square-green.svg +0 -134
  261. egse/icons/led-square-grey.svg +0 -134
  262. egse/icons/led-square-orange.svg +0 -134
  263. egse/icons/led-square-red.svg +0 -134
  264. egse/icons/limit-switch-all-green.svg +0 -115
  265. egse/icons/limit-switch-all-red.svg +0 -117
  266. egse/icons/limit-switch-el+.svg +0 -116
  267. egse/icons/limit-switch-el-.svg +0 -117
  268. egse/icons/location-marker.svg +0 -1
  269. egse/icons/logo-dpu.svg +0 -48
  270. egse/icons/logo-gimbal.svg +0 -112
  271. egse/icons/logo-huber.svg +0 -23
  272. egse/icons/logo-ogse.svg +0 -31
  273. egse/icons/logo-puna.svg +0 -92
  274. egse/icons/logo-tcs.svg +0 -29
  275. egse/icons/logo-zonda.svg +0 -66
  276. egse/icons/maximize.svg +0 -1
  277. egse/icons/meter.svg +0 -1
  278. egse/icons/more.svg +0 -45
  279. egse/icons/n-fee-hk-start.svg +0 -24
  280. egse/icons/n-fee-hk-stop.svg +0 -25
  281. egse/icons/n-fee-hk.svg +0 -83
  282. egse/icons/observing-off.svg +0 -46
  283. egse/icons/observing-on.svg +0 -46
  284. egse/icons/open-document-hdf5.png +0 -0
  285. egse/icons/open-document-hdf5.svg +0 -21
  286. egse/icons/ops-mode.svg +0 -1
  287. egse/icons/play-green.svg +0 -17
  288. egse/icons/plugged-disabled.svg +0 -27
  289. egse/icons/plugged.svg +0 -21
  290. egse/icons/pm_ui.svg +0 -1
  291. egse/icons/power-button-green.svg +0 -27
  292. egse/icons/power-button-red.svg +0 -27
  293. egse/icons/power-button.svg +0 -27
  294. egse/icons/radar.svg +0 -1
  295. egse/icons/radioactive.svg +0 -2
  296. egse/icons/reload.svg +0 -1
  297. egse/icons/remote-control-off.svg +0 -28
  298. egse/icons/remote-control-on.svg +0 -28
  299. egse/icons/repeat-blue.svg +0 -15
  300. egse/icons/repeat.svg +0 -1
  301. egse/icons/settings.svg +0 -1
  302. egse/icons/shrink.svg +0 -1
  303. egse/icons/shutter.svg +0 -1
  304. egse/icons/sign-off.svg +0 -1
  305. egse/icons/sign-on.svg +0 -1
  306. egse/icons/sim-mode.svg +0 -1
  307. egse/icons/small-buttons-go.svg +0 -20
  308. egse/icons/small-buttons-minus.svg +0 -51
  309. egse/icons/small-buttons-plus.svg +0 -51
  310. egse/icons/sponge.svg +0 -220
  311. egse/icons/start-button-disabled.svg +0 -84
  312. egse/icons/start-button.svg +0 -50
  313. egse/icons/stop-button-disabled.svg +0 -84
  314. egse/icons/stop-button.svg +0 -50
  315. egse/icons/stop-red.svg +0 -17
  316. egse/icons/stop.svg +0 -1
  317. egse/icons/switch-disabled-square.svg +0 -87
  318. egse/icons/switch-disabled.svg +0 -15
  319. egse/icons/switch-off-square.svg +0 -87
  320. egse/icons/switch-off.svg +0 -72
  321. egse/icons/switch-on-square.svg +0 -87
  322. egse/icons/switch-on.svg +0 -61
  323. egse/icons/temperature-control.svg +0 -44
  324. egse/icons/th_ui_logo.svg +0 -1
  325. egse/icons/unplugged.svg +0 -23
  326. egse/icons/unvalid.png +0 -0
  327. egse/icons/user-interface.svg +0 -1
  328. egse/icons/vacuum.svg +0 -1
  329. egse/icons/valid.png +0 -0
  330. egse/icons/zoom-to-pixel-dark.svg +0 -64
  331. egse/icons/zoom-to-pixel-white.svg +0 -36
  332. egse/images/big-rotation-stage.png +0 -0
  333. egse/images/connected-100.png +0 -0
  334. egse/images/cross.svg +0 -6
  335. egse/images/disconnected-100.png +0 -0
  336. egse/images/gui-icon.png +0 -0
  337. egse/images/home.svg +0 -6
  338. egse/images/info-icon.png +0 -0
  339. egse/images/led-black.svg +0 -89
  340. egse/images/led-green.svg +0 -85
  341. egse/images/led-orange.svg +0 -85
  342. egse/images/led-red.svg +0 -85
  343. egse/images/load-icon.png +0 -0
  344. egse/images/load-setup.png +0 -0
  345. egse/images/load.png +0 -0
  346. egse/images/pause.png +0 -0
  347. egse/images/play-button.svg +0 -8
  348. egse/images/play.png +0 -0
  349. egse/images/process-status.png +0 -0
  350. egse/images/restart.png +0 -0
  351. egse/images/search.png +0 -0
  352. egse/images/sma.png +0 -0
  353. egse/images/start.png +0 -0
  354. egse/images/stop-button.svg +0 -8
  355. egse/images/stop.png +0 -0
  356. egse/images/switch-off.svg +0 -48
  357. egse/images/switch-on.svg +0 -48
  358. egse/images/undo.png +0 -0
  359. egse/images/update-button.svg +0 -11
  360. egse/imageviewer/exposureselection.py +0 -475
  361. egse/imageviewer/imageviewer.py +0 -198
  362. egse/imageviewer/matchfocalplane.py +0 -179
  363. egse/imageviewer/subfieldposition.py +0 -133
  364. egse/lampcontrol/__init__.py +0 -4
  365. egse/lampcontrol/beaglebone/beaglebone.py +0 -178
  366. egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
  367. egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
  368. egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
  369. egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
  370. egse/lampcontrol/energetiq/__init__.py +0 -22
  371. egse/lampcontrol/energetiq/eq99.yaml +0 -98
  372. egse/lampcontrol/energetiq/lampEQ99.py +0 -283
  373. egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
  374. egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
  375. egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
  376. egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
  377. egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
  378. egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
  379. egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
  380. egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
  381. egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
  382. egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
  383. egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
  384. egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
  385. egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
  386. egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
  387. egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
  388. egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
  389. egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
  390. egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
  391. egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
  392. egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
  393. egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
  394. egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
  395. egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
  396. egse/lib/ximc/libximc.framework/libbindy.so +0 -0
  397. egse/lib/ximc/libximc.framework/libximc +0 -0
  398. egse/lib/ximc/libximc.framework/libximc.so +0 -0
  399. egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
  400. egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
  401. egse/lib/ximc/pyximc.py +0 -922
  402. egse/listener.py +0 -179
  403. egse/logger/__init__.py +0 -243
  404. egse/logger/log_cs.py +0 -321
  405. egse/metrics.py +0 -102
  406. egse/mixin.py +0 -464
  407. egse/monitoring.py +0 -95
  408. egse/ni/alarms/__init__.py +0 -26
  409. egse/ni/alarms/cdaq9375.py +0 -300
  410. egse/ni/alarms/cdaq9375.yaml +0 -89
  411. egse/ni/alarms/cdaq9375_cs.py +0 -130
  412. egse/ni/alarms/cdaq9375_devif.py +0 -183
  413. egse/ni/alarms/cdaq9375_protocol.py +0 -48
  414. egse/obs_inspection.py +0 -165
  415. egse/observer.py +0 -41
  416. egse/obsid.py +0 -163
  417. egse/powermeter/__init__.py +0 -0
  418. egse/powermeter/ni/__init__.py +0 -38
  419. egse/powermeter/ni/cdaq9184.py +0 -224
  420. egse/powermeter/ni/cdaq9184.yaml +0 -73
  421. egse/powermeter/ni/cdaq9184_cs.py +0 -130
  422. egse/powermeter/ni/cdaq9184_devif.py +0 -201
  423. egse/powermeter/ni/cdaq9184_protocol.py +0 -48
  424. egse/powermeter/ni/cdaq9184_ui.py +0 -544
  425. egse/powermeter/thorlabs/__init__.py +0 -25
  426. egse/powermeter/thorlabs/pm100a.py +0 -380
  427. egse/powermeter/thorlabs/pm100a.yaml +0 -132
  428. egse/powermeter/thorlabs/pm100a_cs.py +0 -136
  429. egse/powermeter/thorlabs/pm100a_devif.py +0 -127
  430. egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
  431. egse/powermeter/thorlabs/pm100a_ui.py +0 -725
  432. egse/process.py +0 -451
  433. egse/procman/__init__.py +0 -834
  434. egse/procman/cannot_start_process_popup.py +0 -43
  435. egse/procman/procman.yaml +0 -49
  436. egse/procman/procman_cs.py +0 -201
  437. egse/procman/procman_ui.py +0 -2081
  438. egse/protocol.py +0 -605
  439. egse/proxy.py +0 -531
  440. egse/randomwalk.py +0 -140
  441. egse/reg.py +0 -585
  442. egse/reload.py +0 -122
  443. egse/reprocess.py +0 -693
  444. egse/resource.py +0 -333
  445. egse/rmap.py +0 -406
  446. egse/rst.py +0 -135
  447. egse/search.py +0 -182
  448. egse/serialdevice.py +0 -190
  449. egse/services.py +0 -247
  450. egse/services.yaml +0 -68
  451. egse/settings.py +0 -379
  452. egse/settings.yaml +0 -980
  453. egse/setup.py +0 -1181
  454. egse/shutter/__init__.py +0 -0
  455. egse/shutter/thorlabs/__init__.py +0 -19
  456. egse/shutter/thorlabs/ksc101.py +0 -205
  457. egse/shutter/thorlabs/ksc101.yaml +0 -105
  458. egse/shutter/thorlabs/ksc101_cs.py +0 -136
  459. egse/shutter/thorlabs/ksc101_devif.py +0 -201
  460. egse/shutter/thorlabs/ksc101_protocol.py +0 -71
  461. egse/shutter/thorlabs/ksc101_ui.py +0 -548
  462. egse/shutter/thorlabs/sc10.py +0 -82
  463. egse/shutter/thorlabs/sc10.yaml +0 -52
  464. egse/shutter/thorlabs/sc10_controller.py +0 -81
  465. egse/shutter/thorlabs/sc10_cs.py +0 -108
  466. egse/shutter/thorlabs/sc10_interface.py +0 -25
  467. egse/shutter/thorlabs/sc10_simulator.py +0 -30
  468. egse/simulator.py +0 -41
  469. egse/slack.py +0 -61
  470. egse/socketdevice.py +0 -218
  471. egse/sockets.py +0 -218
  472. egse/spw.py +0 -1401
  473. egse/stages/__init__.py +0 -12
  474. egse/stages/aerotech/ensemble.py +0 -245
  475. egse/stages/aerotech/ensemble.yaml +0 -205
  476. egse/stages/aerotech/ensemble_controller.py +0 -275
  477. egse/stages/aerotech/ensemble_cs.py +0 -110
  478. egse/stages/aerotech/ensemble_interface.py +0 -132
  479. egse/stages/aerotech/ensemble_parameters.py +0 -433
  480. egse/stages/aerotech/ensemble_simulator.py +0 -27
  481. egse/stages/aerotech/mgse_sim.py +0 -188
  482. egse/stages/arun/smd3.py +0 -110
  483. egse/stages/arun/smd3.yaml +0 -68
  484. egse/stages/arun/smd3_controller.py +0 -470
  485. egse/stages/arun/smd3_cs.py +0 -112
  486. egse/stages/arun/smd3_interface.py +0 -53
  487. egse/stages/arun/smd3_simulator.py +0 -27
  488. egse/stages/arun/smd3_stop.py +0 -16
  489. egse/stages/huber/__init__.py +0 -49
  490. egse/stages/huber/smc9300.py +0 -920
  491. egse/stages/huber/smc9300.yaml +0 -63
  492. egse/stages/huber/smc9300_cs.py +0 -178
  493. egse/stages/huber/smc9300_devif.py +0 -345
  494. egse/stages/huber/smc9300_protocol.py +0 -113
  495. egse/stages/huber/smc9300_sim.py +0 -547
  496. egse/stages/huber/smc9300_ui.py +0 -973
  497. egse/state.py +0 -173
  498. egse/statemachine.py +0 -274
  499. egse/storage/__init__.py +0 -1067
  500. egse/storage/persistence.py +0 -2295
  501. egse/storage/storage.yaml +0 -79
  502. egse/storage/storage_cs.py +0 -231
  503. egse/styles/dark.qss +0 -343
  504. egse/styles/default.qss +0 -48
  505. egse/synoptics/__init__.py +0 -417
  506. egse/synoptics/syn.yaml +0 -9
  507. egse/synoptics/syn_cs.py +0 -195
  508. egse/system.py +0 -1611
  509. egse/tcs/__init__.py +0 -14
  510. egse/tcs/tcs.py +0 -879
  511. egse/tcs/tcs.yaml +0 -14
  512. egse/tcs/tcs_cs.py +0 -202
  513. egse/tcs/tcs_devif.py +0 -292
  514. egse/tcs/tcs_protocol.py +0 -180
  515. egse/tcs/tcs_sim.py +0 -177
  516. egse/tcs/tcs_ui.py +0 -543
  517. egse/tdms.py +0 -171
  518. egse/tempcontrol/__init__.py +0 -23
  519. egse/tempcontrol/agilent/agilent34970.py +0 -109
  520. egse/tempcontrol/agilent/agilent34970.yaml +0 -44
  521. egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
  522. egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
  523. egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
  524. egse/tempcontrol/agilent/agilent34972.py +0 -111
  525. egse/tempcontrol/agilent/agilent34972.yaml +0 -44
  526. egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
  527. egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
  528. egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
  529. egse/tempcontrol/beaglebone/beaglebone.py +0 -341
  530. egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
  531. egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
  532. egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
  533. egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
  534. egse/tempcontrol/digalox/digalox.py +0 -115
  535. egse/tempcontrol/digalox/digalox.yaml +0 -36
  536. egse/tempcontrol/digalox/digalox_cs.py +0 -108
  537. egse/tempcontrol/digalox/digalox_protocol.py +0 -56
  538. egse/tempcontrol/keithley/__init__.py +0 -33
  539. egse/tempcontrol/keithley/daq6510.py +0 -662
  540. egse/tempcontrol/keithley/daq6510.yaml +0 -105
  541. egse/tempcontrol/keithley/daq6510_cs.py +0 -163
  542. egse/tempcontrol/keithley/daq6510_devif.py +0 -343
  543. egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
  544. egse/tempcontrol/keithley/daq6510_sim.py +0 -186
  545. egse/tempcontrol/lakeshore/__init__.py +0 -33
  546. egse/tempcontrol/lakeshore/lsci.py +0 -361
  547. egse/tempcontrol/lakeshore/lsci.yaml +0 -162
  548. egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
  549. egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
  550. egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
  551. egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
  552. egse/tempcontrol/ni/__init__.py +0 -0
  553. egse/tempcontrol/spid/spid.py +0 -109
  554. egse/tempcontrol/spid/spid.yaml +0 -81
  555. egse/tempcontrol/spid/spid_controller.py +0 -279
  556. egse/tempcontrol/spid/spid_cs.py +0 -136
  557. egse/tempcontrol/spid/spid_protocol.py +0 -107
  558. egse/tempcontrol/spid/spid_ui.py +0 -723
  559. egse/tempcontrol/srs/__init__.py +0 -22
  560. egse/tempcontrol/srs/ptc10.py +0 -867
  561. egse/tempcontrol/srs/ptc10.yaml +0 -227
  562. egse/tempcontrol/srs/ptc10_cs.py +0 -128
  563. egse/tempcontrol/srs/ptc10_devif.py +0 -116
  564. egse/tempcontrol/srs/ptc10_protocol.py +0 -39
  565. egse/tempcontrol/srs/ptc10_ui.py +0 -906
  566. egse/ups/apc/apc.py +0 -236
  567. egse/ups/apc/apc.yaml +0 -45
  568. egse/ups/apc/apc_cs.py +0 -101
  569. egse/ups/apc/apc_protocol.py +0 -125
  570. egse/user.yaml +0 -7
  571. egse/vacuum/beaglebone/beaglebone.py +0 -149
  572. egse/vacuum/beaglebone/beaglebone.yaml +0 -44
  573. egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
  574. egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
  575. egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
  576. egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
  577. egse/vacuum/instrutech/igm402.py +0 -91
  578. egse/vacuum/instrutech/igm402.yaml +0 -90
  579. egse/vacuum/instrutech/igm402_controller.py +0 -124
  580. egse/vacuum/instrutech/igm402_cs.py +0 -108
  581. egse/vacuum/instrutech/igm402_interface.py +0 -49
  582. egse/vacuum/instrutech/igm402_simulator.py +0 -36
  583. egse/vacuum/keller/kellerBus.py +0 -256
  584. egse/vacuum/keller/leo3.py +0 -100
  585. egse/vacuum/keller/leo3.yaml +0 -38
  586. egse/vacuum/keller/leo3_controller.py +0 -81
  587. egse/vacuum/keller/leo3_cs.py +0 -101
  588. egse/vacuum/keller/leo3_interface.py +0 -33
  589. egse/vacuum/mks/evision.py +0 -86
  590. egse/vacuum/mks/evision.yaml +0 -75
  591. egse/vacuum/mks/evision_cs.py +0 -101
  592. egse/vacuum/mks/evision_devif.py +0 -313
  593. egse/vacuum/mks/evision_interface.py +0 -60
  594. egse/vacuum/mks/evision_simulator.py +0 -24
  595. egse/vacuum/mks/evision_ui.py +0 -701
  596. egse/vacuum/pfeiffer/acp40.py +0 -87
  597. egse/vacuum/pfeiffer/acp40.yaml +0 -60
  598. egse/vacuum/pfeiffer/acp40_controller.py +0 -117
  599. egse/vacuum/pfeiffer/acp40_cs.py +0 -109
  600. egse/vacuum/pfeiffer/acp40_interface.py +0 -40
  601. egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
  602. egse/vacuum/pfeiffer/tc400.py +0 -87
  603. egse/vacuum/pfeiffer/tc400.yaml +0 -83
  604. egse/vacuum/pfeiffer/tc400_controller.py +0 -136
  605. egse/vacuum/pfeiffer/tc400_cs.py +0 -109
  606. egse/vacuum/pfeiffer/tc400_interface.py +0 -70
  607. egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
  608. egse/vacuum/pfeiffer/tpg261.py +0 -80
  609. egse/vacuum/pfeiffer/tpg261.yaml +0 -66
  610. egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
  611. egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
  612. egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
  613. egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
  614. egse/version.py +0 -174
  615. egse/visitedpositions.py +0 -398
  616. egse/windowing.py +0 -213
  617. egse/zmq/__init__.py +0 -28
  618. egse/zmq/spw.py +0 -160
  619. egse/zmq_ser.py +0 -41
  620. scripts/alerts/cold.yaml +0 -278
  621. scripts/alerts/example_alerts.yaml +0 -54
  622. scripts/alerts/transition.yaml +0 -14
  623. scripts/alerts/warm.yaml +0 -49
  624. scripts/analyse_n_fee_hk_data.py +0 -52
  625. scripts/check_hdf5_files.py +0 -192
  626. scripts/check_register_sync.py +0 -47
  627. scripts/check_tcs_calib_coef.py +0 -90
  628. scripts/correct_ccd_cold_temperature_cal.py +0 -157
  629. scripts/create_hdf5_report.py +0 -293
  630. scripts/csl_model.py +0 -420
  631. scripts/csl_restore_setup.py +0 -229
  632. scripts/export-grafana-dashboards.py +0 -49
  633. scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
  634. scripts/fdir/fdir_table.yaml +0 -70
  635. scripts/fdir/fdir_test_recovery.py +0 -10
  636. scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
  637. scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
  638. scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
  639. scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
  640. scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
  641. scripts/fix_csv.py +0 -80
  642. scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
  643. scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
  644. scripts/ias/correct_trp_swap_achel.py +0 -199
  645. scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
  646. scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
  647. scripts/n_fee_supply_voltage_calculation.py +0 -92
  648. scripts/playground.py +0 -30
  649. scripts/print_hdf5_hk_data.py +0 -68
  650. scripts/print_register_map.py +0 -43
  651. scripts/remove_lines_between_matches.py +0 -188
  652. scripts/sron/commanding/control_heaters.py +0 -44
  653. scripts/sron/commanding/pumpdown.py +0 -46
  654. scripts/sron/commanding/set_pid_setpoint.py +0 -19
  655. scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
  656. scripts/sron/commanding/shutdown_pumps.py +0 -33
  657. scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
  658. scripts/sron/correct_trp_swap_brigand.py +0 -204
  659. scripts/sron/gimbal_conversions.py +0 -75
  660. scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
  661. scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
  662. scripts/sron/tm_gen/tm_gen_spid.py +0 -13
  663. scripts/update_operational_cgse.py +0 -268
  664. scripts/update_operational_cgse_old.py +0 -273
egse/images/search.png DELETED
Binary file
egse/images/sma.png DELETED
Binary file
egse/images/start.png DELETED
Binary file
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="24" height="24"
4
- viewBox="0, 0, 24, 24">
5
- <g id="Layer_1">
6
- <path d="M6,17 C6,16 6,8 6,7 C6,6 6,6 7,6 C8,6 16,6 17,6 C18,6 18,6 18,7 C18,8 18,16 18,17 C18,18 18,18 17,18 C16,18 8,18 7,18 C6,18 6,18 6,17 z" fill="#000000"/>
7
- </g>
8
- </svg>
egse/images/stop.png DELETED
Binary file
@@ -1,48 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="240" height="160" viewBox="0, 0, 240, 160">
4
- <g id="Background">
5
- <rect x="0" y="0" width="240" height="160" fill="#000000" fill-opacity="0"/>
6
- </g>
7
- <defs>
8
- <radialGradient id="Gradient_1" gradientUnits="userSpaceOnUse" cx="378.428" cy="211.477" r="74.582" gradientTransform="matrix(1, 0, 0, 1, -301.847, -130.177)">
9
- <stop offset="0" stop-color="#000000"/>
10
- <stop offset="1" stop-color="#000000" stop-opacity="0"/>
11
- </radialGradient>
12
- <linearGradient id="Gradient_2" gradientUnits="userSpaceOnUse" x1="545.521" y1="197.115" x2="355.251" y2="197.115" gradientTransform="matrix(1, 0, 0, 1, -301.847, -130.177)">
13
- <stop offset="0" stop-color="#F9F9F9"/>
14
- <stop offset="1" stop-color="#5F5C5D"/>
15
- </linearGradient>
16
- <linearGradient id="Gradient_3" gradientUnits="userSpaceOnUse" x1="428.777" y1="131.432" x2="428.777" y2="254.141" gradientTransform="matrix(1, 0, 0, 1, -301.847, -130.177)">
17
- <stop offset="0" stop-color="#CBCACA"/>
18
- <stop offset="1" stop-color="#231F20"/>
19
- </linearGradient>
20
- <radialGradient id="Gradient_4" gradientUnits="userSpaceOnUse" cx="367.844" cy="196.424" r="54.194" gradientTransform="matrix(1, 0, 0, 1, -301.847, -130.177)">
21
- <stop offset="0" stop-color="#FFFFFF"/>
22
- <stop offset="1" stop-color="#FEFEFE"/>
23
- </radialGradient>
24
- <radialGradient id="Gradient_5" gradientUnits="userSpaceOnUse" cx="367.844" cy="196.424" r="53.111" gradientTransform="matrix(1, 0, 0, 1, -301.847, -130.177)">
25
- <stop offset="0" stop-color="#FFFFFF"/>
26
- <stop offset="1" stop-color="#FEFEFE"/>
27
- </radialGradient>
28
- </defs>
29
- <g id="Layer_3">
30
- <path d="M76.581,155.881 C35.391,155.881 2,122.49 2,81.3 C2,40.109 35.391,6.718 76.581,6.718 C117.772,6.718 151.163,40.109 151.163,81.3 C151.163,122.49 117.772,155.881 76.581,155.881 z" fill="url(#Gradient_1)"/>
31
- <path d="M69.032,6.718 C36.673,6.718 10.438,32.951 10.438,65.312 L10.438,65.312 L10.438,68.565 C10.438,100.927 36.673,127.16 69.032,127.16 L69.032,127.16 L179.708,127.16 C212.068,127.16 238.302,100.927 238.302,68.565 L238.302,68.565 L238.302,65.312 C238.302,32.951 212.068,6.718 179.708,6.718 L179.708,6.718 z" fill="url(#Gradient_2)"/>
32
- <path d="M238.301,68.565 C238.301,100.926 212.068,127.159 179.707,127.159 L69.032,127.159 C36.673,127.159 10.438,100.926 10.438,68.565 L10.438,65.311 C10.438,32.951 36.673,6.717 69.032,6.717 L179.707,6.717 C212.068,6.717 238.301,32.951 238.301,65.311 L238.301,68.565 z" fill-opacity="0" stroke="#000000" stroke-width="1"/>
33
- <path d="M75.302,10.755 C45.11,10.755 20.635,35.229 20.635,65.422 L20.635,65.422 L20.635,68.457 C20.635,98.649 45.11,123.123 75.302,123.123 L75.302,123.123 L178.558,123.123 C208.75,123.123 233.224,98.649 233.224,68.457 L233.224,68.457 L233.224,65.422 C233.224,35.229 208.75,10.755 178.558,10.755 L178.558,10.755 z" fill="url(#Gradient_3)"/>
34
- <g>
35
- <path d="M233.224,68.457 C233.224,98.648 208.75,123.124 178.558,123.124 L75.301,123.124 C45.11,123.124 20.635,98.648 20.635,68.457 L20.635,65.421 C20.635,35.229 45.11,10.755 75.301,10.755 L178.558,10.755 C208.75,10.755 233.224,35.229 233.224,65.421 L233.224,68.457 z" fill-opacity="0" stroke="#4F5654" stroke-width="1"/>
36
- <path d="M127.243,66.247 C127.243,100.073 99.823,127.495 65.997,127.495 C32.171,127.495 4.749,100.073 4.749,66.247 C4.749,32.422 32.171,5 65.997,5 C99.823,5 127.243,32.422 127.243,66.247" fill="#2C2C2C"/>
37
- <path d="M121.807,66.247 C121.807,97.071 96.821,122.059 65.996,122.059 C35.173,122.059 10.184,97.071 10.184,66.247 C10.184,35.424 35.173,10.435 65.996,10.435 C96.821,10.435 121.807,35.424 121.807,66.247" fill="#DDDDDD"/>
38
- </g>
39
- <path d="M29.183,26.472 C18.491,36.372 11.801,50.527 11.801,66.247 L11.801,66.247 C11.801,74.854 13.807,82.995 17.38,90.223 L17.38,90.223 C20.818,97.184 25.71,103.302 31.658,108.178 L31.658,108.178 C41.007,115.843 52.964,120.441 65.997,120.441 L65.997,120.441 C80.469,120.441 93.615,114.769 103.335,105.526 L103.335,105.526 C113.719,95.654 120.192,81.706 120.192,66.247 L120.192,66.247 C120.192,56.712 117.729,47.75 113.403,39.966 L113.403,39.966 C108.769,31.622 101.995,24.631 93.823,19.732 L93.823,19.732 C85.689,14.854 76.17,12.052 65.997,12.052 L65.997,12.052 C51.784,12.052 38.848,17.523 29.183,26.472 z M120.192,66.247 C120.192,66.247 120.192,66.247 120.192,66.247 z" fill="url(#Gradient_4)"/>
40
- <path d="M12.885,66.247 C12.885,95.579 36.664,119.359 65.997,119.359 L65.997,119.359 C95.328,119.359 119.108,95.579 119.108,66.247 L119.108,66.247 C119.108,36.915 95.328,13.136 65.997,13.136 L65.997,13.136 C36.664,13.136 12.885,36.915 12.885,66.247 z" fill="url(#Gradient_5)"/>
41
- <g>
42
- <path d="M116.507,66.247 C116.507,38.351 93.893,15.738 65.997,15.738 C38.1,15.738 15.485,38.351 15.485,66.247 C15.485,94.143 38.1,116.758 65.997,116.758 C93.893,116.758 116.507,94.143 116.507,66.247 M65.997,117.192 C37.86,117.192 15.051,94.383 15.051,66.247 C15.051,38.112 37.86,15.303 65.997,15.303 C94.132,15.303 116.939,38.112 116.939,66.247 C116.939,94.383 94.132,117.192 65.997,117.192" fill="#FFFFFF"/>
43
- <path d="M116.507,65.814 C116.507,37.918 93.893,15.303 65.997,15.303 C38.1,15.303 15.485,37.918 15.485,65.814 C15.485,93.709 38.1,116.323 65.997,116.323 C93.893,116.323 116.507,93.709 116.507,65.814 M65.997,116.757 C37.86,116.757 15.051,93.949 15.051,65.814 C15.051,37.678 37.86,14.869 65.997,14.869 C94.132,14.869 116.939,37.678 116.939,65.814 C116.939,93.949 94.132,116.757 65.997,116.757" fill="#58595B"/>
44
- <path d="M116.507,66.03 C116.507,38.134 93.893,15.519 65.997,15.519 C38.1,15.519 15.485,38.134 15.485,66.03 C15.485,93.925 38.1,116.54 65.997,116.54 C93.893,116.54 116.507,93.925 116.507,66.03 M65.997,116.974 C37.86,116.974 15.051,94.164 15.051,66.03 C15.051,37.895 37.86,15.087 65.997,15.087 C94.132,15.087 116.939,37.895 116.939,66.03 C116.939,94.164 94.132,116.974 65.997,116.974" fill="#939598"/>
45
- <path d="M120.192,66.247 C120.192,36.316 95.926,12.052 65.997,12.052 C36.064,12.052 11.802,36.316 11.802,66.247 C11.802,96.179 36.064,120.443 65.997,120.443 C95.926,120.443 120.192,96.179 120.192,66.247 M65.997,120.876 C35.826,120.876 11.366,96.419 11.366,66.247 C11.366,36.077 35.826,11.619 65.997,11.619 C96.166,11.619 120.625,36.077 120.625,66.247 C120.625,96.419 96.166,120.876 65.997,120.876" fill="#939598"/>
46
- </g>
47
- </g>
48
- </svg>
egse/images/switch-on.svg DELETED
@@ -1,48 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="240" height="160" viewBox="0, 0, 240, 160">
4
- <g id="Background">
5
- <rect x="0" y="0" width="240" height="160" fill="#000000" fill-opacity="0"/>
6
- </g>
7
- <defs>
8
- <radialGradient id="Gradient_1" gradientUnits="userSpaceOnUse" cx="480.885" cy="418.25" r="73.857" gradientTransform="matrix(1, 0, 0, 1, -316.741, -338.173)">
9
- <stop offset="0" stop-color="#000000"/>
10
- <stop offset="1" stop-color="#000000" stop-opacity="0"/>
11
- </radialGradient>
12
- <linearGradient id="Gradient_2" gradientUnits="userSpaceOnUse" x1="366.486" y1="404.956" x2="549.627" y2="402.421" gradientTransform="matrix(1, 0, 0, 1, -316.741, -338.173)">
13
- <stop offset="0" stop-color="#CBCACA"/>
14
- <stop offset="1" stop-color="#231F20"/>
15
- </linearGradient>
16
- <linearGradient id="Gradient_3" gradientUnits="userSpaceOnUse" x1="434.141" y1="338.983" x2="434.141" y2="460.5" gradientTransform="matrix(1, 0, 0, 1, -316.741, -338.173)">
17
- <stop offset="0" stop-color="#A9FF00"/>
18
- <stop offset="1" stop-color="#005600"/>
19
- </linearGradient>
20
- <radialGradient id="Gradient_4" gradientUnits="userSpaceOnUse" cx="486.885" cy="403.823" r="53.667" gradientTransform="matrix(1, 0, 0, 1, -316.741, -338.173)">
21
- <stop offset="0" stop-color="#FFFFFF"/>
22
- <stop offset="1" stop-color="#FEFEFE"/>
23
- </radialGradient>
24
- <radialGradient id="Gradient_5" gradientUnits="userSpaceOnUse" cx="486.884" cy="403.824" r="52.595" gradientTransform="matrix(1, 0, 0, 1, -316.741, -338.173)">
25
- <stop offset="0" stop-color="#FFFFFF"/>
26
- <stop offset="1" stop-color="#FEFEFE"/>
27
- </radialGradient>
28
- </defs>
29
- <g id="Layer_3">
30
- <path d="M164.144,153.932 C123.354,153.932 90.288,120.866 90.288,80.077 C90.288,39.286 123.354,6.22 164.144,6.22 C204.934,6.22 238,39.286 238,80.077 C238,120.866 204.934,153.932 164.144,153.932 z" fill="url(#Gradient_1)"/>
31
- <path d="M62.023,6.22 C29.979,6.22 4,32.198 4,64.244 L4,64.244 L4,67.467 C4,99.513 29.979,125.49 62.023,125.49 L62.023,125.49 L171.623,125.49 C203.668,125.49 229.647,99.513 229.647,67.467 L229.647,67.467 L229.647,64.244 C229.647,32.198 203.668,6.22 171.623,6.22 L171.623,6.22 z" fill="url(#Gradient_2)"/>
32
- <path d="M229.647,67.467 C229.647,99.513 203.668,125.491 171.622,125.491 L62.024,125.491 C29.979,125.491 4,99.513 4,67.467 L4,64.244 C4,32.198 29.979,6.22 62.024,6.22 L171.622,6.22 C203.668,6.22 229.647,32.198 229.647,64.244 L229.647,67.467 z" fill-opacity="0" stroke="#4F5654" stroke-width="1"/>
33
- <path d="M65.326,10.218 C34.879,10.218 10.192,34.455 10.192,64.352 L10.192,64.352 L10.192,67.361 C10.192,97.258 34.879,121.495 65.326,121.495 L65.326,121.495 L169.473,121.495 C199.922,121.495 224.608,97.258 224.608,67.361 L224.608,67.361 L224.608,64.352 C224.608,34.455 199.922,10.218 169.473,10.218 L169.473,10.218 z" fill="url(#Gradient_3)"/>
34
- <g>
35
- <path d="M224.608,67.36 C224.608,97.257 199.923,121.494 169.473,121.494 L65.327,121.494 C34.879,121.494 10.193,97.257 10.193,67.36 L10.193,64.352 C10.193,34.454 34.879,10.218 65.327,10.218 L169.473,10.218 C199.923,10.218 224.608,34.454 224.608,64.352 L224.608,67.36 z" fill-opacity="0" stroke="#003600" stroke-width="1"/>
36
- <path d="M230.797,65.65 C230.797,99.147 203.643,126.303 170.146,126.303 C136.649,126.303 109.494,99.147 109.494,65.65 C109.494,32.153 136.649,5 170.146,5 C203.643,5 230.797,32.153 230.797,65.65" fill="#2C2C2C"/>
37
- <path d="M225.413,65.65 C225.413,96.175 200.67,120.921 170.145,120.921 C139.62,120.921 114.875,96.175 114.875,65.65 C114.875,35.128 139.62,10.382 170.145,10.382 C200.67,10.382 225.413,35.128 225.413,65.65" fill="#DDDDDD"/>
38
- </g>
39
- <path d="M133.689,26.261 C123.102,36.068 116.476,50.084 116.476,65.648 L116.476,65.648 C116.476,74.174 118.464,82.235 122,89.393 L122,89.393 C125.406,96.288 130.251,102.344 136.141,107.174 L136.141,107.174 C145.397,114.766 157.24,119.318 170.145,119.318 L170.145,119.318 C184.477,119.318 197.494,113.701 207.121,104.547 L207.121,104.547 C217.402,94.772 223.812,80.961 223.812,65.648 L223.812,65.648 C223.812,56.208 221.373,47.334 217.091,39.626 L217.091,39.626 C212.501,31.363 205.793,24.441 197.702,19.589 L197.702,19.589 C189.646,14.759 180.219,11.983 170.145,11.983 L170.145,11.983 C156.071,11.983 143.26,17.399 133.689,26.261 z M223.812,65.648 C223.812,65.648 223.812,65.648 223.812,65.648 z" fill="url(#Gradient_4)"/>
40
- <path d="M117.549,65.649 C117.549,94.699 141.099,118.247 170.145,118.247 L170.145,118.247 C199.191,118.247 222.739,94.699 222.739,65.649 L222.739,65.649 C222.739,36.604 199.191,13.056 170.145,13.056 L170.145,13.056 C141.099,13.056 117.549,36.604 117.549,65.649 z" fill="url(#Gradient_5)"/>
41
- <g>
42
- <path d="M220.163,65.65 C220.163,38.026 197.77,15.634 170.145,15.634 C142.519,15.634 120.125,38.026 120.125,65.65 C120.125,93.275 142.519,115.671 170.145,115.671 C197.77,115.671 220.163,93.275 220.163,65.65 M170.145,116.1 C142.282,116.1 119.695,93.514 119.695,65.65 C119.695,37.789 142.282,15.203 170.145,15.203 C198.007,15.203 220.593,37.789 220.593,65.65 C220.593,93.514 198.007,116.1 170.145,116.1" fill="#FFFFFF"/>
43
- <path d="M220.163,65.221 C220.163,37.597 197.77,15.202 170.145,15.202 C142.519,15.202 120.125,37.597 120.125,65.221 C120.125,92.845 142.519,115.239 170.145,115.239 C197.77,115.239 220.163,92.845 220.163,65.221 M170.145,115.67 C142.282,115.67 119.695,93.082 119.695,65.221 C119.695,37.359 142.282,14.773 170.145,14.773 C198.007,14.773 220.593,37.359 220.593,65.221 C220.593,93.082 198.007,115.67 170.145,115.67" fill="#58595B"/>
44
- <path d="M220.163,65.437 C220.163,37.811 197.77,15.419 170.145,15.419 C142.519,15.419 120.125,37.811 120.125,65.437 C120.125,93.061 142.519,115.456 170.145,115.456 C197.77,115.456 220.163,93.061 220.163,65.437 M170.145,115.885 C142.282,115.885 119.695,93.297 119.695,65.437 C119.695,37.574 142.282,14.988 170.145,14.988 C198.007,14.988 220.593,37.574 220.593,65.437 C220.593,93.297 198.007,115.885 170.145,115.885" fill="#939598"/>
45
- <path d="M223.814,65.65 C223.814,36.009 199.783,11.982 170.146,11.982 C140.502,11.982 116.477,36.009 116.477,65.65 C116.477,95.291 140.502,119.32 170.146,119.32 C199.783,119.32 223.814,95.291 223.814,65.65 M170.146,119.748 C140.268,119.748 116.047,95.529 116.047,65.65 C116.047,35.772 140.268,11.555 170.146,11.555 C200.022,11.555 224.242,35.772 224.242,65.65 C224.242,95.529 200.022,119.748 170.146,119.748" fill="#939598"/>
46
- </g>
47
- </g>
48
- </svg>
egse/images/undo.png DELETED
Binary file
@@ -1,11 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
- <svg version="1.1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="24" height="24"
4
- viewBox="0, 0, 24, 24">
5
- <g id="Layer_1">
6
- <g>
7
- <path d="M4.734,6.295 C5.272,6.639 5.771,6.995 5.81,6.951 C7.848,4.624 10.391,3.968 12.397,4.001 C14.27,3.992 19.045,5.363 19.962,10.638 C19.963,11.192 19.586,11.556 19.189,11.561 C18.793,11.565 18.363,11.376 18.234,10.687 C17.877,8.778 15.844,5.864 12.38,5.755 C11.003,5.732 9.009,5.983 7.342,7.901 C7.841,8.225 7.628,8.086 8.174,8.426 C8.392,8.568 8.536,9.003 8.19,9.212 C7.356,9.702 5.913,10.506 4.692,11.126 C4.299,11.271 4.037,11.099 4,10.704 C4.063,9.306 4.115,8.554 4.13,6.623 C4.128,6.392 4.286,6.009 4.734,6.295 z" fill="#000000"/>
8
- <path d="M19.266,17.705 C18.728,17.361 18.229,17.005 18.19,17.049 C16.152,19.376 13.609,20.032 11.603,19.999 C9.73,20.008 4.955,18.637 4.038,13.362 C4.037,12.808 4.414,12.444 4.811,12.439 C5.207,12.435 5.637,12.624 5.766,13.313 C6.123,15.222 8.156,18.136 11.62,18.245 C12.997,18.268 14.991,18.017 16.658,16.099 C16.159,15.775 16.372,15.914 15.826,15.574 C15.608,15.432 15.464,14.997 15.81,14.788 C16.644,14.298 18.087,13.494 19.308,12.874 C19.701,12.729 19.963,12.901 20,13.296 C19.937,14.694 19.885,15.446 19.87,17.377 C19.872,17.608 19.714,17.991 19.266,17.705 z" fill="#000000"/>
9
- </g>
10
- </g>
11
- </svg>
@@ -1,475 +0,0 @@
1
- """
2
- This module provides a (local) plugin for the Ginga reference viewer, to select which
3
- exposure from which window will be shown. The exposures of any given window, are
4
- stored in extensions in the FITS file, with the same name. By default, the image is
5
- rotated to match the orientation of the focal-plane reference frame. The orientation
6
- angle of the window/sub-field (and CCD) w.r.t. the focal-plane reference frame (in degrees)
7
- is read from the "CROTA2" keyword of the header of that image.
8
-
9
- To start the Ginga reference viewer, with this extra plugin, execute the following set of commands:
10
-
11
- $ mkdir $HOME/.ginga/plugins
12
- $ cp exposureselection.py $HOME/.ginga/plugins/ExposureSelection.py
13
- $ ginga --plugins=ExposureSelection --loglevel=20 --stderr --log=/tmp/ginga.log
14
-
15
- The plugin will then be available via the "Operation" button in the Plugin Manager bar
16
- (currently under "Custom").
17
-
18
- Alternatively, you can start the image viewer with the command:
19
-
20
- $ ./bin/start-image-viewer.bash
21
-
22
- This is the same as the Ginga reference viewer, with all the additional PLATO-specific
23
- plugins. These plugins will then be available via the "Operation" button in the Plugin Manager bar
24
- (under "PLATO").
25
- """
26
-
27
- import time
28
- import re
29
- import os
30
- import numpy as np
31
-
32
- from ginga.gw import Widgets
33
- from ginga.misc import Future
34
- from ginga import GingaPlugin
35
- from ginga.util import iohelper
36
-
37
-
38
- class ExposureSelection(GingaPlugin.LocalPlugin):
39
-
40
- def __init__(self, fv, fitsimage):
41
-
42
- """
43
- Initialisation of a new (local) plugin for the Ginga reference viewer, to choose
44
- a specific exposure for a specific window. The names of the windows are stored in
45
- the "EXTNAME" keyword of the header of the individual HDUs.
46
-
47
- Called when the plugin is loaded from the first time.
48
-
49
- Args:
50
- - fv: Reference to the Ginga (reference viewer) shell.
51
- - fitsimage: Reference to the specific viewer object associated with
52
- the channel on which the plugin is being invoked.
53
- """
54
-
55
- super(ExposureSelection, self).__init__(fv, fitsimage)
56
-
57
- self._windows = {}
58
-
59
- self.gui_up = False
60
- self.path = None
61
- self.file_obj = None
62
-
63
- self.t_ = self.fitsimage.get_settings()
64
-
65
- def build_gui(self, container):
66
-
67
- """
68
- When the plugin is activated, a GUI is built and packed into the given
69
- container. This consists of the following elements:
70
-
71
- - label with the number of windows;
72
- - combobox to choose the window;
73
- - spinner to choose the exposure (for the current window);
74
- - close button.
75
-
76
- Args:
77
- - container: Container in which to pack the GUI.
78
- """
79
-
80
- vbox = Widgets.VBox()
81
- vbox.set_border_width(1)
82
- vbox.set_spacing(1)
83
-
84
- captions = [("Number of windows:", "llabel", "Num Windows Label", "llabel"), # Label with the number of windows
85
- ("Choose Window", "llabel", "Choose Window Combobox", "combobox"), # Combobox to choose the window
86
- ("Choose Exposure", "llabel", "Choose Exposure Spinner", "spinbutton"), # Spinner to choose the exposure (for the current window)
87
- ("Spacer", "spacer"),
88
- ("Align with focal plane reference frame", "checkbutton"), # Checkbutton to align with the focal-plane reference frame
89
- ("Spacer", "spacer"),
90
- ("Close", "button")] # Close button
91
-
92
- w, b = Widgets.build_info(captions, orientation="vertical")
93
- self.w.update(b)
94
-
95
- self.w.num_windows_label = b.num_windows_label
96
- self.w.num_windows_label.set_text("0")
97
-
98
- self.w.window_combobox = b.choose_window_combobox
99
- self.w.window_combobox.set_tooltip("Choose which window to view")
100
-
101
- self.w.exposure_spinner = b.choose_exposure_spinner
102
- self.w.exposure_spinner.set_tooltip("Choose which exposure to view (for the current window)")
103
- self.w.exposure_spinner.hide()
104
-
105
- self.w.alignment_checkbox = b.align_with_focal_plane_reference_frame
106
- self.w.alignment_checkbox.set_tooltip("Check to align images with focal-plane reference plane. Uncheck to use CCD reference frame instead.")
107
-
108
- self.w.close_button = b.close
109
- self.w.close_button.add_callback('activated', lambda w: self.close())
110
-
111
- vbox.add_widget(w)
112
- container.add_widget(vbox, stretch=1)
113
-
114
- self.selected_window = None # No window selected
115
- self.selected_exposure = None # No exposure selected
116
-
117
- def start(self):
118
-
119
- """
120
- Update the plugin when a new FITS file is loaded.
121
- """
122
-
123
- self.resume()
124
-
125
- def resume(self):
126
-
127
- """
128
- Update the plugin when a new FITS file is loaded.
129
- """
130
-
131
- self.redo()
132
-
133
- def redo(self):
134
-
135
- """
136
- Update the plugin when a new FITS file is loaded.
137
- """
138
-
139
- self.current_image = self.channel.get_current_image()
140
-
141
- # No file loaded -> no action needed
142
-
143
- if self.current_image is None:
144
- return True
145
-
146
- # Path to the loaded file
147
-
148
- path = self.current_image.get('path', None)
149
-
150
- # Can't open file
151
-
152
- if path is None:
153
- self.fv.show_error("Cannot open image: no value for metadata key 'path'")
154
- return
155
-
156
- # ASDF file (instead of FITS) -> no action needed
157
-
158
- if path.endswith(".asdf"):
159
- return True
160
-
161
- # New FITS file loaded
162
-
163
- if path != self.path:
164
-
165
- self.path = path
166
-
167
- # Close the previous file opener (if any)
168
-
169
- if self.file_obj is not None:
170
-
171
- try:
172
- self.file_obj.close()
173
- except Exception:
174
- pass
175
-
176
- self.file_obj = self.current_image.io
177
- self.file_obj.open_file(path)
178
- self.hdu_dct = self.file_obj.get_directory()
179
-
180
- self.build_window_list()
181
-
182
- self.w.num_windows_label.set_text(str(len(self._windows)))
183
- self.selected_window = sorted(self._windows)[0]
184
- self.w.exposure_spinner.show()
185
- self.selected_exposure = 1
186
-
187
- self.prepare_selection(self.w.window_combobox, self.w.exposure_spinner)
188
- self.prepare_alignment(self.w.alignment_checkbox)
189
-
190
- self.w.alignment_checkbox.set_state(True)
191
-
192
- def build_window_list(self):
193
-
194
- """
195
- Take stock of the different extension names occur in the FITS file, having
196
- image data in it (so the primary HDU is not included). Each extension corresponds
197
- to a window and for each window we store the slice indices (as they occur in the
198
- FITS file) of the images corresponding to that window. These slices correspond to
199
- the exposures of the window.
200
- """
201
-
202
- index = 0
203
-
204
- while True:
205
-
206
- info = self.hdu_dct.get(index, None)
207
-
208
- if info is None:
209
- break
210
-
211
- if info["htype"] == "ImageHDU":
212
-
213
- window = info["name"]
214
-
215
- if window.startswith("WINDOW"):
216
-
217
- if window in self._windows:
218
- self._windows[window].append(index)
219
- else:
220
- self._windows[window] = [index]
221
-
222
- index += 1
223
-
224
- def prepare_selection(self, window_combobox, exposure_spinner):
225
- """
226
- Make sure the given combobox can be used to choose the window and the
227
- given spinner can be used to choose the exposure.
228
-
229
- Args:
230
- - window_combobox: Combobox used to select the window.
231
- - exposure_spinner: Spinner used to select the exposure for the current window.
232
- """
233
-
234
- window_combobox.clear()
235
-
236
- sorted_windows = sorted(self._windows)
237
-
238
- for idx, d in enumerate(sorted_windows):
239
- if d.startswith("WINDOW"):
240
- window_combobox.append_text(d)
241
-
242
- self.select_window(window_combobox, 0, exposure_spinner)
243
-
244
- window_combobox.add_callback("activated", self.select_window, exposure_spinner)
245
- exposure_spinner.add_callback("value-changed", self.select_exposure)
246
-
247
- def select_window(self, window_combobox, selected_window, exposure_spinner):
248
- """
249
- Select the given window and update the spinner to select the exposure for this
250
- window. When a new FITS file is loaded or when the currently selected exposure
251
- is not available for the newly selected window, the first exposure of the newly
252
- selected will be selected in the spinner and displayed in the central widget of the
253
- image viewer.
254
-
255
- Args:
256
- - window_combobox: Combobox used to select the window.
257
- - selected_window: Index (not the name!) of the new window selected by the
258
- combobox.
259
- - exposure_spinner: Spinner used to select the exposure for the current window.
260
- """
261
-
262
- self.selected_window = self.w.window_combobox.get_text()
263
-
264
- # Update the range of exposures that can be selected for the newly selected window
265
-
266
- lower, upper = 1, len(self._windows[self.selected_window])
267
- exposure_spinner.set_limits(lower, upper, incr_value=1)
268
-
269
- # If the newly selected window doesn't have as many exposures as the index of the
270
- # previously selected exposure (for the previously selected window), select the
271
- # first exposure (counting of the exposures starts at 1, conform the FITS convention).
272
- # Otherwise, the same exposure will be selected as before (but for the newly selected
273
- # window instead).
274
-
275
- if self.selected_exposure > len(self._windows[self.selected_window]):
276
- self.selected_exposure = 1
277
- exposure_spinner.set_value(self.selected_exposure)
278
-
279
- # Convert the selected window and exposure to slice index in the FITS file
280
-
281
- slice_index = self._windows[self.selected_window][self.selected_exposure - 1]
282
-
283
- # Display the image in the central widget of the image viewer
284
-
285
- self.set_hdu(slice_index)
286
-
287
- def select_exposure(self, exposure_spinner, selected_exposure):
288
-
289
- """
290
- Display the given exposure in the central widget of the image viewer, if the value
291
- of the given spinner changes to the given value for the current window.
292
-
293
- Args:
294
- - exposure_spinner: Spinner used to select the exposure for the current window.
295
- - selected_exposure: New exposure selected by the given spinner.
296
- """
297
-
298
- self.selected_exposure = selected_exposure
299
-
300
- # Convert the selected window and exposure to slice index in the FITS file
301
-
302
- slice_index = self._windows[self.selected_window][selected_exposure - 1]
303
-
304
- # Display the image in the central widget of the image viewer
305
-
306
- self.set_hdu(slice_index)
307
-
308
- def set_hdu(self, slice_index):
309
- """
310
- Display the given slice from the FITS file in the central widget of the image viewer.
311
-
312
- Args:
313
- - slice_index: Index of the slice that needs to be displayed.
314
- """
315
-
316
- self.logger.debug("Loading index #%d" % (slice_index))
317
-
318
- info = self.file_obj.get_info_idx(slice_index)
319
- aidx = (info.name, info.extver) # (window, exposure)
320
-
321
- if aidx not in self.hdu_dct:
322
- aidx = slice_index
323
- sfx = iohelper.get_hdu_suffix(aidx)
324
-
325
- name = self.current_image.get('name', iohelper.name_image_from_path(self.path))
326
- match = re.match(r'^(.+)\[(.+)\]$', name)
327
- if match:
328
- name = match.group(1)
329
-
330
- imname = name + sfx
331
- chname = self.chname
332
- chinfo = self.channel
333
-
334
- # The image is still in memory
335
-
336
- if imname in chinfo.datasrc:
337
-
338
- self.curhdu = slice_index
339
- self.fv.switch_name(chname, imname)
340
-
341
- return
342
-
343
- # The image is not in memory -> load it
344
-
345
- self.logger.debug("Index %d not in memory; refreshing from file" % (slice_index))
346
-
347
- def _load_idx(image):
348
-
349
- try:
350
-
351
- # Create a future for re-constituting this HDU
352
-
353
- future = Future.Future()
354
- future.freeze(self.fv.load_image, self.path, idx=aidx)
355
- image.set(path=self.path, idx=aidx, name=imname, image_future=future)
356
-
357
- self.fv.add_image(imname, image, chname=chname)
358
- self.curhdu = slice_index
359
- self.logger.debug("HDU #%d loaded." % (slice_index))
360
-
361
- except Exception as e:
362
-
363
- errmsg = "Error loading FITS HDU #%d: %s" % (slice_index, str(e))
364
- self.logger.error(errmsg)
365
- self.fv.show_error(errmsg, raisetab=True)
366
-
367
- self.file_obj.load_idx_cont(slice_index, _load_idx)
368
-
369
- if self.w.alignment_checkbox.get_state():
370
-
371
- self.align_hdu_with_focal_plane()
372
-
373
- else:
374
-
375
- self.align_hdu_with_ccd()
376
-
377
- def prepare_alignment(self, alignment_checkbox):
378
-
379
- """
380
- Make sure the checkbox can be used to choose whether to align with
381
- the focal-plane or the CCD reference frame.
382
-
383
- Args:
384
- - alignment_checkbox: Checkbox used to choose the alignment.
385
- """
386
-
387
- alignment_checkbox.add_callback("activated", self.align_hdu)
388
-
389
- def align_hdu(self, alignment_checkbox, is_checked):
390
-
391
- """
392
- Make sure the images in the central widget of the image viewer are showed aligned
393
- to either the focal-plane or CCD reference frame, depending on the state of the
394
- checkbox.
395
-
396
- Args:
397
- - alignment_checkbox: Checkbox used to choose the alignment.
398
- - is_checked: New state of the checkbox.
399
- """
400
-
401
- # Checked -> align with the focal-plane reference frame
402
-
403
- if is_checked:
404
-
405
- self.align_hdu_with_focal_plane()
406
-
407
- # Unchecked -> align with the CCD reference frame
408
-
409
- else:
410
-
411
- self.align_hdu_with_ccd()
412
-
413
- def align_hdu_with_focal_plane(self):
414
-
415
- """
416
- From now on, show the images in the central widget of the image viewer aligned
417
- with the focal-plane reference frame. The rotation angle is read from the "CROTA2"
418
- keyword in the FITS header.
419
- """
420
-
421
- header = self.channel.get_current_image().get_header()
422
- # header = self.fitsimage.get_image().get_header()
423
- keys = list(header.keys())
424
-
425
- if "CROTA2" in keys:
426
-
427
- rotation_angle = header.get_card("CROTA2")["value"]
428
- self.t_.set(rot_deg=rotation_angle)
429
-
430
- else:
431
- # TODO
432
- pass
433
-
434
- def align_hdu_with_ccd(self):
435
-
436
- """
437
- From now on, show the images in the central widget of the image viewer aligned
438
- with the CCD reference frame (i.e. zero rotation).
439
- """
440
-
441
- self.t_.set(rot_deg=0)
442
-
443
- def close(self):
444
-
445
- """
446
- Close action (to execute when the "Close" button is pushed).
447
- """
448
-
449
- self.fv.stop_local_plugin(self.chname, str(self))
450
-
451
- return True
452
-
453
- def stop(self):
454
-
455
- """
456
- Stop the plugin. Set the variables to None.
457
- """
458
-
459
- self.gui_up = False
460
-
461
- if self.file_obj is not None:
462
- try:
463
- self.file_obj.close()
464
- except Exception:
465
- pass
466
-
467
- self.file_obj = None
468
- self.path = None
469
- self.hdu_dct = None
470
- self._windows = None
471
-
472
- self.fv.show_status("")
473
-
474
- def __str__(self):
475
- return 'exposureselection'