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,473 +0,0 @@
|
|
|
1
|
-
# Filter wheel required by filterwheel
|
|
2
|
-
|
|
3
|
-
import logging
|
|
4
|
-
import os
|
|
5
|
-
import sys
|
|
6
|
-
import time
|
|
7
|
-
from ctypes import *
|
|
8
|
-
|
|
9
|
-
from egse.lib.ximc.pyximc import lib as ximc
|
|
10
|
-
from egse.lib.ximc.pyximc import device_information_t, get_position_t, status_t, MoveState
|
|
11
|
-
from egse.command import ClientServerCommand
|
|
12
|
-
from egse.device import DeviceConnectionError
|
|
13
|
-
from egse.settings import Settings
|
|
14
|
-
|
|
15
|
-
if sys.version_info >= (3, 0):
|
|
16
|
-
pass
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class FilterWheel8SMC4Command(ClientServerCommand):
|
|
20
|
-
def get_cmd_string(self, *args, **kwargs) -> str:
|
|
21
|
-
out = super().get_cmd_string(*args, **kwargs)
|
|
22
|
-
return out + "\n"
|
|
23
|
-
|
|
24
|
-
logger = logging.getLogger(__name__)
|
|
25
|
-
|
|
26
|
-
ctrl_settings = Settings.load("Filter Wheel 8SMC4 Controller")
|
|
27
|
-
|
|
28
|
-
# Dependences
|
|
29
|
-
|
|
30
|
-
# For correct usage of the library libximc,
|
|
31
|
-
# you need to add the file pyximc.py wrapper with the structures of the library to python path.
|
|
32
|
-
cur_dir = os.path.abspath(os.path.dirname(__file__)) + "/../../lib/ximc" # Specifies the current directory.
|
|
33
|
-
sys.path.append(cur_dir)
|
|
34
|
-
|
|
35
|
-
#path to the encription key of the network interface:
|
|
36
|
-
keyfile_dir = os.path.join(cur_dir, "libximc.framework", "Resources", "keyfile.sqlite")
|
|
37
|
-
|
|
38
|
-
try:
|
|
39
|
-
from egse.lib.ximc.pyximc import *
|
|
40
|
-
except ImportError as err:
|
|
41
|
-
print(
|
|
42
|
-
"Can't import pyximc module. The most probable reason is that you changed the relative location of the testpython.py and pyximc.py files. See developers' documentation for details.")
|
|
43
|
-
exit()
|
|
44
|
-
except OSError as err:
|
|
45
|
-
print(err)
|
|
46
|
-
print(
|
|
47
|
-
"Can't load libximc library. Please add all shared libraries to the appropriate places. It is decribed in detail in developers' documentation. On Linux make sure you installed libximc-dev package.\nmake sure that the architecture of the system and the interpreter is the same")
|
|
48
|
-
exit()
|
|
49
|
-
|
|
50
|
-
####################################################################################################
|
|
51
|
-
# TODO:
|
|
52
|
-
#
|
|
53
|
-
# The following line where 'lib' is defined shall move into the __init__ method of
|
|
54
|
-
# FilterWheel8SMC4EthernetInterface. Also, the wildcard import above of egse.lib.ximc.pyximc
|
|
55
|
-
# shall be changed into specific imports.
|
|
56
|
-
#
|
|
57
|
-
####################################################################################################
|
|
58
|
-
|
|
59
|
-
# to be replaced by logger event
|
|
60
|
-
|
|
61
|
-
sbuf = create_string_buffer(64)
|
|
62
|
-
lib.ximc_version(sbuf)
|
|
63
|
-
|
|
64
|
-
logger.debug("Library Loaded: version = " + sbuf.raw.decode().rstrip("\0"))
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
# Set bindy network key file. Must be called before any "enumerate_device" or "open_device' is colled
|
|
68
|
-
#setting the encription key for the network interface. In python, make sure to pass a byte array object to this
|
|
69
|
-
#function (b"string literal")
|
|
70
|
-
lib.set_bindy_key(keyfile_dir.encode("utf-8"))
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
class FilterWheel8SMC4Error(Exception):
|
|
74
|
-
"""Base exception for all Filter Wheel errors."""
|
|
75
|
-
pass
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
DEVICE_NAME = "Filter Wheel 8SMC4"
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
class FilterWheel8SMC4USBInterface:
|
|
82
|
-
""" This class controls a 8smc4 filterwheel controller through serial devices
|
|
83
|
-
connected via USB. It uses a wrapped c library (ximc) to communicate with the device.
|
|
84
|
-
"""
|
|
85
|
-
|
|
86
|
-
def __init__(self):
|
|
87
|
-
self._port = ctrl_settings.PORT
|
|
88
|
-
self._is_connected = False
|
|
89
|
-
self._devId = None
|
|
90
|
-
|
|
91
|
-
try:
|
|
92
|
-
self.connect()
|
|
93
|
-
except Exception as exc:
|
|
94
|
-
logger.error(f"Could not connect to device ({exc})")
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
def connect(self):
|
|
98
|
-
if self._is_connected:
|
|
99
|
-
logger.warning("Trying to connect to an already connected device")
|
|
100
|
-
else:
|
|
101
|
-
try:
|
|
102
|
-
self._devId = ximc.open_device(f"xi-com:{self._port}".encode())
|
|
103
|
-
except OSError as exc:
|
|
104
|
-
raise DeviceConnectionError(self.DEVICE_NAME, f"Could not connect ({exc}).") from exc
|
|
105
|
-
self._is_connected = True
|
|
106
|
-
|
|
107
|
-
def disconnect(self):
|
|
108
|
-
if not self._is_connected():
|
|
109
|
-
logger.warning("Trying to disconnect to an already disconnected device")
|
|
110
|
-
try:
|
|
111
|
-
ximc.close_device(byref(cast(self._devId, POINTER(c_int))))
|
|
112
|
-
except OSError as exc:
|
|
113
|
-
raise DeviceConnectionError(self.DEVICE_NAME, f"Could not disconnect ({exc}).") from exc
|
|
114
|
-
else:
|
|
115
|
-
self._is_connected = False
|
|
116
|
-
|
|
117
|
-
def is_connected(self):
|
|
118
|
-
return self._is_connected
|
|
119
|
-
|
|
120
|
-
def get_response(self, cmd_string):
|
|
121
|
-
pass
|
|
122
|
-
|
|
123
|
-
def get_id(self):
|
|
124
|
-
x_device_information = device_information_t()
|
|
125
|
-
result = ximc.get_device_information(self._devId, byref(x_device_information))
|
|
126
|
-
device_id = {}
|
|
127
|
-
if result == Result.Ok:
|
|
128
|
-
version = (
|
|
129
|
-
f"{x_device_information.Major!r}."
|
|
130
|
-
f"{x_device_information.Minor!r}."
|
|
131
|
-
f"{x_device_information.Release!r}"
|
|
132
|
-
)
|
|
133
|
-
description = f"{string_at(x_device_information.ProductDescription).decode()!r}"
|
|
134
|
-
device_id = {
|
|
135
|
-
"Product Description": description,
|
|
136
|
-
"Version": version
|
|
137
|
-
}
|
|
138
|
-
else:
|
|
139
|
-
logger.warning("Wheel has not been correctly connected")
|
|
140
|
-
return device_id
|
|
141
|
-
|
|
142
|
-
def get_position(self):
|
|
143
|
-
x_pos = get_position_t()
|
|
144
|
-
ximc.get_position(self._devId, byref(x_pos))
|
|
145
|
-
result = [x_pos.Position, x_pos.uPosition]
|
|
146
|
-
return result
|
|
147
|
-
|
|
148
|
-
def equalize_wheels(self, position):
|
|
149
|
-
# This makes the 2 wheels move to the index defined by the position argument
|
|
150
|
-
# If the highest wheel index position is > than the actual step position of the filter wheel, then it
|
|
151
|
-
# sets both wheels to the highest wheel index position in order to perform further movements
|
|
152
|
-
logger.info("Equalizing the wheels by moving first to zero")
|
|
153
|
-
self.move_wheel(1)
|
|
154
|
-
self.move_wheel(9)
|
|
155
|
-
|
|
156
|
-
self.command_zero()
|
|
157
|
-
|
|
158
|
-
self.move_wheel(position+1)
|
|
159
|
-
|
|
160
|
-
def move_wheel(self, steps):
|
|
161
|
-
steps = steps - 1
|
|
162
|
-
try:
|
|
163
|
-
ximc.command_move(self._devId, steps*25, 0)
|
|
164
|
-
time.sleep(2)
|
|
165
|
-
while self.get_speed() != 0:
|
|
166
|
-
time.sleep(1)
|
|
167
|
-
except AssertionError:
|
|
168
|
-
logger.warning("Something went wrong when moving the filterwheel")
|
|
169
|
-
|
|
170
|
-
def set_pos(self, pos_wheel2, pos_wheel1):
|
|
171
|
-
self.homing()
|
|
172
|
-
while self.get_speed() != 0:
|
|
173
|
-
time.sleep(1)
|
|
174
|
-
|
|
175
|
-
# delay so the commands don't overlap
|
|
176
|
-
# the wheel 2 is the one that moves (opposite side of the motor)
|
|
177
|
-
# gets the actual position
|
|
178
|
-
pos = self.get_position()
|
|
179
|
-
pos = pos[0]
|
|
180
|
-
# from manual: command_move(device_t id, Position, uPosition)
|
|
181
|
-
# the engine starts to move with the pre-set parameters to the point specified by Position and uPosition
|
|
182
|
-
# uPosition sets the microstep in range -255 to 255
|
|
183
|
-
# 1 turn of the wheel has 200 steps, so each transition is reached by 25 steps.
|
|
184
|
-
if pos_wheel1 == pos_wheel2:
|
|
185
|
-
self.equalize_wheels(pos_wheel2)
|
|
186
|
-
|
|
187
|
-
elif pos_wheel1 < pos_wheel2:
|
|
188
|
-
if abs(pos) < pos_wheel1*25:
|
|
189
|
-
self.move_wheel(pos_wheel1+1)
|
|
190
|
-
else:
|
|
191
|
-
self.equalize_wheels(pos_wheel1)
|
|
192
|
-
|
|
193
|
-
self.move_wheel(pos_wheel2-7)
|
|
194
|
-
|
|
195
|
-
elif pos_wheel1 > pos_wheel2:
|
|
196
|
-
|
|
197
|
-
if pos < pos_wheel1*25:
|
|
198
|
-
self.move_wheel(pos_wheel1+1)
|
|
199
|
-
|
|
200
|
-
else:
|
|
201
|
-
self.equalize_wheels(pos_wheel1)
|
|
202
|
-
self.move_wheel(pos_wheel2+1)
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
return 0
|
|
206
|
-
|
|
207
|
-
def command_zero(self):
|
|
208
|
-
logger.warning("Commanding the wheels to zero position")
|
|
209
|
-
try:
|
|
210
|
-
ximc.command_zero(self._devId)
|
|
211
|
-
while self.get_speed() != 0:
|
|
212
|
-
time.sleep(0.03)
|
|
213
|
-
except AssertionError:
|
|
214
|
-
logger.warning("Something went wrong when moving the filterwheel")
|
|
215
|
-
|
|
216
|
-
def homing(self):
|
|
217
|
-
logger.info("Starting homing sequence")
|
|
218
|
-
ximc.command_homezero(self._devId)
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
def get_status(self):
|
|
222
|
-
status = status_t()
|
|
223
|
-
ximc.get_status(self._devId, byref(status))
|
|
224
|
-
|
|
225
|
-
return status
|
|
226
|
-
|
|
227
|
-
def get_speed(self):
|
|
228
|
-
_speed = self.get_status()
|
|
229
|
-
return _speed.CurSpeed
|
|
230
|
-
|
|
231
|
-
def get_flags(self):
|
|
232
|
-
status = self.get_status()
|
|
233
|
-
return (status.Flags)
|
|
234
|
-
|
|
235
|
-
def is_moving(self):
|
|
236
|
-
mvt = self.get_status()
|
|
237
|
-
return mvt.MoveSts
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
class FilterWheel8SMC4EthernetInterface:
|
|
245
|
-
def __init__(self):
|
|
246
|
-
|
|
247
|
-
self.is_connection_open = False
|
|
248
|
-
self._fw = None
|
|
249
|
-
|
|
250
|
-
# open_name of the device address
|
|
251
|
-
self.open_name = "xi-net://" + ctrl_settings["IP"] + "/000040AC"
|
|
252
|
-
|
|
253
|
-
def connect(self):
|
|
254
|
-
# Sanity checks:
|
|
255
|
-
if self.is_connection_open:
|
|
256
|
-
logger.warning("Trying to connect to an already connected device")
|
|
257
|
-
try:
|
|
258
|
-
self._fw = lib.open_device(self.open_name.encode())
|
|
259
|
-
except OSError as exc:
|
|
260
|
-
raise DeviceConnectionError(DEVICE_NAME, f"OSError caught ({exc}).") from exc
|
|
261
|
-
|
|
262
|
-
self.is_connection_open = True
|
|
263
|
-
|
|
264
|
-
if not self.is_connected():
|
|
265
|
-
raise FilterWheel8SMC4Error(f"Device is not connected, check logging messages for the cause.")
|
|
266
|
-
|
|
267
|
-
def disconnect(self):
|
|
268
|
-
try:
|
|
269
|
-
if self.is_connection_open:
|
|
270
|
-
logger.debug(f"Disconnecting from {self.open_name}")
|
|
271
|
-
lib.close_device(byref(cast(self._fw, POINTER(c_int))))
|
|
272
|
-
logger.info("Filter Wheel disconnected")
|
|
273
|
-
self.is_connection_open = False
|
|
274
|
-
except OSError as exc:
|
|
275
|
-
raise FilterWheel8SMC4Error(f"Could not close Filterwheel connection") from exc
|
|
276
|
-
|
|
277
|
-
def is_connected(self):
|
|
278
|
-
"""
|
|
279
|
-
Check if the device is connected. This will send a query for the device identification
|
|
280
|
-
and validate the answer.
|
|
281
|
-
|
|
282
|
-
Returns:
|
|
283
|
-
True is the device is connected and answered with the proper ID, False otherwise.
|
|
284
|
-
"""
|
|
285
|
-
if not self.is_connection_open:
|
|
286
|
-
return False
|
|
287
|
-
|
|
288
|
-
try:
|
|
289
|
-
self.get_id()
|
|
290
|
-
except OSError as exc:
|
|
291
|
-
logger.error(
|
|
292
|
-
f"While trying to talk to the device the following exception occurred, "
|
|
293
|
-
f"exception={exc}")
|
|
294
|
-
self.disconnect()
|
|
295
|
-
return False
|
|
296
|
-
return True
|
|
297
|
-
|
|
298
|
-
def get_response(self, cmd_string):
|
|
299
|
-
pass
|
|
300
|
-
|
|
301
|
-
def get_id(self):
|
|
302
|
-
x_device_information = device_information_t()
|
|
303
|
-
result = lib.get_device_information(self._fw, byref(x_device_information))
|
|
304
|
-
device_id = {}
|
|
305
|
-
if result == Result.Ok:
|
|
306
|
-
version = (
|
|
307
|
-
f"{x_device_information.Major!r}."
|
|
308
|
-
f"{x_device_information.Minor!r}."
|
|
309
|
-
f"{x_device_information.Release!r}"
|
|
310
|
-
)
|
|
311
|
-
# version = repr(x_device_information.Major) + "." + \
|
|
312
|
-
# repr(x_device_information.Minor) + "." + \
|
|
313
|
-
# repr(x_device_information.Release)
|
|
314
|
-
description = f"{string_at(x_device_information.ProductDescription).decode()!r}"
|
|
315
|
-
device_id = {
|
|
316
|
-
"Product Description": description,
|
|
317
|
-
"Version": version
|
|
318
|
-
}
|
|
319
|
-
else:
|
|
320
|
-
logger.warning("Wheel has not been correctly connected")
|
|
321
|
-
return device_id
|
|
322
|
-
|
|
323
|
-
def get_position(self):
|
|
324
|
-
x_pos = get_position_t()
|
|
325
|
-
lib.get_position(self._fw, byref(x_pos))
|
|
326
|
-
result = [x_pos.Position, x_pos.uPosition]
|
|
327
|
-
return result
|
|
328
|
-
|
|
329
|
-
def equalize_wheels(self, position):
|
|
330
|
-
# This makes the 2 wheels move to the index defined by the position argument
|
|
331
|
-
# If the highest wheel index position is > than the actual step position of the filter wheel, then it
|
|
332
|
-
# sets both wheels to the highest wheel index position in order to perform further movements
|
|
333
|
-
logger.info("Equalizing the wheels by moving first to zero")
|
|
334
|
-
self.move_wheel(1)
|
|
335
|
-
self.move_wheel(9)
|
|
336
|
-
|
|
337
|
-
self.command_zero()
|
|
338
|
-
logging.info(f"New zero position reached:({self.get_position()[0]})")
|
|
339
|
-
logging.info(f"Commanding the wheels to the equalized position:({position})")
|
|
340
|
-
|
|
341
|
-
self.move_wheel(position+1)
|
|
342
|
-
logging.info(f"New equalized position reached at:({self.get_position()[0]})")
|
|
343
|
-
|
|
344
|
-
def move_wheel(self, steps):
|
|
345
|
-
print("moving wheel to the following number of x25 steps:", steps)
|
|
346
|
-
steps = steps - 1
|
|
347
|
-
try:
|
|
348
|
-
lib.command_move(self._fw, steps*25, 0)
|
|
349
|
-
time.sleep(0.3)
|
|
350
|
-
logger.info("The wheel is moving ...")
|
|
351
|
-
while self.is_moving() != 0:
|
|
352
|
-
time.sleep(0.3)
|
|
353
|
-
logger.info("... the wheel stopped its movement")
|
|
354
|
-
except AssertionError:
|
|
355
|
-
logger.warning("Something went wrong when moving the filterwheel")
|
|
356
|
-
|
|
357
|
-
def set_pos(self, pos_wheel1, pos_wheel2):
|
|
358
|
-
self.homing()
|
|
359
|
-
# delay so the commands don't overlap
|
|
360
|
-
# the wheel 2 is the one that moves (opposite side of the motor)
|
|
361
|
-
# gets the actual position
|
|
362
|
-
pos = self.get_position()
|
|
363
|
-
pos = pos[0]
|
|
364
|
-
# from manual: command_move(device_t id, Position, uPosition)
|
|
365
|
-
# the engine starts to move with the pre-set parameters to the point specified by Position and uPosition
|
|
366
|
-
# uPosition sets the microstep in range -255 to 255
|
|
367
|
-
# 1 turn of the wheel has 200 steps, so each transition is reached by 25 steps.
|
|
368
|
-
if pos_wheel1 == pos_wheel2:
|
|
369
|
-
self.equalize_wheels(pos_wheel2)
|
|
370
|
-
logger.info("Positions reached for both wheels")
|
|
371
|
-
|
|
372
|
-
elif pos_wheel1 < pos_wheel2:
|
|
373
|
-
if abs(pos) < pos_wheel1*25:
|
|
374
|
-
self.move_wheel(pos_wheel1+1)
|
|
375
|
-
else:
|
|
376
|
-
self.equalize_wheels(pos_wheel1)
|
|
377
|
-
|
|
378
|
-
logger.info("position 1 reached")
|
|
379
|
-
self.move_wheel(pos_wheel2-7)
|
|
380
|
-
logger.info("position 2 reached")
|
|
381
|
-
|
|
382
|
-
elif pos_wheel1 > pos_wheel2:
|
|
383
|
-
|
|
384
|
-
if pos < pos_wheel1*25:
|
|
385
|
-
self.move_wheel(pos_wheel1+1)
|
|
386
|
-
|
|
387
|
-
else:
|
|
388
|
-
self.equalize_wheels(pos_wheel1)
|
|
389
|
-
logger.info("position 1 reached")
|
|
390
|
-
self.move_wheel(pos_wheel2+1)
|
|
391
|
-
logger.info("position 2 reached")
|
|
392
|
-
|
|
393
|
-
_output = self.wait_stop(10)
|
|
394
|
-
if _output == 0:
|
|
395
|
-
logger.info("Movement finished")
|
|
396
|
-
if _output > 0:
|
|
397
|
-
logger.warning("Movement finished after forcing the wait_stop")
|
|
398
|
-
if _output < 0:
|
|
399
|
-
logger.error("Error on movement")
|
|
400
|
-
return _output
|
|
401
|
-
|
|
402
|
-
def command_zero(self):
|
|
403
|
-
logger.warning("Commanding the wheels to zero position")
|
|
404
|
-
try:
|
|
405
|
-
lib.command_zero(self._fw)
|
|
406
|
-
time.sleep(0.3)
|
|
407
|
-
logger.info("The wheel is moving to zero...")
|
|
408
|
-
while self.is_moving() != 0:
|
|
409
|
-
time.sleep(0.3)
|
|
410
|
-
logger.info("... the wheel stopped its movement")
|
|
411
|
-
except AssertionError:
|
|
412
|
-
logger.warning("Something went wrong when moving the filterwheel")
|
|
413
|
-
|
|
414
|
-
def homing(self):
|
|
415
|
-
""" standard ".cfg" file, which can be downloaded to device using XILab,
|
|
416
|
-
overloads command_homezero command """
|
|
417
|
-
logger.info("Starting homing sequence ...")
|
|
418
|
-
# From libxim Manual, command_homezero make home command, waits until it's finished then makes a zero command
|
|
419
|
-
# so the behaviour is the same than for the CSL collimator code
|
|
420
|
-
lib.command_homezero(self._fw)
|
|
421
|
-
# != and else cases are not normally gonna happen as the command_zero normally already waits for the wheel
|
|
422
|
-
# to stop
|
|
423
|
-
logger.info("... Wheels homing succeeded")
|
|
424
|
-
|
|
425
|
-
def get_status(self):
|
|
426
|
-
x_status = status_t()
|
|
427
|
-
result = lib.get_status(self._fw, byref(x_status))
|
|
428
|
-
if result == Result.Ok:
|
|
429
|
-
pass
|
|
430
|
-
else:
|
|
431
|
-
logger.warning("Something went wrong when trying to get the wheel status")
|
|
432
|
-
x_status = -1
|
|
433
|
-
return x_status
|
|
434
|
-
|
|
435
|
-
def get_speed(self):
|
|
436
|
-
_speed = self.get_status()
|
|
437
|
-
return _speed.CurSpeed
|
|
438
|
-
|
|
439
|
-
#fixme: this is not working, so don't use it for the moment. Replaced with time.sleeps
|
|
440
|
-
def wait_stop(self, t):
|
|
441
|
-
_output = None
|
|
442
|
-
timeout = time.time() + t
|
|
443
|
-
time.sleep(0.3)
|
|
444
|
-
_speed = self.get_speed()
|
|
445
|
-
while time.time() < timeout:
|
|
446
|
-
time.sleep(0.03)
|
|
447
|
-
_speed = self.get_speed()
|
|
448
|
-
if _speed == 0:
|
|
449
|
-
break
|
|
450
|
-
if _speed != 0:
|
|
451
|
-
logger.warning("wait_stop timeout over but the motor is still running, forcing the wheel to stop")
|
|
452
|
-
result = lib.command_wait_for_stop(self._fw, 10)
|
|
453
|
-
if result.Result == Ok:
|
|
454
|
-
logger.warning("The wheel stopped after forcing command")
|
|
455
|
-
_output = 1
|
|
456
|
-
else:
|
|
457
|
-
logger.error("An error occurred during the movement")
|
|
458
|
-
_output = -1
|
|
459
|
-
else:
|
|
460
|
-
_output = 0
|
|
461
|
-
return _output
|
|
462
|
-
|
|
463
|
-
def get_flags(self):
|
|
464
|
-
x_status = status_t()
|
|
465
|
-
result = lib.get_status(self._fw, byref(x_status))
|
|
466
|
-
x_status.Flags = StateFlags.STATE_IS_HOMED
|
|
467
|
-
result = lib.get_status(self._fw, byref(x_status))
|
|
468
|
-
print(StateFlags.STATE_ALARM, StateFlags.STATE_IS_HOMED, StateFlags.STATE_CONTR, StateFlags.STATE_CONTROLLER_OVERHEAT)
|
|
469
|
-
print(repr(x_status.Flags))
|
|
470
|
-
|
|
471
|
-
def is_moving(self):
|
|
472
|
-
mvt = self.get_status()
|
|
473
|
-
return mvt.MoveSts
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
|
|
3
|
-
from egse.control import ControlServer
|
|
4
|
-
from egse.metrics import define_metrics
|
|
5
|
-
from egse.protocol import CommandProtocol
|
|
6
|
-
from egse.settings import Settings
|
|
7
|
-
from egse.setup import load_setup
|
|
8
|
-
from egse.synoptics import SynopticsManagerProxy
|
|
9
|
-
|
|
10
|
-
from egse.system import format_datetime
|
|
11
|
-
from egse.zmq_ser import bind_address
|
|
12
|
-
|
|
13
|
-
from egse.filterwheel.eksma.fw8smc4 import (FilterWheel8SMC4Controller, FilterWheel8SMC4Interface,
|
|
14
|
-
FilterWheel8SMC4Simulator)
|
|
15
|
-
from egse.filterwheel.eksma.fw8smc4_devif import FilterWheel8SMC4Command
|
|
16
|
-
|
|
17
|
-
logger = logging.getLogger(__name__)
|
|
18
|
-
|
|
19
|
-
DEVICE_SETTINGS = Settings.load(filename="fw8smc4.yaml")
|
|
20
|
-
SITE_ID = Settings.load("SITE").ID
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
class FilterWheel8SMC4Protocol(CommandProtocol):
|
|
24
|
-
def __init__(self, control_server: ControlServer):
|
|
25
|
-
super().__init__()
|
|
26
|
-
self.control_server = control_server
|
|
27
|
-
setup = load_setup()
|
|
28
|
-
|
|
29
|
-
if Settings.simulation_mode():
|
|
30
|
-
self.filterwheel = FilterWheel8SMC4Simulator()
|
|
31
|
-
else:
|
|
32
|
-
self.filterwheel = FilterWheel8SMC4Controller()
|
|
33
|
-
|
|
34
|
-
self.filterwheel.connect()
|
|
35
|
-
|
|
36
|
-
self.load_commands(DEVICE_SETTINGS.Commands, FilterWheel8SMC4Command, FilterWheel8SMC4Interface)
|
|
37
|
-
|
|
38
|
-
self.build_device_method_lookup_table(self.filterwheel)
|
|
39
|
-
|
|
40
|
-
# self.fwc_calibration = setup.gse.ogse.calibration.fwc_calibration TODO
|
|
41
|
-
|
|
42
|
-
self.synoptics = SynopticsManagerProxy()
|
|
43
|
-
self.metrics = define_metrics(origin="FW8SMC4", use_site=True, setup=setup)
|
|
44
|
-
|
|
45
|
-
def get_bind_address(self):
|
|
46
|
-
return bind_address(
|
|
47
|
-
self.control_server.get_communication_protocol(),
|
|
48
|
-
self.control_server.get_commanding_port(),
|
|
49
|
-
)
|
|
50
|
-
|
|
51
|
-
def get_status(self):
|
|
52
|
-
return super().get_status()
|
|
53
|
-
|
|
54
|
-
def get_housekeeping(self) -> dict:
|
|
55
|
-
|
|
56
|
-
metrics_dict = self.metrics
|
|
57
|
-
hk_dict = dict()
|
|
58
|
-
hk_dict["timestamp"] = format_datetime()
|
|
59
|
-
try:
|
|
60
|
-
# relative_intensity = self.filterwheel.get_relative_intensity() # TODO Use the correct command name
|
|
61
|
-
|
|
62
|
-
# hk_dict["G{SITE_ID}_FW8SMC4_REL_INTENSITY"] = relative_intensity # TODO
|
|
63
|
-
# hk_dict["G{SITE_ID}_FW8SMC4_FWC_FRACTION"] = relative_intensity / self.fwc_calibration, # TODO
|
|
64
|
-
|
|
65
|
-
# self.synoptics.store_th_synoptics(hk_dict) TODO Uncomment when the relative intensity + FWC fraction are available
|
|
66
|
-
# TODO Update the TM dictionary (entry for the HK + for the synoptics)
|
|
67
|
-
|
|
68
|
-
filterwheel_motor_positions = self.filterwheel.get_position()
|
|
69
|
-
filterwheel_status = self.filterwheel.get_status()
|
|
70
|
-
|
|
71
|
-
hk_values = [filterwheel_motor_positions[0], filterwheel_motor_positions[1], filterwheel_status[2], filterwheel_status[3], filterwheel_status[4]]
|
|
72
|
-
hk_dict.update({hk_name: hk_value for hk_name, hk_value in zip(metrics_dict.keys(), hk_values)})
|
|
73
|
-
|
|
74
|
-
for hk_name in metrics_dict.keys():
|
|
75
|
-
metrics_dict[hk_name].set(hk_dict[hk_name])
|
|
76
|
-
|
|
77
|
-
# Send the HK acquired so far to the Synoptics Manager
|
|
78
|
-
self.synoptics.store_th_synoptics(hk_dict)
|
|
79
|
-
except Exception as exc:
|
|
80
|
-
logger.warning(f'failed to get HK ({exc})')
|
|
81
|
-
|
|
82
|
-
return hk_dict
|