cgse 2024.7.0__py3-none-any.whl → 2025.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +27 -0
- bump.py +85 -0
- cgse-2025.0.2.dist-info/METADATA +38 -0
- cgse-2025.0.2.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.2.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -233
- egse/alert/alertman_ui.py +0 -600
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -132
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1240
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -138
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -137
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -165
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -834
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -71
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -920
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -113
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -180
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/remove_lines_between_matches.py +0 -188
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
|
@@ -1,657 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module defines the basic classes to access the EKSMA Filter wheel connected to the
|
|
3
|
-
8SMC4 motor controller that will be used in the IAS TVAC setup.
|
|
4
|
-
Note the EKSMA filter wheel is made of 2x filterwheels coupled to a same stepper motor. Each filter wheel has up to 8
|
|
5
|
-
filter placements that leads to up to 64 filter combinations
|
|
6
|
-
"""
|
|
7
|
-
import logging
|
|
8
|
-
|
|
9
|
-
import numpy as np
|
|
10
|
-
|
|
11
|
-
from egse.decorators import dynamic_interface
|
|
12
|
-
from egse.device import DeviceInterface
|
|
13
|
-
from egse.filterwheel import FilterWheelError
|
|
14
|
-
from egse.proxy import Proxy
|
|
15
|
-
from egse.settings import Settings
|
|
16
|
-
from egse.setup import load_setup
|
|
17
|
-
from egse.zmq_ser import connect_address
|
|
18
|
-
|
|
19
|
-
LOGGER = logging.getLogger(__name__)
|
|
20
|
-
|
|
21
|
-
CTRL_SETTINGS = Settings.load("Filter Wheel 8SMC4 Control Server")
|
|
22
|
-
DEVICE_SETTINGS = Settings.load(filename="fw8smc4.yaml")
|
|
23
|
-
SITE = Settings.load("SITE")
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
class FilterWheel8SMC4Interface(DeviceInterface):
|
|
27
|
-
"""
|
|
28
|
-
Interface definition for the Filter Wheel 8SMC4 Controller, Simulator and Proxy..
|
|
29
|
-
"""
|
|
30
|
-
@dynamic_interface
|
|
31
|
-
def load_wheels(self):
|
|
32
|
-
"""
|
|
33
|
-
Gets the attenuation setup configuration loaded from the configuration manager proxy
|
|
34
|
-
"""
|
|
35
|
-
return NotImplemented
|
|
36
|
-
|
|
37
|
-
@dynamic_interface
|
|
38
|
-
def wheel_factors(self):
|
|
39
|
-
"""
|
|
40
|
-
Gets the attenuation setup configuration loaded from the configuration manager proxy
|
|
41
|
-
"""
|
|
42
|
-
return NotImplemented
|
|
43
|
-
|
|
44
|
-
@dynamic_interface
|
|
45
|
-
def set_position(self):
|
|
46
|
-
"""
|
|
47
|
-
Sets the position of each og the filter wheels
|
|
48
|
-
|
|
49
|
-
Args:
|
|
50
|
-
pos_wheel1(int) the position number of wheel 1 from 0 to 7
|
|
51
|
-
pos_wheel2(int) the position number of wheel 2 from 0 to 7
|
|
52
|
-
"""
|
|
53
|
-
return NotImplemented
|
|
54
|
-
|
|
55
|
-
@dynamic_interface
|
|
56
|
-
def get_position(self):
|
|
57
|
-
"""
|
|
58
|
-
Gets the position of each of the filter wheels
|
|
59
|
-
|
|
60
|
-
Returns:
|
|
61
|
-
A list of 2 integers with the position of the wheels
|
|
62
|
-
"""
|
|
63
|
-
return NotImplemented
|
|
64
|
-
|
|
65
|
-
@dynamic_interface
|
|
66
|
-
def homing(self):
|
|
67
|
-
"""
|
|
68
|
-
|
|
69
|
-
"""
|
|
70
|
-
return NotImplemented
|
|
71
|
-
|
|
72
|
-
@dynamic_interface
|
|
73
|
-
def get_status(self):
|
|
74
|
-
"""
|
|
75
|
-
|
|
76
|
-
"""
|
|
77
|
-
return NotImplemented
|
|
78
|
-
|
|
79
|
-
@dynamic_interface
|
|
80
|
-
def att_get_level(self):
|
|
81
|
-
"""
|
|
82
|
-
Reports current attenuator level (a factor 0..1).
|
|
83
|
-
|
|
84
|
-
Returns:
|
|
85
|
-
A float from 0 to 1.
|
|
86
|
-
"""
|
|
87
|
-
return NotImplemented
|
|
88
|
-
|
|
89
|
-
@dynamic_interface
|
|
90
|
-
def att_set_level_factor(self):
|
|
91
|
-
"""
|
|
92
|
-
Sets attenuator to the level closest to <factor>. There are 38 levels of attenuation available, from 0 to 1.
|
|
93
|
-
This command chooses the level closest to the requested value.
|
|
94
|
-
|
|
95
|
-
Args:
|
|
96
|
-
fwc_fraction(float) from 0 to 1
|
|
97
|
-
|
|
98
|
-
"""
|
|
99
|
-
return NotImplemented
|
|
100
|
-
|
|
101
|
-
@dynamic_interface
|
|
102
|
-
def att_set_level_position(self):
|
|
103
|
-
"""
|
|
104
|
-
Sets attenuator wheels to positions <a> and <b> #same command than set_position
|
|
105
|
-
(wheels positions go from 1 to 8).
|
|
106
|
-
|
|
107
|
-
Args:
|
|
108
|
-
pos_wheel1(int) the position number of wheel 1 from 0 to 7
|
|
109
|
-
pos_wheel2(int) the position number of wheel 2 from 0 to 7
|
|
110
|
-
"""
|
|
111
|
-
return NotImplemented
|
|
112
|
-
|
|
113
|
-
@dynamic_interface
|
|
114
|
-
def att_level_up(self):
|
|
115
|
-
"""
|
|
116
|
-
Sets the attenuator to the level immediately above the current level. It won't go above 1.
|
|
117
|
-
"""
|
|
118
|
-
return NotImplemented
|
|
119
|
-
|
|
120
|
-
@dynamic_interface
|
|
121
|
-
def att_level_down(self):
|
|
122
|
-
"""
|
|
123
|
-
Sets the attenuator to the level immediately below the current level.It won't go lower than 0.
|
|
124
|
-
"""
|
|
125
|
-
return NotImplemented
|
|
126
|
-
|
|
127
|
-
@dynamic_interface
|
|
128
|
-
def att_status(self):
|
|
129
|
-
"""
|
|
130
|
-
Reports if device attenuator is ready for use.
|
|
131
|
-
"""
|
|
132
|
-
return NotImplemented
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
class FilterWheel8SMC4Simulator(FilterWheel8SMC4Interface):
|
|
136
|
-
"""
|
|
137
|
-
The Filter Wheel Simulator class.
|
|
138
|
-
"""
|
|
139
|
-
|
|
140
|
-
def __init__(self):
|
|
141
|
-
|
|
142
|
-
self._att_position_1 = 1
|
|
143
|
-
self._att_position_2 = 1
|
|
144
|
-
self._is_connected = False
|
|
145
|
-
self._wheel_position = [175, 0]
|
|
146
|
-
|
|
147
|
-
# when the wheel factor is 0 there is no filter in the wheel, if OD units are considered
|
|
148
|
-
# when the wheel factor is a character, the filter is a spectral filter
|
|
149
|
-
# will be late replaced by the setup configuration
|
|
150
|
-
self.wheel1 = {0: 0,
|
|
151
|
-
1: 2,
|
|
152
|
-
2: 1,
|
|
153
|
-
3: 0.03,
|
|
154
|
-
4: "T4K",
|
|
155
|
-
5: "T5K",
|
|
156
|
-
6: "T6K",
|
|
157
|
-
7: "T6.5K"}
|
|
158
|
-
|
|
159
|
-
self.wheel2 = {0: 0,
|
|
160
|
-
1: 0.3,
|
|
161
|
-
2: 0.05,
|
|
162
|
-
3: 5,
|
|
163
|
-
4: 2,
|
|
164
|
-
5: 0.1,
|
|
165
|
-
6: 0.15,
|
|
166
|
-
7: 3}
|
|
167
|
-
self._setup = None
|
|
168
|
-
self._att_level = [self.wheel1, self.wheel2, 0]
|
|
169
|
-
|
|
170
|
-
# attenuator factor and index position list length 64
|
|
171
|
-
self.factor = []
|
|
172
|
-
self.index = []
|
|
173
|
-
|
|
174
|
-
# wheel status
|
|
175
|
-
self.wheel_status = {"Control": 0,
|
|
176
|
-
"Err C": 0,
|
|
177
|
-
"Err D": 0,
|
|
178
|
-
"Err V": 0,
|
|
179
|
-
"EEPROM Connected": 0,
|
|
180
|
-
"Is homed": 0,
|
|
181
|
-
"Secur": 0,
|
|
182
|
-
"Alarm": 0,
|
|
183
|
-
"CTP error": 0,
|
|
184
|
-
"Power Overheat": 0,
|
|
185
|
-
"Controller Overheat": 0,
|
|
186
|
-
"Overload power voltage": 0,
|
|
187
|
-
"Overload power current": 0,
|
|
188
|
-
"Overload USB Voltage": 0,
|
|
189
|
-
"Low USB Voltage": 0,
|
|
190
|
-
"Overload USB Current": 0,
|
|
191
|
-
"Borders Swap Misset": 0,
|
|
192
|
-
"Low power voltage": 0,
|
|
193
|
-
"H bridge fault": 0,
|
|
194
|
-
"Current Motor Bits": 0,
|
|
195
|
-
"Current Motor 0": 0,
|
|
196
|
-
"Current Motor 1": 0,
|
|
197
|
-
"Current Motor 2": 0,
|
|
198
|
-
"Current Motor 3": 0}
|
|
199
|
-
|
|
200
|
-
def is_connected(self):
|
|
201
|
-
return True
|
|
202
|
-
|
|
203
|
-
def is_simulator(self):
|
|
204
|
-
return True
|
|
205
|
-
|
|
206
|
-
def connect(self):
|
|
207
|
-
self._is_connected = True
|
|
208
|
-
|
|
209
|
-
def disconnect(self):
|
|
210
|
-
self._is_connected = False
|
|
211
|
-
|
|
212
|
-
def reconnect(self):
|
|
213
|
-
self.connect()
|
|
214
|
-
|
|
215
|
-
def load_wheels(self):
|
|
216
|
-
self._setup = load_setup()
|
|
217
|
-
#todo: still some work here to manage the default setup to be loaded
|
|
218
|
-
return self._setup
|
|
219
|
-
|
|
220
|
-
def set_position(self, pos_wheel1, pos_wheel2):
|
|
221
|
-
self._wheel_position = [pos_wheel1, pos_wheel2]
|
|
222
|
-
return 1
|
|
223
|
-
|
|
224
|
-
def get_position(self) -> list:
|
|
225
|
-
return self._wheel_position
|
|
226
|
-
|
|
227
|
-
def homing(self):
|
|
228
|
-
self._wheel_position = [0, 0]
|
|
229
|
-
return self._wheel_position
|
|
230
|
-
|
|
231
|
-
def get_status(self):
|
|
232
|
-
_status = [0, 0, 30, 4, 30, hex(67)]
|
|
233
|
-
return _status
|
|
234
|
-
|
|
235
|
-
def att_get_level(self) -> list:
|
|
236
|
-
#retrieves the wheel position
|
|
237
|
-
position = self.get_position()
|
|
238
|
-
|
|
239
|
-
if any(y > 7 or y < 0 for y in position):
|
|
240
|
-
logging.warning("Trying to set the wheels to an out of range position, command aborted, try to do homing")
|
|
241
|
-
pass
|
|
242
|
-
else:
|
|
243
|
-
#gets the corresponding attenuation factor of each wheel
|
|
244
|
-
att1 = self.wheel1.get(position[0])
|
|
245
|
-
att2 = self.wheel2.get(position[1])
|
|
246
|
-
try:
|
|
247
|
-
att = att1 + att2 #in case the attenuations are given in OD, otherwise multiply
|
|
248
|
-
except TypeError:
|
|
249
|
-
att = None
|
|
250
|
-
self._att_level = [self.wheel1, self.wheel2, att]
|
|
251
|
-
return self._att_level
|
|
252
|
-
|
|
253
|
-
def att_level_up(self) -> list:
|
|
254
|
-
# gets actual position
|
|
255
|
-
actual_position = self._wheel_position
|
|
256
|
-
# finds the position index:
|
|
257
|
-
_index = self.index.index(actual_position)
|
|
258
|
-
#gets the increased index position:
|
|
259
|
-
new_position = self.index[_index + 1]
|
|
260
|
-
if (_index < 64):
|
|
261
|
-
logging.info("moving the wheel to an upper limit")
|
|
262
|
-
self.set_position(new_position[0], new_position[1])
|
|
263
|
-
elif _index > 64:
|
|
264
|
-
logging.info(" Trying to move the wheel to an out of range position, command not executed")
|
|
265
|
-
return self._wheel_position
|
|
266
|
-
|
|
267
|
-
def att_level_down(self) -> list:
|
|
268
|
-
# gets actual position
|
|
269
|
-
actual_position = self._wheel_position
|
|
270
|
-
# finds the position index:
|
|
271
|
-
_index = self.index.index(actual_position)
|
|
272
|
-
# gets the increased index position:
|
|
273
|
-
new_position = self.index[_index - 1]
|
|
274
|
-
if _index > 0:
|
|
275
|
-
logging.info("moving the wheel to an lower limit")
|
|
276
|
-
self.set_position(new_position[0], new_position[1])
|
|
277
|
-
else:
|
|
278
|
-
logging.info(" Trying to move the wheel to an out of range position, command not executed")
|
|
279
|
-
return self._wheel_position
|
|
280
|
-
|
|
281
|
-
def att_set_level_factor(self):
|
|
282
|
-
pass
|
|
283
|
-
|
|
284
|
-
def att_set_level_position(self):
|
|
285
|
-
pass
|
|
286
|
-
|
|
287
|
-
def att_status(self, _flags) -> dict:
|
|
288
|
-
_flag = 0x20
|
|
289
|
-
s_flags = [int(x) for x in np.binary_repr(_flag)]
|
|
290
|
-
# from int to bit list of 24 elements corresponding to the filterwheel flag state bits
|
|
291
|
-
# Note that the last 5 bits are obsolete in with library versions > 2.12.5 (email exchanges)
|
|
292
|
-
s_flags = [int(x) for x in np.binary_repr(_flag)]
|
|
293
|
-
s_flags.reverse()
|
|
294
|
-
z = [0]*(24-len(s_flags))
|
|
295
|
-
s_flags = s_flags + z
|
|
296
|
-
|
|
297
|
-
_keys = list(self.wheel_status.keys())
|
|
298
|
-
for k, i in zip(_keys, s_flags):
|
|
299
|
-
self.wheel_status[k] = i
|
|
300
|
-
return self.wheel_status
|
|
301
|
-
|
|
302
|
-
def wheel_factors(self) -> list:
|
|
303
|
-
# computes the configuration of the attenuation of both wheels
|
|
304
|
-
# wheel1 and 2 are dictionaries containing the wheels attenuation factors
|
|
305
|
-
#TODO: asks Rik clarification on how this load setup works, after starting the cm_ui and loading a new setup, if the cm_ui is setup the setup remains
|
|
306
|
-
|
|
307
|
-
if self._setup is None:
|
|
308
|
-
logging.info("The ConfMan Proxy is not started and no setup configuration has been loaded, fake values of the filter wheel will be computed")
|
|
309
|
-
else:
|
|
310
|
-
try:
|
|
311
|
-
logging.info("Loading the wheels setup from the ConfMan Proxy")
|
|
312
|
-
self.wheel1 = self._setup.gse.filter_wheel.wheel_1
|
|
313
|
-
self.wheel2 = self._setup.gse.filter_wheel.wheel_2
|
|
314
|
-
|
|
315
|
-
except AttributeError:
|
|
316
|
-
logging.warning("The actual setup does not contain the wheels configuration, try to load another setup")
|
|
317
|
-
|
|
318
|
-
d_index = []
|
|
319
|
-
s_index = []
|
|
320
|
-
d_factor = []
|
|
321
|
-
s_factor = []
|
|
322
|
-
for i in self.wheel1:
|
|
323
|
-
for e in self.wheel2:
|
|
324
|
-
try:
|
|
325
|
-
element = round(self.wheel1[i] + self.wheel2[e], 2)
|
|
326
|
-
d_factor.append(element)
|
|
327
|
-
d_index.append([i, e])
|
|
328
|
-
except TypeError:
|
|
329
|
-
element = str(repr(self.wheel1[i]) + '+' + repr(self.wheel2[e]))
|
|
330
|
-
s_factor.append(element)
|
|
331
|
-
s_index.append([i, e])
|
|
332
|
-
|
|
333
|
-
# here we sort the list of number and their corresponding indexes.
|
|
334
|
-
# then both number and string list are concatenated
|
|
335
|
-
temp = sorted(zip(d_factor, d_index), key=lambda x: x)
|
|
336
|
-
d_factor, d_index = map(list, zip(*temp))
|
|
337
|
-
|
|
338
|
-
_duplicated = [idx for idx, item in enumerate(d_factor) if item in d_factor[:idx]]
|
|
339
|
-
|
|
340
|
-
# popping duplicated index
|
|
341
|
-
d_factor = [i for j, i in enumerate(d_factor) if j not in _duplicated]
|
|
342
|
-
d_index = [i for j, i in enumerate(d_index) if j not in _duplicated]
|
|
343
|
-
# putting all together
|
|
344
|
-
self.factor = d_factor + s_factor
|
|
345
|
-
self.index = d_index + s_index
|
|
346
|
-
return [self.factor, self.index]
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
class FilterWheel8SMC4Controller(FilterWheel8SMC4Interface):
|
|
350
|
-
"""The FilterWheel8SMC4Controller allows controlling a Thorlabs 8SMC4 Filter Wheel."""
|
|
351
|
-
|
|
352
|
-
def __init__(self):
|
|
353
|
-
"""Initialize the Filter Wheel Controller interface."""
|
|
354
|
-
|
|
355
|
-
super().__init__()
|
|
356
|
-
|
|
357
|
-
from egse.filterwheel.eksma.fw8smc4_devif import FilterWheel8SMC4Error
|
|
358
|
-
from egse.filterwheel.eksma.fw8smc4_devif import FilterWheel8SMC4EthernetInterface
|
|
359
|
-
from egse.filterwheel.eksma.fw8smc4_devif import FilterWheel8SMC4USBInterface
|
|
360
|
-
|
|
361
|
-
self._setup = None
|
|
362
|
-
|
|
363
|
-
LOGGER.debug("Initializing Filter Wheel 8SMC4 Controller")
|
|
364
|
-
# when the wheel factor is 0 there is no filter in the wheel, if OD units are considered
|
|
365
|
-
# when the wheel factor is a character, the filter is a spectral filter
|
|
366
|
-
# will be late replaced by the setup configuration
|
|
367
|
-
self.wheel1 = {0: 0,
|
|
368
|
-
1: 2,
|
|
369
|
-
2: 1,
|
|
370
|
-
3: 0.03,
|
|
371
|
-
4: "T4K",
|
|
372
|
-
5: "T5K",
|
|
373
|
-
6: "T6K",
|
|
374
|
-
7: "T6.5K"}
|
|
375
|
-
|
|
376
|
-
self.wheel2 = {0: 0,
|
|
377
|
-
1: 0.3,
|
|
378
|
-
2: 0.05,
|
|
379
|
-
3: 5,
|
|
380
|
-
4: 2,
|
|
381
|
-
5: 0.1,
|
|
382
|
-
6: 0.15,
|
|
383
|
-
7: 3}
|
|
384
|
-
|
|
385
|
-
# Initializes the to wheel positions dummy variables
|
|
386
|
-
self.wheel_position = [0, 0]
|
|
387
|
-
|
|
388
|
-
# Initializes the wheel status:
|
|
389
|
-
|
|
390
|
-
self.wheel_status = {"Control": 0,
|
|
391
|
-
"Err C": 0,
|
|
392
|
-
"Err D": 0,
|
|
393
|
-
"Err V": 0,
|
|
394
|
-
"EEPROM Connected": 0,
|
|
395
|
-
"Is homed": 0,
|
|
396
|
-
"Secur": 0,
|
|
397
|
-
"Alarm": 0,
|
|
398
|
-
"CTP error": 0,
|
|
399
|
-
"Power Overheat": 0,
|
|
400
|
-
"Controller Overheat": 0,
|
|
401
|
-
"Overload power voltage": 0,
|
|
402
|
-
"Overload power current": 0,
|
|
403
|
-
"Overload USB Voltage": 0,
|
|
404
|
-
"Low USB Voltage": 0,
|
|
405
|
-
"Overload USB Current": 0,
|
|
406
|
-
"Borders Swap Misset": 0,
|
|
407
|
-
"Low power voltage": 0,
|
|
408
|
-
"H bridge fault": 0,
|
|
409
|
-
"Current Motor Bits": 0,
|
|
410
|
-
"Current Motor 0": 0,
|
|
411
|
-
"Current Motor 1": 0,
|
|
412
|
-
"Current Motor 2": 0,
|
|
413
|
-
"Current Motor 3": 0}
|
|
414
|
-
|
|
415
|
-
try:
|
|
416
|
-
if SITE.ID == "INTA":
|
|
417
|
-
self.fw = FilterWheel8SMC4USBInterface()
|
|
418
|
-
else:
|
|
419
|
-
self.fw = FilterWheel8SMC4EthernetInterface()
|
|
420
|
-
self.fw.connect()
|
|
421
|
-
except FilterWheel8SMC4Error as exc:
|
|
422
|
-
LOGGER.warning(f"FilterWheel8SMC4Error caught: Couldn't establish connection ({exc})")
|
|
423
|
-
raise FilterWheelError(
|
|
424
|
-
"Couldn't establish a connection with the Filter Wheel 8SMC4 controller."
|
|
425
|
-
) from exc
|
|
426
|
-
|
|
427
|
-
def connect(self):
|
|
428
|
-
"""Connects to the Filter Wheel device.
|
|
429
|
-
|
|
430
|
-
Raises:
|
|
431
|
-
DeviceNotFoundError: when the Filter Wheel device is not connected.
|
|
432
|
-
"""
|
|
433
|
-
if not self.is_connected():
|
|
434
|
-
try:
|
|
435
|
-
self.fw.connect()
|
|
436
|
-
except FilterWheelError as exc:
|
|
437
|
-
LOGGER.warning(f"HuberError caught: Couldn't establish connection ({exc})")
|
|
438
|
-
|
|
439
|
-
def disconnect(self):
|
|
440
|
-
try:
|
|
441
|
-
self.fw.disconnect()
|
|
442
|
-
except FilterWheelError as exc:
|
|
443
|
-
raise FilterWheelError("Couldn't disconnect from FilterWheel Controller.") from exc
|
|
444
|
-
|
|
445
|
-
def reconnect(self):
|
|
446
|
-
if self.is_connected():
|
|
447
|
-
self.disconnect()
|
|
448
|
-
self.connect()
|
|
449
|
-
|
|
450
|
-
def is_connected(self):
|
|
451
|
-
"""Check if the Filter Wheel Controller is connected."""
|
|
452
|
-
return self.fw.is_connected()
|
|
453
|
-
|
|
454
|
-
def is_simulator(self):
|
|
455
|
-
return False
|
|
456
|
-
|
|
457
|
-
def load_wheels(self):
|
|
458
|
-
self._setup = load_setup()
|
|
459
|
-
# todo: still some work here to manage the default setup to be loaded
|
|
460
|
-
return self._setup
|
|
461
|
-
|
|
462
|
-
def get_id(self):
|
|
463
|
-
return self.fw.get_id()
|
|
464
|
-
|
|
465
|
-
def get_response(self, cmd_string):
|
|
466
|
-
response = self.fw.get_response(cmd_string)
|
|
467
|
-
return response
|
|
468
|
-
|
|
469
|
-
def move_wheel(self, steps):
|
|
470
|
-
self.fw.move_wheel(steps)
|
|
471
|
-
|
|
472
|
-
def set_position(self, pos_wheel1, pos_wheel2):
|
|
473
|
-
# Wheel 1 is the "Master" wheel. It hooks wheel_2 when a complete turn is performed
|
|
474
|
-
#todo: document the wheels reference and the way they move
|
|
475
|
-
_check = [pos_wheel1, pos_wheel2] # from 0 to 7 equivalent to 1 to 8 on the wheels
|
|
476
|
-
|
|
477
|
-
if any(y > 7 or y < 0 for y in _check):
|
|
478
|
-
logging.warning("Trying to set the wheels to an out of range position, command aborted")
|
|
479
|
-
|
|
480
|
-
else:
|
|
481
|
-
logging.info("Moving the filter wheels to the required positions")
|
|
482
|
-
_output = self.fw.set_pos(pos_wheel1, pos_wheel2)
|
|
483
|
-
self.wheel_position = [pos_wheel1, pos_wheel2]
|
|
484
|
-
return _output
|
|
485
|
-
|
|
486
|
-
def command_zero(self):
|
|
487
|
-
self.fw.command_zero()
|
|
488
|
-
|
|
489
|
-
def get_status(self) -> list:
|
|
490
|
-
x_status = self.fw.get_status()
|
|
491
|
-
_status = [x_status.CurPosition, x_status.CurSpeed, round(x_status.CurT * 0.1, 1), x_status.Ipwr,
|
|
492
|
-
round(x_status.Upwr * 0.01, 2), hex(x_status.Flags)]
|
|
493
|
-
return _status
|
|
494
|
-
|
|
495
|
-
def get_position(self) -> list:
|
|
496
|
-
return self.fw.get_position()
|
|
497
|
-
|
|
498
|
-
def homing(self):
|
|
499
|
-
""" standard ".cfg" file, which can be downloaded to device using XILab,
|
|
500
|
-
overloads command_homezero command. The command takes time to be executed as the wheel needs time to get
|
|
501
|
-
to the home position"""
|
|
502
|
-
self.fw.homing()
|
|
503
|
-
self.wheel_position = [0, 0]
|
|
504
|
-
|
|
505
|
-
def wheel_factors(self) -> list:
|
|
506
|
-
# computes the configuration of the attenuation of both wheels
|
|
507
|
-
# wheel1 and 2 are dictionaries containing the wheels attenuation factors
|
|
508
|
-
# TODO: asks Rik clarification on how this load setup works, after starting the cm_ui and loading a new setup, if the cm_ui is setup the setup remains
|
|
509
|
-
|
|
510
|
-
if self._setup is None:
|
|
511
|
-
logging.info(
|
|
512
|
-
"The ConfMan Proxy is not started and no setup configuration has been loaded, fake values of the filter wheel will be computed")
|
|
513
|
-
else:
|
|
514
|
-
try:
|
|
515
|
-
logging.info("Loading the wheels setup from the ConfMan Proxy")
|
|
516
|
-
self.wheel1 = self._setup.gse.filter_wheel.wheel_1
|
|
517
|
-
self.wheel2 = self._setup.gse.filter_wheel.wheel_2
|
|
518
|
-
|
|
519
|
-
except AttributeError:
|
|
520
|
-
logging.warning("The actual setup does not contain the wheels configuration, try to load another setup")
|
|
521
|
-
|
|
522
|
-
d_index = []
|
|
523
|
-
s_index = []
|
|
524
|
-
d_factor = []
|
|
525
|
-
s_factor = []
|
|
526
|
-
for i in self.wheel1:
|
|
527
|
-
for e in self.wheel2:
|
|
528
|
-
try:
|
|
529
|
-
element = round(self.wheel1[i] + self.wheel2[e], 2)
|
|
530
|
-
d_factor.append(element)
|
|
531
|
-
d_index.append([i, e])
|
|
532
|
-
except TypeError:
|
|
533
|
-
element = str(repr(self.wheel1[i]) + '+' + repr(self.wheel2[e]))
|
|
534
|
-
s_factor.append(element)
|
|
535
|
-
s_index.append([i, e])
|
|
536
|
-
|
|
537
|
-
# here we sort the list of number and their corresponding indexes.
|
|
538
|
-
# then both number and string list are concatenated
|
|
539
|
-
temp = sorted(zip(d_factor, d_index), key=lambda x: x)
|
|
540
|
-
d_factor, d_index = map(list, zip(*temp))
|
|
541
|
-
|
|
542
|
-
_duplicated = [idx for idx, item in enumerate(d_factor) if item in d_factor[:idx]]
|
|
543
|
-
|
|
544
|
-
# popping duplicated index
|
|
545
|
-
d_factor = [i for j, i in enumerate(d_factor) if j not in _duplicated]
|
|
546
|
-
d_index = [i for j, i in enumerate(d_index) if j not in _duplicated]
|
|
547
|
-
# putting all together
|
|
548
|
-
self.factor = d_factor + s_factor
|
|
549
|
-
self.index = d_index + s_index
|
|
550
|
-
return [self.factor, self.index]
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
# TODO: the following commands will be defined after discussion as they are similar to CSL Collimator
|
|
554
|
-
def att_get_level(self, position) -> list:
|
|
555
|
-
# retrieves the wheel position
|
|
556
|
-
level = [None, None, None]
|
|
557
|
-
|
|
558
|
-
if any(y > 7 or y < 0 for y in position):
|
|
559
|
-
logging.warning("Trying to set the wheels to an out of range position, command aborted, try to do homing")
|
|
560
|
-
pass
|
|
561
|
-
else:
|
|
562
|
-
# gets the corresponding attenuation factor of each wheel
|
|
563
|
-
att1 = self.wheel1.get(position[0])
|
|
564
|
-
att2 = self.wheel2.get(position[1])
|
|
565
|
-
try:
|
|
566
|
-
att = att1 + att2 # in case the attenuations are given in OD, otherwise multiply
|
|
567
|
-
except TypeError:
|
|
568
|
-
att = repr(att1) + repr(att2)
|
|
569
|
-
level = [self.wheel1, self.wheel2, att]
|
|
570
|
-
return level
|
|
571
|
-
|
|
572
|
-
def att_set_level_factor(self, level):
|
|
573
|
-
# Will find the closest defined attenuation level, retrieve the pos_wheel1 and pos_wheel2 and move the wheels
|
|
574
|
-
pos_wheel1 = 0
|
|
575
|
-
pos_wheel2 = 0
|
|
576
|
-
|
|
577
|
-
self.fw.set_pos_calb(pos_wheel1, pos_wheel2)
|
|
578
|
-
|
|
579
|
-
def att_get_level(self) -> list:
|
|
580
|
-
#retrieves the wheel position
|
|
581
|
-
position = self.wheel_position
|
|
582
|
-
try:
|
|
583
|
-
#gets the corresponding attenuation factor of each wheel
|
|
584
|
-
att1 = self.wheel1.get(position[0])
|
|
585
|
-
att2 = self.wheel2.get(position[1])
|
|
586
|
-
|
|
587
|
-
att = att1 + att2 #in case the attenuations are given in OD, otherwise multiply
|
|
588
|
-
except TypeError:
|
|
589
|
-
att = None
|
|
590
|
-
self._att_level = [self.wheel1, self.wheel2, att]
|
|
591
|
-
return self._att_level
|
|
592
|
-
|
|
593
|
-
def att_level_up(self) -> list:
|
|
594
|
-
# gets actual position
|
|
595
|
-
actual_position = self.wheel_position
|
|
596
|
-
# finds the position index:
|
|
597
|
-
_index = self.index.index(actual_position)
|
|
598
|
-
#gets the increased index position:
|
|
599
|
-
new_position = self.index[_index + 1]
|
|
600
|
-
if (_index < 64):
|
|
601
|
-
logging.info("moving the wheel to an upper limit")
|
|
602
|
-
self.set_position(new_position[0], new_position[1])
|
|
603
|
-
elif _index > 64:
|
|
604
|
-
logging.info(" Trying to move the wheel to an out of range position, command not executed")
|
|
605
|
-
return self.wheel_position
|
|
606
|
-
|
|
607
|
-
def att_level_down(self) -> list:
|
|
608
|
-
# gets actual position
|
|
609
|
-
actual_position = self.wheel_position
|
|
610
|
-
# finds the position index:
|
|
611
|
-
_index = self.index.index(actual_position)
|
|
612
|
-
# gets the increased index position:
|
|
613
|
-
new_position = self.index[_index - 1]
|
|
614
|
-
if _index > 0:
|
|
615
|
-
logging.info("moving the wheel to an lower limit")
|
|
616
|
-
self.set_position(new_position[0], new_position[1])
|
|
617
|
-
else:
|
|
618
|
-
logging.info(" Trying to move the wheel to an out of range position, command not executed")
|
|
619
|
-
return self.wheel_position
|
|
620
|
-
|
|
621
|
-
def att_status(self, _flag) -> dict:
|
|
622
|
-
_flag = int(_flag, 16)
|
|
623
|
-
#logging.info("The received hex flag bit code is:", _flag)
|
|
624
|
-
# from int to bit list of 24 elements corresponding to the filterwheel flag state bits
|
|
625
|
-
# Note that the last 5 bits are obsolete in with library versions > 2.12.5 (email exchanges)
|
|
626
|
-
s_flags = [int(x) for x in np.binary_repr(_flag)]
|
|
627
|
-
s_flags.reverse()
|
|
628
|
-
z = [0]*(24-len(s_flags))
|
|
629
|
-
s_flags = s_flags + z
|
|
630
|
-
_keys = list(self.wheel_status.keys())
|
|
631
|
-
for k, i in zip(_keys, s_flags):
|
|
632
|
-
#print(k, "=", i)
|
|
633
|
-
self.wheel_status[k] = i
|
|
634
|
-
#print(self.wheel_status)
|
|
635
|
-
|
|
636
|
-
return self.wheel_status
|
|
637
|
-
|
|
638
|
-
def get_speed(self) -> list:
|
|
639
|
-
return self.fw.get_speed()
|
|
640
|
-
|
|
641
|
-
class FilterWheel8SMC4Proxy(Proxy, FilterWheel8SMC4Interface):
|
|
642
|
-
def __init__(
|
|
643
|
-
self,
|
|
644
|
-
protocol=CTRL_SETTINGS.PROTOCOL,
|
|
645
|
-
hostname=CTRL_SETTINGS.HOSTNAME,
|
|
646
|
-
port=CTRL_SETTINGS.COMMANDING_PORT,
|
|
647
|
-
):
|
|
648
|
-
"""
|
|
649
|
-
Args:
|
|
650
|
-
protocol: the transport protocol
|
|
651
|
-
[default is taken from settings file]
|
|
652
|
-
hostname: location of the control server (IP address)
|
|
653
|
-
[default is taken from settings file]
|
|
654
|
-
port: TCP port on which the control server is listening for commands
|
|
655
|
-
[default is taken from settings file]
|
|
656
|
-
"""
|
|
657
|
-
super().__init__(connect_address(protocol, hostname, port))
|