cgse 2024.7.0__py3-none-any.whl → 2025.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +27 -0
- bump.py +85 -0
- cgse-2025.0.1.dist-info/METADATA +38 -0
- cgse-2025.0.1.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.1.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -233
- egse/alert/alertman_ui.py +0 -600
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -132
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1240
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -138
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -137
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -165
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -834
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -71
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -920
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -113
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -180
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/remove_lines_between_matches.py +0 -188
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
egse/fov/fov_ui_controller.py
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module provides the Controller (C) in the MVC pattern that makes up the FOV GUI application.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
|
|
7
|
-
from PyQt5.QtCore import QTimer
|
|
8
|
-
|
|
9
|
-
from egse.observer import Observer
|
|
10
|
-
from egse.settings import Settings
|
|
11
|
-
|
|
12
|
-
STAGES_SETTINGS = Settings.load("Huber Controller")
|
|
13
|
-
|
|
14
|
-
MODULE_LOGGER = logging.getLogger(__name__)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class FOVUIController(Observer):
|
|
18
|
-
|
|
19
|
-
def __init__(self, model, view):
|
|
20
|
-
|
|
21
|
-
""" Initialisation of the Controller in the MVC pattern that makes up the FOV GUI application.
|
|
22
|
-
|
|
23
|
-
:param model: Model in the MVC pattern that makes up the FOV GUI application.
|
|
24
|
-
|
|
25
|
-
:param view: View in the MVC pattern that makes up the FOV GUI application.
|
|
26
|
-
"""
|
|
27
|
-
|
|
28
|
-
# MVC + Observer pattern
|
|
29
|
-
|
|
30
|
-
self.model = model
|
|
31
|
-
self.view = view
|
|
32
|
-
self.view.addObserver(self)
|
|
33
|
-
|
|
34
|
-
self.create_timer()
|
|
35
|
-
|
|
36
|
-
# Hexapod connected?
|
|
37
|
-
|
|
38
|
-
if self.model.is_connected_hexapod():
|
|
39
|
-
|
|
40
|
-
self.view.set_connection_state_hexapod("connected")
|
|
41
|
-
self.hexapod_connected = True
|
|
42
|
-
|
|
43
|
-
else:
|
|
44
|
-
|
|
45
|
-
self.view.set_connection_state_hexapod("disconnected")
|
|
46
|
-
self.stop_timer()
|
|
47
|
-
self.hexapod_connected = False
|
|
48
|
-
|
|
49
|
-
# Stages connected?
|
|
50
|
-
|
|
51
|
-
if self.model.is_connected_stages():
|
|
52
|
-
|
|
53
|
-
self.view.set_connection_state_stages("connected")
|
|
54
|
-
self.stages_connected = True
|
|
55
|
-
|
|
56
|
-
else:
|
|
57
|
-
|
|
58
|
-
self.view.set_connection_state_stages("disconnected")
|
|
59
|
-
self.stop_timer()
|
|
60
|
-
self.stages_connected = False
|
|
61
|
-
|
|
62
|
-
# Hexapod ánd Stages connected
|
|
63
|
-
|
|
64
|
-
if self.model.is_connected_hexapod() and self.model.is_connected_stages():
|
|
65
|
-
|
|
66
|
-
self.start_timer()
|
|
67
|
-
|
|
68
|
-
def create_timer(self):
|
|
69
|
-
""" Create a timer that will update the states every second."""
|
|
70
|
-
|
|
71
|
-
self.states_capture_timer = QTimer()
|
|
72
|
-
|
|
73
|
-
# This is only needed when the Timer needs to run in another Thread
|
|
74
|
-
# self.states_capture_timer.moveToThread(self)
|
|
75
|
-
|
|
76
|
-
self.states_capture_timer.timeout.connect(self.update_values)
|
|
77
|
-
self.states_capture_timer.setInterval(200)
|
|
78
|
-
|
|
79
|
-
def start_timer(self):
|
|
80
|
-
""" Start timer."""
|
|
81
|
-
|
|
82
|
-
self.states_capture_timer.start()
|
|
83
|
-
|
|
84
|
-
def stop_timer(self):
|
|
85
|
-
""" Stop timer."""
|
|
86
|
-
|
|
87
|
-
self.states_capture_timer.stop()
|
|
88
|
-
|
|
89
|
-
def update_values(self):
|
|
90
|
-
""" Update the position of the mechanisms and the source.
|
|
91
|
-
|
|
92
|
-
Fetch the position of the mechanisms from the model and update the GUI: the positions of the mechanisms need to
|
|
93
|
-
be updated, as well as the position of the source on the FOV. The position of a mechanism can only be fetched
|
|
94
|
-
(and updated in the GUI) if there's a connection with the control server.
|
|
95
|
-
|
|
96
|
-
.. todo:: We need to know the focus position and not the position of the hexapod w.r.t.
|
|
97
|
-
the homing position.
|
|
98
|
-
"""
|
|
99
|
-
|
|
100
|
-
if not self.model.is_connected_hexapod():
|
|
101
|
-
|
|
102
|
-
MODULE_LOGGER.debug("Not connected to the hexapod control server")
|
|
103
|
-
self.view.set_connection_state_hexapod("disconnected")
|
|
104
|
-
|
|
105
|
-
elif not self.model.is_connected_stages():
|
|
106
|
-
|
|
107
|
-
MODULE_LOGGER.debug("Not connected to the stages control server")
|
|
108
|
-
self.view.set_connection_state_stages("disconnected")
|
|
109
|
-
|
|
110
|
-
else:
|
|
111
|
-
|
|
112
|
-
self.view.set_connection_state_hexapod("connected")
|
|
113
|
-
self.view.set_connection_state_stages("connected")
|
|
114
|
-
|
|
115
|
-
# Update position of the mechanisms
|
|
116
|
-
# - SMA: distance from the optical axis + orientation of the scan mirror
|
|
117
|
-
# - big rotation stage -> orientation
|
|
118
|
-
# - hexapod -> focus position
|
|
119
|
-
|
|
120
|
-
self.view.update_sma(self.model.get_distance_translation_stage(),
|
|
121
|
-
self.model.get_rotation_angle_small_rotation_stage())
|
|
122
|
-
self.view.update_big_rotation_stage(self.model.get_rotation_angle_big_rotation_stage())
|
|
123
|
-
self.view.update_focus_position(self.model.get_focus_position())
|
|
124
|
-
|
|
125
|
-
# Focal-plane coordinates (x,y) [mm]
|
|
126
|
-
|
|
127
|
-
position = self.model.get_position()
|
|
128
|
-
self.view.update_source_position(position)
|
|
129
|
-
|
|
130
|
-
return
|
|
131
|
-
|
|
132
|
-
def update(self, changed_object):
|
|
133
|
-
|
|
134
|
-
return
|
|
135
|
-
|
|
136
|
-
def do(self, actions):
|
|
137
|
-
|
|
138
|
-
for action, value in actions.items():
|
|
139
|
-
MODULE_LOGGER.debug(f"do {action} with {value}")
|
|
140
|
-
print(f"do {action} with {value}")
|
egse/fov/fov_ui_model.py
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module provides the Model (M) in the MVC pattern of the FOV GUI application.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
from math import cos
|
|
7
|
-
from math import radians
|
|
8
|
-
from math import sin
|
|
9
|
-
from math import tan
|
|
10
|
-
|
|
11
|
-
from egse.coordinates import focal_plane_to_ccd_coordinates
|
|
12
|
-
from egse.coordinates import undistorted_to_distorted_focal_plane_coordinates
|
|
13
|
-
from egse.hexapod.symetrie.puna_ui import PunaUIModel
|
|
14
|
-
from egse.settings import Settings
|
|
15
|
-
from egse.setup import load_setup
|
|
16
|
-
from egse.stages.huber.smc9300_ui import HuberUIModel
|
|
17
|
-
|
|
18
|
-
STAGES_SETTINGS = Settings.load("Huber Controller")
|
|
19
|
-
FOV_SETTINGS = Settings.load("Field-Of-View")
|
|
20
|
-
|
|
21
|
-
MODULE_LOGGER = logging.getLogger(__name__)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class FOVUIModel:
|
|
25
|
-
|
|
26
|
-
def __init__(self, type_hexapod, type_stages):
|
|
27
|
-
""" Initialisation of models for the Hexapod and the Stages.
|
|
28
|
-
|
|
29
|
-
:param type_hexapod: Hexapod implementation to use. Choices are between:
|
|
30
|
-
proxy, simulator, and hexapod.
|
|
31
|
-
|
|
32
|
-
:param type_stages: Stages implementation to use. Choices are between:
|
|
33
|
-
proxy, simulator, and huber.
|
|
34
|
-
"""
|
|
35
|
-
|
|
36
|
-
self.hexapod_model = PunaUIModel(type_hexapod)
|
|
37
|
-
self.stages_model = HuberUIModel(type_stages)
|
|
38
|
-
self.setup = load_setup()
|
|
39
|
-
|
|
40
|
-
##############
|
|
41
|
-
# Connectivity
|
|
42
|
-
##############
|
|
43
|
-
|
|
44
|
-
def is_connected_hexapod(self):
|
|
45
|
-
""" Checks whether there's a connection with the hexapod.
|
|
46
|
-
|
|
47
|
-
:return: True if there's a connection with the hexapod, False otherwise.
|
|
48
|
-
"""
|
|
49
|
-
|
|
50
|
-
return self.hexapod_model.is_device_connected()
|
|
51
|
-
|
|
52
|
-
def is_connected_stages(self):
|
|
53
|
-
""" Checks whether there's a connection with the stages.
|
|
54
|
-
|
|
55
|
-
:return: True if there's a connection with the stages, False otherwise.
|
|
56
|
-
"""
|
|
57
|
-
|
|
58
|
-
return self.stages_model.is_device_connected()
|
|
59
|
-
|
|
60
|
-
def reconnect_hexapod(self):
|
|
61
|
-
""" Reconnects to the hexapod."""
|
|
62
|
-
|
|
63
|
-
self.hexapod_model.reconnect()
|
|
64
|
-
|
|
65
|
-
def reconnect_stages(self):
|
|
66
|
-
""" Reconnects to the stages."""
|
|
67
|
-
|
|
68
|
-
self.stages_model.reconnect()
|
|
69
|
-
|
|
70
|
-
###########################################
|
|
71
|
-
# Position of the source on the focal plane
|
|
72
|
-
###########################################
|
|
73
|
-
|
|
74
|
-
def get_position(self):
|
|
75
|
-
""" Calculates the coordinate of the source.
|
|
76
|
-
|
|
77
|
-
Calculates the coordinate of the source, given the position of the associated hexapod and stages, and taking
|
|
78
|
-
the field distortion into account.
|
|
79
|
-
|
|
80
|
-
:return: Dictionary with the following entries:
|
|
81
|
-
- "angles": gnomonic distance from the optical axis and in-field angle [degrees]
|
|
82
|
-
- "pixels": CCD coordinates (row, column) [pixels] and the corresponding CCD code
|
|
83
|
-
- "mm": focal-plane coordinates (x, y) [mm]
|
|
84
|
-
"""
|
|
85
|
-
|
|
86
|
-
offset_phi = self.setup.gse.stages.calibration.offset_phi
|
|
87
|
-
offset_alpha = self.setup.gse.stages.calibration.offset_alpha
|
|
88
|
-
alpha_correction_coefficients = self.setup.gse.stages.calibration.alpha_correction_coefficients
|
|
89
|
-
|
|
90
|
-
# Focal-plane coordinates [mm]
|
|
91
|
-
|
|
92
|
-
(x, y) = self.get_focal_plane_position()
|
|
93
|
-
|
|
94
|
-
# CCD coordinates [pixels]
|
|
95
|
-
|
|
96
|
-
(row, column, ccd_code) = focal_plane_to_ccd_coordinates(x, y, setup)
|
|
97
|
-
|
|
98
|
-
# Gnomonic distance to optical axis and in-field angle [degrees]
|
|
99
|
-
|
|
100
|
-
angle_small_rotation_stage = self.get_rotation_angle_small_rotation_stage()
|
|
101
|
-
theta = (angle_small_rotation_stage + offset_alpha - alpha_correction_coefficients[0]) \
|
|
102
|
-
/ alpha_correction_coefficients[1]
|
|
103
|
-
|
|
104
|
-
position = {
|
|
105
|
-
"angles": (theta, offset_phi - self.get_rotation_angle_big_rotation_stage()),
|
|
106
|
-
"pixels": (row, column, ccd_code),
|
|
107
|
-
"mm": (x, y)
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return position
|
|
111
|
-
|
|
112
|
-
def get_focal_plane_position(self):
|
|
113
|
-
|
|
114
|
-
"""
|
|
115
|
-
Calculates and returns the focal-plane coordinates (x, y) [mm] of the source, given the
|
|
116
|
-
position of the associated hexapod and stages, and taking the field distortion into account.
|
|
117
|
-
|
|
118
|
-
:return: Focal-plane coordinates (x, y) [mm] of the source, given the position of the
|
|
119
|
-
associated hexapod and stages, and taking the field distortion into account.
|
|
120
|
-
|
|
121
|
-
.. todo:: Check whether the light beam goes through the entrance pupil
|
|
122
|
-
distance_sma / FOV_SETTINGS.HEIGHT_COLLIMATED_BEAM != math.tan(math.radians(angle_small_rotation_stage))
|
|
123
|
-
"""
|
|
124
|
-
|
|
125
|
-
# Rotation angle of the big rotation stage [degrees]
|
|
126
|
-
# - counterclockwise rotation
|
|
127
|
-
# - 0° -> axis of the focal plane aligned with GL_FIX
|
|
128
|
-
|
|
129
|
-
angle_big_rotation_stage = self.get_rotation_angle_big_rotation_stage()
|
|
130
|
-
|
|
131
|
-
# Rotation angle of the small rotation stage [degrees]
|
|
132
|
-
# - clockwise rotation
|
|
133
|
-
# - 0° -> ?
|
|
134
|
-
|
|
135
|
-
angle_small_rotation_stage = self.get_rotation_angle_small_rotation_stage()
|
|
136
|
-
|
|
137
|
-
# Radial distance without field distortion [mm] and corresponding focal-plane coordinates [mm]
|
|
138
|
-
# Note that the height of the lower triangle is very close to the focal length
|
|
139
|
-
|
|
140
|
-
theta = 2 * angle_small_rotation_stage # [degrees]
|
|
141
|
-
|
|
142
|
-
radial_distance_undistorted = FOV_SETTINGS.FOCAL_LENGTH * tan(radians(theta))
|
|
143
|
-
|
|
144
|
-
x_undistorted = -radial_distance_undistorted * cos(-radians(angle_big_rotation_stage))
|
|
145
|
-
y_undistorted = -radial_distance_undistorted * sin(-radians(angle_big_rotation_stage))
|
|
146
|
-
|
|
147
|
-
x_distorted, y_distorted = \
|
|
148
|
-
undistorted_to_distorted_focal_plane_coordinates(x_undistorted, y_undistorted,
|
|
149
|
-
FOV_SETTINGS.DISTORTION_COEFFICIENTS,
|
|
150
|
-
FOV_SETTINGS.FOCAL_LENGTH)
|
|
151
|
-
|
|
152
|
-
return x_distorted, y_distorted
|
|
153
|
-
|
|
154
|
-
def get_focus_position(self):
|
|
155
|
-
""" Returns the focus position (z) [mm]. This is the distance between L6S2 and FPA_SEN.
|
|
156
|
-
|
|
157
|
-
:return: Focus position (z) [mm].
|
|
158
|
-
"""
|
|
159
|
-
|
|
160
|
-
# Distance between FPA_SEN and L6S2 [mm]
|
|
161
|
-
|
|
162
|
-
return -self.hexapod_model.get_user_positions()[2]
|
|
163
|
-
|
|
164
|
-
def get_rotation_angle_big_rotation_stage(self):
|
|
165
|
-
""" Returns the rotation angle of the big rotation stage [degrees].
|
|
166
|
-
|
|
167
|
-
A positive angle corresponds to counterclockwise rotation.
|
|
168
|
-
|
|
169
|
-
:return: Rotation angle of the big rotation stage [degrees].
|
|
170
|
-
|
|
171
|
-
.. todo:: Where is angle = 0°?
|
|
172
|
-
"""
|
|
173
|
-
|
|
174
|
-
# Counterclockwise rotation [degrees]
|
|
175
|
-
|
|
176
|
-
return self.stages_model.get_current_position(STAGES_SETTINGS.BIG_ROTATION_STAGE)
|
|
177
|
-
|
|
178
|
-
def get_rotation_angle_small_rotation_stage(self):
|
|
179
|
-
""" Returns the rotation angle of the small rotation stage [degrees].
|
|
180
|
-
|
|
181
|
-
:return: Rotation angle of the small rotation stage [degrees].
|
|
182
|
-
|
|
183
|
-
.. todo:: Where is angle = 0°?
|
|
184
|
-
"""
|
|
185
|
-
|
|
186
|
-
# Counterclockwise rotation [degrees]
|
|
187
|
-
|
|
188
|
-
return self.stages_model.get_current_position(STAGES_SETTINGS.SMALL_ROTATION_STAGE)
|
|
189
|
-
|
|
190
|
-
def get_distance_translation_stage(self):
|
|
191
|
-
""" Returns the distance between the centre of the scan mirror and the optical axis [mm].
|
|
192
|
-
|
|
193
|
-
:return: Distance between the centre of the scan mirror and the optical axis [mm]
|
|
194
|
-
|
|
195
|
-
.. todo:: Properly define the zero position.
|
|
196
|
-
"""
|
|
197
|
-
|
|
198
|
-
# Distance between the optical axis and the SMA [mm]
|
|
199
|
-
|
|
200
|
-
return self.stages_model.get_current_position(STAGES_SETTINGS.TRANSLATION_STAGE)
|
egse/fov/fov_ui_view.py
DELETED
|
@@ -1,345 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module provides the View (V) in the MVC pattern of the FOV GUI application.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
import logging
|
|
6
|
-
|
|
7
|
-
from PyQt5.QtGui import QFont
|
|
8
|
-
from PyQt5.QtGui import QPixmap
|
|
9
|
-
from PyQt5.QtWidgets import QFrame
|
|
10
|
-
from PyQt5.QtWidgets import QGridLayout
|
|
11
|
-
from PyQt5.QtWidgets import QHBoxLayout
|
|
12
|
-
from PyQt5.QtWidgets import QLabel
|
|
13
|
-
from PyQt5.QtWidgets import QMainWindow
|
|
14
|
-
from PyQt5.QtWidgets import QVBoxLayout
|
|
15
|
-
|
|
16
|
-
from egse.config import find_file
|
|
17
|
-
from egse.config import set_logger_levels
|
|
18
|
-
from egse.gui.focalplane import FocalPlaneWidgetWithSourcePosition
|
|
19
|
-
from egse.gui.mechanisms import BigRotationStageWidget
|
|
20
|
-
from egse.gui.mechanisms import FocusPositionWidget
|
|
21
|
-
from egse.gui.mechanisms import ScanMirrorAssemblyWidget
|
|
22
|
-
from egse.observer import Observable
|
|
23
|
-
from egse.settings import Settings
|
|
24
|
-
from egse.state import UnknownStateError
|
|
25
|
-
|
|
26
|
-
FOV_SETTINGS = Settings.load("Field-Of-View")
|
|
27
|
-
|
|
28
|
-
logging.basicConfig(level=logging.DEBUG, format=Settings.LOG_FORMAT_FULL)
|
|
29
|
-
MODULE_LOGGER = logging.getLogger(__name__)
|
|
30
|
-
|
|
31
|
-
# Restrict the logging output for the following loggers.
|
|
32
|
-
|
|
33
|
-
# Note that, in production, the logging level for the different loggers can be changed with a
|
|
34
|
-
# service command `set_logging_level(logger_name, level)`.
|
|
35
|
-
|
|
36
|
-
logger_levels = [
|
|
37
|
-
("matplotlib", logging.WARNING),
|
|
38
|
-
("egse.config", logging.WARNING),
|
|
39
|
-
]
|
|
40
|
-
|
|
41
|
-
set_logger_levels(logger_levels)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
FONT = QFont("Helvetica", 18)
|
|
45
|
-
|
|
46
|
-
COORDINATE_SYSTEMS = {
|
|
47
|
-
"Focal plane": "Focal-plane coordinates [mm]",
|
|
48
|
-
"Pixels": "Pixel coordinates",
|
|
49
|
-
"Angles": "Angles"
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
class FOVUIView(QMainWindow, Observable):
|
|
54
|
-
|
|
55
|
-
def __init__(self):
|
|
56
|
-
|
|
57
|
-
"""
|
|
58
|
-
Open a window and initialiase the GUI. The GUI is divided into two parts. On the
|
|
59
|
-
left there are three widgets, showing the current setting of the stages and the focus
|
|
60
|
-
position. On the right the focal plane is shown, together with a blue circle indicating
|
|
61
|
-
the size of the field-of-view, and a red dot indicating the current position of the source.
|
|
62
|
-
"""
|
|
63
|
-
|
|
64
|
-
super().__init__()
|
|
65
|
-
|
|
66
|
-
self.setGeometry(300, 300, 1500, 1000)
|
|
67
|
-
self.setWindowTitle("FOV Position GUI")
|
|
68
|
-
|
|
69
|
-
self.init_ui()
|
|
70
|
-
|
|
71
|
-
def init_ui(self):
|
|
72
|
-
""" Initialisation of the GUI.
|
|
73
|
-
|
|
74
|
-
The GUI is divided into two parts. On the left there are three widgets, showing the current setting of the
|
|
75
|
-
stages and the focus position. On the right the focal plane is shown, together with a blue circle indicating the
|
|
76
|
-
size of the field-of-view, and a red dot indicating the current position of the source.
|
|
77
|
-
"""
|
|
78
|
-
|
|
79
|
-
app_frame = QFrame()
|
|
80
|
-
app_frame.setObjectName("AppFrame")
|
|
81
|
-
|
|
82
|
-
# Toolbar
|
|
83
|
-
|
|
84
|
-
self.create_toolbar()
|
|
85
|
-
|
|
86
|
-
hbox = QHBoxLayout()
|
|
87
|
-
|
|
88
|
-
# Mechanisms
|
|
89
|
-
|
|
90
|
-
mechanisms_frame = QFrame()
|
|
91
|
-
mechanisms_frame.setObjectName("Mechanisms")
|
|
92
|
-
|
|
93
|
-
vbox_left = QGridLayout()
|
|
94
|
-
vbox_left.addWidget(self.create_sma_widget())
|
|
95
|
-
vbox_left.addWidget(self.create_big_rotation_stage_widget())
|
|
96
|
-
vbox_left.addWidget(self.create_focus_position_widget())
|
|
97
|
-
|
|
98
|
-
mechanisms_frame.setLayout(vbox_left)
|
|
99
|
-
|
|
100
|
-
# FOV
|
|
101
|
-
|
|
102
|
-
fpa_frame = QFrame()
|
|
103
|
-
fpa_frame.setObjectName("FOV")
|
|
104
|
-
|
|
105
|
-
vbox_right = QVBoxLayout()
|
|
106
|
-
vbox_right.addWidget(self.create_focal_plane_widget())
|
|
107
|
-
|
|
108
|
-
# Current source position
|
|
109
|
-
|
|
110
|
-
self.source_position_text = QLabel() # "Current source position"
|
|
111
|
-
self.source_position_text.setFont(FONT)
|
|
112
|
-
vbox_right.addWidget(self.source_position_text)
|
|
113
|
-
|
|
114
|
-
self.source_position_angles_text = QLabel() # (theta, phi)
|
|
115
|
-
self.source_position_angles_text.setIndent(50)
|
|
116
|
-
self.source_position_angles_text.setFont(FONT)
|
|
117
|
-
self.source_position_angles_text.setToolTip(
|
|
118
|
-
"Gnomonic distance to the optical axis " + u"\u03B8" + " = 90" + u"\u00B0" + " - 2" + u"\u03B1" +
|
|
119
|
-
" and in-field angle " + u"\u03C6")
|
|
120
|
-
vbox_right.addWidget(self.source_position_angles_text)
|
|
121
|
-
|
|
122
|
-
self.source_position_pixels_text = QLabel() # (row, column)
|
|
123
|
-
self.source_position_pixels_text.setIndent(50)
|
|
124
|
-
self.source_position_pixels_text.setFont(FONT)
|
|
125
|
-
self.source_position_pixels_text.setToolTip(
|
|
126
|
-
"Pixel coordinates on specified CCD")
|
|
127
|
-
vbox_right.addWidget(self.source_position_pixels_text)
|
|
128
|
-
|
|
129
|
-
self.source_position_mm_text = QLabel() # (xFP, yFP)
|
|
130
|
-
self.source_position_mm_text.setIndent(50)
|
|
131
|
-
self.source_position_mm_text.setFont(FONT)
|
|
132
|
-
self.source_position_mm_text.setToolTip("Focal-plane coordinates")
|
|
133
|
-
vbox_right.addWidget(self.source_position_mm_text)
|
|
134
|
-
|
|
135
|
-
fpa_frame.setLayout(vbox_right)
|
|
136
|
-
|
|
137
|
-
# Putting everything in place
|
|
138
|
-
|
|
139
|
-
hbox.addWidget(mechanisms_frame)
|
|
140
|
-
hbox.addWidget(fpa_frame)
|
|
141
|
-
|
|
142
|
-
app_frame.setLayout(hbox)
|
|
143
|
-
|
|
144
|
-
self.setCentralWidget(app_frame)
|
|
145
|
-
|
|
146
|
-
#########
|
|
147
|
-
# Toolbar
|
|
148
|
-
#########
|
|
149
|
-
|
|
150
|
-
def create_toolbar(self):
|
|
151
|
-
""" Create toolbar.
|
|
152
|
-
|
|
153
|
-
Two buttons are foreseen: one for reconnect with the hexapod and one to the stages.
|
|
154
|
-
"""
|
|
155
|
-
|
|
156
|
-
self.connected_pix = QPixmap(
|
|
157
|
-
str(find_file("connected-100.png", in_dir="images"))).scaledToHeight(30, 1)
|
|
158
|
-
self.disconnected_pix = QPixmap(
|
|
159
|
-
str(find_file("disconnected-100.png", in_dir="images"))).scaledToHeight(30, 1)
|
|
160
|
-
|
|
161
|
-
self.reconnect_icon_hexapod = QLabel()
|
|
162
|
-
self.reconnect_icon_hexapod.setPixmap(self.connected_pix)
|
|
163
|
-
|
|
164
|
-
self.reconnect_icon_stages = QLabel()
|
|
165
|
-
self.reconnect_icon_stages.setPixmap(self.connected_pix)
|
|
166
|
-
|
|
167
|
-
# Putting everything in place
|
|
168
|
-
|
|
169
|
-
self.toolbar = self.addToolBar('MainToolbar')
|
|
170
|
-
|
|
171
|
-
hexapod_label = QLabel("Hexapod")
|
|
172
|
-
hexapod_label.setFont(FONT)
|
|
173
|
-
self.toolbar.addWidget(hexapod_label)
|
|
174
|
-
self.reconnect_icon_hexapod.setToolTip(
|
|
175
|
-
"Connection status of the hexapod")
|
|
176
|
-
self.toolbar.addWidget(self.reconnect_icon_hexapod)
|
|
177
|
-
self.toolbar.addSeparator()
|
|
178
|
-
|
|
179
|
-
stages_label = QLabel("Stages")
|
|
180
|
-
stages_label.setFont(FONT)
|
|
181
|
-
self.toolbar.addWidget(stages_label)
|
|
182
|
-
self.reconnect_icon_stages.setToolTip(
|
|
183
|
-
"Connection status of the stages")
|
|
184
|
-
self.toolbar.addWidget(self.reconnect_icon_stages)
|
|
185
|
-
self.toolbar.addSeparator()
|
|
186
|
-
|
|
187
|
-
return self.toolbar
|
|
188
|
-
|
|
189
|
-
#########
|
|
190
|
-
# Widgets
|
|
191
|
-
#########
|
|
192
|
-
|
|
193
|
-
def create_sma_widget(self):
|
|
194
|
-
""" Create widget showing the setting of the scan mirror assembly."""
|
|
195
|
-
|
|
196
|
-
self.sma = ScanMirrorAssemblyWidget()
|
|
197
|
-
return self.sma
|
|
198
|
-
|
|
199
|
-
def create_big_rotation_stage_widget(self):
|
|
200
|
-
""" Create widget showing the setting of the big rotation stage."""
|
|
201
|
-
|
|
202
|
-
self.big_rotation_stage = BigRotationStageWidget()
|
|
203
|
-
return self.big_rotation_stage
|
|
204
|
-
|
|
205
|
-
def create_focus_position_widget(self):
|
|
206
|
-
""" Create widget showing the focus position."""
|
|
207
|
-
|
|
208
|
-
self.focus_position = FocusPositionWidget()
|
|
209
|
-
return self.focus_position
|
|
210
|
-
|
|
211
|
-
def create_focal_plane_widget(self):
|
|
212
|
-
""" Create widget showing the position of the source in the focal plane."""
|
|
213
|
-
|
|
214
|
-
self.focal_plane = FocalPlaneWidgetWithSourcePosition()
|
|
215
|
-
return self.focal_plane
|
|
216
|
-
|
|
217
|
-
##########
|
|
218
|
-
# Updating
|
|
219
|
-
##########
|
|
220
|
-
|
|
221
|
-
def update_sma(self, distance, angle):
|
|
222
|
-
""" Update the shown configuration of the scan mirror assembly.
|
|
223
|
-
|
|
224
|
-
The orientation of the scan mirror must be changed, and the labels showing the distance from the scan
|
|
225
|
-
mirror to the optical axis (along the translation stage) and the orientation angle of the scan mirror must be
|
|
226
|
-
updated.
|
|
227
|
-
|
|
228
|
-
:param distance: Distance between the scan mirror and the optical axis (along the translation stage) for the new
|
|
229
|
-
configuration of the scan mirror assembly [mm].
|
|
230
|
-
|
|
231
|
-
:param angle: Orientation angle of the scan mirror [degrees].
|
|
232
|
-
"""
|
|
233
|
-
|
|
234
|
-
self.sma.update_plot(distance, angle)
|
|
235
|
-
|
|
236
|
-
def update_big_rotation_stage(self, angle):
|
|
237
|
-
""" Update the shown configuration of the big rotation stage.
|
|
238
|
-
|
|
239
|
-
The orientation of GL_ROT w.r.t. GL_FIX must be set to the given angle.
|
|
240
|
-
|
|
241
|
-
:param angle: Rotation angle for the new configuration of the big rotation stage [degrees].
|
|
242
|
-
"""
|
|
243
|
-
|
|
244
|
-
self.big_rotation_stage.update(angle)
|
|
245
|
-
|
|
246
|
-
def update_focus_position(self, focus_position):
|
|
247
|
-
""" Update the shown focus position.
|
|
248
|
-
|
|
249
|
-
:param focus_position: New focus position [mm].
|
|
250
|
-
"""
|
|
251
|
-
|
|
252
|
-
self.focus_position.update_plot(focus_position)
|
|
253
|
-
|
|
254
|
-
def update_source_position(self, position):
|
|
255
|
-
|
|
256
|
-
""" Update the position of the source in the focal plane to the given postion (x, y).
|
|
257
|
-
|
|
258
|
-
The red dot must move on the focal plane (movement may not be visible) and the text label with the focal-plane
|
|
259
|
-
coordinates must be updated.
|
|
260
|
-
|
|
261
|
-
:param position: Dictionary with the following entries:
|
|
262
|
-
|
|
263
|
-
- "angles": tuple with the field angles (theta, phi) [degrees];
|
|
264
|
-
- "pixels": tuple with the pixel coordinates (row, column) [pixels] and CCD code;
|
|
265
|
-
- "mm": tuple with the focal-plane coordinates (x, y) [mm].
|
|
266
|
-
"""
|
|
267
|
-
|
|
268
|
-
(theta, phi) = position["angles"]
|
|
269
|
-
(row, column, ccd_code) = position["pixels"]
|
|
270
|
-
(x_fp, y_fp) = position["mm"]
|
|
271
|
-
|
|
272
|
-
# Update the red dot in the plot
|
|
273
|
-
|
|
274
|
-
self.focal_plane.update_source_position(x_fp, y_fp)
|
|
275
|
-
|
|
276
|
-
# Update the text label
|
|
277
|
-
|
|
278
|
-
if abs(x_fp) > FOV_SETTINGS.RADIUS_MM or abs(y_fp) > FOV_SETTINGS.RADIUS_MM:
|
|
279
|
-
|
|
280
|
-
MODULE_LOGGER.debug("Current source position: outside FOV")
|
|
281
|
-
self.source_position_text.setText(
|
|
282
|
-
"Current source position: outside FOV")
|
|
283
|
-
self.source_position_angles_text.setText("")
|
|
284
|
-
self.source_position_pixels_text.setText("")
|
|
285
|
-
self.source_position_mm_text.setText("")
|
|
286
|
-
|
|
287
|
-
else:
|
|
288
|
-
|
|
289
|
-
self.source_position_text.setText("Current source position:")
|
|
290
|
-
self.source_position_angles_text.setText(
|
|
291
|
-
u"\u2022" + "(" + u"\u03B8" + ", " + u"\u03C6" + ") [" + u"\u00B0" + "] = ({:.2f}, {:.2f})".format(theta, phi))
|
|
292
|
-
|
|
293
|
-
if ccd_code is None:
|
|
294
|
-
|
|
295
|
-
self.source_position_pixels_text.setText(
|
|
296
|
-
u"\u2022" + " source doesn't fall on any CCD")
|
|
297
|
-
|
|
298
|
-
else:
|
|
299
|
-
|
|
300
|
-
self.source_position_pixels_text.setText(
|
|
301
|
-
u"\u2022" + "(x<sub>CCD</sub>, y<sub>CCD</sub>) [pixels] = ({:.2f}, {:.2f}) on CCD ".format(column, row) + str(ccd_code))
|
|
302
|
-
|
|
303
|
-
self.source_position_mm_text.setText(
|
|
304
|
-
u"\u2022" + "(x<sub>FP</sub>, y<sub>FP</sub>) [mm] = ({:.2f}, {:.2f})".format(x_fp, y_fp))
|
|
305
|
-
|
|
306
|
-
##############
|
|
307
|
-
# Connectivity
|
|
308
|
-
##############
|
|
309
|
-
|
|
310
|
-
def set_connection_state_hexapod(self, state):
|
|
311
|
-
""" Sets the connection state for the Symétrie Hexapod.
|
|
312
|
-
|
|
313
|
-
:param state: Connectivity state to use for the Symétrie Hexapod.
|
|
314
|
-
"""
|
|
315
|
-
|
|
316
|
-
if state == "connected":
|
|
317
|
-
|
|
318
|
-
self.reconnect_icon_hexapod.setPixmap(self.connected_pix)
|
|
319
|
-
|
|
320
|
-
elif state == "disconnected":
|
|
321
|
-
|
|
322
|
-
self.reconnect_icon_hexapod.setPixmap(self.disconnected_pix)
|
|
323
|
-
|
|
324
|
-
else:
|
|
325
|
-
|
|
326
|
-
raise UnknownStateError(
|
|
327
|
-
f"Unknown State ({state}) for the hexapod, expected 'connected' or 'disconnected'.")
|
|
328
|
-
|
|
329
|
-
def set_connection_state_stages(self, state):
|
|
330
|
-
""" Sets the connection state for the Huber stages.
|
|
331
|
-
|
|
332
|
-
:param state: Connectivity state to use for the Huber stages.
|
|
333
|
-
"""
|
|
334
|
-
|
|
335
|
-
if state == "connected":
|
|
336
|
-
|
|
337
|
-
self.reconnect_icon_stages.setPixmap(self.connected_pix)
|
|
338
|
-
|
|
339
|
-
elif state == "disconnected":
|
|
340
|
-
|
|
341
|
-
self.reconnect_icon_stages.setPixmap(self.disconnected_pix)
|
|
342
|
-
|
|
343
|
-
else:
|
|
344
|
-
|
|
345
|
-
raise UnknownStateError(f"Unknown State ({state}) for the stages, expected 'connected' or 'disconnected'.")
|