cgse 2024.7.0__py3-none-any.whl → 2025.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +27 -0
- bump.py +85 -0
- cgse-2025.0.1.dist-info/METADATA +38 -0
- cgse-2025.0.1.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.1.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -233
- egse/alert/alertman_ui.py +0 -600
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -132
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1240
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -138
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -137
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -165
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -834
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -71
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -920
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -113
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -180
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/remove_lines_between_matches.py +0 -188
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from prometheus_client import Gauge
|
|
4
|
-
|
|
5
|
-
from egse.protocol import CommandProtocol
|
|
6
|
-
from egse.settings import Settings
|
|
7
|
-
from egse.setup import load_setup
|
|
8
|
-
from egse.synoptics import SynopticsManagerProxy
|
|
9
|
-
from egse.system import format_datetime
|
|
10
|
-
from egse.tempcontrol.agilent.agilent34970 import Agilent34970Controller
|
|
11
|
-
from egse.tempcontrol.agilent.agilent34970 import Agilent34970Interface
|
|
12
|
-
from egse.tempcontrol.agilent.agilent34970 import Agilent34970Simulator
|
|
13
|
-
from egse.tempcontrol.agilent.agilent34970_devif import Agilent34970Command
|
|
14
|
-
from egse.zmq_ser import bind_address
|
|
15
|
-
|
|
16
|
-
logger = logging.getLogger(__name__)
|
|
17
|
-
|
|
18
|
-
FDIR_PREFIX = 600
|
|
19
|
-
|
|
20
|
-
COMMAND_SETTINGS = Settings.load(filename='agilent34970.yaml')
|
|
21
|
-
|
|
22
|
-
class Agilent34970Protocol(CommandProtocol):
|
|
23
|
-
|
|
24
|
-
def __init__(self, control_server, device_index):
|
|
25
|
-
|
|
26
|
-
super().__init__()
|
|
27
|
-
|
|
28
|
-
self.control_server = control_server
|
|
29
|
-
self.device_index = device_index
|
|
30
|
-
|
|
31
|
-
if Settings.simulation_mode():
|
|
32
|
-
self.agilent = Agilent34970Simulator()
|
|
33
|
-
else:
|
|
34
|
-
self.agilent = Agilent34970Controller(self.device_index)
|
|
35
|
-
|
|
36
|
-
self.load_commands(COMMAND_SETTINGS.Commands, Agilent34970Command, Agilent34970Interface)
|
|
37
|
-
|
|
38
|
-
self.build_device_method_lookup_table(self.agilent)
|
|
39
|
-
|
|
40
|
-
# Get scan list from setup
|
|
41
|
-
setup = load_setup()
|
|
42
|
-
|
|
43
|
-
self._setup = setup['gse'][f'agilent34970_{device_index}']
|
|
44
|
-
self._conversions = self._setup['conversion']
|
|
45
|
-
self.channels = []
|
|
46
|
-
|
|
47
|
-
self.channels += self._setup.thermocouples
|
|
48
|
-
self.channels += self._setup.two_wire
|
|
49
|
-
self.channels += self._setup.four_wire
|
|
50
|
-
self.channels.sort()
|
|
51
|
-
|
|
52
|
-
self.resistance_gauges = [
|
|
53
|
-
Gauge(f'GSRON_AG34970_{device_index}_R{channel}', '') for channel in self.channels]
|
|
54
|
-
self.temperature_gauges = [
|
|
55
|
-
Gauge(f'GSRON_AG34970_{device_index}_T{channel}', '') for channel in self.channels]
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
def get_bind_address(self):
|
|
59
|
-
return bind_address(self.control_server.get_communication_protocol(),
|
|
60
|
-
self.control_server.get_commanding_port())
|
|
61
|
-
|
|
62
|
-
def get_status(self):
|
|
63
|
-
return super().get_status()
|
|
64
|
-
|
|
65
|
-
def get_housekeeping(self) -> dict:
|
|
66
|
-
|
|
67
|
-
hk_dict = {'timestamp': format_datetime()}
|
|
68
|
-
|
|
69
|
-
try:
|
|
70
|
-
resistances, temperatures = self.agilent.read_resistance_temperature()
|
|
71
|
-
self.agilent.trigger_scan()
|
|
72
|
-
except Exception as e:
|
|
73
|
-
logger.warning(f'failed to get HK ({e})')
|
|
74
|
-
|
|
75
|
-
with SynopticsManagerProxy() as synoptics:
|
|
76
|
-
synoptics.store_th_synoptics(hk_dict)
|
|
77
|
-
|
|
78
|
-
return hk_dict
|
|
79
|
-
|
|
80
|
-
if len(temperatures.values()) == len(self.channels) and len(resistances.values()) == len(self.channels):
|
|
81
|
-
for idx, (chnl, temp) in enumerate(temperatures.items()):
|
|
82
|
-
hk_dict[f'GSRON_AG34970_{self.device_index}_T{chnl}'] = temp
|
|
83
|
-
self.temperature_gauges[idx].set(temp)
|
|
84
|
-
|
|
85
|
-
for idx, (chnl, res) in enumerate(resistances.items()):
|
|
86
|
-
hk_dict[f'GSRON_AG34970_{self.device_index}_R{chnl}'] = res
|
|
87
|
-
self.resistance_gauges[idx].set(res)
|
|
88
|
-
else:
|
|
89
|
-
logger.warning(f'Invalid scan result')
|
|
90
|
-
|
|
91
|
-
# Store the temperatures as synoptics
|
|
92
|
-
|
|
93
|
-
with SynopticsManagerProxy() as synoptics:
|
|
94
|
-
synoptics.store_th_synoptics(hk_dict)
|
|
95
|
-
|
|
96
|
-
return hk_dict
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from egse.proxy import Proxy
|
|
4
|
-
from egse.decorators import dynamic_interface
|
|
5
|
-
from egse.device import DeviceInterface
|
|
6
|
-
from egse.settings import Settings
|
|
7
|
-
from egse.tempcontrol.agilent.agilent34972_devif import Agilent34972Error
|
|
8
|
-
from egse.tempcontrol.agilent.agilent34972_devif import Agilent34972DeviceInterface
|
|
9
|
-
from egse.zmq_ser import connect_address
|
|
10
|
-
|
|
11
|
-
logger = logging.getLogger(__name__)
|
|
12
|
-
|
|
13
|
-
DEVICE_SETTINGS = Settings.load(filename='agilent34972.yaml')
|
|
14
|
-
CTRL_SETTINGS = Settings.load("Agilent 34972 Control Server")
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class Agilent34972Interface(DeviceInterface):
|
|
18
|
-
""" Agilent 34972 base class."""
|
|
19
|
-
|
|
20
|
-
@dynamic_interface
|
|
21
|
-
def get_idn(self):
|
|
22
|
-
""" Get Agilent34972 IDN message. """
|
|
23
|
-
return NotImplemented
|
|
24
|
-
|
|
25
|
-
@dynamic_interface
|
|
26
|
-
def read_resistance_temperature(self, scan_list=None):
|
|
27
|
-
""" Measure 4-wire resistance. """
|
|
28
|
-
return NotImplemented
|
|
29
|
-
|
|
30
|
-
@dynamic_interface
|
|
31
|
-
def trigger_scan(self):
|
|
32
|
-
""" Perform a scan of th specified channels"""
|
|
33
|
-
return NotImplemented
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class Agilent34972Simulator(Agilent34972Interface):
|
|
37
|
-
def __init__(self):
|
|
38
|
-
self._is_connected = True
|
|
39
|
-
|
|
40
|
-
def is_connected(self):
|
|
41
|
-
return self._is_connected
|
|
42
|
-
|
|
43
|
-
def is_simulator(self):
|
|
44
|
-
return True
|
|
45
|
-
|
|
46
|
-
def connect(self):
|
|
47
|
-
self._is_connected = True
|
|
48
|
-
|
|
49
|
-
def disconnect(self):
|
|
50
|
-
self._is_connected = False
|
|
51
|
-
|
|
52
|
-
def reconnect(self):
|
|
53
|
-
if self.is_connected():
|
|
54
|
-
self.disconnect()
|
|
55
|
-
self.connect()
|
|
56
|
-
|
|
57
|
-
def get_idn(self, dev_idx):
|
|
58
|
-
return 'Agilent34972'
|
|
59
|
-
|
|
60
|
-
def read_resistance_temperature(self):
|
|
61
|
-
return [0, 0, 0, 0], [0, 0, 0, 0]
|
|
62
|
-
|
|
63
|
-
def trigger_scan(self):
|
|
64
|
-
pass
|
|
65
|
-
|
|
66
|
-
class Agilent34972Controller(Agilent34972Interface):
|
|
67
|
-
|
|
68
|
-
# The device index is used to distinguish between the 2 agilent34972 devices
|
|
69
|
-
def __init__(self, device_index):
|
|
70
|
-
super().__init__()
|
|
71
|
-
|
|
72
|
-
logger.debug(f'Initalizing Agilent34972 Controller {device_index}')
|
|
73
|
-
|
|
74
|
-
try:
|
|
75
|
-
self.agilent = Agilent34972DeviceInterface(device_index)
|
|
76
|
-
except Agilent34972Error as exc:
|
|
77
|
-
logger.warning(f"Agilent34972Error caught: Couldn't establish connectin ({exc})")
|
|
78
|
-
raise Agilent34972Error(
|
|
79
|
-
"Couldn't establish a connection with Agilent34972 controller."
|
|
80
|
-
) from exc
|
|
81
|
-
|
|
82
|
-
def is_simulator(self):
|
|
83
|
-
return False
|
|
84
|
-
|
|
85
|
-
def is_connected(self):
|
|
86
|
-
return self.agilent.is_connected()
|
|
87
|
-
|
|
88
|
-
def connect(self):
|
|
89
|
-
if not self.agilent.is_connected():
|
|
90
|
-
self.agilent.connect()
|
|
91
|
-
|
|
92
|
-
def disconnect(self):
|
|
93
|
-
self.agilent.disconnect()
|
|
94
|
-
|
|
95
|
-
def reconnect(self):
|
|
96
|
-
self.agilent.reconnect()
|
|
97
|
-
|
|
98
|
-
def get_idn(self):
|
|
99
|
-
return self.agilent.get_idn()
|
|
100
|
-
|
|
101
|
-
def read_resistance_temperature(self):
|
|
102
|
-
return self.agilent.read_resistance_temperature()
|
|
103
|
-
|
|
104
|
-
def trigger_scan(self):
|
|
105
|
-
return self.agilent.trigger_scan()
|
|
106
|
-
|
|
107
|
-
class Agilent34972Proxy(Proxy, Agilent34972Interface):
|
|
108
|
-
def __init__(self, agilent_index: int):
|
|
109
|
-
self.name = "DAQ"+str(agilent_index)
|
|
110
|
-
|
|
111
|
-
super().__init__(connect_address(CTRL_SETTINGS.PROTOCOL, CTRL_SETTINGS.HOSTNAME, CTRL_SETTINGS[self.name]["COMMANDING_PORT"]), timeout=20000)
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
BaseClass:
|
|
2
|
-
egse.tempcontrol.agilent.Agilent34972Interface
|
|
3
|
-
|
|
4
|
-
ProxyClass:
|
|
5
|
-
egse.tempcontrol.agilent.Agilent34972Proxy
|
|
6
|
-
|
|
7
|
-
ControlServerClass:
|
|
8
|
-
egse.tempcontrol.agilent.Agilent34972ControlServer
|
|
9
|
-
|
|
10
|
-
ControlServer:
|
|
11
|
-
egse.tempcontrol.agilent.agilent34972_cs
|
|
12
|
-
|
|
13
|
-
Commands:
|
|
14
|
-
# The command strings in this file are not used.
|
|
15
|
-
# They need to include the arguments of the commands though or else the control server will
|
|
16
|
-
# remove them from the interface.
|
|
17
|
-
|
|
18
|
-
disconnect:
|
|
19
|
-
description: Disconnect from the Agilent34972 Controller.
|
|
20
|
-
|
|
21
|
-
connect:
|
|
22
|
-
description: Connect to the Agilent34972 Controller.
|
|
23
|
-
|
|
24
|
-
reconnect:
|
|
25
|
-
description: Reconnect to the Agilent34972 Controller.
|
|
26
|
-
|
|
27
|
-
is_simulator:
|
|
28
|
-
description: Ask if the control server is a simulator.
|
|
29
|
-
returns: bool | True if far end is a simulator.
|
|
30
|
-
|
|
31
|
-
is_connected:
|
|
32
|
-
description: Check if Agilent34972 Controller is connected.
|
|
33
|
-
|
|
34
|
-
# Definition of the device commands.
|
|
35
|
-
get_idn:
|
|
36
|
-
description: Get device IDN message.
|
|
37
|
-
returns: str
|
|
38
|
-
|
|
39
|
-
read_resistance_temperature:
|
|
40
|
-
description: Measure temperatures for all channels in the scan list
|
|
41
|
-
returns: tuple(list(float), list(float)) | tuple of lists of resistance and temperature values
|
|
42
|
-
|
|
43
|
-
trigger_scan:
|
|
44
|
-
description: Perform a scan of the specified channels
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
import logging
|
|
3
|
-
import multiprocessing
|
|
4
|
-
|
|
5
|
-
import click
|
|
6
|
-
import sys
|
|
7
|
-
import zmq
|
|
8
|
-
from prometheus_client import start_http_server
|
|
9
|
-
|
|
10
|
-
multiprocessing.current_process().name = "agilent34972_cs"
|
|
11
|
-
|
|
12
|
-
from egse.control import ControlServer
|
|
13
|
-
from egse.settings import Settings
|
|
14
|
-
from egse.tempcontrol.agilent.agilent34972 import Agilent34972Proxy
|
|
15
|
-
from egse.tempcontrol.agilent.agilent34972_protocol import Agilent34972Protocol
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
logging.basicConfig(level=logging.DEBUG, format=Settings.LOG_FORMAT_FULL)
|
|
19
|
-
|
|
20
|
-
logger = logging.getLogger('__name__')
|
|
21
|
-
|
|
22
|
-
CTRL_SETTINGS = Settings.load("Agilent 34972 Control Server")
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class Agilent34972ControlServer(ControlServer):
|
|
26
|
-
|
|
27
|
-
def __init__(self, index):
|
|
28
|
-
self.index = index
|
|
29
|
-
self.name = "DAQ"+str(index)
|
|
30
|
-
super(Agilent34972ControlServer, self).__init__()
|
|
31
|
-
|
|
32
|
-
self.device_protocol = Agilent34972Protocol(self, self.index)
|
|
33
|
-
|
|
34
|
-
logger.debug(f'Binding ZeroMQ socket to {self.device_protocol.get_bind_address()}')
|
|
35
|
-
|
|
36
|
-
self.device_protocol.bind(self.dev_ctrl_cmd_sock)
|
|
37
|
-
|
|
38
|
-
self.poller.register(self.dev_ctrl_cmd_sock, zmq.POLLIN)
|
|
39
|
-
|
|
40
|
-
self.set_hk_delay(CTRL_SETTINGS.DELAY)
|
|
41
|
-
|
|
42
|
-
def get_communication_protocol(self):
|
|
43
|
-
return CTRL_SETTINGS.PROTOCOL
|
|
44
|
-
|
|
45
|
-
def get_commanding_port(self):
|
|
46
|
-
return CTRL_SETTINGS[self.name]['COMMANDING_PORT']
|
|
47
|
-
|
|
48
|
-
def get_service_port(self):
|
|
49
|
-
return CTRL_SETTINGS[self.name]['SERVICE_PORT']
|
|
50
|
-
|
|
51
|
-
def get_monitoring_port(self):
|
|
52
|
-
return CTRL_SETTINGS[self.name]['MONITORING_PORT']
|
|
53
|
-
|
|
54
|
-
def get_storage_mnemonic(self):
|
|
55
|
-
try:
|
|
56
|
-
return CTRL_SETTINGS[self.name]['STORAGE_MNEMONIC']
|
|
57
|
-
except:
|
|
58
|
-
return f'Agilent34972_{self.index}'
|
|
59
|
-
|
|
60
|
-
def before_serve(self):
|
|
61
|
-
start_http_server(CTRL_SETTINGS[self.name]['METRICS_PORT'])
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
@click.group()
|
|
65
|
-
def cli():
|
|
66
|
-
pass
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
@cli.command()
|
|
70
|
-
@click.option("--simulator", "--sim", is_flag=True, help="Start the Agilent34972 Simulator as the backend.")
|
|
71
|
-
@click.argument('index', type=click.IntRange(0, 1))
|
|
72
|
-
def start(simulator, index):
|
|
73
|
-
"""Start the BeagleBone Control Server."""
|
|
74
|
-
|
|
75
|
-
if simulator:
|
|
76
|
-
Settings.set_simulation_mode(True)
|
|
77
|
-
try:
|
|
78
|
-
logger.debug(f'Starting Agilent 34972 {index} Control Server')
|
|
79
|
-
|
|
80
|
-
multiprocessing.current_process().name = f"agilent34972_cs_{index}"
|
|
81
|
-
|
|
82
|
-
control_server = Agilent34972ControlServer(index)
|
|
83
|
-
control_server.serve()
|
|
84
|
-
|
|
85
|
-
except KeyboardInterrupt:
|
|
86
|
-
logger.info("Shutdown requested...exiting")
|
|
87
|
-
|
|
88
|
-
except SystemExit as exit_code:
|
|
89
|
-
logger.info("System Exit with code {}.".format(exit_code))
|
|
90
|
-
sys.exit(exit_code)
|
|
91
|
-
|
|
92
|
-
except Exception:
|
|
93
|
-
|
|
94
|
-
logger.exception("Cannot start the Agilent Control Server")
|
|
95
|
-
# The above line does exactly the same as the traceback, but on the logger
|
|
96
|
-
# import traceback
|
|
97
|
-
# traceback.print_exc(file=sys.stdout)
|
|
98
|
-
|
|
99
|
-
return 0
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
@cli.command()
|
|
103
|
-
@click.argument('index', type=click.IntRange(0, 1))
|
|
104
|
-
def stop(index):
|
|
105
|
-
"""Send a 'quit_server' command to the Control Server."""
|
|
106
|
-
|
|
107
|
-
with Agilent34972Proxy(index) as proxy:
|
|
108
|
-
|
|
109
|
-
sp = proxy.get_service_proxy()
|
|
110
|
-
sp.quit_server()
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if __name__ == "__main__":
|
|
114
|
-
|
|
115
|
-
sys.exit(cli())
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
|
|
3
|
-
import logging
|
|
4
|
-
|
|
5
|
-
import time
|
|
6
|
-
|
|
7
|
-
from egse.command import ClientServerCommand
|
|
8
|
-
from egse.settings import Settings
|
|
9
|
-
from egse.setup import load_setup
|
|
10
|
-
from egse.socketdevice import SocketDevice
|
|
11
|
-
|
|
12
|
-
logger = logging.getLogger(__name__)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class Agilent34972Error(Exception):
|
|
16
|
-
pass
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class Agilent34972Command(ClientServerCommand):
|
|
20
|
-
def get_cmd_string(self, *args, **kwargs):
|
|
21
|
-
out = super().get_cmd_string(*args, **kwargs)
|
|
22
|
-
return out + '\n'
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class Agilent34972DeviceInterface(SocketDevice):
|
|
26
|
-
|
|
27
|
-
def __init__(self, device_index):
|
|
28
|
-
self._ctrl_settings = Settings.load(f'Agilent 34972 Controller')
|
|
29
|
-
self._setup = load_setup()
|
|
30
|
-
|
|
31
|
-
self.device_index = device_index
|
|
32
|
-
|
|
33
|
-
self._is_connected = [False]
|
|
34
|
-
self._timeout = 20
|
|
35
|
-
self._command_interval = 0
|
|
36
|
-
self._process_delay = 0.1
|
|
37
|
-
self._sock_buffsize = 1024
|
|
38
|
-
|
|
39
|
-
self._host = self._ctrl_settings[f'DAQ {device_index}']['HOST']
|
|
40
|
-
self._port = self._ctrl_settings[f'DAQ {device_index}']['PORT']
|
|
41
|
-
|
|
42
|
-
self._setup = self._setup['gse'][f'agilent34972_{device_index}']
|
|
43
|
-
self._conversions = self._setup['conversion']
|
|
44
|
-
|
|
45
|
-
super().__init__(hostname=self._host, port=self._port, timeout=15)
|
|
46
|
-
self.connect()
|
|
47
|
-
|
|
48
|
-
self.create_scanlist()
|
|
49
|
-
self.configure_agilent()
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
def get_idn(self):
|
|
54
|
-
return self.query('*IDN?\n')
|
|
55
|
-
|
|
56
|
-
def format_scanlist(self, ch_list):
|
|
57
|
-
scanlist = '(@'
|
|
58
|
-
for idx, ch in enumerate(ch_list):
|
|
59
|
-
if idx == 0:
|
|
60
|
-
scanlist += f'{ch}'
|
|
61
|
-
elif idx < len(ch_list):
|
|
62
|
-
scanlist += f',{ch}'
|
|
63
|
-
scanlist += ')'
|
|
64
|
-
return scanlist
|
|
65
|
-
|
|
66
|
-
def create_scanlist(self):
|
|
67
|
-
thermocouple = self._setup.thermocouples
|
|
68
|
-
two_wire = self._setup.two_wire
|
|
69
|
-
four_wire = self._setup.four_wire
|
|
70
|
-
pt100 = self._setup.pt100
|
|
71
|
-
|
|
72
|
-
self.scanlist = thermocouple + two_wire + four_wire
|
|
73
|
-
self.scanlist.sort()
|
|
74
|
-
|
|
75
|
-
self.thermocouple = thermocouple
|
|
76
|
-
self.two_wire = two_wire
|
|
77
|
-
self.four_wire = four_wire
|
|
78
|
-
self.pt100 = pt100
|
|
79
|
-
|
|
80
|
-
def configure_agilent(self):
|
|
81
|
-
|
|
82
|
-
# Extract configuration and scanlist from setup
|
|
83
|
-
scan_list = self.format_scanlist(self.scanlist) if self.scanlist != [] else []
|
|
84
|
-
thermocouple_list = self.format_scanlist(self.thermocouple) if self.thermocouple != [] else []
|
|
85
|
-
two_wire_list = self.format_scanlist(self.two_wire) if self.two_wire != [] else []
|
|
86
|
-
four_wire_list = self.format_scanlist(self.four_wire) if self.four_wire != [] else []
|
|
87
|
-
pt100_list = self.format_scanlist(self.pt100) if self.pt100 != [] else []
|
|
88
|
-
|
|
89
|
-
logger.info(f"Thermocouples: {thermocouple_list}")
|
|
90
|
-
logger.info(f"Two wire: {two_wire_list}")
|
|
91
|
-
logger.info(f"Four wire: {four_wire_list}")
|
|
92
|
-
logger.info(f"Pt100s: {pt100_list}")
|
|
93
|
-
logger.info(f"Final scanlist: {scan_list}")
|
|
94
|
-
|
|
95
|
-
# Reset scan list
|
|
96
|
-
self.send_command("*RST\n")
|
|
97
|
-
|
|
98
|
-
# Configure channels
|
|
99
|
-
if two_wire_list != []:
|
|
100
|
-
# breakpoint()
|
|
101
|
-
self.send_command(f"CONF:RES {two_wire_list}\n")
|
|
102
|
-
time.sleep(1)
|
|
103
|
-
if four_wire_list != []:
|
|
104
|
-
# breakpoint()
|
|
105
|
-
self.send_command(f"CONF:FRES {four_wire_list}\n")
|
|
106
|
-
time.sleep(1)
|
|
107
|
-
if thermocouple_list != []:
|
|
108
|
-
# breakpoint()
|
|
109
|
-
self.send_command(f"CONF:TEMP TC,T,{thermocouple_list}\n")
|
|
110
|
-
time.sleep(1)
|
|
111
|
-
if pt100_list != []:
|
|
112
|
-
self.send_command(f"CALC:SCAL:GAIN 10,{pt100_list}\n")
|
|
113
|
-
self.send_command(f'CALC:SCAL:STAT ON,{pt100_list}\n')
|
|
114
|
-
time.sleep(1)
|
|
115
|
-
|
|
116
|
-
# Save values with unit
|
|
117
|
-
self.send_command("FORM:READ:UNIT ON\n")
|
|
118
|
-
self.send_command("FORM:READ:CHAN ON\n")
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
# Load scan list
|
|
123
|
-
self.send_command(f"ROUT:SCAN {scan_list}\n")
|
|
124
|
-
time.sleep(0.1)
|
|
125
|
-
|
|
126
|
-
self.send_command(f'SENS:VOLT:DC:NPLC 10\n')
|
|
127
|
-
self.send_command('ROUT:CHAN:DEL 0.1\n')
|
|
128
|
-
|
|
129
|
-
self.send_command("INIT\n")
|
|
130
|
-
time.sleep(15)
|
|
131
|
-
|
|
132
|
-
def trigger_scan(self):
|
|
133
|
-
self.send_command("INIT\n")
|
|
134
|
-
|
|
135
|
-
def read_resistance_temperature(self):
|
|
136
|
-
# Fetch values stored in non-volatile memory
|
|
137
|
-
# return_string = self.query(f"R? {len(self.scanlist)}\n")
|
|
138
|
-
return_string = self.query(f"DATA:REMOVE? {len(self.scanlist)}\n")
|
|
139
|
-
|
|
140
|
-
# Check for errors
|
|
141
|
-
if len(return_string) == 0:
|
|
142
|
-
raise ConnectionError(f"No reply from device")
|
|
143
|
-
|
|
144
|
-
if return_string[-1] != '\n':
|
|
145
|
-
raise ConnectionError(f"Invalid termination character in response: {return_string}")
|
|
146
|
-
|
|
147
|
-
values = return_string.split(',')
|
|
148
|
-
|
|
149
|
-
resistances = {}
|
|
150
|
-
temperatures = {}
|
|
151
|
-
|
|
152
|
-
for i in range(0, len(values), 2):
|
|
153
|
-
value = values[i].split(' ')
|
|
154
|
-
channel = int(values[i+1])
|
|
155
|
-
if 'C' in value or 'C\r' in value:
|
|
156
|
-
resistances[f'{channel}'] = 0
|
|
157
|
-
temperatures[f'{channel}'] = float(value[0])
|
|
158
|
-
elif 'OHM' in value or 'OHM\r' in value:
|
|
159
|
-
resistances[f'{channel}'] = abs(float(value[0]))
|
|
160
|
-
temperatures[f'{channel}'] = self._convert_resistance(abs(float(value[0])))
|
|
161
|
-
|
|
162
|
-
# Return values as list
|
|
163
|
-
return resistances, temperatures
|
|
164
|
-
|
|
165
|
-
def _convert_resistance(self, resistance):
|
|
166
|
-
return ( self._conversions[0]
|
|
167
|
-
+ self._conversions[1] * resistance
|
|
168
|
-
+ self._conversions[2] * resistance**2
|
|
169
|
-
+ self._conversions[3] * resistance**3
|
|
170
|
-
+ self._conversions[4] * resistance**4
|
|
171
|
-
+ self._conversions[5] * resistance**5
|
|
172
|
-
)
|
|
173
|
-
|
|
174
|
-
def main():
|
|
175
|
-
|
|
176
|
-
dev0 = Agilent34972DeviceInterface(0)
|
|
177
|
-
dev1 = Agilent34972DeviceInterface(1)
|
|
178
|
-
print(dev0.get_idn())
|
|
179
|
-
print(dev1.get_idn())
|
|
180
|
-
|
|
181
|
-
while True:
|
|
182
|
-
dev0.trigger_scan()
|
|
183
|
-
dev1.trigger_scan()
|
|
184
|
-
time.sleep(10)
|
|
185
|
-
print(dev0.read_resistance_temperature())
|
|
186
|
-
print(dev1.read_resistance_temperature())
|
|
187
|
-
|
|
188
|
-
if __name__ == '__main__':
|
|
189
|
-
main()
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from prometheus_client import Gauge
|
|
4
|
-
|
|
5
|
-
from egse.protocol import CommandProtocol
|
|
6
|
-
from egse.settings import Settings
|
|
7
|
-
from egse.setup import load_setup
|
|
8
|
-
from egse.synoptics import SynopticsManagerProxy
|
|
9
|
-
from egse.system import format_datetime
|
|
10
|
-
from egse.tempcontrol.agilent.agilent34972 import Agilent34972Controller
|
|
11
|
-
from egse.tempcontrol.agilent.agilent34972 import Agilent34972Interface
|
|
12
|
-
from egse.tempcontrol.agilent.agilent34972 import Agilent34972Simulator
|
|
13
|
-
from egse.tempcontrol.agilent.agilent34972_devif import Agilent34972Command
|
|
14
|
-
from egse.zmq_ser import bind_address
|
|
15
|
-
|
|
16
|
-
logger = logging.getLogger(__name__)
|
|
17
|
-
|
|
18
|
-
FDIR_PREFIX = 600
|
|
19
|
-
|
|
20
|
-
COMMAND_SETTINGS = Settings.load(filename='agilent34972.yaml')
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class Agilent34972Protocol(CommandProtocol):
|
|
24
|
-
def __init__(self, control_server, device_index):
|
|
25
|
-
|
|
26
|
-
super().__init__()
|
|
27
|
-
|
|
28
|
-
self.control_server = control_server
|
|
29
|
-
self.cs_storage_mnemonic = self.control_server.get_storage_mnemonic()
|
|
30
|
-
self.device_index = device_index
|
|
31
|
-
|
|
32
|
-
if Settings.simulation_mode():
|
|
33
|
-
self.agilent = Agilent34972Simulator()
|
|
34
|
-
else:
|
|
35
|
-
self.agilent = Agilent34972Controller(self.device_index)
|
|
36
|
-
|
|
37
|
-
self.load_commands(COMMAND_SETTINGS.Commands, Agilent34972Command, Agilent34972Interface)
|
|
38
|
-
|
|
39
|
-
self.build_device_method_lookup_table(self.agilent)
|
|
40
|
-
|
|
41
|
-
# Get scan list from setup
|
|
42
|
-
setup = load_setup()
|
|
43
|
-
|
|
44
|
-
self._setup = setup['gse'][f'agilent34972_{device_index}']
|
|
45
|
-
self._conversions = self._setup['conversion']
|
|
46
|
-
self.channels = []
|
|
47
|
-
|
|
48
|
-
self.channels += self._setup.thermocouples
|
|
49
|
-
self.channels += self._setup.two_wire
|
|
50
|
-
self.channels += self._setup.four_wire
|
|
51
|
-
self.channels.sort()
|
|
52
|
-
|
|
53
|
-
self.resistance_gauges = [
|
|
54
|
-
Gauge(f'GSRON_AG34972_{self.device_index}_R{channel}', '') for channel in self.channels]
|
|
55
|
-
self.temperature_gauges = [
|
|
56
|
-
Gauge(f'GSRON_AG34972_{self.device_index}_T{channel}', '') for channel in self.channels]
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
def get_bind_address(self):
|
|
60
|
-
return bind_address(self.control_server.get_communication_protocol(),
|
|
61
|
-
self.control_server.get_commanding_port())
|
|
62
|
-
|
|
63
|
-
def get_status(self):
|
|
64
|
-
return super().get_status()
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
def get_housekeeping(self) -> dict:
|
|
68
|
-
|
|
69
|
-
hk_dict = {'timestamp': format_datetime()}
|
|
70
|
-
|
|
71
|
-
try:
|
|
72
|
-
resistances, temperatures = self.agilent.read_resistance_temperature()
|
|
73
|
-
self.agilent.trigger_scan()
|
|
74
|
-
except Exception as e:
|
|
75
|
-
logger.warning(f'failed to get HK ({e})')
|
|
76
|
-
|
|
77
|
-
with SynopticsManagerProxy() as synoptics:
|
|
78
|
-
synoptics.store_th_synoptics(hk_dict)
|
|
79
|
-
|
|
80
|
-
return hk_dict
|
|
81
|
-
|
|
82
|
-
if len(temperatures.values()) == len(self.channels) and len(resistances.values()) == len(self.channels):
|
|
83
|
-
for idx, (chnl, temp) in enumerate(temperatures.items()):
|
|
84
|
-
hk_dict[f'GSRON_AG34972_{self.device_index}_T{chnl}'] = temp
|
|
85
|
-
self.temperature_gauges[idx].set(temp)
|
|
86
|
-
|
|
87
|
-
for idx, (chnl, res) in enumerate(resistances.items()):
|
|
88
|
-
hk_dict[f'GSRON_AG34972_{self.device_index}_R{chnl}'] = res
|
|
89
|
-
self.resistance_gauges[idx].set(res)
|
|
90
|
-
else:
|
|
91
|
-
logger.warning(f'Invalid scan result')
|
|
92
|
-
|
|
93
|
-
# Store the temperatures as synoptics
|
|
94
|
-
|
|
95
|
-
with SynopticsManagerProxy() as synoptics:
|
|
96
|
-
synoptics.store_th_synoptics(hk_dict)
|
|
97
|
-
|
|
98
|
-
return hk_dict
|