cgse 2023.38.0__py3-none-any.whl → 2024.1.3__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 +77 -0
- cgse-2024.1.3.dist-info/METADATA +41 -0
- cgse-2024.1.3.dist-info/RECORD +5 -0
- {cgse-2023.38.0.dist-info → cgse-2024.1.3.dist-info}/WHEEL +1 -2
- cgse-2023.38.0.dist-info/COPYING +0 -674
- cgse-2023.38.0.dist-info/COPYING.LESSER +0 -165
- cgse-2023.38.0.dist-info/METADATA +0 -144
- cgse-2023.38.0.dist-info/RECORD +0 -649
- cgse-2023.38.0.dist-info/entry_points.txt +0 -75
- cgse-2023.38.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5235
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -626
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -912
- 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 -234
- egse/alert/alertman_ui.py +0 -603
- 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 -130
- egse/alert/gsm/beaglebone_protocol.py +0 -48
- 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 -129
- 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 -1015
- egse/confman/confman.yaml +0 -67
- egse/confman/confman_cs.py +0 -239
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -442
- egse/coordinates/__init__.py +0 -531
- egse/coordinates/avoidance.py +0 -103
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -120
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -195
- 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 -1247
- 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 -415
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2681
- egse/dpu/ccd_ui.py +0 -508
- egse/dpu/dpu.py +0 -786
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -668
- egse/dpu/fitsgen.py +0 -2077
- egse/dpu/fitsgen_test.py +0 -752
- 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/constants.py +0 -220
- egse/dsi/esl.py +0 -870
- egse/dsi/rmap.py +0 -1042
- egse/dsi/rmapci.py +0 -37
- egse/dsi/spw.py +0 -154
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -258
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -28
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -51
- egse/fdir/fdir_manager_controller.py +0 -228
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -25
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -37
- egse/fdir/fdir_remote_controller.py +0 -50
- egse/fdir/fdir_remote_cs.py +0 -97
- egse/fdir/fdir_remote_interface.py +0 -14
- egse/fdir/fdir_remote_popup.py +0 -31
- egse/fee/__init__.py +0 -114
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/fee.py +0 -631
- egse/fee/feesim.py +0 -750
- egse/fee/n_fee_hk.py +0 -761
- egse/fee/nfee.py +0 -187
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -24
- egse/filterwheel/eksma/fw8smc4.py +0 -661
- 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 -81
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -111
- 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 -1068
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -712
- egse/fov/fov_ui.py +0 -861
- 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 -135
- 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 -1281
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -588
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- 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 -138
- 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 -196
- egse/hexapod/symetrie/puna_protocol.py +0 -131
- egse/hexapod/symetrie/puna_ui.py +0 -434
- 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 -415
- egse/hexapod/symetrie/zonda_protocol.py +0 -119
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -765
- 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 -69
- 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/macOS/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/macOS/EtherSpaceLink_v34_86.dylib +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 -73
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -98
- 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 -163
- 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 -811
- 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 -603
- egse/proxy.py +0 -522
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -675
- egse/resource.py +0 -333
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -212
- egse/services.yaml +0 -51
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1180
- 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 -69
- 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 -1479
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -247
- 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 -193
- egse/stages/arun/smd3.py +0 -111
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -472
- 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 -904
- 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 -111
- 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 -1004
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -72
- egse/storage/storage_cs.py +0 -214
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -412
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1408
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -874
- 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 -177
- 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 -116
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -99
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -117
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -101
- egse/tempcontrol/beaglebone/beaglebone.py +0 -342
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -135
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -681
- egse/tempcontrol/digalox/digalox.py +0 -107
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -112
- egse/tempcontrol/digalox/digalox_protocol.py +0 -55
- 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 -78
- 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 -73
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -389
- 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 -727
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -875
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -118
- egse/tempcontrol/srs/ptc10_protocol.py +0 -42
- 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 -164
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -193
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -92
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -128
- 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 -102
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -83
- 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 -316
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -704
- 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 -39
- egse/vacuum/pfeiffer/tc400.py +0 -113
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -140
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -24
- egse/vacuum/pfeiffer/tpg261.py +0 -81
- 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 -60
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -24
- 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 -44
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/create_hdf5_report.py +0 -295
- scripts/csl_model.py +0 -436
- scripts/csl_restore_setup.py +0 -230
- scripts/export-grafana-dashboards.py +0 -50
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -59
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -11
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -64
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -61
- 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/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/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/tm_gen/tm_gen_agilent.py +0 -38
- 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,186 +0,0 @@
|
|
|
1
|
-
import datetime
|
|
2
|
-
import logging
|
|
3
|
-
import re
|
|
4
|
-
import socket
|
|
5
|
-
|
|
6
|
-
import click
|
|
7
|
-
|
|
8
|
-
import contextlib
|
|
9
|
-
from egse.settings import Settings
|
|
10
|
-
from egse.system import SignalCatcher
|
|
11
|
-
|
|
12
|
-
logging.basicConfig(level=logging.DEBUG)
|
|
13
|
-
|
|
14
|
-
LOGGER = logging.getLogger("egse.daq6510.sim")
|
|
15
|
-
HOST = "localhost"
|
|
16
|
-
DAQ_SETTINGS = Settings.load("Keithley DAQ6510")
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
device_time = datetime.datetime.now(datetime.timezone.utc)
|
|
20
|
-
reference_time = device_time
|
|
21
|
-
|
|
22
|
-
def create_datetime(year, month, day, hour, minute, second):
|
|
23
|
-
global device_time, reference_time
|
|
24
|
-
device_time = datetime.datetime(year, month, day, hour, minute, second, tzinfo=datetime.timezone.utc)
|
|
25
|
-
reference_time = datetime.datetime.now(datetime.timezone.utc)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
def nothing():
|
|
29
|
-
return None
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def set_time(year, month, day, hour, minute, second):
|
|
33
|
-
print(f"TIME {year}, {month}, {day}, {hour}, {minute}, {second}")
|
|
34
|
-
create_datetime(int(year), int(month), int(day), int(hour), int(minute), int(second))
|
|
35
|
-
|
|
36
|
-
def get_time():
|
|
37
|
-
current_device_time = device_time + (datetime.datetime.now(datetime.timezone.utc) - reference_time)
|
|
38
|
-
msg = current_device_time.strftime("%a %b %d %H:%M:%S %Y")
|
|
39
|
-
print(f":SYST:TIME? {msg = }")
|
|
40
|
-
return msg
|
|
41
|
-
|
|
42
|
-
def beep(a, b):
|
|
43
|
-
print(f"BEEP {a=}, {b=}")
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def reset():
|
|
47
|
-
print("RESET")
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
COMMAND_ACTIONS_RESPONSES = {
|
|
51
|
-
"*IDN?": (None, "KEITHLEY INSTRUMENTS,MODEL DAQ6510,04569510,1.7.12b"),
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
COMMAND_PATTERNS_ACTIONS_RESPONSES = {
|
|
56
|
-
r":?\*RST": (reset, None),
|
|
57
|
-
r":?SYST(?:em)*:TIME (\d+), (\d+), (\d+), (\d+), (\d+), (\d+)": (set_time, None),
|
|
58
|
-
r":?SYST(?:em)*:TIME\? 1": (nothing, get_time),
|
|
59
|
-
r":?SYST(?:em)*:BEEP(?:er)* (\d+), (\d+(?:\.\d+)?)": (beep, None),
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
def write(conn, response: str):
|
|
64
|
-
|
|
65
|
-
response = f"{response}\n".encode()
|
|
66
|
-
print(f"write: {response = }")
|
|
67
|
-
conn.sendall(response)
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
def read(conn) -> str:
|
|
71
|
-
"""
|
|
72
|
-
Reads one command string from the socket, i.e. until a linefeed ('\n') is received.
|
|
73
|
-
|
|
74
|
-
Returns:
|
|
75
|
-
The command string with the linefeed stripped off.
|
|
76
|
-
"""
|
|
77
|
-
|
|
78
|
-
idx, n_total = 0, 0
|
|
79
|
-
buf_size = 1024 * 4
|
|
80
|
-
command_string = bytes()
|
|
81
|
-
|
|
82
|
-
try:
|
|
83
|
-
for _ in range(100):
|
|
84
|
-
data = conn.recv(buf_size)
|
|
85
|
-
n = len(data)
|
|
86
|
-
n_total += n
|
|
87
|
-
command_string += data
|
|
88
|
-
# if data.endswith(b'\n'):
|
|
89
|
-
if n < buf_size:
|
|
90
|
-
break
|
|
91
|
-
except socket.timeout as e_timeout:
|
|
92
|
-
# LOGGER.warning(f"Socket timeout error from {e_timeout}")
|
|
93
|
-
# This timeout is catched at the caller, where the timeout is set.
|
|
94
|
-
raise
|
|
95
|
-
|
|
96
|
-
# LOGGER.debug(f"Total number of bytes received is {n_total}, idx={idx}")
|
|
97
|
-
print(f"read: {command_string=}")
|
|
98
|
-
|
|
99
|
-
return command_string.decode().rstrip()
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
def process_command(command_string: str) -> str:
|
|
103
|
-
|
|
104
|
-
global COMMAND_ACTIONS_RESPONSES
|
|
105
|
-
global COMMAND_PATTERNS_ACTIONS_RESPONSES
|
|
106
|
-
|
|
107
|
-
# LOGGER.debug(f"{command_string=}")
|
|
108
|
-
|
|
109
|
-
try:
|
|
110
|
-
action, response = COMMAND_ACTIONS_RESPONSES[command_string]
|
|
111
|
-
action and action()
|
|
112
|
-
if error_msg:
|
|
113
|
-
return error_msg
|
|
114
|
-
else:
|
|
115
|
-
return response if isinstance(response, str) else response()
|
|
116
|
-
except KeyError:
|
|
117
|
-
# try to match with a value
|
|
118
|
-
for key, value in COMMAND_PATTERNS_ACTIONS_RESPONSES.items():
|
|
119
|
-
if match := re.match(key, command_string):
|
|
120
|
-
# LOGGER.debug(f"{match=}, {match.groups()}")
|
|
121
|
-
action, response = value
|
|
122
|
-
# LOGGER.debug(f"{action=}, {response=}")
|
|
123
|
-
action and action(*match.groups())
|
|
124
|
-
return error_msg or (response if isinstance(response, str) or response is None else response())
|
|
125
|
-
return f"ERROR: unknown command string: {command_string}"
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
@click.group()
|
|
129
|
-
def cli():
|
|
130
|
-
pass
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
@cli.command()
|
|
134
|
-
def start():
|
|
135
|
-
global error_msg
|
|
136
|
-
|
|
137
|
-
LOGGER.info("Starting the DAQ6510 Simulator")
|
|
138
|
-
|
|
139
|
-
killer = SignalCatcher()
|
|
140
|
-
|
|
141
|
-
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
|
142
|
-
s.bind((HOST, DAQ_SETTINGS.PORT))
|
|
143
|
-
s.listen()
|
|
144
|
-
s.settimeout(2.0)
|
|
145
|
-
while True:
|
|
146
|
-
while True:
|
|
147
|
-
with contextlib.suppress(socket.timeout):
|
|
148
|
-
conn, addr = s.accept()
|
|
149
|
-
break
|
|
150
|
-
if killer.term_signal_received:
|
|
151
|
-
return
|
|
152
|
-
with conn:
|
|
153
|
-
LOGGER.info(f'Accepted connection from {addr}')
|
|
154
|
-
write(conn, 'This is PLATO DAQ6510 X.X.sim')
|
|
155
|
-
conn.settimeout(2.0)
|
|
156
|
-
try:
|
|
157
|
-
error_msg = ""
|
|
158
|
-
while True:
|
|
159
|
-
with contextlib.suppress(socket.timeout):
|
|
160
|
-
data = read(conn)
|
|
161
|
-
for cmd in data.split(';'):
|
|
162
|
-
response = process_command(cmd.strip())
|
|
163
|
-
if response is not None:
|
|
164
|
-
write(conn, response)
|
|
165
|
-
if not data:
|
|
166
|
-
LOGGER.info("Client closed connection, accepting new connection...")
|
|
167
|
-
break
|
|
168
|
-
if killer.term_signal_received:
|
|
169
|
-
LOGGER.info("Terminating...")
|
|
170
|
-
s.close()
|
|
171
|
-
return
|
|
172
|
-
if killer.user_signal_received:
|
|
173
|
-
if killer.signal_name == "SIGUSR1":
|
|
174
|
-
LOGGER.info("SIGUSR1 is not supported by this simulator")
|
|
175
|
-
if killer.signal_name == "SIGUSR2":
|
|
176
|
-
LOGGER.info("SIGUSR2 is not supported by this simulator")
|
|
177
|
-
killer.clear()
|
|
178
|
-
|
|
179
|
-
except ConnectionResetError as exc:
|
|
180
|
-
LOGGER.info(f"ConnectionResetError: {exc}")
|
|
181
|
-
except Exception as exc:
|
|
182
|
-
LOGGER.info(f"{exc.__class__.__name__} caught: {exc.args}")
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if __name__ == "__main__":
|
|
186
|
-
cli()
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Device control for the LakeShore Temperature Controller Model 336.
|
|
3
|
-
|
|
4
|
-
This package contains the classes and modules to work with the LakeShore Temperature Controller.
|
|
5
|
-
|
|
6
|
-
The main entry point for the user of this package is through the `LakeShore336Proxy` class:
|
|
7
|
-
|
|
8
|
-
```python
|
|
9
|
-
>>> from egse.tempcontrol.lakeshore.lsci336 import LakeShore336Proxy
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
This class will connect to the control server of the LakeShore 336 Controller and
|
|
13
|
-
provides all commands to control and monitor the temperature sensors, heaters and
|
|
14
|
-
status. The control server is a small server application that is started as shown
|
|
15
|
-
below. The control server directly connects to the LakeShore Controller through an
|
|
16
|
-
Ethernet interface. When you have now hardware available, the control server can
|
|
17
|
-
be started in simulator mode by appending the `--sim` string to the command below.
|
|
18
|
-
|
|
19
|
-
```bash
|
|
20
|
-
$ python -m egse.tempcontrol.lakeshore.lsci336_cs
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
We have also provided a graphical user interface (GUI) to monitor and manipulate the
|
|
24
|
-
temperature sensors. The GUI is currently a very preliminary and simple stripchart that
|
|
25
|
-
plots the temperature of channel A. Below is a screenshot of this GUI connected to the
|
|
26
|
-
LakeShore 336 Control Server in simulation mode. The simulation does a random walk.
|
|
27
|
-
|
|
28
|
-

|
|
29
|
-
|
|
30
|
-
Make sure that when executing above applications from the Terminal, you have
|
|
31
|
-
properly set your Python environment and the `PYTHONPATH` environment variable.
|
|
32
|
-
|
|
33
|
-
"""
|
|
@@ -1,361 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Define the basic classes to access the LakeShore devices.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
|
|
7
|
-
from egse.decorators import dynamic_interface
|
|
8
|
-
from egse.device import DeviceInterface
|
|
9
|
-
from egse.proxy import Proxy
|
|
10
|
-
from egse.randomwalk import RandomWalk
|
|
11
|
-
from egse.settings import Settings
|
|
12
|
-
from egse.tempcontrol.lakeshore.lsci_devif import LakeShoreEthernetInterface
|
|
13
|
-
from egse.tempcontrol.lakeshore.lsci_devif import LakeShoreError
|
|
14
|
-
from egse.zmq_ser import connect_address
|
|
15
|
-
|
|
16
|
-
logger = logging.getLogger(__name__)
|
|
17
|
-
|
|
18
|
-
CTRL_SETTINGS = Settings.load("LakeShore Control Server")
|
|
19
|
-
LAKESHORE_SETTINGS = Settings.load("LakeShore Controller")
|
|
20
|
-
DEVICE_SETTINGS = Settings.load(filename="lsci.yaml")
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class LakeShoreInterface(DeviceInterface):
|
|
24
|
-
"""
|
|
25
|
-
The LakeShore base class.
|
|
26
|
-
"""
|
|
27
|
-
@dynamic_interface
|
|
28
|
-
def info(self) -> str:
|
|
29
|
-
"""
|
|
30
|
-
Retrieve basic information about the LakeShore controller.
|
|
31
|
-
:return: a multiline string with information about the device
|
|
32
|
-
"""
|
|
33
|
-
raise NotImplementedError
|
|
34
|
-
|
|
35
|
-
@dynamic_interface
|
|
36
|
-
def get_id(self) -> str:
|
|
37
|
-
"""
|
|
38
|
-
Returns lakeshore ID.
|
|
39
|
-
|
|
40
|
-
Returns:
|
|
41
|
-
The current ID: LS_X when X is the index of LakeShore.
|
|
42
|
-
"""
|
|
43
|
-
raise NotImplementedError
|
|
44
|
-
|
|
45
|
-
@dynamic_interface
|
|
46
|
-
def get_temperature(self) -> float:
|
|
47
|
-
"""
|
|
48
|
-
Retrieve the temperature from the given channel.
|
|
49
|
-
|
|
50
|
-
Returns:
|
|
51
|
-
The current temperature for the given channel.
|
|
52
|
-
"""
|
|
53
|
-
raise NotImplementedError
|
|
54
|
-
|
|
55
|
-
@dynamic_interface
|
|
56
|
-
def get_params_pid(self, output:int) -> list:
|
|
57
|
-
"""
|
|
58
|
-
Retrieve the PID Params.
|
|
59
|
-
|
|
60
|
-
Returns:
|
|
61
|
-
The params of P, I, D:
|
|
62
|
-
Pos[0]: P
|
|
63
|
-
Pos[1]: I
|
|
64
|
-
Pos[2]: D
|
|
65
|
-
"""
|
|
66
|
-
raise NotImplementedError
|
|
67
|
-
|
|
68
|
-
@dynamic_interface
|
|
69
|
-
def get_setpoint(self, output:int) -> float:
|
|
70
|
-
"""
|
|
71
|
-
Retrieve the Setpoint Params.
|
|
72
|
-
|
|
73
|
-
Returns:
|
|
74
|
-
The setpoint:
|
|
75
|
-
"""
|
|
76
|
-
raise NotImplementedError
|
|
77
|
-
|
|
78
|
-
@dynamic_interface
|
|
79
|
-
def get_tuning_status(self) -> list:
|
|
80
|
-
"""
|
|
81
|
-
Returns the remote interface mode.
|
|
82
|
-
|
|
83
|
-
Returns:
|
|
84
|
-
Pos[0]: tuning status: 0 = no active tuning, 1 = active tuning.
|
|
85
|
-
Pos[1]: output: 1 = output 1, 2 = output 2
|
|
86
|
-
Pos[2]: error status: 0 = no tuning error, 1 = tuning error
|
|
87
|
-
Pos[3]: stage status: Specifies the current stage in the Autotune process.
|
|
88
|
-
"""
|
|
89
|
-
raise NotImplementedError
|
|
90
|
-
|
|
91
|
-
@dynamic_interface
|
|
92
|
-
def get_heater_setup(self, output:int) -> list:
|
|
93
|
-
"""
|
|
94
|
-
Return the Heater Setup Params.
|
|
95
|
-
|
|
96
|
-
Returns:
|
|
97
|
-
The params of Heater setup:
|
|
98
|
-
Pos[0]: htr resistance
|
|
99
|
-
Pos[1]: max current
|
|
100
|
-
Pos[2]: max user current
|
|
101
|
-
Pos[3]: current/power.
|
|
102
|
-
"""
|
|
103
|
-
raise NotImplementedError
|
|
104
|
-
|
|
105
|
-
@dynamic_interface
|
|
106
|
-
def get_range(self, output:int) -> int:
|
|
107
|
-
"""
|
|
108
|
-
Return the Range Params.
|
|
109
|
-
|
|
110
|
-
Returns:
|
|
111
|
-
The params of Range: 0 = Off, 1 = Low, 2 = Medium, 3 = High.
|
|
112
|
-
"""
|
|
113
|
-
raise NotImplementedError
|
|
114
|
-
|
|
115
|
-
@dynamic_interface
|
|
116
|
-
def get_heater_status(self, output:int) -> int:
|
|
117
|
-
"""
|
|
118
|
-
Return the Heater Status.
|
|
119
|
-
|
|
120
|
-
Returns:
|
|
121
|
-
The params of Heater setup: 0 = no error, 1 = heater open load, 2 = heater short
|
|
122
|
-
"""
|
|
123
|
-
raise NotImplementedError
|
|
124
|
-
|
|
125
|
-
@dynamic_interface
|
|
126
|
-
def get_heater(self, output:int) -> float:
|
|
127
|
-
"""
|
|
128
|
-
Return the Heater Value.
|
|
129
|
-
|
|
130
|
-
Returns:
|
|
131
|
-
The value of Heater
|
|
132
|
-
"""
|
|
133
|
-
raise NotImplementedError
|
|
134
|
-
|
|
135
|
-
@dynamic_interface
|
|
136
|
-
def set_params_pid(self, output:int, p:int, i:int, d:int):
|
|
137
|
-
"""
|
|
138
|
-
Configure the PID Params.
|
|
139
|
-
"""
|
|
140
|
-
raise NotImplementedError
|
|
141
|
-
|
|
142
|
-
@dynamic_interface
|
|
143
|
-
def set_setpoint(self, output:int, value:str):
|
|
144
|
-
"""
|
|
145
|
-
Configure the Setpoint Params.
|
|
146
|
-
"""
|
|
147
|
-
raise NotImplementedError
|
|
148
|
-
|
|
149
|
-
@dynamic_interface
|
|
150
|
-
def set_autotune(self, output:int, mode:int):
|
|
151
|
-
"""
|
|
152
|
-
Configure the AutoTune Params.
|
|
153
|
-
"""
|
|
154
|
-
raise NotImplementedError
|
|
155
|
-
|
|
156
|
-
@dynamic_interface
|
|
157
|
-
def set_heater_setup(self,output:int, heater_resistant:int, max_current:int, max_user_current:str, output_display:int):
|
|
158
|
-
"""
|
|
159
|
-
Configure the Heater Params.
|
|
160
|
-
"""
|
|
161
|
-
raise NotImplementedError
|
|
162
|
-
|
|
163
|
-
@dynamic_interface
|
|
164
|
-
def set_range(self, output:int, range:int):
|
|
165
|
-
"""
|
|
166
|
-
Configure the Range.
|
|
167
|
-
"""
|
|
168
|
-
raise NotImplementedError
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
class LakeShoreSimulator(LakeShoreInterface):
|
|
172
|
-
"""
|
|
173
|
-
The LakeShore controller Simulator class for Model .
|
|
174
|
-
"""
|
|
175
|
-
|
|
176
|
-
def __init__(self):
|
|
177
|
-
self._is_connected = True
|
|
178
|
-
self._randomwalk = RandomWalk(start=15, boundary=(-100, 25), scale=0.01, count=0)
|
|
179
|
-
self._p1_value = 1.2
|
|
180
|
-
self._i1_value = 10.2
|
|
181
|
-
self._d1_value = 50.0
|
|
182
|
-
self._p2_value = 3.2
|
|
183
|
-
self._i2_value = 13.2
|
|
184
|
-
self._d2_value = 5.0
|
|
185
|
-
self._setpoint = "125.3"
|
|
186
|
-
self._heater_value = "25.3"
|
|
187
|
-
|
|
188
|
-
def is_connected(self):
|
|
189
|
-
return self._is_connected
|
|
190
|
-
|
|
191
|
-
def is_simulator(self):
|
|
192
|
-
return True
|
|
193
|
-
|
|
194
|
-
def connect(self):
|
|
195
|
-
self._is_connected = True
|
|
196
|
-
|
|
197
|
-
def disconnect(self):
|
|
198
|
-
self._is_connected = False
|
|
199
|
-
|
|
200
|
-
def reconnect(self):
|
|
201
|
-
if self.is_connected():
|
|
202
|
-
self.disconnect()
|
|
203
|
-
self.connect()
|
|
204
|
-
|
|
205
|
-
def info(self):
|
|
206
|
-
return "LSCI - The LakeShore Simulator"
|
|
207
|
-
|
|
208
|
-
def get_id(self) -> str:
|
|
209
|
-
return "LS_X"
|
|
210
|
-
|
|
211
|
-
def get_temperature(self) -> float:
|
|
212
|
-
return next(self._randomwalk)
|
|
213
|
-
|
|
214
|
-
def get_params_pid(self, output:int) -> list:
|
|
215
|
-
if output == 1:
|
|
216
|
-
return [self._p1_value,self._i1_value,self._d1_value]
|
|
217
|
-
elif output == 2:
|
|
218
|
-
return [self._p2_value,self._i2_value,self._d2_value]
|
|
219
|
-
else:
|
|
220
|
-
return [0.0,0.0,0.0]
|
|
221
|
-
|
|
222
|
-
def set_params_pid(self, output:int, p:int, i:int, d:int):
|
|
223
|
-
if output == 1:
|
|
224
|
-
self._p1_value = p
|
|
225
|
-
self._i1_value = i
|
|
226
|
-
self._d1_value = d
|
|
227
|
-
elif output == 2:
|
|
228
|
-
self._p2_value = p
|
|
229
|
-
self._i2_value = i
|
|
230
|
-
self._d2_value = d
|
|
231
|
-
else:
|
|
232
|
-
return
|
|
233
|
-
|
|
234
|
-
def set_setpoint(self, output:int, value:str):
|
|
235
|
-
self._setpoint = value
|
|
236
|
-
|
|
237
|
-
def get_setpoint(self, output:int):
|
|
238
|
-
return self._setpoint
|
|
239
|
-
|
|
240
|
-
def get_heater(self, output:int):
|
|
241
|
-
return self._heater_value
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
class LakeShoreController(LakeShoreInterface):
|
|
245
|
-
"""
|
|
246
|
-
The LakeShore Controller class for Model .
|
|
247
|
-
"""
|
|
248
|
-
|
|
249
|
-
def __init__(self, device_index):
|
|
250
|
-
"""Initialize the LakeShoreController interface."""
|
|
251
|
-
|
|
252
|
-
super().__init__()
|
|
253
|
-
|
|
254
|
-
device_id = f"LS_{device_index}"
|
|
255
|
-
logger.debug(f"Initializing LakeShoreController {device_id} Model: 336")
|
|
256
|
-
try:
|
|
257
|
-
self.ls = LakeShoreEthernetInterface(device_index)
|
|
258
|
-
except LakeShoreError as exc:
|
|
259
|
-
logger.warning(f"LakeShoreError caught: Couldn't establish connection ({exc})")
|
|
260
|
-
raise LakeShoreError(
|
|
261
|
-
"Couldn't establish a connection with the LakeShore controller."
|
|
262
|
-
) from exc
|
|
263
|
-
|
|
264
|
-
def connect(self):
|
|
265
|
-
try:
|
|
266
|
-
self.ls.connect()
|
|
267
|
-
except LakeShoreError as exc:
|
|
268
|
-
logger.warning(f"LakeShoreError caught: Couldn't establish connection ({exc})")
|
|
269
|
-
raise ConnectionError(
|
|
270
|
-
"Couldn't establish a connection with the LakeShore Controller."
|
|
271
|
-
) from exc
|
|
272
|
-
|
|
273
|
-
def disconnect(self):
|
|
274
|
-
try:
|
|
275
|
-
self.ls.disconnect()
|
|
276
|
-
except LakeShoreError as exc:
|
|
277
|
-
raise ConnectionError("Couldn't disconnect from LakeShore Controller.") from exc
|
|
278
|
-
|
|
279
|
-
def reconnect(self):
|
|
280
|
-
if self.is_connected():
|
|
281
|
-
self.disconnect()
|
|
282
|
-
self.connect()
|
|
283
|
-
|
|
284
|
-
def is_simulator(self):
|
|
285
|
-
return False
|
|
286
|
-
|
|
287
|
-
def is_connected(self):
|
|
288
|
-
"""Check if the LakeShore Controller is connected. """
|
|
289
|
-
return self.ls.is_connected()
|
|
290
|
-
|
|
291
|
-
def info(self) -> str:
|
|
292
|
-
return self.ls.info()
|
|
293
|
-
|
|
294
|
-
def get_id(self) -> str:
|
|
295
|
-
return self.ls.get_id()
|
|
296
|
-
|
|
297
|
-
def get_temperature(self) -> float:
|
|
298
|
-
return self.ls.get_temperature()
|
|
299
|
-
|
|
300
|
-
def get_params_pid(self, output:int) -> list:
|
|
301
|
-
return self.ls.get_params_pid(output)
|
|
302
|
-
|
|
303
|
-
def get_setpoint(self, output:int) -> float:
|
|
304
|
-
return self.ls.get_setpoint(output)
|
|
305
|
-
|
|
306
|
-
def get_tuning_status(self) -> list:
|
|
307
|
-
return self.ls.get_tuning_status()
|
|
308
|
-
|
|
309
|
-
def get_heater_setup(self, output:int) -> list:
|
|
310
|
-
return self.ls.get_heater_setup(output)
|
|
311
|
-
|
|
312
|
-
def get_heater_status(self, output:int) -> int:
|
|
313
|
-
return self.ls.get_heater_status(output)
|
|
314
|
-
|
|
315
|
-
def get_heater(self, output:int) -> float:
|
|
316
|
-
return self.ls.get_heater(output)
|
|
317
|
-
|
|
318
|
-
def get_range(self, output:int) -> int:
|
|
319
|
-
return self.ls.get_range(output)
|
|
320
|
-
|
|
321
|
-
def set_params_pid(self, output:int, p:int, i:int, d:int):
|
|
322
|
-
self.ls.set_params_pid(output, p, i, d)
|
|
323
|
-
|
|
324
|
-
def set_setpoint(self, output:int, value:str):
|
|
325
|
-
self.ls.set_setpoint(output, value)
|
|
326
|
-
|
|
327
|
-
def set_autotune(self, output:int, mode:int):
|
|
328
|
-
self.ls.set_autotune(output, mode)
|
|
329
|
-
|
|
330
|
-
def set_heater_setup(self,output:int, heater_resistant:int, max_current:int, max_user_current:str, output_display:int):
|
|
331
|
-
self.ls.set_heater_setup(output, heater_resistant, max_current, max_user_current, output_display)
|
|
332
|
-
|
|
333
|
-
def set_range(self, output:int, range:int):
|
|
334
|
-
self.ls.set_range(output, range)
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
def _get_response(self, cmd_string):
|
|
338
|
-
response = self.ls.get_response(cmd_string)
|
|
339
|
-
return response
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
class LakeShoreProxy(Proxy, LakeShoreInterface):
|
|
343
|
-
"""
|
|
344
|
-
The LakeShoreProxy class is used to connect to the LakeShore control server and send commands
|
|
345
|
-
to the LakeShore Hardware Controller remotely.
|
|
346
|
-
"""
|
|
347
|
-
def __init__(self, lsci_index: int):
|
|
348
|
-
self.name = "LS_"+str(lsci_index)
|
|
349
|
-
protocol=CTRL_SETTINGS.PROTOCOL
|
|
350
|
-
hostname=CTRL_SETTINGS.HOSTNAME
|
|
351
|
-
port=CTRL_SETTINGS[self.name]["COMMANDING_PORT"]
|
|
352
|
-
"""
|
|
353
|
-
Args:
|
|
354
|
-
protocol: the transport protocol [default is taken from settings file]
|
|
355
|
-
hostname: location of the control server (IP address)
|
|
356
|
-
[default is taken from settings file]
|
|
357
|
-
port: TCP port on which the control server is listening for commands
|
|
358
|
-
[default is taken from settings file]
|
|
359
|
-
"""
|
|
360
|
-
super().__init__(connect_address(protocol, hostname, port))
|
|
361
|
-
|