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.
- README.md +27 -0
- bump.py +85 -0
- cgse-2025.0.2.dist-info/METADATA +38 -0
- cgse-2025.0.2.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.2.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -233
- egse/alert/alertman_ui.py +0 -600
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -132
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1240
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -138
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -137
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -165
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -834
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -71
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -920
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -113
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -180
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/remove_lines_between_matches.py +0 -188
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- 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
|
egse/images/stop-button.svg
DELETED
|
@@ -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
|
egse/images/switch-off.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="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
|
egse/images/update-button.svg
DELETED
|
@@ -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'
|