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,48 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
import datetime
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
from egse.control import ControlServer
|
|
6
|
-
from egse.ni.alarms.cdaq9375 import cdaq9375Controller, cdaq9375Simulator, cdaq9375Interface
|
|
7
|
-
from egse.ni.alarms.cdaq9375_devif import cdaq9375Command
|
|
8
|
-
|
|
9
|
-
from egse.protocol import CommandProtocol
|
|
10
|
-
from egse.device import DeviceConnectionState
|
|
11
|
-
from egse.settings import Settings
|
|
12
|
-
from egse.system import format_datetime
|
|
13
|
-
from egse.zmq_ser import bind_address
|
|
14
|
-
|
|
15
|
-
COMMAND_SETTINGS = Settings.load(filename="cdaq9375.yaml")
|
|
16
|
-
logger = logging.getLogger(__name__)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class cdaq9375Protocol(CommandProtocol):
|
|
21
|
-
def __init__(self, control_server: ControlServer):
|
|
22
|
-
super().__init__()
|
|
23
|
-
self.control_server = control_server
|
|
24
|
-
|
|
25
|
-
if Settings.simulation_mode():
|
|
26
|
-
self.cdaq = cdaq9375Simulator()
|
|
27
|
-
else:
|
|
28
|
-
self.cdaq = cdaq9375Controller()
|
|
29
|
-
|
|
30
|
-
self.load_commands(
|
|
31
|
-
COMMAND_SETTINGS.Commands, cdaq9375Command, cdaq9375Interface
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
self.build_device_method_lookup_table(self.cdaq)
|
|
35
|
-
|
|
36
|
-
def get_bind_address(self):
|
|
37
|
-
return bind_address(
|
|
38
|
-
self.control_server.get_communication_protocol(),
|
|
39
|
-
self.control_server.get_commanding_port(),
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
def get_status(self):
|
|
43
|
-
return super().get_status()
|
|
44
|
-
|
|
45
|
-
def get_housekeeping(self) -> dict:
|
|
46
|
-
|
|
47
|
-
result = dict()
|
|
48
|
-
return result
|
egse/obs_inspection.py
DELETED
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
|
|
3
|
-
from rich.console import Console
|
|
4
|
-
from rich.progress import Progress, SpinnerColumn, TimeElapsedColumn, BarColumn, TaskProgressColumn
|
|
5
|
-
from rich.table import Table
|
|
6
|
-
|
|
7
|
-
from egse import h5
|
|
8
|
-
from egse.dpu.fitsgen import get_hdf5_filenames_for_obsid
|
|
9
|
-
from egse.fee.nfee import HousekeepingData
|
|
10
|
-
from egse.setup import load_setup
|
|
11
|
-
from egse.spw import DataPacket, HousekeepingPacket
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def parse_arguments():
|
|
15
|
-
|
|
16
|
-
parser = argparse.ArgumentParser()
|
|
17
|
-
|
|
18
|
-
parser.add_argument(
|
|
19
|
-
"--obsid",
|
|
20
|
-
type=str,
|
|
21
|
-
help="Observation Identifier.",
|
|
22
|
-
)
|
|
23
|
-
|
|
24
|
-
parser.add_argument(
|
|
25
|
-
"--location",
|
|
26
|
-
type=str,
|
|
27
|
-
help="Location where the data is stored. This is the folder with the /daily and /obs sub-folders.",
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
return parser.parse_args()
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def print_table(obsid: str, location: str):
|
|
34
|
-
obs_hdf5_filenames = get_hdf5_filenames_for_obsid(obsid, location)
|
|
35
|
-
num_hdf5_files = len(obs_hdf5_filenames)
|
|
36
|
-
print(f"Found {num_hdf5_files} HDF5 files for obsid {obsid}")
|
|
37
|
-
|
|
38
|
-
setup = load_setup()
|
|
39
|
-
|
|
40
|
-
ccd_bin_to_id = setup.camera.fee.ccd_numbering.CCD_BIN_TO_ID
|
|
41
|
-
n_fee_side = setup.camera.fee.ccd_sides.enum
|
|
42
|
-
|
|
43
|
-
table = Table(title=f"Report for obsid {obsid}", expand=False)
|
|
44
|
-
table.add_column("HDF5", justify="right")
|
|
45
|
-
table.add_column("Group", no_wrap=True, justify="center")
|
|
46
|
-
table.add_column("Timestamp", no_wrap=True)
|
|
47
|
-
table.add_column("CCD", no_wrap=True)
|
|
48
|
-
table.add_column("Command")
|
|
49
|
-
|
|
50
|
-
console = Console(width=200)
|
|
51
|
-
|
|
52
|
-
with Progress(
|
|
53
|
-
SpinnerColumn(),
|
|
54
|
-
BarColumn(),
|
|
55
|
-
TaskProgressColumn(),
|
|
56
|
-
# *Progress.get_default_columns(),
|
|
57
|
-
TimeElapsedColumn(),
|
|
58
|
-
console=Console(),
|
|
59
|
-
transient=False,
|
|
60
|
-
) as progress:
|
|
61
|
-
|
|
62
|
-
hdf5_file_task = progress.add_task("[red]Opening HDF5 file", total=num_hdf5_files)
|
|
63
|
-
|
|
64
|
-
progress_index = 0
|
|
65
|
-
|
|
66
|
-
while not progress.finished:
|
|
67
|
-
progress.update(hdf5_file_task, advance=1)
|
|
68
|
-
hdf5_filename = obs_hdf5_filenames[progress_index]
|
|
69
|
-
|
|
70
|
-
try:
|
|
71
|
-
hdf5_index = int(hdf5_filename.split("_")[-1].split(".")[0])
|
|
72
|
-
with h5.get_file(hdf5_filename, mode="r", locking=False) as hdf5_file:
|
|
73
|
-
|
|
74
|
-
for group_index in range(0, 4):
|
|
75
|
-
|
|
76
|
-
end_section = group_index == 3 if "3" in hdf5_file else True
|
|
77
|
-
|
|
78
|
-
ccd = None
|
|
79
|
-
|
|
80
|
-
try:
|
|
81
|
-
group = hdf5_file[str(group_index)]
|
|
82
|
-
|
|
83
|
-
has_e_side = False
|
|
84
|
-
has_f_side = False
|
|
85
|
-
|
|
86
|
-
try:
|
|
87
|
-
timestamp = group["timecode"].attrs["timestamp"]
|
|
88
|
-
|
|
89
|
-
hk = HousekeepingData(HousekeepingPacket(group["hk"]).data)
|
|
90
|
-
has_error_flags = hk["error_flags"] != 0
|
|
91
|
-
|
|
92
|
-
data = group["data"]
|
|
93
|
-
|
|
94
|
-
for packet_index in [0, len(data) - 1]:
|
|
95
|
-
packet_type = DataPacket(data[str(packet_index)]).type
|
|
96
|
-
|
|
97
|
-
ccd_number = ccd_bin_to_id[packet_type.ccd_number]
|
|
98
|
-
|
|
99
|
-
ccd_side = packet_type.ccd_side
|
|
100
|
-
if ccd_side == n_fee_side.E:
|
|
101
|
-
has_e_side = True
|
|
102
|
-
else:
|
|
103
|
-
has_f_side = True
|
|
104
|
-
if has_e_side and has_f_side:
|
|
105
|
-
ccd = f"{ccd_number} BOTH"
|
|
106
|
-
elif has_e_side:
|
|
107
|
-
ccd = f"{ccd_number}E"
|
|
108
|
-
elif has_f_side:
|
|
109
|
-
ccd = f"{ccd_number}F"
|
|
110
|
-
if has_error_flags:
|
|
111
|
-
ccd = f"{ccd} (!)"
|
|
112
|
-
except KeyError:
|
|
113
|
-
ccd = None # No data transmitted
|
|
114
|
-
|
|
115
|
-
# Command
|
|
116
|
-
|
|
117
|
-
try:
|
|
118
|
-
commands = group["commands"]
|
|
119
|
-
|
|
120
|
-
for command_index in range(len(commands)):
|
|
121
|
-
command = commands[str(command_index)][()]
|
|
122
|
-
|
|
123
|
-
if command_index == 0:
|
|
124
|
-
table.add_row(str(hdf5_index), str(group_index), timestamp, ccd,
|
|
125
|
-
f"{command_index}: {command}",
|
|
126
|
-
end_section=end_section and len(commands) == 1)
|
|
127
|
-
elif command_index == len(commands) - 1:
|
|
128
|
-
table.add_row(None, None, None, None, f"{command_index}: {command}",
|
|
129
|
-
end_section=end_section)
|
|
130
|
-
else:
|
|
131
|
-
table.add_row(None, None, None, None, f"{command_index}: {command}",
|
|
132
|
-
end_section=False)
|
|
133
|
-
except KeyError:
|
|
134
|
-
table.add_row(str(hdf5_index), str(group_index), timestamp, ccd, None,
|
|
135
|
-
end_section=end_section) # No commands sent
|
|
136
|
-
except KeyError:
|
|
137
|
-
pass # Internal sync
|
|
138
|
-
except OSError as exc:
|
|
139
|
-
print("OS error")
|
|
140
|
-
except RuntimeError as exc:
|
|
141
|
-
print("Runtime error")
|
|
142
|
-
# table.add_row(None, None, None, None)
|
|
143
|
-
|
|
144
|
-
progress_index += 1
|
|
145
|
-
|
|
146
|
-
console.print(table)
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
if __name__ == "__main__":
|
|
150
|
-
""" Print table with status of the given observation.
|
|
151
|
-
|
|
152
|
-
We loop over all HDF5 files for the given observation and extract the following information for all data groups
|
|
153
|
-
in each of them:
|
|
154
|
-
- Number of the HDF5 files (extracted from the filename);
|
|
155
|
-
- Group number;
|
|
156
|
-
- CCD number (1/2/3/4);
|
|
157
|
-
- CCD side (E/F/BOTH);
|
|
158
|
-
- Commands.
|
|
159
|
-
|
|
160
|
-
Example: python -m egse.obs_inspection --obsid 00135_IAS --location /STER/platodata/IAS/data/IAS
|
|
161
|
-
"""
|
|
162
|
-
|
|
163
|
-
args = parse_arguments()
|
|
164
|
-
print_table(args.obsid, args.location)
|
|
165
|
-
|
egse/observer.py
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import abc
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class Observer(abc.ABC):
|
|
5
|
-
@abc.abstractmethod
|
|
6
|
-
def update(self, changed_object):
|
|
7
|
-
pass
|
|
8
|
-
|
|
9
|
-
@abc.abstractmethod
|
|
10
|
-
def do(self, actions):
|
|
11
|
-
pass
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class Observable:
|
|
15
|
-
def __init__(self):
|
|
16
|
-
self.observers = []
|
|
17
|
-
|
|
18
|
-
def addObserver(self, observer):
|
|
19
|
-
if observer not in self.observers:
|
|
20
|
-
self.observers.append(observer)
|
|
21
|
-
|
|
22
|
-
def deleteObserver(self, observer):
|
|
23
|
-
self.observers.remove(observer)
|
|
24
|
-
|
|
25
|
-
def clearObservers(self):
|
|
26
|
-
self.observers = []
|
|
27
|
-
|
|
28
|
-
def countObservers(self):
|
|
29
|
-
return len(self.observers)
|
|
30
|
-
|
|
31
|
-
def notifyObservers(self, changedObject):
|
|
32
|
-
# FIXME: put a try..except here to log any problem that occurred in the observer's update()
|
|
33
|
-
# method
|
|
34
|
-
for observer in self.observers:
|
|
35
|
-
observer.update(changedObject)
|
|
36
|
-
|
|
37
|
-
def actionObservers(self, actions):
|
|
38
|
-
# FIXME: put a try..except here to log any problem that occurred in the observer's do()
|
|
39
|
-
# method
|
|
40
|
-
for observer in self.observers:
|
|
41
|
-
observer.do(actions)
|
egse/obsid.py
DELETED
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
An ObservationIdentifier or OBSID is a unique identifier for an observation or test.
|
|
3
|
-
|
|
4
|
-
Each observation or test needs a unique identification that can be used as a key in a
|
|
5
|
-
database or in a filename for test data etc.
|
|
6
|
-
|
|
7
|
-
"""
|
|
8
|
-
import os
|
|
9
|
-
from pathlib import Path
|
|
10
|
-
from typing import Union
|
|
11
|
-
|
|
12
|
-
from egse.config import find_dir
|
|
13
|
-
from egse.env import get_data_storage_location
|
|
14
|
-
from egse.settings import Settings
|
|
15
|
-
|
|
16
|
-
LAB_SETUP_TEST = 0
|
|
17
|
-
TEST_LAB_SETUP = 1
|
|
18
|
-
TEST_LAB = 3
|
|
19
|
-
|
|
20
|
-
SITE = Settings.load("SITE")
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class ObservationIdentifier:
|
|
24
|
-
"""A unique identifier for each observation or test."""
|
|
25
|
-
|
|
26
|
-
def __init__(self, lab_id: str = None, setup_id: int = None, test_id: int = None):
|
|
27
|
-
"""
|
|
28
|
-
Args:
|
|
29
|
-
lab_id: the identifier for the site or lab that performs the test
|
|
30
|
-
setup_id: the identifier for the setup that is used for the test
|
|
31
|
-
test_id: the test identifier or test number
|
|
32
|
-
"""
|
|
33
|
-
if lab_id is None or setup_id is None or test_id is None:
|
|
34
|
-
raise ValueError("arguments can not be None or an empty string")
|
|
35
|
-
|
|
36
|
-
self._lab_id = lab_id
|
|
37
|
-
self._setup_id = setup_id
|
|
38
|
-
self._test_id = test_id
|
|
39
|
-
|
|
40
|
-
# Construct the OBSID as it will be used in serialisation etc.
|
|
41
|
-
|
|
42
|
-
self._obsid = f"{lab_id}_{setup_id:05d}_{test_id:05d}"
|
|
43
|
-
|
|
44
|
-
@staticmethod
|
|
45
|
-
def create_from_string(obsid: str, order: int = LAB_SETUP_TEST):
|
|
46
|
-
if order == LAB_SETUP_TEST:
|
|
47
|
-
lab_id, setup_id, test_id = obsid.split("_")
|
|
48
|
-
elif order == TEST_LAB_SETUP:
|
|
49
|
-
test_id, lab_id, setup_id = obsid.split("_")
|
|
50
|
-
else:
|
|
51
|
-
raise ValueError(
|
|
52
|
-
f"The order argument can only be {LAB_SETUP_TEST=} or {TEST_LAB_SETUP=}")
|
|
53
|
-
|
|
54
|
-
return ObservationIdentifier(lab_id, int(setup_id), int(test_id))
|
|
55
|
-
|
|
56
|
-
@property
|
|
57
|
-
def lab_id(self):
|
|
58
|
-
return self._lab_id
|
|
59
|
-
|
|
60
|
-
@property
|
|
61
|
-
def setup_id(self):
|
|
62
|
-
return self._setup_id
|
|
63
|
-
|
|
64
|
-
@property
|
|
65
|
-
def test_id(self):
|
|
66
|
-
return self._test_id
|
|
67
|
-
|
|
68
|
-
def __eq__(self, other):
|
|
69
|
-
if not isinstance(other, ObservationIdentifier):
|
|
70
|
-
return NotImplemented
|
|
71
|
-
return self._obsid == other._obsid
|
|
72
|
-
|
|
73
|
-
def __hash__(self):
|
|
74
|
-
return hash(self._obsid)
|
|
75
|
-
|
|
76
|
-
def __str__(self):
|
|
77
|
-
return self._obsid
|
|
78
|
-
|
|
79
|
-
def create_id(self, *, order: int = LAB_SETUP_TEST, camera_name: str = None) -> str:
|
|
80
|
-
"""
|
|
81
|
-
Creates a string representation of the observation identifier.
|
|
82
|
-
|
|
83
|
-
Args:
|
|
84
|
-
order: the order in which the parts are concatenated
|
|
85
|
-
camera_name: if a camera name is given, it will be appended in lower case
|
|
86
|
-
|
|
87
|
-
Returns:
|
|
88
|
-
A string representation of the obsid with or without camera name attached.
|
|
89
|
-
"""
|
|
90
|
-
camera = f"{f'_{camera_name.lower()}' if camera_name else ''}"
|
|
91
|
-
|
|
92
|
-
if order == TEST_LAB_SETUP:
|
|
93
|
-
return f"{self._test_id:05d}_{self._lab_id}_{self._setup_id:05d}{camera}"
|
|
94
|
-
if order == TEST_LAB:
|
|
95
|
-
return f"{self._test_id:05d}_{self._lab_id}{camera}"
|
|
96
|
-
if order == LAB_SETUP_TEST:
|
|
97
|
-
return f"{self._lab_id}_{self._setup_id:05d}_{self._test_id:05d}{camera}"
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
def obsid_from_storage(obsid: Union[ObservationIdentifier, str, int], data_dir: str,
|
|
101
|
-
site_id: str = None, camera_name: str = None) -> str:
|
|
102
|
-
"""
|
|
103
|
-
Return the name of the folder for the given obsid in the 'obs' sub-folder of data_dir.
|
|
104
|
-
|
|
105
|
-
For the oldest observations, the obsid used in the directory structure and filenames was of the format
|
|
106
|
-
TEST_LAB_SETUP. All files in this folder also have the obsid in that format in their name. At some point, we
|
|
107
|
-
decided to change this to TEST_LAB, but we still need to be able to re-process the old data (with the setup ID in
|
|
108
|
-
the names of the directories and files).
|
|
109
|
-
|
|
110
|
-
For newer observations (>= 2023.6.0+CGSE), the camera name is appended to the folder name and also included
|
|
111
|
-
in the filenames in that folder.
|
|
112
|
-
|
|
113
|
-
Args:
|
|
114
|
-
obsid: Observation identifier. This can be an ObservationIdentifier object, a string in format TEST_LAB or
|
|
115
|
-
TEST_LAB_SETUP, or an integer representing the test ID. In this last case, the site id is taken from the
|
|
116
|
-
Settings.
|
|
117
|
-
data_dir: root folder in which the observations are stored. This folder shall have a sub-folder 'obs'.
|
|
118
|
-
site_id: a site id like 'CSL1' or 'IAS', when `None`, the `SITE.ID` from the Settings will be used
|
|
119
|
-
camera_name: if not None, append the camera name to the result
|
|
120
|
-
|
|
121
|
-
Returns:
|
|
122
|
-
The name of the folder for the given obsid in the 'obs' sub-folder of data_dir.
|
|
123
|
-
"""
|
|
124
|
-
|
|
125
|
-
obs_dir = f"{data_dir}/obs/"
|
|
126
|
-
site_id = site_id or SITE.ID
|
|
127
|
-
camera = f"_{camera_name.lower()}" if camera_name else ""
|
|
128
|
-
|
|
129
|
-
if isinstance(obsid, ObservationIdentifier):
|
|
130
|
-
test, site = obsid.test_id, obsid.lab_id
|
|
131
|
-
elif isinstance(obsid, str): # TEST_LAB or TEST_LAB_SETUP
|
|
132
|
-
test, site = obsid.split("_")[:2]
|
|
133
|
-
else:
|
|
134
|
-
test, site = obsid, site_id
|
|
135
|
-
|
|
136
|
-
test = int(test)
|
|
137
|
-
|
|
138
|
-
# Remember the camera name can be an empty string, so this will match both
|
|
139
|
-
# '00313_CSL' and '00313_CSL_achel'.
|
|
140
|
-
|
|
141
|
-
result_without_setup = Path(f"{obs_dir}/{test:05d}_{site}{camera}")
|
|
142
|
-
|
|
143
|
-
if result_without_setup.exists():
|
|
144
|
-
return result_without_setup.stem
|
|
145
|
-
|
|
146
|
-
# If a camera name was provided, but we try to find an old observation where the
|
|
147
|
-
# camera name was not appended to the folder name yet, the following will match
|
|
148
|
-
# that folder name.
|
|
149
|
-
|
|
150
|
-
result_without_camera = Path(f"{obs_dir}/{test:05d}_{site}")
|
|
151
|
-
|
|
152
|
-
if result_without_camera.exists():
|
|
153
|
-
return result_without_camera.stem
|
|
154
|
-
|
|
155
|
-
# When we come here, we can still match old observations that included the setup id in their
|
|
156
|
-
# folder name.
|
|
157
|
-
|
|
158
|
-
pattern = f"{test:05d}_{site}_*{camera}"
|
|
159
|
-
|
|
160
|
-
if (match := find_dir(pattern=pattern, root=obs_dir)) is None:
|
|
161
|
-
raise ValueError(f"Could not find a folder matching '{pattern}' in '{obs_dir}'")
|
|
162
|
-
|
|
163
|
-
return match.stem
|
egse/powermeter/__init__.py
DELETED
|
File without changes
|
egse/powermeter/ni/__init__.py
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Device control for the NI photodiode meter model cdaq9184 that will be used during IAS TVAC.
|
|
3
|
-
|
|
4
|
-
This package contains the classes and modules to work with the Thorlabs Power meter Controller.
|
|
5
|
-
|
|
6
|
-
The main entry point for the user of this package is through the `cdaq9184Proxy` class:
|
|
7
|
-
|
|
8
|
-
```python
|
|
9
|
-
>>> from egse.powermeter.ni.cdaq9184 import cdaq9184Proxy
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
This class will connect to the control server of the CDAQ 9184 Controller and provides all
|
|
13
|
-
commands to
|
|
14
|
-
control and monitor the photodiode sensor readout and status. The control server is a small
|
|
15
|
-
server application
|
|
16
|
-
that is started as shown below. The control server directly connects to the cdaq9184 readout Controller
|
|
17
|
-
through an Ethernet
|
|
18
|
-
interface. When you have now hardware available, the control server can be started in simulator
|
|
19
|
-
mode by appending the
|
|
20
|
-
`--sim` string to the command below.
|
|
21
|
-
|
|
22
|
-
CDAQ9184 has 4 NI slots that will be equipped with NI9226, NI9239 and NI9219 compact daqs.
|
|
23
|
-
|
|
24
|
-
NI9239 will read the voltage signal from the 2x photodiodes inside the integrating sphere.
|
|
25
|
-
Current to voltage is converted and pre amplified by TIAs.
|
|
26
|
-
NI9226 will read 3x PT100 4 wire sensors: 2x on each collimator extremity, 1x on the integrating sphere in order
|
|
27
|
-
to perform thermal drift compensations of the photodiodes' signals.
|
|
28
|
-
In the final config NI9219 stays as a backup daq, to be used whenever needed -but the code does not read now any
|
|
29
|
-
output from it-.
|
|
30
|
-
|
|
31
|
-
All these signals can be read (mean and dev from 5 samples acquired at 100Hz) and will be required to monitor the
|
|
32
|
-
flux of the OGSE if an integrating sphere is used in the setup. It can then provide the capability to perform
|
|
33
|
-
Long term stability test as well as to monitor the full flux range from cam_tvpt_080_dynamic_range.py (tbc).
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
$ python -m egse.powermeter.ni.cdaq9184_cs
|
|
37
|
-
```
|
|
38
|
-
"""
|
egse/powermeter/ni/cdaq9184.py
DELETED
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module defines the basic classes to access the photodiodes readout ensured by
|
|
3
|
-
NI CDAQ9184 controller that will be used in the IAS TVAC setup.
|
|
4
|
-
"""
|
|
5
|
-
import logging
|
|
6
|
-
from typing import List
|
|
7
|
-
|
|
8
|
-
from egse.decorators import dynamic_interface
|
|
9
|
-
from egse.device import DeviceConnectionState
|
|
10
|
-
from egse.device import DeviceInterface
|
|
11
|
-
from egse.powermeter.ni.cdaq9184_devif import cdaq9184Error, cdaq9184SocketInterface
|
|
12
|
-
from egse.proxy import Proxy
|
|
13
|
-
from egse.settings import Settings
|
|
14
|
-
from egse.zmq_ser import connect_address
|
|
15
|
-
from egse.mixin import dynamic_command
|
|
16
|
-
from egse.mixin import add_lf
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
LOGGER = logging.getLogger(__name__)
|
|
20
|
-
|
|
21
|
-
CTRL_SETTINGS = Settings.load("NI Control Server")
|
|
22
|
-
CDAQ9184_SETTINGS = Settings.load("NI Controller")
|
|
23
|
-
DEVICE_SETTINGS = Settings.load(filename="cdaq9184.yaml")
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class cdaq9184Interface(DeviceInterface):
|
|
27
|
-
"""
|
|
28
|
-
Interface definition for the Signals acquisitions of the CDAQ9184 Controller, Simulator and Proxy..
|
|
29
|
-
"""
|
|
30
|
-
@dynamic_interface
|
|
31
|
-
def info(self) -> str:
|
|
32
|
-
"""
|
|
33
|
-
Returns basic information about the device, its name, firmwre version etc.
|
|
34
|
-
|
|
35
|
-
The string returned is subject to change without notice and can not be used for parsing
|
|
36
|
-
information.
|
|
37
|
-
|
|
38
|
-
Returns:
|
|
39
|
-
An identification string of the instrument.
|
|
40
|
-
"""
|
|
41
|
-
raise NotImplementedError
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
@dynamic_interface
|
|
45
|
-
def read_values(self):
|
|
46
|
-
"""
|
|
47
|
-
Reads the signals of the channels of the CDAQ9181. Adds timestamp and returns a list.
|
|
48
|
-
Channels read are:
|
|
49
|
-
Photodiode_1 (V) from the integrating sphere, read as ch0 from NI9239
|
|
50
|
-
Photodiode_2 (V) from the integrating sphere, read as ch1 from NI9239
|
|
51
|
-
|
|
52
|
-
collimator_1_temp (°C) from the OGSE collimator, read as ch0 from NI9226
|
|
53
|
-
collimator_2_temp (°C) from the OGSE collimator, read as ch1 from NI9226
|
|
54
|
-
sphere_temp (°C) from the integrating sphere, read as ch2 from NI9226
|
|
55
|
-
|
|
56
|
-
the returned values are mean and dev from 5 samples acquired at 100Hz.
|
|
57
|
-
The values are sent by a Labview application installed in the Keynes working station
|
|
58
|
-
|
|
59
|
-
"""
|
|
60
|
-
|
|
61
|
-
raise NotImplementedError
|
|
62
|
-
|
|
63
|
-
@dynamic_interface
|
|
64
|
-
def read_photodiodes(self):
|
|
65
|
-
"""
|
|
66
|
-
|
|
67
|
-
Returns: echo values from read_values method, timestamp and photodides' signals in V
|
|
68
|
-
|
|
69
|
-
"""
|
|
70
|
-
raise NotImplementedError
|
|
71
|
-
|
|
72
|
-
@dynamic_interface
|
|
73
|
-
def read_temperatures(self):
|
|
74
|
-
"""
|
|
75
|
-
|
|
76
|
-
Returns: echo values from read_values method, timestamp and temperature values in °C
|
|
77
|
-
|
|
78
|
-
"""
|
|
79
|
-
raise NotImplementedError
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
class cdaq9184Simulator(cdaq9184Interface):
|
|
84
|
-
"""
|
|
85
|
-
The pcdaq9184 Simulator class.
|
|
86
|
-
"""
|
|
87
|
-
|
|
88
|
-
def __init__(self):
|
|
89
|
-
self._is_connected = True
|
|
90
|
-
self.temp_operation = False
|
|
91
|
-
|
|
92
|
-
def is_connected(self):
|
|
93
|
-
return self._is_connected
|
|
94
|
-
|
|
95
|
-
def is_simulator(self):
|
|
96
|
-
return True
|
|
97
|
-
|
|
98
|
-
def connect(self):
|
|
99
|
-
self._is_connected = True
|
|
100
|
-
|
|
101
|
-
def disconnect(self):
|
|
102
|
-
self._is_connected = False
|
|
103
|
-
|
|
104
|
-
def reconnect(self):
|
|
105
|
-
self.connect()
|
|
106
|
-
|
|
107
|
-
def get_id(self):
|
|
108
|
-
pass
|
|
109
|
-
|
|
110
|
-
def info(self):
|
|
111
|
-
pass
|
|
112
|
-
|
|
113
|
-
def read_values(self):
|
|
114
|
-
pass
|
|
115
|
-
|
|
116
|
-
def read_photodiodes(self):
|
|
117
|
-
pass
|
|
118
|
-
|
|
119
|
-
def read_temperatures(self):
|
|
120
|
-
pass
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
class cdaq9184Controller(cdaq9184Interface):
|
|
124
|
-
"""The cdaq9184Controller allows controlling a NI CDAQ 9184 photodiode measurement device."""
|
|
125
|
-
|
|
126
|
-
def __init__(self):
|
|
127
|
-
"""Initialize the cdaq9184 Controller interface."""
|
|
128
|
-
|
|
129
|
-
super().__init__()
|
|
130
|
-
|
|
131
|
-
LOGGER.debug("Initializing NI CDAQ 9184")
|
|
132
|
-
|
|
133
|
-
try:
|
|
134
|
-
self.cdaq = cdaq9184SocketInterface()
|
|
135
|
-
self.cdaq.connect(CDAQ9184_SETTINGS.HOSTNAME) # IP address of the computer with Labview
|
|
136
|
-
|
|
137
|
-
except cdaq9184Error as exc:
|
|
138
|
-
LOGGER.warning(f"TempError caught: Couldn't establish connection ({exc})")
|
|
139
|
-
raise cdaq9184Error(
|
|
140
|
-
"Couldn't establish a connection with the NI CDAQ 9184 controller."
|
|
141
|
-
) from exc
|
|
142
|
-
|
|
143
|
-
def connect(self):
|
|
144
|
-
"""Connects to the photodiode measurement device.
|
|
145
|
-
|
|
146
|
-
Raises:
|
|
147
|
-
DeviceNotFoundError: when the photodiode device is not connected.
|
|
148
|
-
"""
|
|
149
|
-
try:
|
|
150
|
-
self.cdaq.connect(CDAQ9184_SETTINGS.HOSTNAME)
|
|
151
|
-
except cdaq9184Error as exc:
|
|
152
|
-
LOGGER.warning(f"cdaqError caught: Couldn't establish connection ({exc})")
|
|
153
|
-
raise ConnectionError("Couldn't establish a connection with the NI DAQ9184 controller.") from exc
|
|
154
|
-
|
|
155
|
-
self.notify_observers(DeviceConnectionState.DEVICE_CONNECTED)
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
def disconnect(self):
|
|
159
|
-
try:
|
|
160
|
-
self.cdaq.disconnect()
|
|
161
|
-
except cdaq9184Error as exc:
|
|
162
|
-
raise ConnectionError("Couldn't establish a connection with the NI CDAQ 9184 controller.") from exc
|
|
163
|
-
|
|
164
|
-
self.notify_observers(DeviceConnectionState.DEVICE_NOT_CONNECTED)
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
def reconnect(self):
|
|
168
|
-
if self.is_connected():
|
|
169
|
-
self.disconnect()
|
|
170
|
-
self.connect()
|
|
171
|
-
|
|
172
|
-
def is_connected(self):
|
|
173
|
-
"""Check if the Temp Controller is connected."""
|
|
174
|
-
return self.cdaq.is_connected()
|
|
175
|
-
|
|
176
|
-
def is_simulator(self):
|
|
177
|
-
return False
|
|
178
|
-
|
|
179
|
-
def get_id(self):
|
|
180
|
-
return self.cdaq.get_id()
|
|
181
|
-
|
|
182
|
-
def info(self):
|
|
183
|
-
pass
|
|
184
|
-
|
|
185
|
-
def read_values(self) -> list:
|
|
186
|
-
data = self.cdaq.trans("get_value")
|
|
187
|
-
return data
|
|
188
|
-
|
|
189
|
-
def read_temperatures(self) -> dict:
|
|
190
|
-
values = self.read_values()
|
|
191
|
-
all_temp = values[14:26]
|
|
192
|
-
|
|
193
|
-
temp_mean = [all_temp[i] for i in range(0, len(all_temp), 2)]
|
|
194
|
-
temp_mean = values[2:] + temp_mean # c'est pas plutôt values[:2] ?
|
|
195
|
-
temp_std = [all_temp[i] for i in range(1, len(all_temp), 2)]
|
|
196
|
-
temp_std = values[2:] + temp_std # c'est pas plutôt values[:2] ?
|
|
197
|
-
|
|
198
|
-
temperatures = {"temp_mean": temp_mean, "temp_std": temp_std}
|
|
199
|
-
|
|
200
|
-
return temperatures
|
|
201
|
-
|
|
202
|
-
def read_photodiodes(self):
|
|
203
|
-
pass
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
class cdaq9184Proxy(Proxy, cdaq9184Interface):
|
|
207
|
-
"""The cdaq9184Proxy class is used to connect to the control server and send commands to
|
|
208
|
-
the NI CDAQ 9184 device remotely."""
|
|
209
|
-
def __init__(
|
|
210
|
-
self,
|
|
211
|
-
protocol=CTRL_SETTINGS.PROTOCOL,
|
|
212
|
-
hostname=CTRL_SETTINGS.HOSTNAME,
|
|
213
|
-
port=CTRL_SETTINGS.CDAQ9184.get("COMMANDING_PORT"),
|
|
214
|
-
):
|
|
215
|
-
"""
|
|
216
|
-
Args:
|
|
217
|
-
protocol: the transport protocol [default is taken from settings file]
|
|
218
|
-
hostname: location of the control server (IP address)
|
|
219
|
-
[default is taken from settings file]
|
|
220
|
-
port: TCP port on which the control server is listening for commands
|
|
221
|
-
[default is taken from settings file]
|
|
222
|
-
"""
|
|
223
|
-
super().__init__(connect_address(protocol, hostname, port))
|
|
224
|
-
|