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,188 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This script is intended to be used for log files that contain errors or warnings that completely flood all other
|
|
3
|
-
messages and therefore make it very hard to analyse the log. The script will first rename the log-file with a '.orig'
|
|
4
|
-
extension and then filters out all lines between a matching start pattern and a matching end pattern.
|
|
5
|
-
The filtered output is written into the original file.
|
|
6
|
-
|
|
7
|
-
Example usage:
|
|
8
|
-
|
|
9
|
-
$ python remove_lines_between_matches.py ~/Desktop/general-sron.log.2023-07-14 \
|
|
10
|
-
-sp 'Executing is_connected failed' -ep '^(NotImplementedError|AttributeError)'
|
|
11
|
-
|
|
12
|
-
This command will filter out all occurrences of the following two error messages:
|
|
13
|
-
|
|
14
|
-
level=ERROR ts=2023-07-14T00:00:01,065950 process=MainProcess process_id=2583919 caller=egse.protocol:595 msg="Executing is_connected failed."
|
|
15
|
-
Traceback (most recent call last):
|
|
16
|
-
File "/cgse/lib/python/egse/protocol.py", line 593, in handle_device_method
|
|
17
|
-
response = method(*args, **kwargs)
|
|
18
|
-
File "/cgse/lib/python/egse/tempcontrol/beaglebone/beaglebone.py", line 294, in is_connected
|
|
19
|
-
return all([heater.connected for heater in self.heaters])
|
|
20
|
-
File "/cgse/lib/python/egse/tempcontrol/beaglebone/beaglebone.py", line 294, in <listcomp>
|
|
21
|
-
return all([heater.connected for heater in self.heaters])
|
|
22
|
-
AttributeError: 'int' object has no attribute 'connected'
|
|
23
|
-
|
|
24
|
-
and
|
|
25
|
-
|
|
26
|
-
level=ERROR ts=2023-07-14T00:00:01,285946 process=MainProcess process_id=2585980 caller=egse.protocol:595 msg="Executing is_connected failed."
|
|
27
|
-
Traceback (most recent call last):
|
|
28
|
-
File "/cgse/lib/python/egse/protocol.py", line 593, in handle_device_method
|
|
29
|
-
response = method(*args, **kwargs)
|
|
30
|
-
File "/cgse/lib/python/egse/socketdevice.py", line 124, in is_connected
|
|
31
|
-
response = self.get_idn()
|
|
32
|
-
File "/cgse/lib/python/egse/socketdevice.py", line 42, in get_idn
|
|
33
|
-
raise NotImplementedError
|
|
34
|
-
NotImplementedError
|
|
35
|
-
|
|
36
|
-
"""
|
|
37
|
-
|
|
38
|
-
from __future__ import annotations
|
|
39
|
-
|
|
40
|
-
import argparse
|
|
41
|
-
import os
|
|
42
|
-
import re
|
|
43
|
-
from contextlib import contextmanager
|
|
44
|
-
from pathlib import Path
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
@contextmanager
|
|
48
|
-
def stash_file(file_name: str | Path, stash_name: str | Path = None) -> Path:
|
|
49
|
-
"""
|
|
50
|
-
In the context of `stash_file` the file named `file_name` will be renamed to `stash_name`.
|
|
51
|
-
If `stash_name` is None, the suffix '.orig' will be appended to the `file_name` and used
|
|
52
|
-
as stash_name.
|
|
53
|
-
|
|
54
|
-
Upon leaving the context, the file named `file_name` will be restored to its original
|
|
55
|
-
content and file `stash_name` will be deleted.
|
|
56
|
-
|
|
57
|
-
Args:
|
|
58
|
-
file_name: the name or path of the file to stash
|
|
59
|
-
stash_name: the optional name of the stashed file
|
|
60
|
-
Returns:
|
|
61
|
-
The name of the stashed file.
|
|
62
|
-
Raises:
|
|
63
|
-
An exception is raised if the stash_name file already exists.
|
|
64
|
-
"""
|
|
65
|
-
|
|
66
|
-
file_name = Path(file_name).expanduser()
|
|
67
|
-
|
|
68
|
-
if stash_name is None:
|
|
69
|
-
stash_name = Path(f"{file_name}.orig")
|
|
70
|
-
else:
|
|
71
|
-
stash_name = Path(stash_name)
|
|
72
|
-
|
|
73
|
-
# Since —on unix— the `os.rename()` function will overwrite stash_name when it exists,
|
|
74
|
-
# we already here check if the file exists.
|
|
75
|
-
|
|
76
|
-
if stash_name.exists():
|
|
77
|
-
raise EnvironmentError(f"{stash_name} already exists, please remove/rename it before proceeding.")
|
|
78
|
-
|
|
79
|
-
try:
|
|
80
|
-
os.rename(file_name, stash_name)
|
|
81
|
-
except FileNotFoundError as exc:
|
|
82
|
-
raise EnvironmentError(f"No such file: {file_name}") from exc
|
|
83
|
-
except OSError as exc:
|
|
84
|
-
raise EnvironmentError(f"Please remove {stash_name}") from exc
|
|
85
|
-
|
|
86
|
-
try:
|
|
87
|
-
yield stash_name
|
|
88
|
-
finally:
|
|
89
|
-
os.replace(stash_name, file_name)
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
def rename_file(name: str | Path, new_name: str | Path) -> Path:
|
|
93
|
-
"""
|
|
94
|
-
Rename a file.
|
|
95
|
-
|
|
96
|
-
This will also work if the new_name is in a different folder as the original name.
|
|
97
|
-
|
|
98
|
-
Args:
|
|
99
|
-
name: the name of the original file to be stashed
|
|
100
|
-
new_name: the name to use for the stashed file
|
|
101
|
-
|
|
102
|
-
Returns:
|
|
103
|
-
The name of the stashed file.
|
|
104
|
-
Raises:
|
|
105
|
-
An exception is raised if the stash_name file already exists.
|
|
106
|
-
|
|
107
|
-
"""
|
|
108
|
-
name = Path(name).expanduser()
|
|
109
|
-
new_name = Path(new_name).expanduser()
|
|
110
|
-
|
|
111
|
-
# Since —on unix— the `os.rename()` function will overwrite stash_name when it exists,
|
|
112
|
-
# we already here check if the file exists.
|
|
113
|
-
|
|
114
|
-
if new_name.exists():
|
|
115
|
-
raise EnvironmentError(f"{new_name} already exists, please remove/rename it before proceeding.")
|
|
116
|
-
|
|
117
|
-
try:
|
|
118
|
-
os.rename(name, new_name)
|
|
119
|
-
except FileNotFoundError as exc:
|
|
120
|
-
raise EnvironmentError(f"No such file: {name}") from exc
|
|
121
|
-
except OSError as exc:
|
|
122
|
-
raise EnvironmentError(f"{new_name} already exists, please remove/rename it before proceeding.") from exc
|
|
123
|
-
|
|
124
|
-
return new_name
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
def main():
|
|
128
|
-
|
|
129
|
-
parser = argparse.ArgumentParser()
|
|
130
|
-
parser.add_argument("--start_pattern", "-sp", required=True)
|
|
131
|
-
parser.add_argument("--end_pattern", "-ep", required=True)
|
|
132
|
-
parser.add_argument("path")
|
|
133
|
-
|
|
134
|
-
args = parser.parse_args()
|
|
135
|
-
|
|
136
|
-
moved_fn = rename_file(args.path, f"{args.path}.orig")
|
|
137
|
-
|
|
138
|
-
start_marker = args.start_pattern
|
|
139
|
-
end_marker = args.end_pattern
|
|
140
|
-
|
|
141
|
-
with open(moved_fn, mode='r') as in_fd, open(args.path, mode='w') as out_fd:
|
|
142
|
-
ignore_lines = False
|
|
143
|
-
last_line_empty = False
|
|
144
|
-
for line in in_fd:
|
|
145
|
-
if re.search(start_marker, line):
|
|
146
|
-
ignore_lines = True
|
|
147
|
-
elif re.search(end_marker, line):
|
|
148
|
-
ignore_lines = False
|
|
149
|
-
elif not ignore_lines:
|
|
150
|
-
if line.strip() == '':
|
|
151
|
-
if not last_line_empty:
|
|
152
|
-
last_line_empty = True
|
|
153
|
-
out_fd.write(line)
|
|
154
|
-
else:
|
|
155
|
-
out_fd.write(line)
|
|
156
|
-
last_line_empty = False
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
def test_stash_file():
|
|
160
|
-
|
|
161
|
-
fn = Path("~/Desktop/xxx.txt").expanduser()
|
|
162
|
-
assert fn.exists()
|
|
163
|
-
|
|
164
|
-
with stash_file(fn) as sfn:
|
|
165
|
-
stash_name = sfn
|
|
166
|
-
assert stash_name.exists()
|
|
167
|
-
assert not fn.exists()
|
|
168
|
-
|
|
169
|
-
assert fn.exists()
|
|
170
|
-
assert not stash_name.exists()
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
def test_rename_file():
|
|
174
|
-
|
|
175
|
-
fn = Path("~/Desktop/xxx.txt").expanduser()
|
|
176
|
-
|
|
177
|
-
assert fn.exists()
|
|
178
|
-
|
|
179
|
-
moved_fn = rename_file(fn, "~/tmp/yyy.out")
|
|
180
|
-
|
|
181
|
-
assert not fn.exists()
|
|
182
|
-
assert moved_fn.exists()
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
if __name__ == '__main__':
|
|
186
|
-
main()
|
|
187
|
-
# test_stash_file()
|
|
188
|
-
# test_move_file()
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
|
|
3
|
-
import logging
|
|
4
|
-
import time
|
|
5
|
-
|
|
6
|
-
from argparse import ArgumentParser
|
|
7
|
-
|
|
8
|
-
from egse.tempcontrol.beaglebone.beaglebone import BeagleboneProxy
|
|
9
|
-
|
|
10
|
-
log = logging.getLogger(__name__)
|
|
11
|
-
logging.basicConfig()
|
|
12
|
-
|
|
13
|
-
parser = ArgumentParser()
|
|
14
|
-
parser.add_argument('device', type=int, help='beaglebone device index [0, 1]')
|
|
15
|
-
parser.add_argument('channel', type=int, help='beaglebone pwm channel [0, 3]')
|
|
16
|
-
parser.add_argument('setpoint', type=int, help='pwm duty cycle in %%')
|
|
17
|
-
args = parser.parse_args()
|
|
18
|
-
|
|
19
|
-
assert args.device in [0, 1, 2, 3], 'device index must be in [0 - 3]'
|
|
20
|
-
assert args.channel in [0, 1, 2, 3], 'pwm channel must be in [0 - 3]'
|
|
21
|
-
assert args.setpoint in range(0, 101), 'pwm duty cycle must be in [0 - 100]'
|
|
22
|
-
|
|
23
|
-
try:
|
|
24
|
-
beaglebone = BeagleboneProxy()
|
|
25
|
-
except Exception as e:
|
|
26
|
-
log.error(f'could not connect to beaglebone control server ({e})')
|
|
27
|
-
else:
|
|
28
|
-
log.info('connected to beaglebone control server')
|
|
29
|
-
|
|
30
|
-
try:
|
|
31
|
-
beaglebone.set_period(args.device, args.channel, 10000)
|
|
32
|
-
beaglebone.set_duty_cycle(args.device, args.channel, (args.setpoint * 100))
|
|
33
|
-
if args.setpoint == 0:
|
|
34
|
-
beaglebone.set_enable(args.device, args.channel, False)
|
|
35
|
-
else:
|
|
36
|
-
beaglebone.set_enable(args.device, args.channel, True)
|
|
37
|
-
except Exception as e:
|
|
38
|
-
log.error(f'could not set duty cycle ({e})')
|
|
39
|
-
|
|
40
|
-
while True:
|
|
41
|
-
time.sleep(1)
|
|
42
|
-
print(beaglebone.get_voltage(args.device, args.channel), 'V')
|
|
43
|
-
print(beaglebone.get_current(args.device, args.channel), 'A')
|
|
44
|
-
print(beaglebone.get_power(args.device, args.channel), 'W')
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
|
|
3
|
-
import logging
|
|
4
|
-
from time import sleep
|
|
5
|
-
|
|
6
|
-
from egse.vacuum.instrutech.igm402 import Igm402Proxy
|
|
7
|
-
from egse.vacuum.pfeiffer.tc400 import Tc400Proxy
|
|
8
|
-
from egse.vacuum.pfeiffer.acp40 import Acp40Proxy
|
|
9
|
-
|
|
10
|
-
log = logging.getLogger(__name__)
|
|
11
|
-
logging.basicConfig()
|
|
12
|
-
|
|
13
|
-
igm402 = Igm402Proxy()
|
|
14
|
-
tc400 = Tc400Proxy()
|
|
15
|
-
acp40 = Acp40Proxy()
|
|
16
|
-
|
|
17
|
-
# TODO: check vessel door interlock
|
|
18
|
-
# TODO: open gate valve
|
|
19
|
-
|
|
20
|
-
log.info('Starting ACP40')
|
|
21
|
-
acp40.set_enable(enable=True)
|
|
22
|
-
|
|
23
|
-
log.info('Waiting for pressure to reach 6E-0 mbar...')
|
|
24
|
-
while (igm402.get_cgn_pressure(index=1) > 6E-0):
|
|
25
|
-
sleep(1)
|
|
26
|
-
log.info('Starting TC400')
|
|
27
|
-
tc400.set_pumpingstation(enable=True)
|
|
28
|
-
tc400.set_motorpump(enable=True)
|
|
29
|
-
|
|
30
|
-
log.info('Waiting for pressure to reach 1.1E-3 mbar...')
|
|
31
|
-
while (igm402.get_cgn_pressure(index=1) > 1.1E-3):
|
|
32
|
-
last_error = tc400.get_last_error()
|
|
33
|
-
if last_error != 0:
|
|
34
|
-
log.error(f'TC400 error: {last_error}')
|
|
35
|
-
tc400.set_pumpingstation(enable=False)
|
|
36
|
-
exit()
|
|
37
|
-
sleep(1)
|
|
38
|
-
|
|
39
|
-
# log.info('Turn on ionization gauge')
|
|
40
|
-
igm402.set_filament_enable(enable=True)
|
|
41
|
-
|
|
42
|
-
log.info('Waiting for pressure to reach 1E-5 mbar...')
|
|
43
|
-
while (igm402.get_ion_gauge_pressure() > 1E-5):
|
|
44
|
-
sleep(1)
|
|
45
|
-
|
|
46
|
-
log.info('Ready for cooling')
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
|
|
3
|
-
from argparse import ArgumentParser
|
|
4
|
-
from egse.tempcontrol.spid.spid import PidProxy
|
|
5
|
-
|
|
6
|
-
parser = ArgumentParser()
|
|
7
|
-
parser.add_argument('channel', type=int, help='channel index')
|
|
8
|
-
parser.add_argument('setpoint', type=float, help='temperature setpoint')
|
|
9
|
-
parser.add_argument('enable', type=bool, help="Enable controller")
|
|
10
|
-
|
|
11
|
-
args = parser.parse_args()
|
|
12
|
-
|
|
13
|
-
p = PidProxy()
|
|
14
|
-
|
|
15
|
-
if args.enable:
|
|
16
|
-
p.set_temperature(args.channel, args.setpoint)
|
|
17
|
-
p.enable(args.channel)
|
|
18
|
-
else:
|
|
19
|
-
p.disable(args.channel)
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
|
|
3
|
-
from egse.tempcontrol.beaglebone.beaglebone import BeagleboneProxy
|
|
4
|
-
|
|
5
|
-
bbb = BeagleboneProxy()
|
|
6
|
-
|
|
7
|
-
for device in range(4):
|
|
8
|
-
for channel in range(4):
|
|
9
|
-
bbb.set_enable(device, channel, False)
|
|
10
|
-
#print(bbb.get_current(device, channel))
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
|
|
3
|
-
import logging
|
|
4
|
-
from time import sleep
|
|
5
|
-
|
|
6
|
-
from egse.vacuum.instrutech.igm402 import Igm402Proxy
|
|
7
|
-
from egse.vacuum.pfeiffer.tc400 import Tc400Proxy
|
|
8
|
-
from egse.vacuum.pfeiffer.acp40 import Acp40Proxy
|
|
9
|
-
|
|
10
|
-
log = logging.getLogger(__name__)
|
|
11
|
-
logging.basicConfig()
|
|
12
|
-
|
|
13
|
-
igm402 = Igm402Proxy()
|
|
14
|
-
tc400 = Tc400Proxy()
|
|
15
|
-
acp40 = Acp40Proxy()
|
|
16
|
-
|
|
17
|
-
# TODO: turn of vacscan filament
|
|
18
|
-
# TODO: close gate valve
|
|
19
|
-
|
|
20
|
-
log.info('Turn of IGM402 filament')
|
|
21
|
-
igm402.set_filament_enable(enable=False)
|
|
22
|
-
|
|
23
|
-
log.info('Shut down TC400')
|
|
24
|
-
tc400.set_pumpingstation(enable=False)
|
|
25
|
-
|
|
26
|
-
log.info('Waiting for tc400 to reach 50 Hz...')
|
|
27
|
-
while (tc400.get_active_speed() > 50):
|
|
28
|
-
sleep(1)
|
|
29
|
-
|
|
30
|
-
log.info('Shut down ACP40')
|
|
31
|
-
acp40.set_enable(enable=False)
|
|
32
|
-
|
|
33
|
-
log.info('Done')
|
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
import argparse
|
|
3
|
-
import os
|
|
4
|
-
import shutil
|
|
5
|
-
import logging
|
|
6
|
-
|
|
7
|
-
import matplotlib.pyplot as plt
|
|
8
|
-
import numpy as np
|
|
9
|
-
import pandas as pd
|
|
10
|
-
|
|
11
|
-
from datetime import datetime
|
|
12
|
-
from dateutil.rrule import rrule, DAILY
|
|
13
|
-
|
|
14
|
-
from scripts.sron.gimbal_conversions import gimbal_rotations_to_fov_angles
|
|
15
|
-
from egse.obsid import obsid_from_storage
|
|
16
|
-
from egse.config import find_file
|
|
17
|
-
|
|
18
|
-
logger = logging.getLogger(__name__)
|
|
19
|
-
|
|
20
|
-
FOV_ORIGIN = 'FOV'
|
|
21
|
-
ENSEMBLE_ORIGIN = 'ENSEMBLE'
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
def correct_brigand_chimay(data_dir: str = None):
|
|
25
|
-
data_dir = data_dir or os.environ['PLATO_DATA_STORAGE_LOCATION']
|
|
26
|
-
|
|
27
|
-
correct_obsid_range(308, 382, "brigand", data_dir)
|
|
28
|
-
correct_obsid_range(383, 391, "arthureddington", data_dir)
|
|
29
|
-
correct_obsid_range(392, 688, "brigand", data_dir)
|
|
30
|
-
correct_obsid_range(831, 1109, "chimay", data_dir)
|
|
31
|
-
|
|
32
|
-
correct_od_range(20230629, 20231020, data_dir)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
def correct_obsid_range(first_obsid: int, last_obsid: int, camera_name: str, data_dir: str):
|
|
36
|
-
"""
|
|
37
|
-
Recompute the FOV housekeeping for the obsid range.
|
|
38
|
-
|
|
39
|
-
This function does the following:
|
|
40
|
-
|
|
41
|
-
* Make a copy of the original FOV files (incl. "old" in the filename)
|
|
42
|
-
* In the original files:
|
|
43
|
-
- Recompute all actual and commanded positions based on ENSEMBLE HK
|
|
44
|
-
|
|
45
|
-
Args:
|
|
46
|
-
- first_obsid: First obsid.
|
|
47
|
-
- last_obsid: Last obsid.
|
|
48
|
-
- data_dir: Full path to the directory in which the data resides. This is the
|
|
49
|
-
folder with sub-folders /obs and /daily, in which the FOV and ENSEMBLE HK files
|
|
50
|
-
are stored.
|
|
51
|
-
"""
|
|
52
|
-
for obsid in range(first_obsid, last_obsid+1):
|
|
53
|
-
correct_obsid(obsid, camera_name, data_dir)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
def correct_obsid(obsid: int, camera_name: str, data_dir: str):
|
|
57
|
-
"""
|
|
58
|
-
Recompute the FOV housekeeping for the given obsid.
|
|
59
|
-
|
|
60
|
-
This function does the following:
|
|
61
|
-
|
|
62
|
-
* Make a copy of the original FOV file (incl. "old" in the filename)
|
|
63
|
-
* In the original file:
|
|
64
|
-
- Recompute all actual and commanded positions based on ENSEMBLE HK
|
|
65
|
-
|
|
66
|
-
Args:
|
|
67
|
-
- obsid: Observation identifier.
|
|
68
|
-
- data_dir: Full path to the directory in which the data resides. This is the
|
|
69
|
-
folder with sub-folders /obs and /daily, in which the FOV and ENSEMBLE HK files
|
|
70
|
-
are stored.
|
|
71
|
-
"""
|
|
72
|
-
|
|
73
|
-
stored_obsid = obsid_from_storage(obsid,
|
|
74
|
-
data_dir=data_dir,
|
|
75
|
-
site_id="SRON",
|
|
76
|
-
camera_name=camera_name)
|
|
77
|
-
|
|
78
|
-
fov_pattern = f"{stored_obsid}_{FOV_ORIGIN}_*.csv"
|
|
79
|
-
gimbal_pattern = f"{stored_obsid}_{ENSEMBLE_ORIGIN}_*.csv"
|
|
80
|
-
|
|
81
|
-
fov_hk_filename = find_file(fov_pattern, root=f"{data_dir}/obs/{stored_obsid}")
|
|
82
|
-
gimbal_hk_filename = find_file(gimbal_pattern, root=f"{data_dir}/obs/{stored_obsid}")
|
|
83
|
-
|
|
84
|
-
if fov_hk_filename is None:
|
|
85
|
-
logger.warning(f"No FOV HK available for OBSID {stored_obsid}")
|
|
86
|
-
return
|
|
87
|
-
|
|
88
|
-
if gimbal_hk_filename is None:
|
|
89
|
-
logger.warning(f"No ENSEMBLE HK available for OBSID {stored_obsid}")
|
|
90
|
-
return
|
|
91
|
-
|
|
92
|
-
correct_valid_file(str(fov_hk_filename), str(gimbal_hk_filename))
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
def correct_od_range(first_od: int, last_od: int, data_dir: str):
|
|
96
|
-
"""
|
|
97
|
-
Recompute the FOV housekeeping for the OD range.
|
|
98
|
-
|
|
99
|
-
This function does the following:
|
|
100
|
-
|
|
101
|
-
* Make a copy of the original FOV files (incl. "old" in the filename)
|
|
102
|
-
* In the original files:
|
|
103
|
-
- Recompute all actual and commanded positions based on ENSEMBLE HK.
|
|
104
|
-
|
|
105
|
-
Args:
|
|
106
|
-
- first_od: First observing day [yyyymmdd].
|
|
107
|
-
- last_od: Last observing day [yyyymmdd].
|
|
108
|
-
- data_dir: Full path to the directory in which the data resides. This is the
|
|
109
|
-
folder with sub-folders /obs and /daily, in which the FOV and ENSEMBLE HK files
|
|
110
|
-
are stored.
|
|
111
|
-
"""
|
|
112
|
-
start = datetime.strptime(str(first_od), "%Y%m%d")
|
|
113
|
-
end = datetime.strptime(str(last_od), "%Y%m%d")
|
|
114
|
-
|
|
115
|
-
for dt in rrule(DAILY, dtstart=start, until=end):
|
|
116
|
-
correct_od(dt.strftime("%Y%m%d"), data_dir)
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
def correct_od(od: int, data_dir: str):
|
|
120
|
-
"""
|
|
121
|
-
Recompute the FOV housekeeping for the given OD.
|
|
122
|
-
|
|
123
|
-
This function does the following:
|
|
124
|
-
|
|
125
|
-
* Make a copy of the original FOV files (incl. "old" in the filename)
|
|
126
|
-
* In the original files:
|
|
127
|
-
- Recompute all actual and commanded positions based on ENSEMBLE HK.
|
|
128
|
-
|
|
129
|
-
Args:
|
|
130
|
-
- od: Observing day [yyyymmdd].
|
|
131
|
-
- data_dir: Full path to the directory in which the data resides. This is the
|
|
132
|
-
folder with sub-folders /obs and /daily, in which the FOV and ENSEMBLE HK files
|
|
133
|
-
are stored.
|
|
134
|
-
"""
|
|
135
|
-
fov_pattern = f"{od}_SRON_{FOV_ORIGIN}.csv"
|
|
136
|
-
gimbal_pattern = f"{od}_SRON_{ENSEMBLE_ORIGIN}.csv"
|
|
137
|
-
|
|
138
|
-
fov_hk_filename = find_file(fov_pattern, root=f"{data_dir}/daily/{od}")
|
|
139
|
-
gimbal_hk_filename = find_file(gimbal_pattern, root=f"{data_dir}/daily/{od}")
|
|
140
|
-
|
|
141
|
-
if fov_hk_filename is None:
|
|
142
|
-
logger.warning(f"No FOV HK file '{fov_pattern}' available for OD {od}")
|
|
143
|
-
return
|
|
144
|
-
|
|
145
|
-
if gimbal_hk_filename is None:
|
|
146
|
-
logger.warning(f"No ENSEMBLE HK file '{gimbal_pattern}' available for OD {od}")
|
|
147
|
-
return
|
|
148
|
-
|
|
149
|
-
correct_valid_file(str(fov_hk_filename), str(gimbal_hk_filename))
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
def add_angles_row(angles_dict, timestamp, act_theta, act_phi, cmd_theta=np.nan,
|
|
153
|
-
cmd_phi=np.nan):
|
|
154
|
-
""" Appends a row to the angles dictionary
|
|
155
|
-
|
|
156
|
-
Args:
|
|
157
|
-
- angles_dict: dictionary representing a pandas dataframe
|
|
158
|
-
- timestamp: timestamp from the gimbal housekeepng file
|
|
159
|
-
- act_theta: recomputed actual theta angle
|
|
160
|
-
- act_phi: recomputed actual phi angle
|
|
161
|
-
- cmd_theta: recomputed commanded theta angle
|
|
162
|
-
- cmd_phi: recomputed commanded phi angle
|
|
163
|
-
|
|
164
|
-
"""
|
|
165
|
-
angles_dict['timestamp'].append(timestamp)
|
|
166
|
-
angles_dict['FOV_ACT_THETA'].append(act_theta)
|
|
167
|
-
angles_dict['FOV_ACT_PHI'].append(act_phi)
|
|
168
|
-
angles_dict['FOV_CMD_THETA'].append(cmd_theta)
|
|
169
|
-
angles_dict['FOV_CMD_PHI'].append(cmd_phi)
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
def correct_valid_file(fov_filename: str, gimbal_filename: str, plot: bool = False):
|
|
173
|
-
""" Recompute the theta, phi values in the FOV HK file with the given filename.
|
|
174
|
-
|
|
175
|
-
This function does the following:
|
|
176
|
-
|
|
177
|
-
* Make a copy of the original file (incl. "old" in the filename).
|
|
178
|
-
* Iterate over all rows in ENSEMBLE housekeeping
|
|
179
|
-
- For each row, recompute the actual theta and phi.
|
|
180
|
-
- When the gimbal is not moving, and the previous commanded position !=
|
|
181
|
-
current commanded position, recompute the commanded theta and phi.
|
|
182
|
-
|
|
183
|
-
Args:
|
|
184
|
-
- fov_filename: Filename of the original FOV HK file that needs to be corrected.
|
|
185
|
-
- gimbal_filename: Filename of the ensemble HK file with the valid X, Y
|
|
186
|
-
coordinates.
|
|
187
|
-
"""
|
|
188
|
-
# Make a copy of the original file (incl. "old" in the filename) in the same folder
|
|
189
|
-
logger.info(f"Now correcting: {fov_filename}")
|
|
190
|
-
|
|
191
|
-
copy_fov_filename = f"{fov_filename.split('.')[0]}_old.csv"
|
|
192
|
-
if not os.path.isfile(copy_fov_filename):
|
|
193
|
-
shutil.copyfile(fov_filename, copy_fov_filename)
|
|
194
|
-
|
|
195
|
-
# Iterate over all rows in the FOV HK
|
|
196
|
-
# angles_df = pd.read_csv(fov_filename)
|
|
197
|
-
angles_dict = {
|
|
198
|
-
'timestamp': [],
|
|
199
|
-
'FOV_ACT_THETA': [],
|
|
200
|
-
'FOV_ACT_PHI': [],
|
|
201
|
-
'FOV_CMD_THETA': [],
|
|
202
|
-
'FOV_CMD_PHI': []
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
coordinates_df = pd.read_csv(gimbal_filename)
|
|
206
|
-
len_coordinates_ds = len(coordinates_df)
|
|
207
|
-
|
|
208
|
-
is_moving = False
|
|
209
|
-
|
|
210
|
-
previous_commanded_position = (np.nan, np.nan)
|
|
211
|
-
|
|
212
|
-
for i, row in coordinates_df.iterrows():
|
|
213
|
-
print(f"Now correcting row {i+1:06}/{len_coordinates_ds:06}\r", end="")
|
|
214
|
-
|
|
215
|
-
# Extract timestamp, status, actual positions and commanded positions
|
|
216
|
-
timestamp = row['timestamp']
|
|
217
|
-
|
|
218
|
-
status_plane = row['GSRON_ENSEMBLE_STATUS_PLANE']
|
|
219
|
-
|
|
220
|
-
act_x, act_y = (row['GSRON_ENSEMBLE_ACT_POS_X'],
|
|
221
|
-
row['GSRON_ENSEMBLE_ACT_POS_Y'])
|
|
222
|
-
|
|
223
|
-
cmd_x, cmd_y = (row['GSRON_ENSEMBLE_CMD_POS_X'],
|
|
224
|
-
row['GSRON_ENSEMBLE_CMD_POS_Y'])
|
|
225
|
-
|
|
226
|
-
# Recompute and save commanded positions when gimbal stops moving
|
|
227
|
-
# Also compare commanded position vs. previous commanded position to prevent
|
|
228
|
-
# false positives
|
|
229
|
-
if (cmd_x, cmd_y) != previous_commanded_position and not status_plane & 0x1:
|
|
230
|
-
if is_moving is True:
|
|
231
|
-
is_moving = False
|
|
232
|
-
# Recompute and save commanded position
|
|
233
|
-
cmd_theta, cmd_phi = gimbal_rotations_to_fov_angles(cmd_x, cmd_y)
|
|
234
|
-
add_angles_row(angles_dict, timestamp, np.nan, np.nan, cmd_theta, cmd_phi)
|
|
235
|
-
previous_commanded_position = (cmd_x, cmd_y)
|
|
236
|
-
else:
|
|
237
|
-
is_moving = True
|
|
238
|
-
|
|
239
|
-
# Recompute and save actual positions for each row
|
|
240
|
-
act_theta, act_phi = gimbal_rotations_to_fov_angles(act_x, act_y)
|
|
241
|
-
add_angles_row(angles_dict, timestamp, act_theta, act_phi)
|
|
242
|
-
|
|
243
|
-
print("")
|
|
244
|
-
angles_df = pd.DataFrame(angles_dict)
|
|
245
|
-
angles_df.to_csv(fov_filename, index=False)
|
|
246
|
-
|
|
247
|
-
if plot:
|
|
248
|
-
angles_df.plot(x='timestamp', y=['FOV_ACT_THETA',
|
|
249
|
-
'FOV_CMD_THETA',
|
|
250
|
-
'FOV_ACT_PHI',
|
|
251
|
-
'FOV_CMD_PHI'], style=['-', 'o', '-', 'o'])
|
|
252
|
-
plt.show()
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
def main():
|
|
256
|
-
parser = argparse.ArgumentParser(description="CLI tool for correcting FOV "
|
|
257
|
-
"housekeeping - PLATO-INAF-PL-NCR-0013")
|
|
258
|
-
parser.add_argument('data_dir', type=str,
|
|
259
|
-
help='Full path to the directory in which the data resides. '
|
|
260
|
-
'This is the folder with sub-folders /obs and /daily, '
|
|
261
|
-
'in which the N-FEE HK files are stored. '
|
|
262
|
-
'Default is the content of the '
|
|
263
|
-
'PLATO_DATA_STORAGE_LOCATION environment variable.')
|
|
264
|
-
|
|
265
|
-
args = parser.parse_args()
|
|
266
|
-
|
|
267
|
-
correct_brigand_chimay(args.data_dir)
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
if __name__ == "__main__":
|
|
271
|
-
main()
|
|
272
|
-
|