cgse 2024.7.0__py3-none-any.whl → 2025.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +27 -0
- bump.py +85 -0
- cgse-2025.0.2.dist-info/METADATA +38 -0
- cgse-2025.0.2.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.2.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -233
- egse/alert/alertman_ui.py +0 -600
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -132
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1240
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -138
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -137
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -165
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -834
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -71
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -920
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -113
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -180
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/remove_lines_between_matches.py +0 -188
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
egse/shutter/thorlabs/sc10.yaml
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
BaseClass:
|
|
2
|
-
egse.shutter.thorlabs.sc10_interface.Sc10Interface
|
|
3
|
-
|
|
4
|
-
ProxyClass:
|
|
5
|
-
egse.shutter.thorlabs.sc10.Sc10Proxy
|
|
6
|
-
|
|
7
|
-
ControlServer:
|
|
8
|
-
egse.shutter.thorlabs.sc10_cs
|
|
9
|
-
|
|
10
|
-
Commands:
|
|
11
|
-
|
|
12
|
-
disconnect:
|
|
13
|
-
description: Disconnect from the device.
|
|
14
|
-
|
|
15
|
-
connect:
|
|
16
|
-
description: Connect to the device.
|
|
17
|
-
|
|
18
|
-
reconnect:
|
|
19
|
-
description: Reconnect to the device.
|
|
20
|
-
This command will force a disconnect and then try to re-connect to the controller.
|
|
21
|
-
is_connected:
|
|
22
|
-
description: Check if the Thorlabs Hardware Controller is connected.
|
|
23
|
-
|
|
24
|
-
is_simulator:
|
|
25
|
-
description: Ask if the control server is a simulator instead of the real controller class.
|
|
26
|
-
returns: bool | True if the far end is a simulator instead of the real hardware
|
|
27
|
-
|
|
28
|
-
get_idn:
|
|
29
|
-
description: Read the device ID string.
|
|
30
|
-
cmd: "id?\r"
|
|
31
|
-
returns: str | Model number and version revision
|
|
32
|
-
|
|
33
|
-
get_enable:
|
|
34
|
-
description: Check if the device is enabled.
|
|
35
|
-
cmd: "ens?\r"
|
|
36
|
-
returns: bool | True if enabled
|
|
37
|
-
|
|
38
|
-
toggle_enable:
|
|
39
|
-
description: Toggle the enable.
|
|
40
|
-
cmd: "ens\r"
|
|
41
|
-
|
|
42
|
-
set_mode:
|
|
43
|
-
description: Set the mode of operation. 1 - manual, 2 - auto, 3 - signal, 4 - repeat, 5 - external gate
|
|
44
|
-
args:
|
|
45
|
-
mode: int | mode of operation
|
|
46
|
-
cmd: "mode={mode}\r"
|
|
47
|
-
|
|
48
|
-
set_open_duration:
|
|
49
|
-
description: Set shutter open time.
|
|
50
|
-
args:
|
|
51
|
-
duration: int | time in ms [0 - 999999]
|
|
52
|
-
cmd: "open={duration}\r"
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from egse.serialdevice import SerialDevice
|
|
4
|
-
from egse.command import Command
|
|
5
|
-
from egse.settings import Settings
|
|
6
|
-
from egse.shutter.thorlabs.sc10_interface import Sc10Interface
|
|
7
|
-
|
|
8
|
-
logger = logging.getLogger(__name__)
|
|
9
|
-
|
|
10
|
-
# Load the device settings from the global common-egse config file
|
|
11
|
-
DEVICE_SETTINGS = Settings.load("Thorlabs SC10 Controller")
|
|
12
|
-
|
|
13
|
-
# Load the device protocol
|
|
14
|
-
DEVICE_PROTOCOL = Settings.load(filename='sc10.yaml')['Commands']
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class Sc10Controller(SerialDevice, Sc10Interface):
|
|
18
|
-
|
|
19
|
-
def __init__(self, port=None, baudrate=None, address=None):
|
|
20
|
-
|
|
21
|
-
# Load device configuration from the common-egse global config file
|
|
22
|
-
self._port = DEVICE_SETTINGS.PORT if port is None else port
|
|
23
|
-
self._baudrate = DEVICE_SETTINGS.BAUDRATE if baudrate is None else baudrate
|
|
24
|
-
|
|
25
|
-
# Create a dict of Command objects for each function
|
|
26
|
-
self._commands = {}
|
|
27
|
-
for name, items in DEVICE_PROTOCOL.items():
|
|
28
|
-
if 'cmd' in items:
|
|
29
|
-
self._commands[name] = Command(name, items['cmd'])
|
|
30
|
-
|
|
31
|
-
# Initialize the parent class with the port and baudrate
|
|
32
|
-
super().__init__(port=self._port, baudrate=self._baudrate, terminator='\r', timeout=1)
|
|
33
|
-
self.connect()
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
def get_idn(self):
|
|
37
|
-
return self.query(self._commands['get_idn'].get_cmd_string())
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def get_enable(self):
|
|
41
|
-
return self.query(self._commands['get_enable'].get_cmd_string()) == "1\r"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def toggle_enable(self):
|
|
45
|
-
return self.query(self._commands['toggle_enable'].get_cmd_string())
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
def set_mode(self, mode):
|
|
49
|
-
return self.query(self._commands['set_mode'].get_cmd_string(mode=mode))
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
def set_open_duration(self, duration):
|
|
53
|
-
return self.query(self._commands['set_open_duration'].get_cmd_string(duration=duration))
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def query(self, command: str):
|
|
57
|
-
""" Override the parent class to do some error checking on the response. """
|
|
58
|
-
|
|
59
|
-
# The device first echos the command with a promt and then sends the response.
|
|
60
|
-
# To handle this, the device is read twice.
|
|
61
|
-
_ = super().query(command)
|
|
62
|
-
response = self.read()
|
|
63
|
-
|
|
64
|
-
if len(response) == 0:
|
|
65
|
-
raise ConnectionError(f"No reply from device")
|
|
66
|
-
|
|
67
|
-
return response
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
def main():
|
|
71
|
-
logging.basicConfig()
|
|
72
|
-
|
|
73
|
-
dev = Sc10Controller()
|
|
74
|
-
print(dev.get_idn())
|
|
75
|
-
print(dev.get_enable())
|
|
76
|
-
dev.toggle_enable()
|
|
77
|
-
print(dev.get_enable())
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
if __name__ == '__main__':
|
|
81
|
-
main()
|
egse/shutter/thorlabs/sc10_cs.py
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import click
|
|
2
|
-
import logging
|
|
3
|
-
import sys
|
|
4
|
-
|
|
5
|
-
import zmq
|
|
6
|
-
from prometheus_client import start_http_server
|
|
7
|
-
|
|
8
|
-
from egse.control import ControlServer
|
|
9
|
-
from egse.settings import Settings
|
|
10
|
-
from egse.shutter.thorlabs.sc10 import Sc10Protocol, Sc10Proxy
|
|
11
|
-
|
|
12
|
-
logging.basicConfig(level=logging.DEBUG, format=Settings.LOG_FORMAT_FULL)
|
|
13
|
-
|
|
14
|
-
logger = logging.getLogger(__name__)
|
|
15
|
-
|
|
16
|
-
CTRL_SETTINGS = Settings.load("Thorlabs SC10 Control Server")
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class Sc10ControlServer(ControlServer):
|
|
20
|
-
"""
|
|
21
|
-
Sc10ControlServer - Command and monitor the Sc10 pressure sensor.
|
|
22
|
-
This class works as a command and monitoring server to control the device remotely.
|
|
23
|
-
The sever binds to the following ZeroMQ sockets:
|
|
24
|
-
* a REP socket that can be used as a command server. Any client can connect and
|
|
25
|
-
send a command to the Lamp controller.
|
|
26
|
-
* a PUB socket that serves as a monitoring server. It will send out Lamp status
|
|
27
|
-
information to all the connected clients every DELAY seconds.
|
|
28
|
-
"""
|
|
29
|
-
|
|
30
|
-
def __init__(self):
|
|
31
|
-
super().__init__()
|
|
32
|
-
|
|
33
|
-
self.device_protocol = Sc10Protocol(self)
|
|
34
|
-
|
|
35
|
-
self.logger.debug(f"Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}")
|
|
36
|
-
|
|
37
|
-
self.device_protocol.bind(self.dev_ctrl_cmd_sock)
|
|
38
|
-
|
|
39
|
-
self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
|
|
40
|
-
|
|
41
|
-
def get_communication_protocol(self):
|
|
42
|
-
return CTRL_SETTINGS.PROTOCOL
|
|
43
|
-
|
|
44
|
-
def get_commanding_port(self):
|
|
45
|
-
return CTRL_SETTINGS.COMMANDING_PORT
|
|
46
|
-
|
|
47
|
-
def get_service_port(self):
|
|
48
|
-
return CTRL_SETTINGS.SERVICE_PORT
|
|
49
|
-
|
|
50
|
-
def get_monitoring_port(self):
|
|
51
|
-
return CTRL_SETTINGS.MONITORING_PORT
|
|
52
|
-
|
|
53
|
-
def get_storage_mnemonic(self):
|
|
54
|
-
try:
|
|
55
|
-
return CTRL_SETTINGS.STORAGE_MNEMONIC
|
|
56
|
-
except AttributeError:
|
|
57
|
-
return "SC10"
|
|
58
|
-
|
|
59
|
-
def before_serve(self):
|
|
60
|
-
start_http_server(CTRL_SETTINGS.METRICS_PORT)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
@click.group()
|
|
64
|
-
def cli():
|
|
65
|
-
pass
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
@cli.command()
|
|
69
|
-
@click.option("--simulator", "--sim", is_flag=True, help="Start the SC10 Simulator as the backend.")
|
|
70
|
-
def start(simulator):
|
|
71
|
-
"""Start the SC10 Control Server."""
|
|
72
|
-
|
|
73
|
-
if simulator:
|
|
74
|
-
Settings.set_simulation_mode(True)
|
|
75
|
-
try:
|
|
76
|
-
controller = Sc10ControlServer()
|
|
77
|
-
controller.serve()
|
|
78
|
-
|
|
79
|
-
except KeyboardInterrupt:
|
|
80
|
-
print("Shutdown requested...exiting")
|
|
81
|
-
|
|
82
|
-
except SystemExit as exit_code:
|
|
83
|
-
print("System Exit with code {}.".format(exit_code))
|
|
84
|
-
sys.exit(exit_code)
|
|
85
|
-
|
|
86
|
-
except Exception:
|
|
87
|
-
|
|
88
|
-
logger.exception("Cannot start the IGM402 Control Server")
|
|
89
|
-
# The above line does exactly the same as the traceback, but on the logger
|
|
90
|
-
# import traceback
|
|
91
|
-
# traceback.print_exc(file=sys.stdout)
|
|
92
|
-
|
|
93
|
-
return 0
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
@cli.command()
|
|
97
|
-
def stop():
|
|
98
|
-
"""Send a 'quit_server' command to the Control Server."""
|
|
99
|
-
|
|
100
|
-
with Sc10Proxy() as proxy:
|
|
101
|
-
|
|
102
|
-
sp = proxy.get_service_proxy()
|
|
103
|
-
sp.quit_server()
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
if __name__ == "__main__":
|
|
107
|
-
|
|
108
|
-
sys.exit(cli())
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
from egse.device import DeviceInterface
|
|
2
|
-
from egse.decorators import dynamic_interface
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class Sc10Interface(DeviceInterface):
|
|
6
|
-
|
|
7
|
-
@dynamic_interface
|
|
8
|
-
def get_idn(self):
|
|
9
|
-
return NotImplemented
|
|
10
|
-
|
|
11
|
-
@dynamic_interface
|
|
12
|
-
def get_enable(self):
|
|
13
|
-
return NotImplemented
|
|
14
|
-
|
|
15
|
-
@dynamic_interface
|
|
16
|
-
def toggle_enable(self):
|
|
17
|
-
return NotImplemented
|
|
18
|
-
|
|
19
|
-
@dynamic_interface
|
|
20
|
-
def set_mode(self, mode):
|
|
21
|
-
return NotImplemented
|
|
22
|
-
|
|
23
|
-
@dynamic_interface
|
|
24
|
-
def set_open_duration(self, duration):
|
|
25
|
-
return NotImplemented
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
from egse.simulator import Simulator
|
|
2
|
-
from egse.shutter.thorlabs.sc10_interface import Sc10Interface
|
|
3
|
-
|
|
4
|
-
class Sc10Simulator(Sc10Interface, Simulator):
|
|
5
|
-
|
|
6
|
-
def __init__(self):
|
|
7
|
-
super().__init__()
|
|
8
|
-
self._is_enable = False
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def is_simulator(self):
|
|
12
|
-
return True
|
|
13
|
-
|
|
14
|
-
def get_idn(self):
|
|
15
|
-
return NotImplemented
|
|
16
|
-
|
|
17
|
-
def get_enable(self):
|
|
18
|
-
return self._is_enable
|
|
19
|
-
|
|
20
|
-
def toggle_enable(self):
|
|
21
|
-
if(self._is_enable):
|
|
22
|
-
self._is_enable = False
|
|
23
|
-
else:
|
|
24
|
-
self._is_enable = True
|
|
25
|
-
|
|
26
|
-
def set_mode(self, mode):
|
|
27
|
-
return NotImplemented
|
|
28
|
-
|
|
29
|
-
def set_open_duration(self, duration):
|
|
30
|
-
return NotImplemented
|
egse/simulator.py
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module is a mix-in for device simulator classes.
|
|
3
|
-
All non device specific things are handled in this class.
|
|
4
|
-
"""
|
|
5
|
-
|
|
6
|
-
from egse.device import DeviceInterface
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class Simulator(DeviceInterface):
|
|
10
|
-
|
|
11
|
-
def __init__(self):
|
|
12
|
-
self._connected = False
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def connect(self):
|
|
16
|
-
""" Connect to the device controller. """
|
|
17
|
-
self._connected = True
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
def disconnect(self):
|
|
21
|
-
""" Disconnect from the device controller. """
|
|
22
|
-
self._connected = False
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def reconnect(self):
|
|
26
|
-
""" Reconnect the device controller. """
|
|
27
|
-
self._connected = True
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def is_connected(self):
|
|
31
|
-
""" Check if the device is connected.
|
|
32
|
-
|
|
33
|
-
True if the device is connected and responds to a command, False otherwise.
|
|
34
|
-
"""
|
|
35
|
-
return self._connected
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def is_simulator(self):
|
|
39
|
-
""" Ask if the device class is a Simulator instead of the real Controller. """
|
|
40
|
-
|
|
41
|
-
return True
|
egse/slack.py
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module provides functionality to send notifications to Slack.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import json
|
|
6
|
-
import logging
|
|
7
|
-
import threading
|
|
8
|
-
|
|
9
|
-
import requests
|
|
10
|
-
|
|
11
|
-
from egse.settings import Settings
|
|
12
|
-
|
|
13
|
-
MODULE_LOGGER = logging.getLogger(__name__)
|
|
14
|
-
|
|
15
|
-
SETTINGS = Settings.load("Slack Notifications")
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
def _threaded_message(slack_msg: str):
|
|
19
|
-
|
|
20
|
-
response = requests.post(
|
|
21
|
-
SETTINGS.WEBHOOK, data=json.dumps(slack_msg), headers={'Content-Type': 'application/json'})
|
|
22
|
-
if response.status_code != 200:
|
|
23
|
-
MODULE_LOGGER.error(
|
|
24
|
-
f"Request to slack returned an error {response.status_code}, "
|
|
25
|
-
f"the response is: {response.text}"
|
|
26
|
-
)
|
|
27
|
-
else:
|
|
28
|
-
MODULE_LOGGER.warning(f"Message send successfully to Slack: {slack_msg=}")
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def send_message(msg: str):
|
|
32
|
-
|
|
33
|
-
slack_msg = {"text": msg}
|
|
34
|
-
|
|
35
|
-
thread = threading.Thread(target=_threaded_message, args=(slack_msg, ))
|
|
36
|
-
thread.start()
|
|
37
|
-
# no need to join the thread, it will be finished in about 500ms, but waiting for it
|
|
38
|
-
# might be too long in some circumstances.
|
|
39
|
-
# thread.join(timeout=1.0)
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
def send_alert(msg: str):
|
|
43
|
-
slack_msg = {
|
|
44
|
-
"blocks": [
|
|
45
|
-
{
|
|
46
|
-
"type": "section",
|
|
47
|
-
"text": {
|
|
48
|
-
"type": "mrkdwn",
|
|
49
|
-
"text": f"*Alert*: {msg}",
|
|
50
|
-
},
|
|
51
|
-
"accessory": {
|
|
52
|
-
"type": "image",
|
|
53
|
-
"image_url": "https://owncloud.ster.kuleuven.be/index.php/s/bAXKHzEGNeG2FkB/preview",
|
|
54
|
-
"alt_text": "IMPORTANT"
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
]
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
thread = threading.Thread(target=_threaded_message, args=(slack_msg, ))
|
|
61
|
-
thread.start()
|
egse/socketdevice.py
DELETED
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module defines a generic base class for ethernet socket based device interface classes.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
import socket
|
|
7
|
-
import time
|
|
8
|
-
from threading import Lock
|
|
9
|
-
|
|
10
|
-
from egse.decorators import dynamic_interface
|
|
11
|
-
from egse.device import DeviceConnectionInterface
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
logger = logging.getLogger(__name__)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class SocketDevice(DeviceConnectionInterface):
|
|
18
|
-
""" Generic base class for socket based device interface classes.
|
|
19
|
-
|
|
20
|
-
This base class handles the socket connection.
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def __init__(self, hostname=None, port=None, timeout=5):
|
|
25
|
-
self._hostname = hostname
|
|
26
|
-
self._port = port
|
|
27
|
-
self._timeout = timeout
|
|
28
|
-
self._sock = None
|
|
29
|
-
self._connected = False
|
|
30
|
-
self._lock = Lock()
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
@dynamic_interface
|
|
34
|
-
def get_idn(self):
|
|
35
|
-
""" Get the device ID string
|
|
36
|
-
|
|
37
|
-
Child classes must implement this function because it is required for `is_connected()`
|
|
38
|
-
|
|
39
|
-
Raises:
|
|
40
|
-
ConnectionError: when the connection failed.
|
|
41
|
-
"""
|
|
42
|
-
raise NotImplementedError
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def is_simulator(self):
|
|
46
|
-
return False
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
def connect(self):
|
|
50
|
-
""" Connect the ethernet socket.
|
|
51
|
-
|
|
52
|
-
Raises a ConnectionError on failure.
|
|
53
|
-
"""
|
|
54
|
-
|
|
55
|
-
# Sanity checks
|
|
56
|
-
if self._connected:
|
|
57
|
-
raise ConnectionError("Socket is already open")
|
|
58
|
-
if self._hostname in (None, ""):
|
|
59
|
-
raise ValueError("Hostname not initialized")
|
|
60
|
-
if self._port in (None, 0):
|
|
61
|
-
raise ValueError("Port number not initialized")
|
|
62
|
-
|
|
63
|
-
# Create a new socket instance
|
|
64
|
-
try:
|
|
65
|
-
self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
66
|
-
self._sock.setblocking(1)
|
|
67
|
-
self._sock.settimeout(self._timeout)
|
|
68
|
-
except socket.error as e_socket:
|
|
69
|
-
raise ConnectionError("Failed to create socket.") from e_socket
|
|
70
|
-
|
|
71
|
-
# Attempt to establish a connection to the remote host
|
|
72
|
-
try:
|
|
73
|
-
logger.debug(f'Connecting a socket to host "{self._hostname}" using port {self._port}')
|
|
74
|
-
with self._lock:
|
|
75
|
-
self._sock.connect((self._hostname, self._port))
|
|
76
|
-
except ConnectionRefusedError as e_cr:
|
|
77
|
-
raise ConnectionError(f"Connection refused to {self._hostname}") from e_cr
|
|
78
|
-
except socket.gaierror as e_gai:
|
|
79
|
-
raise ConnectionError(f"Socket address info error for {self._hostname}") from e_gai
|
|
80
|
-
except socket.herror as e_h:
|
|
81
|
-
raise ConnectionError(f"Socket host address error for {self._hostname}") from e_h
|
|
82
|
-
except socket.timeout as e_timeout:
|
|
83
|
-
raise ConnectionError(f"Socket timeout error for {self._hostname}") from e_timeout
|
|
84
|
-
except OSError as ose:
|
|
85
|
-
raise ConnectionError(f"OSError caught ({ose}).") from ose
|
|
86
|
-
|
|
87
|
-
self._connected = True
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
def disconnect(self):
|
|
91
|
-
""" Disconnect from the Ethernet connection.
|
|
92
|
-
|
|
93
|
-
Raises a ConnectionError on failure.
|
|
94
|
-
"""
|
|
95
|
-
|
|
96
|
-
try:
|
|
97
|
-
if self._connected:
|
|
98
|
-
logger.debug(f"Disconnecting from {self._hostname}")
|
|
99
|
-
with self._lock:
|
|
100
|
-
self._sock.close()
|
|
101
|
-
self._connected = False
|
|
102
|
-
except Exception as e_exc:
|
|
103
|
-
raise ConnectionError(f"Could not close socket to {self._hostname}") from e_exc
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
def reconnect(self):
|
|
107
|
-
""" Disconnect the device socket if it is already connected and try to connect.
|
|
108
|
-
"""
|
|
109
|
-
|
|
110
|
-
if self._connected:
|
|
111
|
-
self.disconnect()
|
|
112
|
-
|
|
113
|
-
self.connect()
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
def is_connected(self):
|
|
117
|
-
""" Check if the socket connection to the device is active.
|
|
118
|
-
"""
|
|
119
|
-
|
|
120
|
-
if not self._connected:
|
|
121
|
-
return False
|
|
122
|
-
|
|
123
|
-
try:
|
|
124
|
-
response = self.get_idn()
|
|
125
|
-
except ConnectionError as err:
|
|
126
|
-
logger.error(f'While trying to talk to the device the following exception occured,',
|
|
127
|
-
'exception={err}')
|
|
128
|
-
self.disconnect()
|
|
129
|
-
return False
|
|
130
|
-
|
|
131
|
-
return True
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
def send_command(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
|
-
Raises:
|
|
142
|
-
ConnectionError when the command could not be sent due to a timeout or a communication
|
|
143
|
-
problem.
|
|
144
|
-
"""
|
|
145
|
-
# print('send:', repr(command))
|
|
146
|
-
|
|
147
|
-
try:
|
|
148
|
-
with self._lock:
|
|
149
|
-
self._sock.sendall(command.encode())
|
|
150
|
-
|
|
151
|
-
except socket.timeout as e_timeout:
|
|
152
|
-
raise ConnectionError("Socket timeout error") from e_timeout
|
|
153
|
-
except socket.error as e_socket:
|
|
154
|
-
# Interpret any socket-related error as an I/O error
|
|
155
|
-
raise ConnectionError("Socket communication error.") from e_socket
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
def query(self, command: str):
|
|
159
|
-
"""
|
|
160
|
-
Send a single command to the device controller and block until a response from the
|
|
161
|
-
controller. This function can be overridden by the child class to implement device specific
|
|
162
|
-
sanity checks on the reponse.
|
|
163
|
-
|
|
164
|
-
Args:
|
|
165
|
-
command: is the command to be sent
|
|
166
|
-
|
|
167
|
-
Returns:
|
|
168
|
-
Either a string returned by the controller (on success), or an error message (on
|
|
169
|
-
failure).
|
|
170
|
-
|
|
171
|
-
Raises:
|
|
172
|
-
ConnectionError when there was an I/O problem during communication with the
|
|
173
|
-
controller.
|
|
174
|
-
"""
|
|
175
|
-
|
|
176
|
-
try:
|
|
177
|
-
with self._lock:
|
|
178
|
-
|
|
179
|
-
raw_command = command.encode()
|
|
180
|
-
# print('send:', repr(raw_command))
|
|
181
|
-
|
|
182
|
-
# Attempt to send the complete command
|
|
183
|
-
self._sock.sendall(raw_command)
|
|
184
|
-
|
|
185
|
-
# wait for, read and return the response the device
|
|
186
|
-
return_string = self.wait_for_response()
|
|
187
|
-
|
|
188
|
-
# print('recv:', repr(return_string))
|
|
189
|
-
|
|
190
|
-
return return_string.decode()
|
|
191
|
-
|
|
192
|
-
except socket.timeout as e_timeout:
|
|
193
|
-
logger.error(e_timeout)
|
|
194
|
-
raise ConnectionError("Socket timeout error") from e_timeout
|
|
195
|
-
except socket.error as e_socket:
|
|
196
|
-
# Interpret any socket-related error as an I/O error
|
|
197
|
-
raise ConnectionError("Socket communication error.") from e_socket
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
def wait_for_response(self):
|
|
201
|
-
n_total = 0
|
|
202
|
-
buf_size = 2048
|
|
203
|
-
|
|
204
|
-
try:
|
|
205
|
-
for idx in range(100):
|
|
206
|
-
time.sleep(0.001) # Give the device time to fill the buffer
|
|
207
|
-
data = self._sock.recv(buf_size)
|
|
208
|
-
n = len(data)
|
|
209
|
-
n_total += n
|
|
210
|
-
if n < buf_size:
|
|
211
|
-
break
|
|
212
|
-
|
|
213
|
-
except socket.timeout as e_timeout:
|
|
214
|
-
raise ConnectionError("Socket timeout error") from e_timeout
|
|
215
|
-
|
|
216
|
-
#logger.debug(f"Total number of bytes received is {n_total}, idx={idx}")
|
|
217
|
-
|
|
218
|
-
return data
|