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,662 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import re
|
|
3
|
-
import sys
|
|
4
|
-
from typing import Dict
|
|
5
|
-
from typing import List
|
|
6
|
-
from typing import Tuple
|
|
7
|
-
|
|
8
|
-
from egse.decorators import dynamic_interface
|
|
9
|
-
from egse.device import DeviceConnectionState
|
|
10
|
-
from egse.device import DeviceInterface
|
|
11
|
-
from egse.mixin import DynamicCommandMixin
|
|
12
|
-
from egse.mixin import add_lf
|
|
13
|
-
from egse.mixin import dynamic_command
|
|
14
|
-
from egse.proxy import Proxy
|
|
15
|
-
from egse.settings import Settings
|
|
16
|
-
from egse.tempcontrol.keithley.daq6510_devif import DAQ6510EthernetInterface
|
|
17
|
-
from egse.zmq_ser import connect_address
|
|
18
|
-
|
|
19
|
-
logger = logging.getLogger(__name__)
|
|
20
|
-
|
|
21
|
-
CTRL_SETTINGS = Settings.load("Keithley Control Server")
|
|
22
|
-
FW_SETTINGS = Settings.load("Keithley DAQ6510")
|
|
23
|
-
DEVICE_SETTINGS = Settings.load(filename="daq6510.yaml")
|
|
24
|
-
|
|
25
|
-
DEFAULT_BUFFER_1 = "defbuffer1"
|
|
26
|
-
DEFAULT_BUFFER_2 = "defbuffer2"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class DAQ6510Interface(DeviceInterface):
|
|
30
|
-
"""
|
|
31
|
-
Interface definition for the Keithley DAQ6510 Controller,Proxy and Simulator.
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
@dynamic_interface
|
|
35
|
-
def send_command(self, command: str, response: bool):
|
|
36
|
-
"""
|
|
37
|
-
Send a SCPI command to the device. The valid commands are described in the DAQ6510
|
|
38
|
-
Reference Manual [DAQ6510-901-01 Rev. B / September 2019]
|
|
39
|
-
|
|
40
|
-
Args:
|
|
41
|
-
command (str): a SCPI command as specified in the DAQ6510 Reference Manual
|
|
42
|
-
response (bool): set to True if you expect a response from the device
|
|
43
|
-
|
|
44
|
-
Returns:
|
|
45
|
-
The response from the DAQ6510 is returned when a response was expected. When
|
|
46
|
-
`response` is False, None will be returned.
|
|
47
|
-
"""
|
|
48
|
-
raise NotImplementedError
|
|
49
|
-
|
|
50
|
-
@dynamic_command(
|
|
51
|
-
cmd_type="transaction",
|
|
52
|
-
cmd_string="*IDN?",
|
|
53
|
-
process_cmd_string=add_lf,
|
|
54
|
-
)
|
|
55
|
-
def info(self) -> str:
|
|
56
|
-
"""
|
|
57
|
-
Returns basic information about the device, its name, firmwre version etc.
|
|
58
|
-
|
|
59
|
-
The string returned is subject to change without notice and can not be used for parsing
|
|
60
|
-
information.
|
|
61
|
-
|
|
62
|
-
Returns:
|
|
63
|
-
An identification string of the instrument.
|
|
64
|
-
"""
|
|
65
|
-
raise NotImplementedError
|
|
66
|
-
|
|
67
|
-
@dynamic_command(
|
|
68
|
-
cmd_type="write",
|
|
69
|
-
cmd_string="*RST",
|
|
70
|
-
process_cmd_string=add_lf,
|
|
71
|
-
)
|
|
72
|
-
def reset(self):
|
|
73
|
-
"""
|
|
74
|
-
Resets the DAQ6510. This returns the instrument to default settings, and cancels all
|
|
75
|
-
pending commands.
|
|
76
|
-
|
|
77
|
-
.. Note::
|
|
78
|
-
The `reset()` method also deletes all the user-defined buffers. The two default
|
|
79
|
-
buffers are cleared.
|
|
80
|
-
|
|
81
|
-
"""
|
|
82
|
-
raise NotImplementedError
|
|
83
|
-
|
|
84
|
-
@dynamic_interface
|
|
85
|
-
def set_time(self, year: int, month: int, day: int, hour: int, minute: int, second: int):
|
|
86
|
-
"""Set the absolute date and time for the device."""
|
|
87
|
-
raise NotImplementedError
|
|
88
|
-
|
|
89
|
-
@dynamic_interface
|
|
90
|
-
def get_time(self):
|
|
91
|
-
"""
|
|
92
|
-
Get the date and time from the device in UTC. The returned string is of the format:
|
|
93
|
-
|
|
94
|
-
<weekday> <month> <day> <hour>:<minute>:<second> <year>
|
|
95
|
-
|
|
96
|
-
"""
|
|
97
|
-
raise NotImplementedError
|
|
98
|
-
|
|
99
|
-
@dynamic_interface
|
|
100
|
-
def read_buffer(self, start: int, end: int, buffer_name: str, elements: List[str]):
|
|
101
|
-
raise NotImplementedError
|
|
102
|
-
|
|
103
|
-
@dynamic_interface
|
|
104
|
-
def get_buffer_count(self, buffer_name: str):
|
|
105
|
-
raise NotImplementedError
|
|
106
|
-
|
|
107
|
-
@dynamic_interface
|
|
108
|
-
def get_buffer_capacity(self, buffer_name: str):
|
|
109
|
-
raise NotImplementedError
|
|
110
|
-
|
|
111
|
-
@dynamic_interface
|
|
112
|
-
def delete_buffer(self, buffer_name: str):
|
|
113
|
-
raise NotImplementedError
|
|
114
|
-
|
|
115
|
-
@dynamic_interface
|
|
116
|
-
def clear_buffer(self, buffer_name: str):
|
|
117
|
-
raise NotImplementedError
|
|
118
|
-
|
|
119
|
-
@dynamic_interface
|
|
120
|
-
def create_buffer(self, buffer_name: str, size: int):
|
|
121
|
-
raise NotImplementedError
|
|
122
|
-
|
|
123
|
-
@dynamic_interface
|
|
124
|
-
def configure_sensors(self, channel_list: str, *, sense: Dict[str, List[Tuple]]):
|
|
125
|
-
raise NotImplementedError
|
|
126
|
-
|
|
127
|
-
@dynamic_interface
|
|
128
|
-
def setup_measurements(self, *, buffer_name: str, channel_list: str):
|
|
129
|
-
raise NotImplementedError
|
|
130
|
-
|
|
131
|
-
@dynamic_interface
|
|
132
|
-
def perform_measurement(
|
|
133
|
-
self, *, buffer_name: str, channel_list: str, count: int, interval: int
|
|
134
|
-
):
|
|
135
|
-
raise NotImplementedError
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
class DAQ6510Controller(DAQ6510Interface, DynamicCommandMixin):
|
|
139
|
-
"""
|
|
140
|
-
The DAQ6510 Controller allows to remotely control the Keithley Data Acquisition System
|
|
141
|
-
through an Ethernet interface.
|
|
142
|
-
"""
|
|
143
|
-
|
|
144
|
-
def __init__(self, hostname=FW_SETTINGS.HOSTNAME, port=FW_SETTINGS.PORT):
|
|
145
|
-
"""
|
|
146
|
-
Opens a TCP/IP socket connection with the Keithley DAQ6510 Hardware.
|
|
147
|
-
|
|
148
|
-
Args:
|
|
149
|
-
hostname (str): the IP address or fully qualified hostname of the Hexapod hardware
|
|
150
|
-
controller. The default is defined in the ``settings.yaml`` configuration file.
|
|
151
|
-
|
|
152
|
-
port (int): the IP port number to connect to, by default set in the ``settings.yaml``
|
|
153
|
-
configuration file.
|
|
154
|
-
|
|
155
|
-
Raises:
|
|
156
|
-
Error: when the connection could not be established for some reason.
|
|
157
|
-
"""
|
|
158
|
-
|
|
159
|
-
super().__init__()
|
|
160
|
-
|
|
161
|
-
logger.debug(f"Initializing the DAQ6510 Controller with hostname={hostname} on port={port}")
|
|
162
|
-
|
|
163
|
-
self.daq = self.transport = DAQ6510EthernetInterface(hostname, port)
|
|
164
|
-
|
|
165
|
-
# We set the default buffer here, this can be changed with the `create_buffer()` method.
|
|
166
|
-
|
|
167
|
-
self.buffer_name = DEFAULT_BUFFER_1
|
|
168
|
-
|
|
169
|
-
def is_simulator(self):
|
|
170
|
-
return False
|
|
171
|
-
|
|
172
|
-
def connect(self):
|
|
173
|
-
self.daq.connect()
|
|
174
|
-
self.notify_observers(DeviceConnectionState.DEVICE_CONNECTED)
|
|
175
|
-
|
|
176
|
-
def disconnect(self):
|
|
177
|
-
self.daq.disconnect()
|
|
178
|
-
self.notify_observers(DeviceConnectionState.DEVICE_NOT_CONNECTED)
|
|
179
|
-
|
|
180
|
-
def reconnect(self):
|
|
181
|
-
if self.is_connected():
|
|
182
|
-
self.disconnect()
|
|
183
|
-
self.connect()
|
|
184
|
-
|
|
185
|
-
def is_connected(self):
|
|
186
|
-
return self.daq.is_connected()
|
|
187
|
-
|
|
188
|
-
def send_command(self, command: str, response: bool):
|
|
189
|
-
return self.daq.trans(command) if response else self.daq.write(command)
|
|
190
|
-
|
|
191
|
-
def set_time(self, year: int, month: int, day: int, hour: int, minute: int, second: int):
|
|
192
|
-
command = f":SYST:TIME {year}, {month}, {day}, {hour}, {minute}, {second}"
|
|
193
|
-
self.daq.write(command)
|
|
194
|
-
|
|
195
|
-
def get_time(self) -> str:
|
|
196
|
-
return self.daq.trans(":SYST:TIME? 1")
|
|
197
|
-
|
|
198
|
-
def read_buffer(
|
|
199
|
-
self, start: int, end: int, buffer_name: str = DEFAULT_BUFFER_1, elements: List[str] = None
|
|
200
|
-
):
|
|
201
|
-
"""
|
|
202
|
-
Reads specific data elements (measurements) from the given buffer.
|
|
203
|
-
|
|
204
|
-
Elements that can be specified to read out:
|
|
205
|
-
|
|
206
|
-
* CHANNEL: the channel for which the data was acquired
|
|
207
|
-
* DATE: the date when the data point was measured
|
|
208
|
-
* READING: the actual reading of the measurement
|
|
209
|
-
* TSTAMP: the time stamp when the data point was measured
|
|
210
|
-
* UNIT: the unit of measure for the measurement
|
|
211
|
-
* STATUS: the status information associated with the measurement
|
|
212
|
-
|
|
213
|
-
Args:
|
|
214
|
-
start: first index of the buffer, must be greater or equal to 1
|
|
215
|
-
end: last index of the buffer to return
|
|
216
|
-
buffer_name: the name of the buffer to read out
|
|
217
|
-
elements: the list of elements from the buffer to include in the response
|
|
218
|
-
|
|
219
|
-
Returns:
|
|
220
|
-
A list of all the readings.
|
|
221
|
-
"""
|
|
222
|
-
if elements is None:
|
|
223
|
-
elements = ["READING"]
|
|
224
|
-
else:
|
|
225
|
-
elements = ", ".join(elements)
|
|
226
|
-
|
|
227
|
-
return self.daq.trans(f'TRACE:DATA? {start}, {end}, "{buffer_name}", {elements}')
|
|
228
|
-
|
|
229
|
-
def get_buffer_count(self, buffer_name: str = DEFAULT_BUFFER_1):
|
|
230
|
-
|
|
231
|
-
return self.daq.trans(f'TRACE:ACTUAL? "{buffer_name}"')
|
|
232
|
-
|
|
233
|
-
def get_buffer_capacity(self, buffer_name: str = DEFAULT_BUFFER_1):
|
|
234
|
-
|
|
235
|
-
return self.daq.trans(f'TRACE:POINTS? "{buffer_name}"')
|
|
236
|
-
|
|
237
|
-
def delete_buffer(self, buffer_name: str):
|
|
238
|
-
"""
|
|
239
|
-
Deletes the specified buffer.
|
|
240
|
-
|
|
241
|
-
Args:
|
|
242
|
-
buffer_name (str): the name of the buffer
|
|
243
|
-
"""
|
|
244
|
-
self.daq.write(f'TRACE:DELETE "{buffer_name}"')
|
|
245
|
-
|
|
246
|
-
def clear_buffer(self, buffer_name: str = DEFAULT_BUFFER_1):
|
|
247
|
-
"""
|
|
248
|
-
Clears all readings and statistics from the specified buffer.
|
|
249
|
-
|
|
250
|
-
Args:
|
|
251
|
-
buffer_name (str): the name of the buffer [default: DEFAULT_BUFFER_1]
|
|
252
|
-
"""
|
|
253
|
-
|
|
254
|
-
response = self.daq.trans(f'TRACE:ACTUAL? "{buffer_name}"')
|
|
255
|
-
|
|
256
|
-
logger.info(f"Clearing buffer '{buffer_name}' containing {response} readings.")
|
|
257
|
-
|
|
258
|
-
self.daq.write(f'TRACE:CLEAR "{buffer_name}"')
|
|
259
|
-
|
|
260
|
-
def create_buffer(self, buffer_name: str, size: int = 1000):
|
|
261
|
-
"""
|
|
262
|
-
Creates a Reading Buffer with the given name.
|
|
263
|
-
|
|
264
|
-
A buffer with this name should not already exist in the device.
|
|
265
|
-
When the buffer does exist, the DAQ6510 will show a dialog on the front panel
|
|
266
|
-
with error 1115 saying the command cannot take an existing buffer name.
|
|
267
|
-
|
|
268
|
-
Buffer names must start with an alphabetic character. The names cannot
|
|
269
|
-
contain any periods nor the underscore (_) character. The name can be
|
|
270
|
-
up to 31 characters long.
|
|
271
|
-
|
|
272
|
-
If the given size is 0, the instrument creates the largest reading buffer
|
|
273
|
-
possible based on the available memory when the buffer is created.
|
|
274
|
-
|
|
275
|
-
Args:
|
|
276
|
-
buffer_name (str): the name of the buffer
|
|
277
|
-
size (int): the maximum number of readings (size >= 10) [default: 1000]
|
|
278
|
-
|
|
279
|
-
"""
|
|
280
|
-
|
|
281
|
-
self.daq.write(f'TRACE:MAKE "{buffer_name}", {size}')
|
|
282
|
-
|
|
283
|
-
self.buffer_name = buffer_name
|
|
284
|
-
|
|
285
|
-
def reset(self):
|
|
286
|
-
self.daq.write("SYSTem:BEEPer 500, 0.1; :*RST; :SYSTem:BEEPer 1000, 0.1\n")
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
def configure_sensors(self, channel_list: str, *, sense: Dict[str, List[Tuple]]):
|
|
290
|
-
"""
|
|
291
|
-
This command allows to configure the different sensors in the `channel_list`. Each sensor
|
|
292
|
-
in the list will be configured according to the settings given in the `sense` dictionary.
|
|
293
|
-
|
|
294
|
-
The following code will configure channels 101 and 102 as 4-wire transducers of type PT100.
|
|
295
|
-
|
|
296
|
-
```
|
|
297
|
-
channel_list = create_channel_list(101, 102)
|
|
298
|
-
|
|
299
|
-
sense = {
|
|
300
|
-
"TEMPERATURE": [
|
|
301
|
-
("TRANSDUCER", "FRTD"),
|
|
302
|
-
("RTD:FOUR", "PT100"),
|
|
303
|
-
]
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
daq.configure_sensors(channel_list, sense=sense)
|
|
307
|
-
|
|
308
|
-
```
|
|
309
|
-
|
|
310
|
-
The `sense` argument is a dictionary where the keys are function names like "TEMPERATURE"
|
|
311
|
-
or "VOLTAGE:DC", and the values are a list of settings for that function. The list of
|
|
312
|
-
settings is a list of tuples with the command and the value, e.g. "TRANSDUCER" is the
|
|
313
|
-
settings command and "FRTD" is its value. The list of settings will be send to the device
|
|
314
|
-
in the order that they take in the list.
|
|
315
|
-
|
|
316
|
-
Args:
|
|
317
|
-
channel_list (str): the channels to configure
|
|
318
|
-
sense: a dictionary with all the information on the configuration
|
|
319
|
-
|
|
320
|
-
Returns:
|
|
321
|
-
None.
|
|
322
|
-
"""
|
|
323
|
-
|
|
324
|
-
if "TEMPERATURE" in sense:
|
|
325
|
-
|
|
326
|
-
# Allowed settings for TEMPERATURE:
|
|
327
|
-
#
|
|
328
|
-
# - TEMPERATURE:APERTURE (@<channelList>)
|
|
329
|
-
# - TEMPERATURE:AVERAGE:COUNT (@<channelList>)
|
|
330
|
-
# - TEMPERATURE:AVERAGE:STATE (@<channelList>)
|
|
331
|
-
# - TEMPERATURE:AVERAGE:TCONTROL (@<channelList>)
|
|
332
|
-
# - TEMPERATURE:AVERAGE:WINDOW (@<channelList>)
|
|
333
|
-
# - TEMPERATURE:AVERAGE:AZERO:STATE
|
|
334
|
-
# - TEMPERATURE:DELAY:AUTO
|
|
335
|
-
# - TEMPERATURE:DELAY:USER<N>
|
|
336
|
-
# - TEMPERATURE:LINE:SYNC
|
|
337
|
-
# - TEMPERATURE:NPLCYCLES
|
|
338
|
-
# - TEMPERATURE:OCOMPENSATED
|
|
339
|
-
# - TEMPERATURE:ODETECTOR
|
|
340
|
-
# - TEMPERATURE:RELATIVE
|
|
341
|
-
# - TEMPERATURE:RELATIVE:ACQUIRE
|
|
342
|
-
# - TEMPERATURE:RELATIVE:STATE
|
|
343
|
-
# - TEMPERATURE:RTD:ALPHA, BETA, DELTA (@<channelList>)
|
|
344
|
-
# - TEMPERATURE:RTD:ZERO, TWO, THREE, FOUR (@<channelList>)
|
|
345
|
-
# - TEMPERATURE:TCOUPLE:RJUNCTION:SIMULATED
|
|
346
|
-
# - TEMPERATURE:TCOUPLE:RJUNCTION:RSELECT
|
|
347
|
-
# - TEMPERATURE:TCOUPLE:TYPE
|
|
348
|
-
# - TEMPERATURE:THERMISTOR (@<channelList>)
|
|
349
|
-
# - TEMPERATURE:TRANSDUCER (@<channelList>)
|
|
350
|
-
# - TEMPERATURE:UNIT (@<channelList>)
|
|
351
|
-
#
|
|
352
|
-
|
|
353
|
-
# set the function to temperature
|
|
354
|
-
|
|
355
|
-
self.daq.write(f'SENSE:FUNCTION "TEMPERATURE", {channel_list}')
|
|
356
|
-
|
|
357
|
-
for cmd, value in sense["TEMPERATURE"]:
|
|
358
|
-
self.daq.write(f"SENSE:TEMPERATURE:{cmd} {value}, {channel_list}")
|
|
359
|
-
|
|
360
|
-
def setup_measurements(self, *, buffer_name: str = DEFAULT_BUFFER_1, channel_list: str):
|
|
361
|
-
"""
|
|
362
|
-
Setup the measurements for the given channel list.
|
|
363
|
-
|
|
364
|
-
Args:
|
|
365
|
-
buffer_name: The name of the buffer to use [default: defbuffer1]
|
|
366
|
-
channel_list: The channels to read out
|
|
367
|
-
|
|
368
|
-
Returns:
|
|
369
|
-
None
|
|
370
|
-
"""
|
|
371
|
-
self.daq.write(f'ROUTE:SCAN:BUFFER "{buffer_name}"')
|
|
372
|
-
self.daq.write(f"ROUTE:SCAN:CREATE {channel_list}")
|
|
373
|
-
self.daq.write(f"ROUTE:CHANNEL:OPEN {channel_list}")
|
|
374
|
-
_ = self.daq.trans(f"ROUTE:CHANNEL:STATE? {channel_list}")
|
|
375
|
-
self.daq.write("ROUTE:SCAN:START:STIMULUS NONE")
|
|
376
|
-
|
|
377
|
-
def perform_measurement(
|
|
378
|
-
self,
|
|
379
|
-
*, # all following parameters shall be given as keyword arguments
|
|
380
|
-
buffer_name: str = DEFAULT_BUFFER_1,
|
|
381
|
-
channel_list: str,
|
|
382
|
-
count: int = 1,
|
|
383
|
-
interval: int = 2,
|
|
384
|
-
):
|
|
385
|
-
"""
|
|
386
|
-
Perform the actual measurements. This function will wait until all measurements have
|
|
387
|
-
completed, so be careful with the arguments `count` and `interval` as they will multiply
|
|
388
|
-
into the number of seconds that you will have to wait for the response.
|
|
389
|
-
|
|
390
|
-
Args:
|
|
391
|
-
buffer_name: The name of the buffer to use [default: defbuffer1]
|
|
392
|
-
channel_list: The channels to read out
|
|
393
|
-
count: number of measurements to perform [default: 1]
|
|
394
|
-
interval: The interval in which to read out [default: 2s]
|
|
395
|
-
|
|
396
|
-
Returns:
|
|
397
|
-
List of readings.
|
|
398
|
-
"""
|
|
399
|
-
|
|
400
|
-
# Set the number of times a scan is repeated
|
|
401
|
-
|
|
402
|
-
self.daq.write(f"ROUTE:SCAN:COUNT:SCAN {count}")
|
|
403
|
-
self.daq.write(f"ROUTE:SCAN:INTERVAL {interval}") # [seconds]
|
|
404
|
-
|
|
405
|
-
#
|
|
406
|
-
self.daq.write("INITIATE:IMMEDIATE")
|
|
407
|
-
self.daq.write("*WAI")
|
|
408
|
-
|
|
409
|
-
# Read out the buffer
|
|
410
|
-
|
|
411
|
-
logger.debug("Buffer count = ", self.get_buffer_count())
|
|
412
|
-
|
|
413
|
-
num_sensors = count_number_of_channels(channel_list)
|
|
414
|
-
|
|
415
|
-
readings = []
|
|
416
|
-
|
|
417
|
-
for idx in range(1, count * num_sensors + 1):
|
|
418
|
-
response = self.read_buffer(
|
|
419
|
-
idx, idx, buffer_name=buffer_name, elements=["CHANNEL", "TSTAMP", "READING", "UNIT"]
|
|
420
|
-
)
|
|
421
|
-
if response != "" and response != str(count * num_sensors):
|
|
422
|
-
if "\n" in response:
|
|
423
|
-
response = response.split("\n")
|
|
424
|
-
for i in range(len(response)):
|
|
425
|
-
readings.append(response[i].split(","))
|
|
426
|
-
else:
|
|
427
|
-
readings.append(response.split(","))
|
|
428
|
-
if len(readings[0]) < 4:
|
|
429
|
-
del readings[0]
|
|
430
|
-
|
|
431
|
-
return readings
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
class DAQ6510Simulator(DAQ6510Interface):
|
|
435
|
-
def read_buffer(self, start: int, end: int, buffer_name: str, elements: List[str]):
|
|
436
|
-
pass
|
|
437
|
-
|
|
438
|
-
def get_buffer_count(self, buffer_name: str):
|
|
439
|
-
pass
|
|
440
|
-
|
|
441
|
-
def get_buffer_capacity(self, buffer_name: str):
|
|
442
|
-
pass
|
|
443
|
-
|
|
444
|
-
def delete_buffer(self, buffer_name: str):
|
|
445
|
-
pass
|
|
446
|
-
|
|
447
|
-
def clear_buffer(self, buffer_name: str):
|
|
448
|
-
pass
|
|
449
|
-
|
|
450
|
-
def create_buffer(self, buffer_name: str, size: int):
|
|
451
|
-
pass
|
|
452
|
-
|
|
453
|
-
def configure_sensors(self, channel_list: str, *, sense: Dict[str, List[Tuple]]):
|
|
454
|
-
pass
|
|
455
|
-
|
|
456
|
-
def setup_measurements(self, *, buffer_name: str, channel_list: str):
|
|
457
|
-
pass
|
|
458
|
-
|
|
459
|
-
def perform_measurement(
|
|
460
|
-
self, *, buffer_name: str, channel_list: str, count: int, interval: int
|
|
461
|
-
):
|
|
462
|
-
pass
|
|
463
|
-
|
|
464
|
-
def send_command(self, command: str, response: bool):
|
|
465
|
-
pass
|
|
466
|
-
|
|
467
|
-
def info(self) -> str:
|
|
468
|
-
pass
|
|
469
|
-
|
|
470
|
-
def reset(self):
|
|
471
|
-
pass
|
|
472
|
-
|
|
473
|
-
def is_simulator(self):
|
|
474
|
-
pass
|
|
475
|
-
|
|
476
|
-
def connect(self):
|
|
477
|
-
pass
|
|
478
|
-
|
|
479
|
-
def disconnect(self):
|
|
480
|
-
pass
|
|
481
|
-
|
|
482
|
-
def reconnect(self):
|
|
483
|
-
pass
|
|
484
|
-
|
|
485
|
-
def is_connected(self):
|
|
486
|
-
pass
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
class DAQ6510Proxy(Proxy, DAQ6510Interface):
|
|
490
|
-
"""
|
|
491
|
-
The LakeShoreProxy class is used to connect to the LakeShore control server and send commands
|
|
492
|
-
to the LakeShore Hardware Controller remotely.
|
|
493
|
-
"""
|
|
494
|
-
|
|
495
|
-
def __init__(
|
|
496
|
-
self,
|
|
497
|
-
protocol=CTRL_SETTINGS.PROTOCOL,
|
|
498
|
-
hostname=CTRL_SETTINGS.HOSTNAME,
|
|
499
|
-
port=CTRL_SETTINGS.COMMANDING_PORT,
|
|
500
|
-
timeout = CTRL_SETTINGS.TIMEOUT * 1000 # timeout in ms. timeout must be > scan count * interval + (one scan duration)
|
|
501
|
-
):
|
|
502
|
-
"""
|
|
503
|
-
Args:
|
|
504
|
-
protocol: the transport protocol [default is taken from settings file]
|
|
505
|
-
hostname: location of the control server (IP address)
|
|
506
|
-
[default is taken from settings file]
|
|
507
|
-
port: TCP port on which the control server is listening for commands
|
|
508
|
-
[default is taken from settings file]
|
|
509
|
-
"""
|
|
510
|
-
super().__init__(connect_address(protocol, hostname, port), timeout=timeout)
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
def create_channel_list(*args) -> str:
|
|
514
|
-
"""
|
|
515
|
-
Create a channel list that is understood by the SCPI commands of the DAQ6510.
|
|
516
|
-
|
|
517
|
-
Channel names contain both the slot number and the channel number. The slot number is the
|
|
518
|
-
number of the slot where the card is installed at the back of the device.
|
|
519
|
-
|
|
520
|
-
When addressing multiple individual channels, add each of them as a separate argument,
|
|
521
|
-
e.g. to include channels 1, 3, and 7 from slot 1, use the following command:
|
|
522
|
-
|
|
523
|
-
>>> create_channel_list(101, 103, 107)
|
|
524
|
-
'(@101, 103, 107)'
|
|
525
|
-
|
|
526
|
-
To designate a range of channels, only one argument should be given, i.e. a tuple containing
|
|
527
|
-
two channel representing the range. The following tuple `(101, 110)` will create the
|
|
528
|
-
following response: `"(@101:110)"`. The range is inclusive, so this will define a range of
|
|
529
|
-
10 channels in slot 1.
|
|
530
|
-
|
|
531
|
-
>>> create_channel_list((201, 205))
|
|
532
|
-
'(@201:205)'
|
|
533
|
-
|
|
534
|
-
See reference manual for the Keithley DAQ6510 [DAQ6510-901-01 Rev. B / September 2019],
|
|
535
|
-
chapter 11: Introduction to SCPI commands, SCPI command formatting, channel naming.
|
|
536
|
-
|
|
537
|
-
Args:
|
|
538
|
-
*args: a tuple or a list of channels
|
|
539
|
-
|
|
540
|
-
Returns:
|
|
541
|
-
A string containing the channel list as understood by the device.
|
|
542
|
-
|
|
543
|
-
"""
|
|
544
|
-
if not args:
|
|
545
|
-
return ""
|
|
546
|
-
|
|
547
|
-
# If only one argument is given, I expect either a tuple defining a range
|
|
548
|
-
# or just one channel. When several arguments are given, I expect them all
|
|
549
|
-
# to be individual channels.
|
|
550
|
-
|
|
551
|
-
if len(args) == 1:
|
|
552
|
-
|
|
553
|
-
arg = args[0]
|
|
554
|
-
if isinstance(arg, tuple):
|
|
555
|
-
ch_list = f"(@{arg[0]}:{arg[1]})"
|
|
556
|
-
else:
|
|
557
|
-
ch_list = f"(@{arg})"
|
|
558
|
-
|
|
559
|
-
else:
|
|
560
|
-
ch_list = "(@" + ", ".join([str(arg) for arg in args]) + ")"
|
|
561
|
-
|
|
562
|
-
return ch_list
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
def count_number_of_channels(channel_list: str) -> int:
|
|
566
|
-
"""
|
|
567
|
-
Given a proper channel list, this function counts the number of channels.
|
|
568
|
-
For ranges, it returns the actual number of channels that are included in the range.
|
|
569
|
-
|
|
570
|
-
>>> count_number_of_channels("(@1,2,3,4,5)")
|
|
571
|
-
5
|
|
572
|
-
>>> count_number_of_channels("(@1, 3, 5)")
|
|
573
|
-
3
|
|
574
|
-
>>> count_number_of_channels("(@2:7)")
|
|
575
|
-
6
|
|
576
|
-
|
|
577
|
-
Args:
|
|
578
|
-
channel_list: a channel list as understood by the SCPI commands of DAQ6510.
|
|
579
|
-
|
|
580
|
-
Returns:
|
|
581
|
-
The number of channels in the list.
|
|
582
|
-
"""
|
|
583
|
-
|
|
584
|
-
match = re.match(r"\(@(.*)\)", channel_list)
|
|
585
|
-
group = match.groups()[0]
|
|
586
|
-
|
|
587
|
-
parts = group.replace(" ", "").split(",")
|
|
588
|
-
count = 0
|
|
589
|
-
for part in parts:
|
|
590
|
-
if ":" in part:
|
|
591
|
-
channels = part.split(":")
|
|
592
|
-
count += int(channels[1]) - int(channels[0]) + 1
|
|
593
|
-
else:
|
|
594
|
-
count += 1
|
|
595
|
-
|
|
596
|
-
return count
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
def get_channel_names(channel_list: str) -> List[str]:
|
|
600
|
-
"""
|
|
601
|
-
Generate a list of channel names from a given channel list.
|
|
602
|
-
|
|
603
|
-
Args:
|
|
604
|
-
channel_list: a channel list as understood by the SCPI commands of DAQ6510.
|
|
605
|
-
|
|
606
|
-
Returns:
|
|
607
|
-
A list of channel names.
|
|
608
|
-
"""
|
|
609
|
-
|
|
610
|
-
match = re.match(r"\(@(.*)\)", channel_list)
|
|
611
|
-
group = match.groups()[0]
|
|
612
|
-
|
|
613
|
-
parts = group.replace(" ", "").split(",")
|
|
614
|
-
names = []
|
|
615
|
-
for part in parts:
|
|
616
|
-
if ":" in part:
|
|
617
|
-
channels = part.split(":")
|
|
618
|
-
names.extend(str(ch) for ch in range(int(channels[0]), int(channels[1]) + 1))
|
|
619
|
-
else:
|
|
620
|
-
names.append(part)
|
|
621
|
-
|
|
622
|
-
return names
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
if __name__ == "__main__":
|
|
626
|
-
|
|
627
|
-
logging.basicConfig(level=20)
|
|
628
|
-
|
|
629
|
-
print(f'{get_channel_names("(@101:105)")=}')
|
|
630
|
-
print(f'{get_channel_names("(@101, 102, 103, 105)")=}')
|
|
631
|
-
sys.exit(0)
|
|
632
|
-
|
|
633
|
-
daq = DAQ6510Controller()
|
|
634
|
-
daq.connect()
|
|
635
|
-
daq.reset()
|
|
636
|
-
|
|
637
|
-
print(daq.info())
|
|
638
|
-
|
|
639
|
-
size = daq.get_buffer_capacity()
|
|
640
|
-
print(f"buffer {DEFAULT_BUFFER_1} can still hold {size} readings")
|
|
641
|
-
|
|
642
|
-
count = daq.get_buffer_count()
|
|
643
|
-
print(f"buffer {DEFAULT_BUFFER_1} holds {count} readings")
|
|
644
|
-
|
|
645
|
-
channel_list = create_channel_list((101, 102))
|
|
646
|
-
|
|
647
|
-
print(channel_list)
|
|
648
|
-
|
|
649
|
-
sense = {"TEMPERATURE": [("TRANSDUCER", "FRTD"), ("RTD:FOUR", "PT100"), ("UNIT", "KELVIN")]}
|
|
650
|
-
|
|
651
|
-
daq.configure_sensors(channel_list, sense=sense)
|
|
652
|
-
|
|
653
|
-
daq.setup_measurements(channel_list=channel_list)
|
|
654
|
-
|
|
655
|
-
response = daq.perform_measurement(channel_list=channel_list, count=5, interval=1)
|
|
656
|
-
|
|
657
|
-
print(response)
|
|
658
|
-
|
|
659
|
-
count = daq.get_buffer_count()
|
|
660
|
-
print(f"buffer {DEFAULT_BUFFER_1} holds {count} readings")
|
|
661
|
-
|
|
662
|
-
daq.disconnect()
|