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,283 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module defines the basic classes to access the Hamamatsu lamp connected to the
|
|
3
|
-
EQ99 Manager controller that will be used in the IAS and INTA TVAC setup.
|
|
4
|
-
"""
|
|
5
|
-
import logging
|
|
6
|
-
|
|
7
|
-
from egse.decorators import dynamic_interface
|
|
8
|
-
from egse.device import DeviceInterface
|
|
9
|
-
from egse.lampcontrol import LampError
|
|
10
|
-
from egse.lampcontrol.energetiq.lampEQ99_devif import LampEQ99Error, LampEQ99USBInterface
|
|
11
|
-
from egse.proxy import Proxy
|
|
12
|
-
from egse.settings import Settings
|
|
13
|
-
from egse.zmq_ser import connect_address
|
|
14
|
-
|
|
15
|
-
LOGGER = logging.getLogger(__name__)
|
|
16
|
-
CTRL_SETTINGS = Settings.load("Lamp EQ99 Control Server")
|
|
17
|
-
DEVICE_SETTINGS = Settings.load(filename="eq99.yaml")
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class LampEQ99Interface(DeviceInterface):
|
|
21
|
-
"""
|
|
22
|
-
Interface definition for the Lamp EQ-99 Manager Controller, Simulator and Proxy..
|
|
23
|
-
"""
|
|
24
|
-
@dynamic_interface
|
|
25
|
-
def get_id(self, *args, **kwargs):
|
|
26
|
-
"""
|
|
27
|
-
Send a command string to the device and wait for a response.
|
|
28
|
-
|
|
29
|
-
Returns:
|
|
30
|
-
a response from the device.
|
|
31
|
-
"""
|
|
32
|
-
return NotImplemented
|
|
33
|
-
|
|
34
|
-
@dynamic_interface
|
|
35
|
-
def info(self) -> str:
|
|
36
|
-
"""
|
|
37
|
-
Retrieve basic information about the Lamp controller.
|
|
38
|
-
|
|
39
|
-
Returns:
|
|
40
|
-
a multiline string with information about the device.
|
|
41
|
-
"""
|
|
42
|
-
return NotImplemented
|
|
43
|
-
|
|
44
|
-
@dynamic_interface
|
|
45
|
-
def get_lamp_time(self):
|
|
46
|
-
"""
|
|
47
|
-
Queries the lamp runtime
|
|
48
|
-
|
|
49
|
-
Returns:
|
|
50
|
-
The number of hours accumulated while the lamp was on. The value is in hours.
|
|
51
|
-
"""
|
|
52
|
-
return NotImplemented
|
|
53
|
-
|
|
54
|
-
@dynamic_interface
|
|
55
|
-
def set_lamp_time(self):
|
|
56
|
-
"""
|
|
57
|
-
Resets the lamp runtime to the new value in hours.
|
|
58
|
-
|
|
59
|
-
Args:
|
|
60
|
-
_time: int value in hours
|
|
61
|
-
"""
|
|
62
|
-
return NotImplemented
|
|
63
|
-
|
|
64
|
-
@dynamic_interface
|
|
65
|
-
def get_lamp(self):
|
|
66
|
-
"""
|
|
67
|
-
Queries the lamp output states
|
|
68
|
-
|
|
69
|
-
Returns:
|
|
70
|
-
Returns the output state. Will return true as soon as the turned on process has started, even if the lamp
|
|
71
|
-
has not yet turned on. To determine the lamp and laser state use get_lamp_state
|
|
72
|
-
"""
|
|
73
|
-
return NotImplemented
|
|
74
|
-
|
|
75
|
-
@dynamic_interface
|
|
76
|
-
def set_lamp(self):
|
|
77
|
-
"""
|
|
78
|
-
Turns the lamp output on or off
|
|
79
|
-
Args:
|
|
80
|
-
enable(bin)
|
|
81
|
-
"""
|
|
82
|
-
return NotImplemented
|
|
83
|
-
|
|
84
|
-
@dynamic_interface
|
|
85
|
-
def get_lamp_status(self):
|
|
86
|
-
"""
|
|
87
|
-
Queries LDLS condition register
|
|
88
|
-
|
|
89
|
-
Returns:
|
|
90
|
-
Returns the LDLS condition register. The condition register reflects the state of the instrument at the
|
|
91
|
-
time the condition register is read.
|
|
92
|
-
|
|
93
|
-
Bit Value Description
|
|
94
|
-
0 1 Interlock
|
|
95
|
-
1 2 Controller not detected
|
|
96
|
-
2 4 Controller fault
|
|
97
|
-
3 8 Lamp fault
|
|
98
|
-
4 16 Output on
|
|
99
|
-
5 32 Lamp on
|
|
100
|
-
6 64 Laser on
|
|
101
|
-
7 128 Laser stable
|
|
102
|
-
8 256 Shutter open
|
|
103
|
-
|
|
104
|
-
"""
|
|
105
|
-
return NotImplemented
|
|
106
|
-
|
|
107
|
-
@dynamic_interface
|
|
108
|
-
def lamp_errors(self):
|
|
109
|
-
"""
|
|
110
|
-
Queries for errors
|
|
111
|
-
|
|
112
|
-
Returns:
|
|
113
|
-
Returns a comma delimited list of error codes with a string description included.
|
|
114
|
-
If no error has occurred, a 0 is returned.
|
|
115
|
-
"""
|
|
116
|
-
return NotImplemented
|
|
117
|
-
|
|
118
|
-
@dynamic_interface
|
|
119
|
-
def ldls_reset(self):
|
|
120
|
-
"""
|
|
121
|
-
Resets the instrument to the factory default and the ouput is shut off. The unit remains in remote mode
|
|
122
|
-
|
|
123
|
-
"""
|
|
124
|
-
return NotImplemented
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
class LampEQ99Simulator(LampEQ99Interface):
|
|
128
|
-
"""
|
|
129
|
-
The Lamp Simulator class.
|
|
130
|
-
"""
|
|
131
|
-
|
|
132
|
-
def __init__(self):
|
|
133
|
-
self._connected = True
|
|
134
|
-
self.lamp_operation = False
|
|
135
|
-
self.lamp_time = 36
|
|
136
|
-
self.error_message = '0' # '0' means no error (lampEQ99 user manual p.21). Error message example (from lampEQ99 user manual p.22) : self.error_message = '201,"Out of range",124,"Data mismatch"'
|
|
137
|
-
|
|
138
|
-
def is_connected(self):
|
|
139
|
-
return self._connected
|
|
140
|
-
|
|
141
|
-
def is_simulator(self):
|
|
142
|
-
return True
|
|
143
|
-
|
|
144
|
-
def connect(self):
|
|
145
|
-
self._connected = True
|
|
146
|
-
|
|
147
|
-
def disconnect(self):
|
|
148
|
-
self._connected = False
|
|
149
|
-
|
|
150
|
-
def reconnect(self):
|
|
151
|
-
self._connected = True
|
|
152
|
-
|
|
153
|
-
def get_id(self):
|
|
154
|
-
pass
|
|
155
|
-
|
|
156
|
-
def ldls_reset(self):
|
|
157
|
-
pass
|
|
158
|
-
|
|
159
|
-
def get_lamp_time(self):
|
|
160
|
-
return self.lamp_time
|
|
161
|
-
|
|
162
|
-
def lamp_errors(self):
|
|
163
|
-
return f"Error Message: {self.error_message}"
|
|
164
|
-
|
|
165
|
-
def set_lamp(self, _enable):
|
|
166
|
-
self.lamp_operation = _enable
|
|
167
|
-
|
|
168
|
-
def get_lamp(self):
|
|
169
|
-
return self.lamp_operation
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
class LampEQ99Controller(LampEQ99Interface):
|
|
173
|
-
"""The LampEQ99Controller allows controlling a Hamamatsu Lamp."""
|
|
174
|
-
|
|
175
|
-
def __init__(self):
|
|
176
|
-
"""Initialize the EQ-99 Manager Controller interface."""
|
|
177
|
-
|
|
178
|
-
super().__init__()
|
|
179
|
-
|
|
180
|
-
LOGGER.debug("Initializing EQ99 Manager")
|
|
181
|
-
|
|
182
|
-
try:
|
|
183
|
-
self.lamp = LampEQ99USBInterface()
|
|
184
|
-
self.lamp.connect()
|
|
185
|
-
except LampEQ99Error as exc:
|
|
186
|
-
LOGGER.warning(f"LampError caught: Couldn't establish connection ({exc})")
|
|
187
|
-
raise LampError(
|
|
188
|
-
"Couldn't establish a connection with the Lamp EQ-99 controller."
|
|
189
|
-
) from exc
|
|
190
|
-
|
|
191
|
-
def connect(self):
|
|
192
|
-
"""Connects to the Lamp device.
|
|
193
|
-
|
|
194
|
-
Raises:
|
|
195
|
-
DeviceNotFoundError: when the Lamp device is not connected.
|
|
196
|
-
"""
|
|
197
|
-
if not self.lamp.is_connected():
|
|
198
|
-
try:
|
|
199
|
-
self.lamp.connect()
|
|
200
|
-
except LampEQ99Error as exc:
|
|
201
|
-
LOGGER.warning(f"LampEQ99Error caught: Couldn't establish connection ({exc})")
|
|
202
|
-
|
|
203
|
-
def disconnect(self):
|
|
204
|
-
self.lamp.disconnect()
|
|
205
|
-
|
|
206
|
-
def reconnect(self):
|
|
207
|
-
if self.is_connected():
|
|
208
|
-
self.disconnect()
|
|
209
|
-
self.connect()
|
|
210
|
-
|
|
211
|
-
def is_connected(self):
|
|
212
|
-
"""Check if the Lamp Controller is connected."""
|
|
213
|
-
return self.lamp.is_connected()
|
|
214
|
-
|
|
215
|
-
def is_simulator(self):
|
|
216
|
-
return False
|
|
217
|
-
|
|
218
|
-
def get_id(self):
|
|
219
|
-
self.lamp.write_message("*IDN?")
|
|
220
|
-
_id = self.lamp.read_message()
|
|
221
|
-
return _id
|
|
222
|
-
|
|
223
|
-
def ldls_reset(self):
|
|
224
|
-
self.lamp.write_message("*RST")
|
|
225
|
-
|
|
226
|
-
def lamp_errors(self):
|
|
227
|
-
self.lamp.write_message("ERRSTR?")
|
|
228
|
-
_errmsg = self.lamp.read_message()[:-1] # [:-1] is to remove the unwanted last character '\r'
|
|
229
|
-
return(f"Error Message: {_errmsg}")
|
|
230
|
-
|
|
231
|
-
def get_lamp_status(self):
|
|
232
|
-
"Query LDLS condition register"
|
|
233
|
-
self.lamp.write_message("LDLS:COND?")
|
|
234
|
-
_lamp = self.lamp.read_message()[:-1]
|
|
235
|
-
return(_lamp)
|
|
236
|
-
|
|
237
|
-
def set_lamp(self, _enable):
|
|
238
|
-
"Turns the ouput on/off"
|
|
239
|
-
self.lamp.write_message("LDLS:OUTput {}".format(str(_enable))) # _enable can be either bool or 0 or 1
|
|
240
|
-
|
|
241
|
-
def get_lamp(self):
|
|
242
|
-
"""Query the lamp output state.
|
|
243
|
-
Will return true as soon as the turned on process has started, even if the lamp has not yet turned on.
|
|
244
|
-
To determine the lamp and laser state, use get_lamp_status function"""
|
|
245
|
-
self.lamp.write_message("LDLS:OUTput?")
|
|
246
|
-
_lamp = self.lamp.read_message() # _lamp is either '0\r' or '1\r' so _lamp is a str and not a bool
|
|
247
|
-
_lamp = bool(int(_lamp)) # now _lamp is a bool
|
|
248
|
-
return(_lamp)
|
|
249
|
-
|
|
250
|
-
def set_lamp_time(self, _time):
|
|
251
|
-
"Resets the Run time of the lifetime to the specified value (in hours). Useful to set to zero after Lamp replacement."
|
|
252
|
-
self.lamp.write_message("LDLS:LAMPTIME {}".format(int(_time)))
|
|
253
|
-
|
|
254
|
-
def get_lamp_time(self):
|
|
255
|
-
"Query the lamp runtime (in hours)."
|
|
256
|
-
self.lamp.write_message("LDLS:LAMPTIME?")
|
|
257
|
-
_lamp = self.lamp.read_message()[:-1]
|
|
258
|
-
return(_lamp)
|
|
259
|
-
|
|
260
|
-
def _beep(self):
|
|
261
|
-
"This is only used for debugging purposes"
|
|
262
|
-
self.lamp._beep()
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
class LampEQ99Proxy(Proxy, LampEQ99Interface):
|
|
266
|
-
"""The LampEQ99Proxy class is used to connect to the control server and send commands to
|
|
267
|
-
the Lamp device remotely."""
|
|
268
|
-
|
|
269
|
-
def __init__(
|
|
270
|
-
self,
|
|
271
|
-
protocol=CTRL_SETTINGS.PROTOCOL,
|
|
272
|
-
hostname=CTRL_SETTINGS.HOSTNAME,
|
|
273
|
-
port=CTRL_SETTINGS.COMMANDING_PORT,
|
|
274
|
-
):
|
|
275
|
-
"""
|
|
276
|
-
Args:
|
|
277
|
-
protocol: the transport protocol [default is taken from settings file]
|
|
278
|
-
hostname: location of the control server (IP address)
|
|
279
|
-
[default is taken from settings file]
|
|
280
|
-
port: TCP port on which the control server is listening for commands
|
|
281
|
-
[default is taken from settings file]
|
|
282
|
-
"""
|
|
283
|
-
super().__init__(connect_address(protocol, hostname, port))
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import click
|
|
3
|
-
import logging
|
|
4
|
-
import sys
|
|
5
|
-
import zmq
|
|
6
|
-
|
|
7
|
-
from egse.control import ControlServer
|
|
8
|
-
from egse.settings import Settings
|
|
9
|
-
from egse.lampcontrol.energetiq.lampEQ99 import LampEQ99Proxy
|
|
10
|
-
from egse.lampcontrol.energetiq.lampEQ99_protocol import LampEQ99Protocol
|
|
11
|
-
from prometheus_client import start_http_server
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
logger = logging.getLogger(__name__)
|
|
15
|
-
|
|
16
|
-
# Restrict the logging output for the following loggers.
|
|
17
|
-
|
|
18
|
-
# Note that, in production, the logging level for the different loggers can be changed with a
|
|
19
|
-
# service command `set_logging_level(logger_name, level)`.
|
|
20
|
-
|
|
21
|
-
logger_levels = [
|
|
22
|
-
("egse.protocol", logging.INFO),
|
|
23
|
-
("egse.command", logging.INFO),
|
|
24
|
-
("egse.settings", logging.INFO),
|
|
25
|
-
]
|
|
26
|
-
|
|
27
|
-
for name, level in logger_levels:
|
|
28
|
-
logger = logging.getLogger(name)
|
|
29
|
-
logger.setLevel(level)
|
|
30
|
-
|
|
31
|
-
CTRL_SETTINGS = Settings.load("Lamp EQ99 Control Server")
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
class LampControlServer(ControlServer):
|
|
35
|
-
"""
|
|
36
|
-
LampControlServer - Command and monitor the Lamp EQ99 Controllers.
|
|
37
|
-
This class works as a command and monitoring server to control the Lamp Controller remotely.
|
|
38
|
-
The sever binds to the following ZeroMQ sockets:
|
|
39
|
-
* a REQ-REP socket that can be used as a command server. Any client can connect and
|
|
40
|
-
send a command to the Lamp controller.
|
|
41
|
-
* a PUB-SUP socket that serves as a monitoring server. It will send out Lamp status
|
|
42
|
-
information to all the connected clients every DELAY seconds.
|
|
43
|
-
"""
|
|
44
|
-
|
|
45
|
-
def __init__(self):
|
|
46
|
-
super().__init__()
|
|
47
|
-
|
|
48
|
-
self.device_protocol = LampEQ99Protocol(self)
|
|
49
|
-
|
|
50
|
-
self.logger.debug(f"Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}")
|
|
51
|
-
|
|
52
|
-
self.device_protocol.bind(self.dev_ctrl_cmd_sock)
|
|
53
|
-
|
|
54
|
-
self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
|
|
55
|
-
|
|
56
|
-
def get_communication_protocol(self):
|
|
57
|
-
return CTRL_SETTINGS.PROTOCOL
|
|
58
|
-
|
|
59
|
-
def get_commanding_port(self):
|
|
60
|
-
return CTRL_SETTINGS.COMMANDING_PORT
|
|
61
|
-
|
|
62
|
-
def get_service_port(self):
|
|
63
|
-
return CTRL_SETTINGS.SERVICE_PORT
|
|
64
|
-
|
|
65
|
-
def get_monitoring_port(self):
|
|
66
|
-
return CTRL_SETTINGS.MONITORING_PORT
|
|
67
|
-
|
|
68
|
-
def get_storage_mnemonic(self):
|
|
69
|
-
try:
|
|
70
|
-
return CTRL_SETTINGS.STORAGE_MNEMONIC
|
|
71
|
-
except AttributeError:
|
|
72
|
-
return "EQ99"
|
|
73
|
-
|
|
74
|
-
def before_serve(self):
|
|
75
|
-
start_http_server(CTRL_SETTINGS.METRICS_PORT)
|
|
76
|
-
|
|
77
|
-
@click.group()
|
|
78
|
-
def cli():
|
|
79
|
-
pass
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
@cli.command()
|
|
83
|
-
@click.option("--simulator", "--sim", is_flag=True, help="Start the EQ99 Lamp Simulator as the backend.")
|
|
84
|
-
def start(simulator):
|
|
85
|
-
"""Start the EQ99 Lamp Control Server."""
|
|
86
|
-
|
|
87
|
-
if simulator:
|
|
88
|
-
|
|
89
|
-
Settings.set_simulation_mode(True)
|
|
90
|
-
|
|
91
|
-
try:
|
|
92
|
-
|
|
93
|
-
controller = LampControlServer()
|
|
94
|
-
controller.serve()
|
|
95
|
-
|
|
96
|
-
except KeyboardInterrupt:
|
|
97
|
-
|
|
98
|
-
print("Shutdown requested...exiting")
|
|
99
|
-
|
|
100
|
-
except SystemExit as exit_code:
|
|
101
|
-
|
|
102
|
-
print("System Exit with code {}.".format(exit_code))
|
|
103
|
-
sys.exit(exit_code)
|
|
104
|
-
|
|
105
|
-
except Exception:
|
|
106
|
-
|
|
107
|
-
logger.exception("Cannot start the EQ99 Lamp Control Server")
|
|
108
|
-
|
|
109
|
-
# The above line does exactly the same as the traceback, but on the logger
|
|
110
|
-
# import traceback
|
|
111
|
-
# traceback.print_exc(file=sys.stdout)
|
|
112
|
-
|
|
113
|
-
return 0
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
@cli.command()
|
|
117
|
-
def stop():
|
|
118
|
-
"""Send a 'quit_server' command to the EQ99 Lamp Control Server."""
|
|
119
|
-
|
|
120
|
-
with LampEQ99Proxy() as proxy:
|
|
121
|
-
|
|
122
|
-
sp = proxy.get_service_proxy()
|
|
123
|
-
sp.quit_server()
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
if __name__ == "__main__":
|
|
127
|
-
|
|
128
|
-
sys.exit(cli())
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
The device interface for the LDLS Lamp controller that will be used at IAS and INTA for TVAC the PLATO Cameras.
|
|
3
|
-
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
import datetime
|
|
7
|
-
import logging
|
|
8
|
-
import time
|
|
9
|
-
|
|
10
|
-
import pylibftdi
|
|
11
|
-
|
|
12
|
-
from egse.device import DeviceConnectionError
|
|
13
|
-
from egse.command import ClientServerCommand
|
|
14
|
-
from egse.exceptions import DeviceNotFoundError
|
|
15
|
-
from egse.settings import Settings
|
|
16
|
-
|
|
17
|
-
logger = logging.getLogger(__name__)
|
|
18
|
-
|
|
19
|
-
ctrl_settings = Settings.load("Lamp EQ99 Controller")
|
|
20
|
-
|
|
21
|
-
IDENTIFICATION_QUERY = "*IDN?"
|
|
22
|
-
DEVICE_NAME = "Lamp EQ99"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class LampEQ99Error(Exception):
|
|
26
|
-
"""Base exception for all Lamp errors."""
|
|
27
|
-
pass
|
|
28
|
-
|
|
29
|
-
class LampEQ99Command(ClientServerCommand):
|
|
30
|
-
def get_cmd_string(self, *args, **kwargs) -> str:
|
|
31
|
-
out = super().get_cmd_string(*args, **kwargs)
|
|
32
|
-
return out + "\n"
|
|
33
|
-
|
|
34
|
-
class LampEQ99USBInterface:
|
|
35
|
-
def __init__(self):
|
|
36
|
-
"Init parameters"
|
|
37
|
-
"FTDI UART driver need to be installed: a CD is provided by the manufacturer"
|
|
38
|
-
|
|
39
|
-
self._lamp = None
|
|
40
|
-
self.baudrate = ctrl_settings.BAUDRATE
|
|
41
|
-
self.device_id = ctrl_settings.DEVICE_ID
|
|
42
|
-
|
|
43
|
-
self.is_connection_open = False
|
|
44
|
-
|
|
45
|
-
def connect(self):
|
|
46
|
-
"Low level interface to the FTDIUART"
|
|
47
|
-
|
|
48
|
-
# Sanity checks:
|
|
49
|
-
if self.is_connection_open:
|
|
50
|
-
logger.warning("Trying to connect to an already connected device")
|
|
51
|
-
return
|
|
52
|
-
|
|
53
|
-
try:
|
|
54
|
-
self._lamp = pylibftdi.Device(mode='t', device_id=self.device_id)
|
|
55
|
-
|
|
56
|
-
# EQ99 Manager uses full size USB Type B socket. Any USB 1.1 or 2.0 certified socked with the following config
|
|
57
|
-
# might be used (from manual)
|
|
58
|
-
# Baud rate = 38400
|
|
59
|
-
self._lamp.baudrate = self.baudrate
|
|
60
|
-
# 8 data bits, 1 stop bit, no parity
|
|
61
|
-
self._lamp.ftdi_fn.ftdi_set_line_property(8, 1, 0)
|
|
62
|
-
|
|
63
|
-
# Pre purge dwell 50 ms
|
|
64
|
-
time.sleep(50.0 / 1000)
|
|
65
|
-
|
|
66
|
-
# Purge the device
|
|
67
|
-
self._lamp.flush(pylibftdi.FLUSH_BOTH)
|
|
68
|
-
|
|
69
|
-
# Post purge dwell 50 ms
|
|
70
|
-
time.sleep(50.0 / 1000)
|
|
71
|
-
|
|
72
|
-
#Ensure to disable flow control. Failure to do so will prevent the instrument from sending data back to PC
|
|
73
|
-
self._lamp.ftdi_fn.ftdi_setflowctrl(0)
|
|
74
|
-
|
|
75
|
-
except (ValueError, Exception) as exc:
|
|
76
|
-
logger.warning(f"Could not open USB FTDI device: {exc}")
|
|
77
|
-
raise DeviceNotFoundError("Could not open USB FTDI device.") from exc
|
|
78
|
-
|
|
79
|
-
try:
|
|
80
|
-
logger.debug(f"Connecting tu UART device named: {self.device_id}")
|
|
81
|
-
self._lamp.open()
|
|
82
|
-
except OSError as exc:
|
|
83
|
-
raise DeviceConnectionError(DEVICE_NAME, f"OSError caught ({exc})") from exc
|
|
84
|
-
|
|
85
|
-
self.is_connection_open = True
|
|
86
|
-
|
|
87
|
-
response = self.get_id()
|
|
88
|
-
|
|
89
|
-
if self.device_id in response:
|
|
90
|
-
logger.info("Well connected to the EQ99 Manager")
|
|
91
|
-
|
|
92
|
-
def disconnect(self):
|
|
93
|
-
"""
|
|
94
|
-
Disconnects from the device
|
|
95
|
-
Raises:
|
|
96
|
-
DeviceConnectionError when the connection has not been closed correctly
|
|
97
|
-
|
|
98
|
-
"""
|
|
99
|
-
try:
|
|
100
|
-
if self.is_connection_open:
|
|
101
|
-
logger.debug(f"disconnecting from {self.device_id}")
|
|
102
|
-
self._lamp.close()
|
|
103
|
-
self.is_connection_open = False
|
|
104
|
-
logger.info("EQ99 Lamp Manager device has been disconnected")
|
|
105
|
-
except Exception as e_exc:
|
|
106
|
-
raise DeviceConnectionError(
|
|
107
|
-
DEVICE_NAME, f"Couldn't close the FTDI UART: {self.device_id}") from e_exc
|
|
108
|
-
|
|
109
|
-
def is_connected(self):
|
|
110
|
-
"""Return True if the device is connected."""
|
|
111
|
-
if not self.is_connection_open:
|
|
112
|
-
return False
|
|
113
|
-
try:
|
|
114
|
-
self.write_message(IDENTIFICATION_QUERY)
|
|
115
|
-
time.sleep(0.1)
|
|
116
|
-
_id = self.read_message()
|
|
117
|
-
time.sleep(0.1)
|
|
118
|
-
except OSError: # FIXME: Check which errors are actually thrown here
|
|
119
|
-
self.disconnect()
|
|
120
|
-
return False
|
|
121
|
-
return True
|
|
122
|
-
|
|
123
|
-
def get_response(self, cmd_string):
|
|
124
|
-
pass
|
|
125
|
-
|
|
126
|
-
def get_id(self):
|
|
127
|
-
self.write_message(IDENTIFICATION_QUERY)
|
|
128
|
-
_id = self.read_message()
|
|
129
|
-
return _id
|
|
130
|
-
|
|
131
|
-
def _beep(self):
|
|
132
|
-
self.write_message("BEEP")
|
|
133
|
-
|
|
134
|
-
def write_message(self, command: str):
|
|
135
|
-
"""
|
|
136
|
-
Send a single command to the device controller without waiting for a response.
|
|
137
|
-
|
|
138
|
-
Args:
|
|
139
|
-
command: an order command for the controller.
|
|
140
|
-
"""
|
|
141
|
-
command = command + "\r" + "\n"
|
|
142
|
-
self._lamp.write(command)
|
|
143
|
-
|
|
144
|
-
def read_message(self):
|
|
145
|
-
message = ""
|
|
146
|
-
t1 = datetime.datetime.now()
|
|
147
|
-
while True:
|
|
148
|
-
_byte = self._lamp.read(1)
|
|
149
|
-
time.sleep(0.001)
|
|
150
|
-
if (datetime.datetime.now()-t1).seconds > 2:
|
|
151
|
-
logging.warning("Device timeout")
|
|
152
|
-
break
|
|
153
|
-
if _byte == "\n":
|
|
154
|
-
break
|
|
155
|
-
else:
|
|
156
|
-
message += _byte
|
|
157
|
-
|
|
158
|
-
return message
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
from typing import List, Dict
|
|
2
|
-
|
|
3
|
-
LAMP_ERRORS = {
|
|
4
|
-
0: ("No error", "No error was reported."),
|
|
5
|
-
3: ("Factory EE bad", "Error reading the factory data."),
|
|
6
|
-
4: ("User EE bad", "Error reading the user data, unit reset to factory defaults."),
|
|
7
|
-
5: ("User reset", "Unit reset to factory defaults (not an error, notification only)."),
|
|
8
|
-
6: ("User EE bad, no recovery", "Error reading the user data, could not be reset to factory defaults."),
|
|
9
|
-
10: ("Access denied", "Attempt to change protected settings without authorization."),
|
|
10
|
-
100: (
|
|
11
|
-
"General Error", "The error code is non-specific, and is generally used when no other error code is suitable."),
|
|
12
|
-
102: ("Message too long", "The message is too long to process (USB/Serial only)."),
|
|
13
|
-
123: ("Path not found", "The message used an invalid path command (USB/Serial only)."),
|
|
14
|
-
127: ("Change not allowed", "Attempt to change locked value."),
|
|
15
|
-
201: ("Data out of range",
|
|
16
|
-
"The message attempted to set a value that was outside the allowable range (USB/Serial only)."),
|
|
17
|
-
202: (
|
|
18
|
-
"Invalid data type", "When trying to parse the message, the data was in an invalid format (USB/Serial only)."),
|
|
19
|
-
303: ("Input buffer overflow", "Data was sent to the instrument faster than it could process."),
|
|
20
|
-
600: ("Interlock", "The interlock input is open."),
|
|
21
|
-
601: ("Lamp fault", "The controller is indicating a lamp fault. "
|
|
22
|
-
"Consult the EQ-99 User’s Manual for more information."),
|
|
23
|
-
602: ("Controller fault", "The controller is indicating a controller fault. "
|
|
24
|
-
"This is often caused by an open interlock condition. "
|
|
25
|
-
"If that is not the case, consult the EQ-99 User’s Manual for more information."),
|
|
26
|
-
603: ("No controller", "The EQ-99 Power Supply Controller was not detected."),
|
|
27
|
-
998: ("Command not supported", "A command was recognized but not supported by the instrument."),
|
|
28
|
-
999: ("Non-specific error", "A non-specific error was encountered."),
|
|
29
|
-
}
|
|
30
|
-
LAMP_ERROR_CODES = list(LAMP_ERRORS.keys())
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def encode_lamp_errors(errors: List[int]) -> int:
|
|
34
|
-
"""
|
|
35
|
-
Encodes the list of lamp error codes into a bitfield. The bitfield is constructed from the order of the keys
|
|
36
|
-
in the LAMP_ERRORS dictionary.
|
|
37
|
-
|
|
38
|
-
Note: when you need to add additional keys, add them at the end of the dictionary. This will guarantee proper
|
|
39
|
-
decoding of previously encoded lamp errors.
|
|
40
|
-
|
|
41
|
-
Args:
|
|
42
|
-
errors: a list of error codes as integers
|
|
43
|
-
|
|
44
|
-
Returns:
|
|
45
|
-
A integer representing the error codes as a bitfield.
|
|
46
|
-
"""
|
|
47
|
-
encoded_errors = 0
|
|
48
|
-
|
|
49
|
-
for error in errors:
|
|
50
|
-
idx = LAMP_ERROR_CODES.index(error)
|
|
51
|
-
encoded_errors |= 2 ** idx
|
|
52
|
-
|
|
53
|
-
return encoded_errors
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def decode_lamp_errors(errors: int) -> Dict[int, str]:
|
|
57
|
-
"""
|
|
58
|
-
Decodes the bitfield into the error codes and their messages.
|
|
59
|
-
|
|
60
|
-
Args:
|
|
61
|
-
errors: an integer as a bitfield of lamp errors (previously encoded with encode_lamp_errors)
|
|
62
|
-
|
|
63
|
-
Returns:
|
|
64
|
-
A dictionary of the lamp errors (key is error code, value is the description)
|
|
65
|
-
"""
|
|
66
|
-
result = {}
|
|
67
|
-
|
|
68
|
-
for shift in range(len(LAMP_ERRORS)):
|
|
69
|
-
if (errors >> shift) & 1:
|
|
70
|
-
error_code = LAMP_ERROR_CODES[shift]
|
|
71
|
-
result[error_code] = ": ".join(LAMP_ERRORS[error_code])
|
|
72
|
-
|
|
73
|
-
return result
|