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
scripts/check_hdf5_files.py
DELETED
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import glob
|
|
2
|
-
import logging
|
|
3
|
-
from pathlib import Path
|
|
4
|
-
from typing import Optional
|
|
5
|
-
from typing import Union
|
|
6
|
-
|
|
7
|
-
import click
|
|
8
|
-
import rich
|
|
9
|
-
from h5py import File
|
|
10
|
-
from rich.progress import track
|
|
11
|
-
|
|
12
|
-
from egse import h5
|
|
13
|
-
from egse.bits import beautify_binary
|
|
14
|
-
from egse.fee import n_fee_mode
|
|
15
|
-
from egse.fee.nfee import HousekeepingData
|
|
16
|
-
from egse.reg import RegisterMap
|
|
17
|
-
from egse.spw import SpaceWirePacket
|
|
18
|
-
|
|
19
|
-
MODULE_LOGGER = logging.getLogger("egse.check_hdf5_file")
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
def check_if_top_level_groups_complete(hdf5_file: File, indent: str) -> (str, bool):
|
|
23
|
-
|
|
24
|
-
msg = ""
|
|
25
|
-
error = False
|
|
26
|
-
|
|
27
|
-
# Check for internal or external sync
|
|
28
|
-
|
|
29
|
-
if "/register" in hdf5_file:
|
|
30
|
-
reg_data = h5.get_data(hdf5_file["/register"])
|
|
31
|
-
reg_map = RegisterMap("N-FEE", memory_map=reg_data)
|
|
32
|
-
sync_sel = reg_map["sync_sel"]
|
|
33
|
-
if sync_sel and ("/1" in hdf5_file or "/2" in hdf5_file or "/3" in hdf5_file):
|
|
34
|
-
msg += indent + (
|
|
35
|
-
"[bold red]ERROR[/]: internal sync contains more than one readout period\n")
|
|
36
|
-
error = True
|
|
37
|
-
if not sync_sel and (
|
|
38
|
-
missing := [idx for idx in range(4) if f"/{idx}" not in hdf5_file]
|
|
39
|
-
):
|
|
40
|
-
msg += indent + f"[bold red]ERROR[/]: missing readouts for external sync {missing}\n"
|
|
41
|
-
error = True
|
|
42
|
-
|
|
43
|
-
return msg, error
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
def check_hdf5_file(filename: Union[str, Path], requested_obsid: Union[int, str], error_flags_only=False, errors_only=False):
|
|
47
|
-
|
|
48
|
-
filename = Path(filename)
|
|
49
|
-
|
|
50
|
-
if filename.exists():
|
|
51
|
-
try:
|
|
52
|
-
|
|
53
|
-
with h5.get_file(filename, mode='r') as hdf5_file:
|
|
54
|
-
|
|
55
|
-
has_error = False
|
|
56
|
-
indent = " "
|
|
57
|
-
full_msg = f"Analysing {filename!s}\n"
|
|
58
|
-
full_msg += indent + f"Top level groups: {list(hdf5_file.keys())}\n"
|
|
59
|
-
error_msg = ""
|
|
60
|
-
obsid = ''
|
|
61
|
-
|
|
62
|
-
msg, error = check_if_top_level_groups_complete(hdf5_file, indent)
|
|
63
|
-
full_msg += msg
|
|
64
|
-
has_error = error or has_error
|
|
65
|
-
|
|
66
|
-
if "/obsid" in hdf5_file:
|
|
67
|
-
obsid = h5.get_data(hdf5_file["/obsid"]).item().decode()
|
|
68
|
-
if obsid == 'None':
|
|
69
|
-
full_msg += indent + "no observation running\n"
|
|
70
|
-
else:
|
|
71
|
-
full_msg += indent + f"OBSID = {obsid}\n"
|
|
72
|
-
|
|
73
|
-
if requested_obsid is not None and str(requested_obsid) not in obsid:
|
|
74
|
-
return
|
|
75
|
-
|
|
76
|
-
if "/0/timecode" in hdf5_file:
|
|
77
|
-
timecode = h5.get_data(hdf5_file["/0/timecode"])
|
|
78
|
-
timestamp = h5.get_attribute_value(hdf5_file["/0/timecode"], "timestamp")
|
|
79
|
-
full_msg += indent + f"{timecode=!s}, {timestamp=}\n"
|
|
80
|
-
|
|
81
|
-
if "/register" in hdf5_file:
|
|
82
|
-
reg_data = h5.get_data(hdf5_file["/register"])
|
|
83
|
-
reg_map = RegisterMap("N-FEE", memory_map=reg_data)
|
|
84
|
-
v_start = reg_map['v_start']
|
|
85
|
-
v_end = reg_map['v_end']
|
|
86
|
-
digitise_en = reg_map['digitise_en']
|
|
87
|
-
dg_en = reg_map['DG_en']
|
|
88
|
-
sync_sel = reg_map['sync_sel']
|
|
89
|
-
try:
|
|
90
|
-
mode = n_fee_mode(reg_map['ccd_mode_config']).name
|
|
91
|
-
except ValueError:
|
|
92
|
-
mode = f"[bold red]INVALID ({reg_map['ccd_mode_config']})[/]"
|
|
93
|
-
has_error = True
|
|
94
|
-
full_msg += indent + f"register: {v_start=}, {v_end=}, {digitise_en=}, {dg_en=}, {sync_sel=}, {mode=}\n"
|
|
95
|
-
else:
|
|
96
|
-
full_msg += indent + '[red]no register map in this HDF5 file[/red]\n'
|
|
97
|
-
has_error = True
|
|
98
|
-
|
|
99
|
-
if "/0/data" in hdf5_file and h5.has_attributes(hdf5_file['/0/data']):
|
|
100
|
-
v_start = h5.get_attribute_value(hdf5_file['/0/data'], "v_start")
|
|
101
|
-
v_end = h5.get_attribute_value(hdf5_file['/0/data'], "v_end")
|
|
102
|
-
full_msg += indent + f"data: {v_start=}, {v_end=}\n"
|
|
103
|
-
|
|
104
|
-
for count in range(4):
|
|
105
|
-
if f"/{count}/hk" in hdf5_file:
|
|
106
|
-
hk_packet = SpaceWirePacket.create_packet(hdf5_file[f"/{count}/hk"][...])
|
|
107
|
-
full_msg += indent + f"hk: {hk_packet.type} {beautify_binary(hk_packet.type.value)}\n"
|
|
108
|
-
error_flags = HousekeepingData(hk_packet.data)['error_flags']
|
|
109
|
-
if error_flags:
|
|
110
|
-
msg = indent + (
|
|
111
|
-
f"Frame {count}: [red]One or more of the error flags are ON: "
|
|
112
|
-
f"{beautify_binary(error_flags, group=4, size=12)}[/red]\n"
|
|
113
|
-
)
|
|
114
|
-
full_msg += msg
|
|
115
|
-
error_msg += msg
|
|
116
|
-
has_error = True
|
|
117
|
-
for count in range(4):
|
|
118
|
-
if f"/{count}/commands" in hdf5_file:
|
|
119
|
-
for idx in hdf5_file[f"/{count}/commands/"]:
|
|
120
|
-
full_msg += indent + f"command in frame {count}: {h5.get_data(hdf5_file[f'/{count}/commands/{idx}'])}\n"
|
|
121
|
-
|
|
122
|
-
if error_flags_only and error_msg:
|
|
123
|
-
rich.print(f"{filename.name=}, size={filename.stat().st_size}")
|
|
124
|
-
rich.print(error_msg)
|
|
125
|
-
if not error_flags_only:
|
|
126
|
-
if errors_only and has_error:
|
|
127
|
-
rich.print(full_msg)
|
|
128
|
-
if not errors_only:
|
|
129
|
-
rich.print(full_msg)
|
|
130
|
-
|
|
131
|
-
except OSError as exc:
|
|
132
|
-
rich.print(f"{filename=!s}, {exc}")
|
|
133
|
-
else:
|
|
134
|
-
rich.print(f"no such file {filename!s}")
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
def find_hdf5_for_obsid(files: list, requested_obsid: Union[int, str]):
|
|
138
|
-
new_files = []
|
|
139
|
-
|
|
140
|
-
for filename in sorted(files):
|
|
141
|
-
try:
|
|
142
|
-
with h5.get_file(filename, mode='r') as hdf5_file:
|
|
143
|
-
if "/obsid" in hdf5_file:
|
|
144
|
-
obsid = h5.get_data(hdf5_file["/obsid"]).item().decode()
|
|
145
|
-
|
|
146
|
-
if str(requested_obsid) in obsid:
|
|
147
|
-
new_files.append(filename)
|
|
148
|
-
except OSError as exc:
|
|
149
|
-
MODULE_LOGGER.error(f"Couldn't open {filename} ({exc=})")
|
|
150
|
-
return new_files
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
@click.command()
|
|
154
|
-
@click.argument('root')
|
|
155
|
-
@click.argument('filename_t')
|
|
156
|
-
@click.option("--obsid", help="The full OBSID, e.g. SRON_00058_02380 or only the TEST-ID, e.g. 2380")
|
|
157
|
-
@click.option("--error-flags-only", is_flag=True, help="Print only the filename and error information")
|
|
158
|
-
@click.option("--errors-only", is_flag=True, help="Print only the filename and error information")
|
|
159
|
-
def cli(obsid, error_flags_only, errors_only, root, filename_t):
|
|
160
|
-
"""Script to inspect the HDF5 files generated by the DPU Processor.
|
|
161
|
-
|
|
162
|
-
* ROOT - the root folder that contains the HDF5 files to be checked
|
|
163
|
-
|
|
164
|
-
* FILENAME_T - a file name template accepted by glob()
|
|
165
|
-
"""
|
|
166
|
-
root = Path(root)
|
|
167
|
-
|
|
168
|
-
files = glob.glob(str(root / filename_t))
|
|
169
|
-
if obsid is not None:
|
|
170
|
-
files = find_hdf5_for_obsid(files, obsid)
|
|
171
|
-
n_files = len(files)
|
|
172
|
-
|
|
173
|
-
rich.print(f"Number of files: {n_files}")
|
|
174
|
-
|
|
175
|
-
print(" ".join([Path(file).name for file in files]))
|
|
176
|
-
|
|
177
|
-
answer = input("So, you want to continue [Y/n]")
|
|
178
|
-
print(answer)
|
|
179
|
-
if answer.lower() in ['n', 'no']:
|
|
180
|
-
return
|
|
181
|
-
|
|
182
|
-
for filename in track(sorted(files), description=f"Checking {n_files} files"):
|
|
183
|
-
# for filename in sorted(files):
|
|
184
|
-
try:
|
|
185
|
-
check_hdf5_file(filename, obsid, error_flags_only, errors_only)
|
|
186
|
-
except Exception as exc:
|
|
187
|
-
rich.print(f"[red]ERROR[/]: {Path(filename).name}: {exc!s}")
|
|
188
|
-
MODULE_LOGGER.debug(f"{exc!s}", exc_info=True)
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
if __name__ == "__main__":
|
|
192
|
-
cli()
|
scripts/check_register_sync.py
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module contains commands and strategies to test the synchronisation of the Register Map
|
|
3
|
-
between the DPU Processor and the N-FEE.
|
|
4
|
-
|
|
5
|
-
The reason for this test is that the DPU Processor seems to be out of sync with the N-FEE at some
|
|
6
|
-
points in time:
|
|
7
|
-
|
|
8
|
-
* When the N-FEE is power-cycled and the DPU CS is not restarted, the register map is not
|
|
9
|
-
refreshed from the newly pwoered N-FEE
|
|
10
|
-
|
|
11
|
-
* ...
|
|
12
|
-
|
|
13
|
-
The DPU CS has a few commands available to fix this:
|
|
14
|
-
|
|
15
|
-
* dpu.n_fee_sync_register_map() — reads the register map from the N-FEE, updates the DPU internal
|
|
16
|
-
register map and returns the register map.
|
|
17
|
-
|
|
18
|
-
* dpu.reset() — sets a special register in the N-FEE ccd_mode_config which commands the N-FEE to
|
|
19
|
-
resets its register map to its default state.
|
|
20
|
-
|
|
21
|
-
"""
|
|
22
|
-
|
|
23
|
-
from egse.dpu import DPUProxy
|
|
24
|
-
from egse.reg import compare_register_maps
|
|
25
|
-
|
|
26
|
-
dpu_proxy = DPUProxy()
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
reg_1 = dpu_proxy.n_fee_sync_register_map()
|
|
30
|
-
|
|
31
|
-
# Put the N-FEE in DUMP mode
|
|
32
|
-
|
|
33
|
-
dpu_proxy.n_fee_set_dump_mode(
|
|
34
|
-
dict(v_start=0, v_end=2000, ccd_readout_order=0b11111111, n_final_dump=4510))
|
|
35
|
-
|
|
36
|
-
reg_2 = dpu_proxy.n_fee_sync_register_map()
|
|
37
|
-
|
|
38
|
-
# Put the N-FEE back into its default mode (same as after a power cycle?)
|
|
39
|
-
|
|
40
|
-
dpu_proxy.n_fee_reset()
|
|
41
|
-
|
|
42
|
-
reg_3 = dpu_proxy.n_fee_sync_register_map()
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
compare_register_maps(reg_1, reg_2)
|
|
46
|
-
compare_register_maps(reg_2, reg_3)
|
|
47
|
-
compare_register_maps(reg_1, reg_3)
|
scripts/check_tcs_calib_coef.py
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
from egse.setup import load_setup
|
|
2
|
-
import numpy as np
|
|
3
|
-
import matplotlib.pyplot as plt
|
|
4
|
-
|
|
5
|
-
def check_calib_coef(setup_id: int):
|
|
6
|
-
setup = load_setup(setup_id)
|
|
7
|
-
print(f"\nThis script checks that TOU RTD calibration coefficients provided by Alter are identical than coefficients"
|
|
8
|
-
f" set in Setup file for camera {setup.camera.ID} {setup.camera.serial_number}.\n")
|
|
9
|
-
print('Setup ID loaded: ', setup.get_id())
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
print("\n\nFirst, we check that serial numbers of TOU RTD set in the setup file match with ABCL.\n")
|
|
13
|
-
sensors = setup.gse.tcs.calibration.sensors
|
|
14
|
-
rtd_serial_numbers_in_setup = dict()
|
|
15
|
-
for tou_rtd in sensors:
|
|
16
|
-
rtd_serial_numbers_in_setup[sensors[tou_rtd].conversion] = sensors[tou_rtd].serial_number
|
|
17
|
-
rtd_serial_numbers_in_abcl = dict()
|
|
18
|
-
for frtd in rtd_serial_numbers_in_setup:
|
|
19
|
-
rtd_serial_numbers_in_abcl[frtd] = input(f"Serial name of TOU {frtd} (TRP-1#{frtd[-1]}) in ABCL: ")
|
|
20
|
-
|
|
21
|
-
err = 0
|
|
22
|
-
for frtd in rtd_serial_numbers_in_setup:
|
|
23
|
-
if rtd_serial_numbers_in_setup[frtd] != rtd_serial_numbers_in_abcl[frtd]:
|
|
24
|
-
print(f"\nERROR in S/N of {frtd}.\n"
|
|
25
|
-
f"In Setup file: {rtd_serial_numbers_in_setup[frtd]}\n"
|
|
26
|
-
f"In ABCL: {rtd_serial_numbers_in_abcl[frtd]}")
|
|
27
|
-
err += 1
|
|
28
|
-
if err == 0:
|
|
29
|
-
print("\nAll S/N of TOU RTD match: OK")
|
|
30
|
-
else:
|
|
31
|
-
print("\nSome S/N are not identical between Setup file and ABCL. See above for detail.")
|
|
32
|
-
return
|
|
33
|
-
|
|
34
|
-
print("\n\nNow we check that TOU RTD calibration coefficients set in the Setup file match with Alter file.")
|
|
35
|
-
print("Use doucment 'PLATO THERMISTORS CALIBRATION TEST REPORT' (Eclipse ref: 2022013099).\nCopy the entire line of"
|
|
36
|
-
" the three polynomial equations.\n"
|
|
37
|
-
"For instance: 'T = -1.636680380E-11R 5 + 5.537426295E-08xR 4 - 7.472300219E-05R 3 + 5.028427373E-02R 2 -"
|
|
38
|
-
"1.663264016E+01R + 2.013507126E+03'\n")
|
|
39
|
-
|
|
40
|
-
rtd_calib_coef_in_setup = dict(setup.gse.tcs.calibration.conversion)
|
|
41
|
-
rtd_calib_coef_in_alter = dict()
|
|
42
|
-
for frtd in rtd_serial_numbers_in_setup:
|
|
43
|
-
list_coef = input(f"Polynomial equation of {frtd} with S/N {rtd_serial_numbers_in_setup[frtd]}: ").strip()
|
|
44
|
-
while list_coef[-1] not in [str(i) for i in range(10)]:
|
|
45
|
-
list_coef = list_coef[:-1]
|
|
46
|
-
list_coef = list_coef.replace(' ', '').replace('T', '').replace('=', '').replace('x', '').replace('X', '').split('R')
|
|
47
|
-
for i in range(1,5):
|
|
48
|
-
list_coef[i] = list_coef[i][1:]
|
|
49
|
-
for i in range(6):
|
|
50
|
-
list_coef[i] = float(list_coef[i])
|
|
51
|
-
rtd_calib_coef_in_alter[frtd] = list_coef
|
|
52
|
-
|
|
53
|
-
err = 0
|
|
54
|
-
for frtd in rtd_calib_coef_in_setup:
|
|
55
|
-
for i in range(6):
|
|
56
|
-
if rtd_calib_coef_in_setup[frtd][i] != rtd_calib_coef_in_alter[frtd][i]:
|
|
57
|
-
print(f"\nERROR in {frtd} ({rtd_serial_numbers_in_setup[frtd]}) for coefficient of R{5 - i}.\n"
|
|
58
|
-
f"In Setup file: {rtd_calib_coef_in_setup[frtd][i]}\n"
|
|
59
|
-
f"In Alter file: {rtd_calib_coef_in_alter[frtd][i]}")
|
|
60
|
-
err += 1
|
|
61
|
-
|
|
62
|
-
if err == 0:
|
|
63
|
-
print("\nAll coefficients are identical in Setup file and Alter file: OK")
|
|
64
|
-
else:
|
|
65
|
-
print(f"\n{err} errors detected in calibration coefficients between Setup file and Alter file. "
|
|
66
|
-
f"See above for detail.")
|
|
67
|
-
return
|
|
68
|
-
|
|
69
|
-
print("\n\nNow we plot the three relations T(R) defined by the polynomial equations.")
|
|
70
|
-
|
|
71
|
-
R = np.arange(520, 1020.5, 0.5)
|
|
72
|
-
for frtd in rtd_calib_coef_in_setup:
|
|
73
|
-
list_coef = np.array(rtd_calib_coef_in_setup[frtd])
|
|
74
|
-
T = np.zeros(np.shape(R))
|
|
75
|
-
for i in range(6):
|
|
76
|
-
T += list_coef[i] * R**(5-i)
|
|
77
|
-
plt.plot(R, T, label=frtd)
|
|
78
|
-
plt.plot(R, -110*np.ones(np.shape(R)), '--r', linewidth=2)
|
|
79
|
-
plt.plot(R, -65*np.ones(np.shape(R)), '--r', linewidth=2)
|
|
80
|
-
plt.legend(loc='best')
|
|
81
|
-
plt.text(min(R), -109, "-110°C", color='red', fontsize=12)
|
|
82
|
-
plt.text(min(R), -64, "-65°C", color='red', fontsize=12)
|
|
83
|
-
plt.title("Thermal calibration curves for TCS using coefficients for cold temperature (below -65°C)")
|
|
84
|
-
plt.xlabel("Resistance (Ohm)")
|
|
85
|
-
plt.ylabel("Temperature (°C)")
|
|
86
|
-
plt.grid()
|
|
87
|
-
plt.show()
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
check_calib_coef(int(input("Setup file ID to be loaded: ")))
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
import shutil
|
|
3
|
-
from datetime import datetime
|
|
4
|
-
from pathlib import PosixPath
|
|
5
|
-
|
|
6
|
-
from egse.config import find_file
|
|
7
|
-
from egse.fee.n_fee_hk import counts_to_temperature, ORIGIN
|
|
8
|
-
from egse.obsid import obsid_from_storage
|
|
9
|
-
from egse.setup import NavigableDict
|
|
10
|
-
import pandas as pd
|
|
11
|
-
from pandas.core.frame import DataFrame
|
|
12
|
-
from dateutil.rrule import rrule, DAILY
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
def correct_obsid_range(first_obsid: int, last_obsid: int, sensor_info: NavigableDict, camera_name: str, data_dir: str,
|
|
16
|
-
site_id: str):
|
|
17
|
-
""" Correct the CCD temperature calibration in the cold in the N-FEE HK file for the given obsid range.
|
|
18
|
-
|
|
19
|
-
This function does the following:
|
|
20
|
-
|
|
21
|
-
* Make a copy of the original N-FEE HK files (incl. "old" in the filename)
|
|
22
|
-
* In the original files: Apply the correct CCD temperature calibration in the columns for the calibrated CCD
|
|
23
|
-
temperatures (in the cold)
|
|
24
|
-
|
|
25
|
-
Args:
|
|
26
|
-
- first_obsid: First obsid.
|
|
27
|
-
- last_obsid: Last obsid.
|
|
28
|
-
- sensor_info: Calibration information for the CCD_PT1000 sensor type.
|
|
29
|
-
- data_dir: Full path to the directory in which the data resides. This is the folder with sub-folders /obs and
|
|
30
|
-
/daily, in which the N-FEE HK files are stored.
|
|
31
|
-
- site_id: Site ID.
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
for obsid in range(first_obsid, last_obsid + 1):
|
|
35
|
-
correct_obsid(obsid, sensor_info, camera_name, data_dir, site_id)
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
def correct_obsid(obsid: int, sensor_info: NavigableDict, camera_name: str, data_dir: str, site_id: str):
|
|
39
|
-
""" Correct the CCD temperature calibration in the cold in the N-FEE HK file for the given obsid.
|
|
40
|
-
|
|
41
|
-
This function does the following:
|
|
42
|
-
|
|
43
|
-
* Make a copy of the original file (incl. "old" in the filename)
|
|
44
|
-
* In the original files: Apply the correct CCD temperature calibration in the columns for the calibrated CCD
|
|
45
|
-
temperatures (in the cold)
|
|
46
|
-
|
|
47
|
-
Args:
|
|
48
|
-
- obsid: Observation identifier.
|
|
49
|
-
- sensor_info: Calibration information for the CCD_PT1000 sensor type.
|
|
50
|
-
- data_dir: Full path to the directory in which the data resides. This is the folder with sub-folders /obs and
|
|
51
|
-
/daily, in which the N-FEE HK files are stored.
|
|
52
|
-
- site_id: Site ID.
|
|
53
|
-
"""
|
|
54
|
-
|
|
55
|
-
stored_obsid = obsid_from_storage(obsid, data_dir=data_dir, site_id=site_id, camera_name=camera_name)
|
|
56
|
-
pattern = f"{stored_obsid}_{ORIGIN}_*.csv"
|
|
57
|
-
nfee_hk_filename = find_file(pattern, root=f"{data_dir}/obs/{stored_obsid}") # PosixPath
|
|
58
|
-
|
|
59
|
-
if nfee_hk_filename is None:
|
|
60
|
-
print(f"No N-FEE HK available for obsid {stored_obsid}")
|
|
61
|
-
return
|
|
62
|
-
|
|
63
|
-
correct_file(str(nfee_hk_filename), sensor_info)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
def correct_od_range(first_od: int, last_od: int, sensor_info: NavigableDict, data_dir: str, site_id: str):
|
|
67
|
-
""" Correct the CCD temperature calibration in the cold in the N-FEE HK file for the given OD range.
|
|
68
|
-
|
|
69
|
-
This function does the following:
|
|
70
|
-
|
|
71
|
-
* Make a copy of the original N-FEE HK files (incl. "old" in the filename)
|
|
72
|
-
* In the original files: Apply the correct CCD temperature calibration in the columns for the calibrated CCD
|
|
73
|
-
temperatures (in the cold)
|
|
74
|
-
|
|
75
|
-
Args:
|
|
76
|
-
- first_od: First observing day [yyyymmdd].
|
|
77
|
-
- last_od: Last observing day [yyyymmdd].
|
|
78
|
-
- sensor_info: Calibration information for the CCD_PT1000 sensor type.
|
|
79
|
-
- data_dir: Full path to the directory in which the data resides. This is the folder with sub-folders /obs and
|
|
80
|
-
/daily, in which the N-FEE HK files are stored.
|
|
81
|
-
- site_id: Site ID.
|
|
82
|
-
"""
|
|
83
|
-
|
|
84
|
-
start = datetime.strptime(str(first_od), "%Y%m%d")
|
|
85
|
-
end = datetime.strptime(str(last_od), "%Y%m%d")
|
|
86
|
-
|
|
87
|
-
for dt in rrule(DAILY, dtstart=start, until=end):
|
|
88
|
-
correct_od(dt.strftime("%Y%m%d"), sensor_info, data_dir, site_id)
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
def correct_od(od: int, sensor_info: NavigableDict, data_dir: str, site_id: str):
|
|
92
|
-
""" Correct the CCD temperature calibration in the cold in the N-FEE HK file for the given OD.
|
|
93
|
-
|
|
94
|
-
This function does the following:
|
|
95
|
-
|
|
96
|
-
* Make a copy of the original N-FEE HK file (incl. "old" in the filename)
|
|
97
|
-
* In the original files: Apply the correct CCD temperature calibration in the columns for the calibrated CCD
|
|
98
|
-
temperatures (in the cold)
|
|
99
|
-
|
|
100
|
-
Args:
|
|
101
|
-
- od: Observing day [yyyymmdd].
|
|
102
|
-
- sensor_info: Calibration information for the CCD_PT1000 sensor type.
|
|
103
|
-
- data_dir: Full path to the directory in which the data resides. This is the folder with sub-folders /obs and
|
|
104
|
-
/daily, in which the N-FEE HK files are stored.
|
|
105
|
-
- site_id: Site ID.
|
|
106
|
-
"""
|
|
107
|
-
|
|
108
|
-
pattern = f"{od}_{site_id}_{ORIGIN}.csv"
|
|
109
|
-
nfee_hk_filename = find_file(pattern, root=f"{data_dir}/daily/{od}") # PosixPath
|
|
110
|
-
|
|
111
|
-
if nfee_hk_filename is None:
|
|
112
|
-
print(f"No N-FEE HK available for OD {od}")
|
|
113
|
-
return
|
|
114
|
-
|
|
115
|
-
correct_file(str(nfee_hk_filename), sensor_info)
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
def correct_file(filename: PosixPath, sensor_info: NavigableDict):
|
|
119
|
-
""" Correct the CCD temperature calibration in the cold in the N-FEE HK file with the given filename.
|
|
120
|
-
|
|
121
|
-
This function does the following:
|
|
122
|
-
|
|
123
|
-
* Make a copy of the original file (incl. "old" in the filename)
|
|
124
|
-
* In the original files: Apply the correct CCD temperature calibration in the columns for the calibrated CCD
|
|
125
|
-
temperatures (in the cold)
|
|
126
|
-
|
|
127
|
-
Args:
|
|
128
|
-
- filename: Filename of the original N-FEE HK file that needs to be corrected.
|
|
129
|
-
- sensor_info: Calibration information for the CCD_PT1000 sensor type.
|
|
130
|
-
"""
|
|
131
|
-
|
|
132
|
-
filename = str(filename)
|
|
133
|
-
|
|
134
|
-
# Make a copy of the original file (incl. "old" in the filename) in the same folder
|
|
135
|
-
|
|
136
|
-
copy_filename = f"{filename.split('.')[0]}_old.csv"
|
|
137
|
-
if not os.path.isfile(copy_filename):
|
|
138
|
-
shutil.copyfile(filename, copy_filename)
|
|
139
|
-
|
|
140
|
-
dataframe: DataFrame = pd.read_csv(filename)
|
|
141
|
-
|
|
142
|
-
# Correct the calibration
|
|
143
|
-
|
|
144
|
-
for ccd_number in range(1, 5):
|
|
145
|
-
print(ccd_number)
|
|
146
|
-
|
|
147
|
-
name_cal = f"NFEE_T_CCD{ccd_number}"
|
|
148
|
-
name_raw = name_cal + "_RAW"
|
|
149
|
-
|
|
150
|
-
raw_values = dataframe[name_raw].values
|
|
151
|
-
calibrated_values = [counts_to_temperature(name_raw, raw_value, sensor_info[name_cal])
|
|
152
|
-
for raw_value in raw_values]
|
|
153
|
-
dataframe[name_cal] = calibrated_values
|
|
154
|
-
|
|
155
|
-
# Update the changes in the original file (not in the copy that was created at the beginning)
|
|
156
|
-
|
|
157
|
-
dataframe.to_csv(filename)
|