cgse 2024.7.0__py3-none-any.whl → 2025.0.1__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.1.dist-info/METADATA +38 -0
- cgse-2025.0.1.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.1.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
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
from egse.control import ControlServer
|
|
2
|
-
from egse.metrics import define_metrics
|
|
3
|
-
from egse.protocol import CommandProtocol
|
|
4
|
-
from egse.settings import Settings
|
|
5
|
-
|
|
6
|
-
from egse.lampcontrol.energetiq.lampEQ99 import LampEQ99Controller, LampEQ99Interface, LampEQ99Simulator
|
|
7
|
-
from egse.lampcontrol.energetiq.lampEQ99_devif import LampEQ99Command
|
|
8
|
-
from egse.setup import load_setup
|
|
9
|
-
from egse.synoptics import SynopticsManagerProxy
|
|
10
|
-
from egse.system import format_datetime
|
|
11
|
-
from egse.zmq_ser import bind_address
|
|
12
|
-
from egse.lampcontrol.energetiq.lampEQ99_encode_decode_errors import encode_lamp_errors
|
|
13
|
-
|
|
14
|
-
COMMAND_SETTINGS = Settings.load(filename="eq99.yaml")
|
|
15
|
-
SITE_ID = Settings.load("SITE").ID
|
|
16
|
-
|
|
17
|
-
class LampEQ99Protocol(CommandProtocol):
|
|
18
|
-
def __init__(self, control_server: ControlServer):
|
|
19
|
-
super().__init__()
|
|
20
|
-
self.control_server = control_server
|
|
21
|
-
setup = load_setup()
|
|
22
|
-
|
|
23
|
-
if Settings.simulation_mode():
|
|
24
|
-
self.lamp = LampEQ99Simulator()
|
|
25
|
-
else:
|
|
26
|
-
self.lamp = LampEQ99Controller()
|
|
27
|
-
|
|
28
|
-
self.load_commands(COMMAND_SETTINGS.Commands, LampEQ99Command, LampEQ99Interface)
|
|
29
|
-
|
|
30
|
-
self.build_device_method_lookup_table(self.lamp)
|
|
31
|
-
|
|
32
|
-
self.metrics = define_metrics("EQ99", use_site=False, setup=setup)
|
|
33
|
-
self.synoptics = SynopticsManagerProxy()
|
|
34
|
-
|
|
35
|
-
def get_bind_address(self):
|
|
36
|
-
return bind_address(
|
|
37
|
-
self.control_server.get_communication_protocol(),
|
|
38
|
-
self.control_server.get_commanding_port(),
|
|
39
|
-
)
|
|
40
|
-
|
|
41
|
-
def get_status(self):
|
|
42
|
-
return super().get_status()
|
|
43
|
-
|
|
44
|
-
def get_housekeeping(self) -> dict:
|
|
45
|
-
result = dict()
|
|
46
|
-
result["timestamp"] = format_datetime()
|
|
47
|
-
|
|
48
|
-
_enable = self.lamp.get_lamp()
|
|
49
|
-
_status = self.lamp.get_lamp_status()
|
|
50
|
-
_time = self.lamp.get_lamp_time()
|
|
51
|
-
|
|
52
|
-
errors = self.lamp.lamp_errors()
|
|
53
|
-
list_code_errors = [int(error) for error in errors[len("Error Message: "):].split(",")[::2]]
|
|
54
|
-
_encoded_errors = encode_lamp_errors(list_code_errors)
|
|
55
|
-
|
|
56
|
-
_data = [_enable, _status, _time, _encoded_errors]
|
|
57
|
-
|
|
58
|
-
# TODO Incl. the laser status
|
|
59
|
-
|
|
60
|
-
for idx, key in enumerate([f"G{SITE_ID}_LAMP_ON", f"G{SITE_ID}_LAMP_STATUS", f"G{SITE_ID}_LAMP_ON_TIME", f"G{SITE_ID}_LAMP_ERRORS"]):
|
|
61
|
-
result[key] = _data[idx]
|
|
62
|
-
|
|
63
|
-
# TODO Incl. laser status ("G{SITE_ID}_LASER_ON") -> also update the TM dictionary
|
|
64
|
-
|
|
65
|
-
for key, value in result.items():
|
|
66
|
-
if key != "timestamp":
|
|
67
|
-
self.metrics[key].set(value)
|
|
68
|
-
|
|
69
|
-
self.synoptics.store_th_synoptics(result)
|
|
70
|
-
|
|
71
|
-
return result
|
|
@@ -1,465 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import logging
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
|
|
5
|
-
import sys
|
|
6
|
-
|
|
7
|
-
from egse.resource import get_resource
|
|
8
|
-
|
|
9
|
-
"""
|
|
10
|
-
Qt imports for the LampView class
|
|
11
|
-
"""
|
|
12
|
-
|
|
13
|
-
from PyQt5.QtWidgets import QApplication, QMessageBox
|
|
14
|
-
import pyqtgraph as pg
|
|
15
|
-
from PyQt5.QtGui import (QFont, QIcon, QPalette, QPixmap)
|
|
16
|
-
from PyQt5.QtWidgets import (QAction, QFrame, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QMainWindow, QVBoxLayout)
|
|
17
|
-
from PyQt5.QtCore import QTimer, QLockFile
|
|
18
|
-
from QLed import QLed
|
|
19
|
-
|
|
20
|
-
from egse.settings import Settings
|
|
21
|
-
from egse.observer import Observable
|
|
22
|
-
from egse.observer import Observer
|
|
23
|
-
from egse.state import UnknownStateError
|
|
24
|
-
from egse.config import find_file, set_logger_levels
|
|
25
|
-
|
|
26
|
-
from egse.lampcontrol.energetiq.lampEQ99 import LampEQ99Controller, LampEQ99Proxy, LampEQ99Simulator
|
|
27
|
-
|
|
28
|
-
from egse.gui import show_warning_message
|
|
29
|
-
|
|
30
|
-
from prometheus_client import start_http_server
|
|
31
|
-
from egse.process import ProcessStatus
|
|
32
|
-
import threading
|
|
33
|
-
from egse.system import do_every
|
|
34
|
-
|
|
35
|
-
MODULE_LOGGER = logging.getLogger(__name__)
|
|
36
|
-
|
|
37
|
-
# Note that, in production, the logging level for the different loggers can be changed with a
|
|
38
|
-
# service command `set_logging_level(logger_name, level)`.
|
|
39
|
-
|
|
40
|
-
logger_levels = [
|
|
41
|
-
("egse.protocol", logging.INFO),
|
|
42
|
-
("egse.command", logging.INFO),
|
|
43
|
-
("egse.settings", logging.INFO),
|
|
44
|
-
("egse.config", logging.INFO),
|
|
45
|
-
("git.cmd", logging.INFO),
|
|
46
|
-
]
|
|
47
|
-
|
|
48
|
-
set_logger_levels((logger_levels))
|
|
49
|
-
|
|
50
|
-
SETTINGS = Settings.load("Lamp EQ99 Controller")
|
|
51
|
-
FONT = QFont("Helvetica", 18)
|
|
52
|
-
|
|
53
|
-
GUI_SETTINGS = Settings.load("LAMP EQ99 GUI")
|
|
54
|
-
|
|
55
|
-
class LampUIView(QMainWindow, Observable):
|
|
56
|
-
def __init__(self):
|
|
57
|
-
super().__init__()
|
|
58
|
-
|
|
59
|
-
# Define those variables that we will need/use in different methods
|
|
60
|
-
|
|
61
|
-
self.measure = None
|
|
62
|
-
self.clear_action = None
|
|
63
|
-
self.reconnect_action = None
|
|
64
|
-
self.toolbar = None
|
|
65
|
-
|
|
66
|
-
self.setGeometry(300, 300, 1000, 500)
|
|
67
|
-
self.setWindowTitle("Energetiq Lamp EQ99 Controller")
|
|
68
|
-
|
|
69
|
-
self.init_gui()
|
|
70
|
-
|
|
71
|
-
def createToolbar(self):
|
|
72
|
-
image_location = Path(__file__).resolve().parent.parent.parent / "images"
|
|
73
|
-
|
|
74
|
-
# The Reconnect action is used to reconnect the device or control server
|
|
75
|
-
|
|
76
|
-
connected_pix = QPixmap(str(image_location / "connected-100.png"))
|
|
77
|
-
disconnected_pix = QPixmap(str(image_location / "disconnected-100.png"))
|
|
78
|
-
reconnect_icon = QIcon()
|
|
79
|
-
reconnect_icon.addPixmap(connected_pix, QIcon.Normal, QIcon.On)
|
|
80
|
-
reconnect_icon.addPixmap(disconnected_pix, QIcon.Normal, QIcon.Off)
|
|
81
|
-
|
|
82
|
-
self.reconnect_action = QAction(reconnect_icon, "Reconnect", self)
|
|
83
|
-
self.reconnect_action.setToolTip("Reconnect")
|
|
84
|
-
self.reconnect_action.setCheckable(True)
|
|
85
|
-
self.reconnect_action.triggered.connect(self.onClick)
|
|
86
|
-
|
|
87
|
-
switch_on_pix = QPixmap(str(find_file("switch-on.svg", in_dir="images")))
|
|
88
|
-
switch_off_pix = QPixmap(str(find_file("switch-off.svg", in_dir="images")))
|
|
89
|
-
switch_icon = QIcon()
|
|
90
|
-
switch_icon.addPixmap(switch_on_pix, QIcon.Normal, QIcon.On)
|
|
91
|
-
switch_icon.addPixmap(switch_off_pix, QIcon.Normal, QIcon.Off)
|
|
92
|
-
self.switch_action = QAction(switch_icon, "Control", self)
|
|
93
|
-
self.switch_action.setToolTip("Lamp ON/OFF")
|
|
94
|
-
self.switch_action.setCheckable(True)
|
|
95
|
-
self.switch_action.triggered.connect(self.set_lamp)
|
|
96
|
-
|
|
97
|
-
self.toolbar = self.addToolBar("MainToolbar")
|
|
98
|
-
self.toolbar.addAction(self.reconnect_action)
|
|
99
|
-
self.toolbar.addAction(self.switch_action)
|
|
100
|
-
|
|
101
|
-
return self.toolbar
|
|
102
|
-
|
|
103
|
-
def set_lamp(self):
|
|
104
|
-
self.actionObservers({"set_lamp" : self.switch_action.isChecked()})
|
|
105
|
-
|
|
106
|
-
def create_channel_group(self):
|
|
107
|
-
|
|
108
|
-
group_box = QGroupBox("Lamp control")
|
|
109
|
-
grid_show = QGridLayout()
|
|
110
|
-
vbox = QVBoxLayout()
|
|
111
|
-
|
|
112
|
-
self.led = QLed(self, onColour=QLed.Yellow, shape=QLed.Circle)
|
|
113
|
-
self.led.setFixedSize(20, 20)
|
|
114
|
-
self.led_error = QLed(self, onColour=QLed.Red, shape=QLed.Circle)
|
|
115
|
-
self.led_error.setFixedSize(20, 20)
|
|
116
|
-
self.label_lamp_error = QLabel("")
|
|
117
|
-
|
|
118
|
-
grid_show.addWidget(QLabel("Lamp state"), 0, 0)
|
|
119
|
-
grid_show.addWidget(self.led,1, 0)
|
|
120
|
-
grid_show.addWidget(QLabel("Lamp error"), 2, 0)
|
|
121
|
-
grid_show.addWidget(self.led_error, 3, 0)
|
|
122
|
-
grid_show.addWidget(self.label_lamp_error, 3, 1)
|
|
123
|
-
|
|
124
|
-
grid_show.setColumnStretch(1, 10)
|
|
125
|
-
|
|
126
|
-
vbox.addLayout(grid_show)
|
|
127
|
-
vbox.addStretch(1)
|
|
128
|
-
|
|
129
|
-
group_box.setLayout(vbox)
|
|
130
|
-
|
|
131
|
-
return group_box
|
|
132
|
-
|
|
133
|
-
def init_gui(self):
|
|
134
|
-
|
|
135
|
-
# Switch to using white background and black foreground for pyqtgraph stripcharts
|
|
136
|
-
|
|
137
|
-
pg.setConfigOption("background", "w")
|
|
138
|
-
pg.setConfigOption("foreground", "k")
|
|
139
|
-
|
|
140
|
-
# The main frame in which all the other frames are located, the outer Application frame
|
|
141
|
-
|
|
142
|
-
app_frame = QFrame()
|
|
143
|
-
app_frame.setObjectName("AppFrame")
|
|
144
|
-
|
|
145
|
-
hbox = QHBoxLayout()
|
|
146
|
-
self.createToolbar()
|
|
147
|
-
hbox.addWidget(self.create_channel_group())
|
|
148
|
-
|
|
149
|
-
app_frame.setLayout(hbox)
|
|
150
|
-
|
|
151
|
-
self.setCentralWidget(app_frame)
|
|
152
|
-
|
|
153
|
-
def set_style(self):
|
|
154
|
-
"""
|
|
155
|
-
Set the style for the LakeShoreUI Widget when it is connected to a real
|
|
156
|
-
Lamp Controller (hardware).
|
|
157
|
-
This will override the styles that were defined in the styles.qss style file
|
|
158
|
-
that was loaded for the Application.
|
|
159
|
-
"""
|
|
160
|
-
self.setAutoFillBackground(True)
|
|
161
|
-
self.setBackgroundRole(QPalette.Light)
|
|
162
|
-
self.setStyleSheet(
|
|
163
|
-
"""
|
|
164
|
-
QGroupBox {
|
|
165
|
-
border: 1px solid lightGray;
|
|
166
|
-
border-radius: 0px;
|
|
167
|
-
margin-top: 0px;
|
|
168
|
-
padding-top: 10px;
|
|
169
|
-
}
|
|
170
|
-
QGroupBox::title {
|
|
171
|
-
background-color: transparent;
|
|
172
|
-
padding-top: 0px;
|
|
173
|
-
padding-left: 0px;
|
|
174
|
-
}
|
|
175
|
-
"""
|
|
176
|
-
)
|
|
177
|
-
|
|
178
|
-
def set_style_simulator(self):
|
|
179
|
-
"""
|
|
180
|
-
Set the style for the LakeShoreUI Widget when it is connected to a
|
|
181
|
-
LakeSHore Simulator.
|
|
182
|
-
This will override the styles that were defined in the styles.qss style file
|
|
183
|
-
that was loaded for the Application.
|
|
184
|
-
"""
|
|
185
|
-
self.setAutoFillBackground(True)
|
|
186
|
-
self.setBackgroundRole(QPalette.Dark)
|
|
187
|
-
self.setStyleSheet(
|
|
188
|
-
"""
|
|
189
|
-
QGroupBox {
|
|
190
|
-
border: 1px solid lightGray;
|
|
191
|
-
border-radius: 0px;
|
|
192
|
-
margin-top: 0px;
|
|
193
|
-
padding-top: 10px;
|
|
194
|
-
}
|
|
195
|
-
QGroupBox::title {
|
|
196
|
-
background-color: transparent;
|
|
197
|
-
padding-top: 0px;
|
|
198
|
-
padding-left: 0px;
|
|
199
|
-
}
|
|
200
|
-
"""
|
|
201
|
-
)
|
|
202
|
-
|
|
203
|
-
def onClick(self):
|
|
204
|
-
|
|
205
|
-
sender = self.sender()
|
|
206
|
-
|
|
207
|
-
MODULE_LOGGER.debug(f"sender.text() = {sender.text()}")
|
|
208
|
-
MODULE_LOGGER.debug(f"sender.isChecked() = {sender.isChecked()}")
|
|
209
|
-
|
|
210
|
-
self.notifyObservers(sender)
|
|
211
|
-
|
|
212
|
-
def set_connection_state(self, state):
|
|
213
|
-
|
|
214
|
-
if state == "connected":
|
|
215
|
-
self.reconnect_action.setChecked(True)
|
|
216
|
-
elif state == "disconnected":
|
|
217
|
-
self.reconnect_action.setChecked(False)
|
|
218
|
-
else:
|
|
219
|
-
raise UnknownStateError(
|
|
220
|
-
f"Unknown State ({state}), expected 'connected' or 'disconnected'."
|
|
221
|
-
)
|
|
222
|
-
|
|
223
|
-
class LampUIModel:
|
|
224
|
-
def __init__(self, type_):
|
|
225
|
-
self.type = type_
|
|
226
|
-
|
|
227
|
-
if self.type == "proxy":
|
|
228
|
-
self.lamp = LampEQ99Proxy()
|
|
229
|
-
elif self.type == "direct":
|
|
230
|
-
self.lamp = LampEQ99Controller()
|
|
231
|
-
self.lamp.connect()
|
|
232
|
-
elif self.type == "simulator":
|
|
233
|
-
self.lamp = LampEQ99Simulator()
|
|
234
|
-
else:
|
|
235
|
-
raise Exception(
|
|
236
|
-
f"Unknown type of Lamp implementation passed into the model: {type}"
|
|
237
|
-
)
|
|
238
|
-
|
|
239
|
-
if self.lamp is not None:
|
|
240
|
-
MODULE_LOGGER.debug(
|
|
241
|
-
f"LampEQ99Controller initialized as {self.lamp.__class__.__name__}"
|
|
242
|
-
)
|
|
243
|
-
|
|
244
|
-
def has_commands(self):
|
|
245
|
-
if self.type == "proxy":
|
|
246
|
-
return self.lamp.has_commands()
|
|
247
|
-
return True
|
|
248
|
-
|
|
249
|
-
def load_commands(self):
|
|
250
|
-
if self.type == "proxy":
|
|
251
|
-
self.lamp.load_commands()
|
|
252
|
-
|
|
253
|
-
def is_simulator(self):
|
|
254
|
-
return self.lamp.is_simulator()
|
|
255
|
-
|
|
256
|
-
def is_connected(self):
|
|
257
|
-
if self.type == "proxy":
|
|
258
|
-
return self.lamp.is_cs_connected()
|
|
259
|
-
else:
|
|
260
|
-
return self.lamp.is_connected()
|
|
261
|
-
|
|
262
|
-
def reconnect(self):
|
|
263
|
-
if self.type == "proxy":
|
|
264
|
-
self.lamp.reconnect_cs()
|
|
265
|
-
return self.lamp.is_cs_connected()
|
|
266
|
-
else:
|
|
267
|
-
self.lamp.reconnect()
|
|
268
|
-
return self.lamp.is_connected()
|
|
269
|
-
return False
|
|
270
|
-
|
|
271
|
-
def disconnect(self):
|
|
272
|
-
if self.type == "proxy":
|
|
273
|
-
self.lamp.disconnect_cs()
|
|
274
|
-
else:
|
|
275
|
-
self.lamp.disconnect()
|
|
276
|
-
|
|
277
|
-
class LampUIController(Observer):
|
|
278
|
-
def __init__(self, model, view):
|
|
279
|
-
self.model = model
|
|
280
|
-
self.view = view
|
|
281
|
-
self.view.addObserver(self)
|
|
282
|
-
|
|
283
|
-
self.create_timer()
|
|
284
|
-
|
|
285
|
-
if self.model.is_connected():
|
|
286
|
-
self.update_values()
|
|
287
|
-
|
|
288
|
-
if self.model.is_simulator():
|
|
289
|
-
self.view.set_style_simulator()
|
|
290
|
-
else:
|
|
291
|
-
self.view.set_style()
|
|
292
|
-
|
|
293
|
-
self.view.set_connection_state("connected")
|
|
294
|
-
self.start_timer()
|
|
295
|
-
else:
|
|
296
|
-
self.stop_timer()
|
|
297
|
-
self.view.set_connection_state("disconnected")
|
|
298
|
-
|
|
299
|
-
def create_timer(self):
|
|
300
|
-
"""Create a Timer that will update the States every second."""
|
|
301
|
-
|
|
302
|
-
self.states_capture_timer = QTimer()
|
|
303
|
-
|
|
304
|
-
self.states_capture_timer.setInterval(200) # 200 ms
|
|
305
|
-
|
|
306
|
-
self.states_capture_timer.timeout.connect(self.update_values) # The update_values function is called at the end of the timer (200 ms)
|
|
307
|
-
|
|
308
|
-
self.stripchart_timer = QTimer()
|
|
309
|
-
self.stripchart_timer.setInterval(200)
|
|
310
|
-
|
|
311
|
-
def start_timer(self):
|
|
312
|
-
self.states_capture_timer.start()
|
|
313
|
-
self.stripchart_timer.start()
|
|
314
|
-
|
|
315
|
-
def stop_timer(self):
|
|
316
|
-
self.states_capture_timer.stop()
|
|
317
|
-
self.stripchart_timer.stop()
|
|
318
|
-
|
|
319
|
-
def update_values(self):
|
|
320
|
-
error_message = self.model.lamp.lamp_errors() # error_message is a string
|
|
321
|
-
lamp_errors = error_message != "Error Message: 0" # lamp_errors is Boolean : True means errors
|
|
322
|
-
#PROBLÈME : l'erreur est vidée dès qu'elle est lue donc elle ne persiste pas et selon l'erreur (dans le cas d'absence de controler notamment) elle ne reste pas affichée car une fois qu'elle est lue c'est comme s'il n'y avait plu d'erreur (dans le cas où elle n'est plu détectable (absence controler notamment) si le switch est sur off (lampe éteinte) et erreur n'existe plus puisqu'on actualise et appelle la fonction lamp_errors toutes les 200 ms
|
|
323
|
-
lamp_state = self.model.lamp.get_lamp()
|
|
324
|
-
|
|
325
|
-
self.view.label_lamp_error.setText(error_message)
|
|
326
|
-
self.view.label_lamp_error.setVisible(lamp_errors)
|
|
327
|
-
self.view.led_error.setValue(lamp_errors)
|
|
328
|
-
self.view.led.setValue(lamp_state)
|
|
329
|
-
self.view.switch_action.setChecked(lamp_state)
|
|
330
|
-
|
|
331
|
-
def update(self, changed_object):
|
|
332
|
-
|
|
333
|
-
text = changed_object.text()
|
|
334
|
-
|
|
335
|
-
if text == "Reconnect":
|
|
336
|
-
|
|
337
|
-
if changed_object.isChecked():
|
|
338
|
-
MODULE_LOGGER.debug("Reconnecting the Lamp model.")
|
|
339
|
-
if self.model.reconnect():
|
|
340
|
-
self.view.set_connection_state("connected")
|
|
341
|
-
if not self.model.has_commands():
|
|
342
|
-
self.model.load_commands()
|
|
343
|
-
self.start_timer()
|
|
344
|
-
else:
|
|
345
|
-
self.view.reconnect_action.setChecked(False)
|
|
346
|
-
else:
|
|
347
|
-
MODULE_LOGGER.debug("Disconnecting the Lamp model.")
|
|
348
|
-
self.stop_timer()
|
|
349
|
-
self.model.disconnect()
|
|
350
|
-
self.view.set_connection_state("disconnected")
|
|
351
|
-
|
|
352
|
-
return
|
|
353
|
-
|
|
354
|
-
if text == "ClearErrors":
|
|
355
|
-
self.model.clearError()
|
|
356
|
-
|
|
357
|
-
if text == "Reset":
|
|
358
|
-
pass
|
|
359
|
-
|
|
360
|
-
def do(self, actions):
|
|
361
|
-
|
|
362
|
-
for action, value in actions.items():
|
|
363
|
-
MODULE_LOGGER.debug(f"do {action} with {value}")
|
|
364
|
-
if action == "set_wavelength":
|
|
365
|
-
wavelength = value
|
|
366
|
-
print(wavelength)
|
|
367
|
-
MODULE_LOGGER.debug(f"do: set_wavelength({wavelength}:{type(wavelength)})")
|
|
368
|
-
self.model.set_wavelength(wavelength)
|
|
369
|
-
|
|
370
|
-
if action == "set_range":
|
|
371
|
-
_range, auto = value
|
|
372
|
-
MODULE_LOGGER.debug(f"do: set_range({_range}:{type(_range)}, {auto}:{type(auto)})")
|
|
373
|
-
self.model.set_range(_range, auto)
|
|
374
|
-
|
|
375
|
-
if action == "get_configuration":
|
|
376
|
-
configuration = self.model.get_configuration()
|
|
377
|
-
print(configuration)
|
|
378
|
-
self.view.update_configuration_value(configuration)
|
|
379
|
-
|
|
380
|
-
if action == "set_lamp":
|
|
381
|
-
enable = value # value is Boolean : True if switch button is ON (according to the function set_lamp defined in LampUIView class)
|
|
382
|
-
self.model.lamp.set_lamp(enable)
|
|
383
|
-
self.update_values()
|
|
384
|
-
|
|
385
|
-
def parse_arguments():
|
|
386
|
-
"""
|
|
387
|
-
Prepare the arguments that are specific for this application.
|
|
388
|
-
"""
|
|
389
|
-
parser = argparse.ArgumentParser()
|
|
390
|
-
parser.add_argument(
|
|
391
|
-
"--type",
|
|
392
|
-
dest="type",
|
|
393
|
-
action="store",
|
|
394
|
-
choices={"proxy", "simulator", "direct"},
|
|
395
|
-
help="Specify the implementation you want to connect to.",
|
|
396
|
-
default="proxy",
|
|
397
|
-
)
|
|
398
|
-
parser.add_argument(
|
|
399
|
-
"--profile",
|
|
400
|
-
default=False,
|
|
401
|
-
action="store_true",
|
|
402
|
-
help="Enable info logging messages with method profile information.",
|
|
403
|
-
)
|
|
404
|
-
args = parser.parse_args()
|
|
405
|
-
return args
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
def main():
|
|
409
|
-
lock_file = QLockFile(str(Path("~/lampEQ99_ui.app.lock").expanduser()))
|
|
410
|
-
|
|
411
|
-
logging.basicConfig(level=logging.DEBUG)
|
|
412
|
-
|
|
413
|
-
styles_location = find_file("styles.qss", in_dir="egse/gui")
|
|
414
|
-
|
|
415
|
-
args = list(sys.argv)
|
|
416
|
-
args[1:1] = ["-stylesheet", str(styles_location)]
|
|
417
|
-
app = QApplication(args)
|
|
418
|
-
app.setWindowIcon(QIcon(str(get_resource(":/icons/logo-ogse.svg"))))
|
|
419
|
-
|
|
420
|
-
if lock_file.tryLock(100):
|
|
421
|
-
|
|
422
|
-
process_status = ProcessStatus()
|
|
423
|
-
|
|
424
|
-
timer_thread = threading.Thread(target=do_every, args=(10, process_status.update))
|
|
425
|
-
timer_thread.daemon = True
|
|
426
|
-
timer_thread.start()
|
|
427
|
-
|
|
428
|
-
start_http_server(GUI_SETTINGS.METRICS_PORT)
|
|
429
|
-
|
|
430
|
-
args = parse_arguments()
|
|
431
|
-
|
|
432
|
-
if args.profile:
|
|
433
|
-
Settings.set_profiling(True)
|
|
434
|
-
|
|
435
|
-
if args.type == "proxy":
|
|
436
|
-
proxy = LampEQ99Proxy()
|
|
437
|
-
if not proxy.ping():
|
|
438
|
-
description = "Could not connect to Lamp Control Server"
|
|
439
|
-
info_text = (
|
|
440
|
-
"The GUI will start, but the connection button will show a disconnected state. "
|
|
441
|
-
"Please check if the Control Server is running and start the server if needed. "
|
|
442
|
-
"Otherwise, check if the correct HOSTNAME for the control server is set in the "
|
|
443
|
-
"Settings.yaml "
|
|
444
|
-
"configuration file."
|
|
445
|
-
)
|
|
446
|
-
|
|
447
|
-
show_warning_message(description, info_text)
|
|
448
|
-
|
|
449
|
-
view = LampUIView()
|
|
450
|
-
model = LampUIModel(args.type)
|
|
451
|
-
controller = LampUIController(model, view)
|
|
452
|
-
|
|
453
|
-
view.show()
|
|
454
|
-
return app.exec_()
|
|
455
|
-
else:
|
|
456
|
-
error_message = QMessageBox()
|
|
457
|
-
error_message.setIcon(QMessageBox.Warning)
|
|
458
|
-
error_message.setWindowTitle("Error")
|
|
459
|
-
error_message.setText("The Lamp EQ99 GUI application is already running!")
|
|
460
|
-
error_message.setStandardButtons(QMessageBox.Ok)
|
|
461
|
-
|
|
462
|
-
return error_message.exec()
|
|
463
|
-
|
|
464
|
-
if __name__ == "__main__":
|
|
465
|
-
sys.exit(main())
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|