cgse 2023.38.0__py3-none-any.whl → 2024.1.3__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 +77 -0
- cgse-2024.1.3.dist-info/METADATA +41 -0
- cgse-2024.1.3.dist-info/RECORD +5 -0
- {cgse-2023.38.0.dist-info → cgse-2024.1.3.dist-info}/WHEEL +1 -2
- cgse-2023.38.0.dist-info/COPYING +0 -674
- cgse-2023.38.0.dist-info/COPYING.LESSER +0 -165
- cgse-2023.38.0.dist-info/METADATA +0 -144
- cgse-2023.38.0.dist-info/RECORD +0 -649
- cgse-2023.38.0.dist-info/entry_points.txt +0 -75
- cgse-2023.38.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5235
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -626
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -912
- 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 -234
- egse/alert/alertman_ui.py +0 -603
- 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 -130
- egse/alert/gsm/beaglebone_protocol.py +0 -48
- 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 -129
- 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 -1015
- egse/confman/confman.yaml +0 -67
- egse/confman/confman_cs.py +0 -239
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -442
- egse/coordinates/__init__.py +0 -531
- egse/coordinates/avoidance.py +0 -103
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -120
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -195
- 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 -1247
- 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 -415
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2681
- egse/dpu/ccd_ui.py +0 -508
- egse/dpu/dpu.py +0 -786
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -668
- egse/dpu/fitsgen.py +0 -2077
- egse/dpu/fitsgen_test.py +0 -752
- 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/constants.py +0 -220
- egse/dsi/esl.py +0 -870
- egse/dsi/rmap.py +0 -1042
- egse/dsi/rmapci.py +0 -37
- egse/dsi/spw.py +0 -154
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -258
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -28
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -51
- egse/fdir/fdir_manager_controller.py +0 -228
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -25
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -37
- egse/fdir/fdir_remote_controller.py +0 -50
- egse/fdir/fdir_remote_cs.py +0 -97
- egse/fdir/fdir_remote_interface.py +0 -14
- egse/fdir/fdir_remote_popup.py +0 -31
- egse/fee/__init__.py +0 -114
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/fee.py +0 -631
- egse/fee/feesim.py +0 -750
- egse/fee/n_fee_hk.py +0 -761
- egse/fee/nfee.py +0 -187
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -24
- egse/filterwheel/eksma/fw8smc4.py +0 -661
- 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 -81
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -111
- 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 -1068
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -712
- egse/fov/fov_ui.py +0 -861
- 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 -135
- 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 -1281
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -588
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- 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 -138
- 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 -196
- egse/hexapod/symetrie/puna_protocol.py +0 -131
- egse/hexapod/symetrie/puna_ui.py +0 -434
- 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 -415
- egse/hexapod/symetrie/zonda_protocol.py +0 -119
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -765
- 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 -69
- 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/macOS/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/macOS/EtherSpaceLink_v34_86.dylib +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 -73
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -98
- 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 -163
- 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 -811
- 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 -603
- egse/proxy.py +0 -522
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -675
- egse/resource.py +0 -333
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -212
- egse/services.yaml +0 -51
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1180
- 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 -69
- 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 -1479
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -247
- 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 -193
- egse/stages/arun/smd3.py +0 -111
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -472
- 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 -904
- 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 -111
- 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 -1004
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -72
- egse/storage/storage_cs.py +0 -214
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -412
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1408
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -874
- 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 -177
- 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 -116
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -99
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -117
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -101
- egse/tempcontrol/beaglebone/beaglebone.py +0 -342
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -135
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -681
- egse/tempcontrol/digalox/digalox.py +0 -107
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -112
- egse/tempcontrol/digalox/digalox_protocol.py +0 -55
- 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 -78
- 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 -73
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -389
- 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 -727
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -875
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -118
- egse/tempcontrol/srs/ptc10_protocol.py +0 -42
- 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 -164
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -193
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -92
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -128
- 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 -102
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -83
- 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 -316
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -704
- 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 -39
- egse/vacuum/pfeiffer/tc400.py +0 -113
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -140
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -24
- egse/vacuum/pfeiffer/tpg261.py +0 -81
- 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 -60
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -24
- 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 -44
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/create_hdf5_report.py +0 -295
- scripts/csl_model.py +0 -436
- scripts/csl_restore_setup.py +0 -230
- scripts/export-grafana-dashboards.py +0 -50
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -59
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -11
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -64
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -61
- 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/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/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/tm_gen/tm_gen_agilent.py +0 -38
- 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/create_hdf5_report.py
DELETED
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
#! /usr/bin/env python3
|
|
2
|
-
|
|
3
|
-
import glob
|
|
4
|
-
import logging
|
|
5
|
-
import os
|
|
6
|
-
from datetime import datetime
|
|
7
|
-
from enum import IntEnum
|
|
8
|
-
from pathlib import Path
|
|
9
|
-
from typing import List
|
|
10
|
-
|
|
11
|
-
import click
|
|
12
|
-
import pandas as pd
|
|
13
|
-
from pandas import DataFrame
|
|
14
|
-
from rich import print
|
|
15
|
-
from rich.console import Console
|
|
16
|
-
from rich.progress import track
|
|
17
|
-
from rich.table import Table
|
|
18
|
-
|
|
19
|
-
from egse import h5
|
|
20
|
-
from egse.setup import load_setup
|
|
21
|
-
from egse.bits import beautify_binary
|
|
22
|
-
from egse.fee import convert_ccd_order_value
|
|
23
|
-
from egse.fee import n_fee_mode
|
|
24
|
-
from egse.fee.nfee import HousekeepingData
|
|
25
|
-
from egse.reg import RegisterMap
|
|
26
|
-
from egse.spw import SpaceWirePacket
|
|
27
|
-
from egse.storage.persistence import CSV2
|
|
28
|
-
|
|
29
|
-
MODULE_LOGGER = logging.getLogger("egse.create_hdf5_report")
|
|
30
|
-
|
|
31
|
-
df_awg2: DataFrame
|
|
32
|
-
"""Holds the AEU AWG2 HK data to determine external sync period."""
|
|
33
|
-
|
|
34
|
-
sync_mode = {0: 'ext', 1: 'int'}
|
|
35
|
-
"""Decodes N-FEE internal or external sync mode."""
|
|
36
|
-
|
|
37
|
-
reg_map = RegisterMap("N-FEE")
|
|
38
|
-
"""Holds the register map of the N-FEE."""
|
|
39
|
-
|
|
40
|
-
setup = load_setup()
|
|
41
|
-
sensor_sel = setup.camera.fee.sensor_sel.enum
|
|
42
|
-
"""Decodes N-FEE E-side and F-side information."""
|
|
43
|
-
|
|
44
|
-
def load_aeu_awg2_data(location: Path):
|
|
45
|
-
try:
|
|
46
|
-
awg_fn = glob.glob(str(location / '*_AEU-AWG2.csv'))[0]
|
|
47
|
-
except IndexError as exc:
|
|
48
|
-
raise FileNotFoundError(
|
|
49
|
-
"The AEU AWG2 CSV file is not found, cannot determine correct external sync period."
|
|
50
|
-
) from exc
|
|
51
|
-
|
|
52
|
-
print(f"Loading {awg_fn}...")
|
|
53
|
-
converters = {
|
|
54
|
-
"timestamp": lambda x: datetime.strptime(x, "%Y-%m-%dT%H:%M:%S.%f+0000"),
|
|
55
|
-
}
|
|
56
|
-
return pd.read_csv(location / awg_fn, index_col="timestamp", converters=converters)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
def get_external_sync_period(timestamp: str):
|
|
60
|
-
if timestamp == 'N/A':
|
|
61
|
-
return float('nan')
|
|
62
|
-
dt = datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%f+0000")
|
|
63
|
-
try:
|
|
64
|
-
idx = df_awg2.index.get_loc(dt, method="nearest")
|
|
65
|
-
except AttributeError:
|
|
66
|
-
return 0.0
|
|
67
|
-
return df_awg2.iloc[idx]['GAEU_EXT_CYCLE_TIME']
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
def extract_register_values(filename: Path):
|
|
71
|
-
with h5.get_file(filename, mode='r', locking=False) as hdf5_file:
|
|
72
|
-
|
|
73
|
-
if "/obsid" in hdf5_file:
|
|
74
|
-
obsid = h5.get_data(hdf5_file["/obsid"]).item().decode()
|
|
75
|
-
else:
|
|
76
|
-
obsid = ''
|
|
77
|
-
|
|
78
|
-
if "/0/timecode" in hdf5_file:
|
|
79
|
-
timecode = h5.get_data(hdf5_file["/0/timecode"])
|
|
80
|
-
timestamp = h5.get_attribute_value(hdf5_file["/0/timecode"], "timestamp")
|
|
81
|
-
else:
|
|
82
|
-
timestamp = 'N/A'
|
|
83
|
-
|
|
84
|
-
if "/register" not in hdf5_file:
|
|
85
|
-
raise RuntimeError(f'no register map in this HDF5 file ({filename.name})')
|
|
86
|
-
|
|
87
|
-
reg_data = h5.get_data(hdf5_file["/register"])
|
|
88
|
-
reg_map.set_data(0x0000_0000, bytearray(reg_data.tobytes()), 0x800)
|
|
89
|
-
v_start = reg_map['v_start']
|
|
90
|
-
v_end = reg_map['v_end']
|
|
91
|
-
digitise_en = reg_map['digitise_en']
|
|
92
|
-
dg_en = reg_map['DG_en']
|
|
93
|
-
n_final_dump = reg_map['n_final_dump']
|
|
94
|
-
sync_sel = sync_mode[reg_map['sync_sel']]
|
|
95
|
-
if sync_sel == 'ext':
|
|
96
|
-
sync_period = get_external_sync_period(timestamp)
|
|
97
|
-
n_frames = 4
|
|
98
|
-
else:
|
|
99
|
-
sync_period = reg_map['int_sync_period'] / 1000.0
|
|
100
|
-
n_frames = 1
|
|
101
|
-
sensor = sensor_sel(reg_map['sensor_sel']).name
|
|
102
|
-
ccd_readout_order = convert_ccd_order_value(reg_map['ccd_readout_order'])
|
|
103
|
-
|
|
104
|
-
charge_injection_en = reg_map['charge_injection_en'] or ''
|
|
105
|
-
charge_inject_width = reg_map['charge_injection_width'] if charge_injection_en else ''
|
|
106
|
-
charge_inject_gap = reg_map['charge_injection_gap'] if charge_injection_en else ''
|
|
107
|
-
|
|
108
|
-
ccd_vgd_config_19 = reg_map[('reg_19_config', 'ccd_vgd_config')]
|
|
109
|
-
ccd_vgd_config_20 = reg_map[('reg_20_config', 'ccd_vgd_config')]
|
|
110
|
-
ccd_vgd_config = (ccd_vgd_config_20 << 4) + ccd_vgd_config_19
|
|
111
|
-
|
|
112
|
-
try:
|
|
113
|
-
mode = n_fee_mode(reg_map['ccd_mode_config']).name
|
|
114
|
-
except ValueError:
|
|
115
|
-
mode = f"[bold red]INVALID ({reg_map['ccd_mode_config']})[/]"
|
|
116
|
-
|
|
117
|
-
has_error_flags = ''
|
|
118
|
-
all_error_flags_value = [0, 0, 0, 0]
|
|
119
|
-
all_error_flags_str = [" "*5, " "*5, " "*5, " "*5]
|
|
120
|
-
|
|
121
|
-
for count in range(n_frames):
|
|
122
|
-
if f"/{count}/hk_data" in hdf5_file:
|
|
123
|
-
hk_data = hdf5_file[f"/{count}/hk_data"][...]
|
|
124
|
-
elif f"/{count}/hk" in hdf5_file:
|
|
125
|
-
hk_packet = SpaceWirePacket.create_packet(hdf5_file[f"/{count}/hk"][...])
|
|
126
|
-
hk_data = hk_packet.data
|
|
127
|
-
else:
|
|
128
|
-
continue
|
|
129
|
-
if error_flags := HousekeepingData(hk_data)['error_flags']:
|
|
130
|
-
all_error_flags_value[count] = error_flags
|
|
131
|
-
# error_flags = beautify_binary(error_flags, group=4, size=12)
|
|
132
|
-
error_flags = f"0x{error_flags:03X}"
|
|
133
|
-
all_error_flags_str[count] = error_flags
|
|
134
|
-
has_error_flags = 'x'
|
|
135
|
-
|
|
136
|
-
# Since Rich Table cannot render a List, convert it to a string
|
|
137
|
-
all_error_flags_str = ", ".join(all_error_flags_str) if has_error_flags else ''
|
|
138
|
-
|
|
139
|
-
return (
|
|
140
|
-
obsid,
|
|
141
|
-
timestamp[:19],
|
|
142
|
-
filename.name,
|
|
143
|
-
str(v_start),
|
|
144
|
-
str(v_end),
|
|
145
|
-
str(n_final_dump),
|
|
146
|
-
str(digitise_en),
|
|
147
|
-
str(dg_en),
|
|
148
|
-
sync_sel,
|
|
149
|
-
f"{sync_period:.3f}",
|
|
150
|
-
mode,
|
|
151
|
-
sensor,
|
|
152
|
-
str(ccd_readout_order),
|
|
153
|
-
str(charge_injection_en),
|
|
154
|
-
str(charge_inject_width),
|
|
155
|
-
str(charge_inject_gap),
|
|
156
|
-
hex(ccd_vgd_config),
|
|
157
|
-
str(all_error_flags_value),
|
|
158
|
-
all_error_flags_str,
|
|
159
|
-
has_error_flags,
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
@click.command()
|
|
164
|
-
@click.argument('location')
|
|
165
|
-
@click.option('--output-file', '-o', help="full path name for the report file")
|
|
166
|
-
@click.option('--csv-format', is_flag=True, help="output format in CVS instead of TXT")
|
|
167
|
-
def cli(location, output_file, csv_format):
|
|
168
|
-
"""
|
|
169
|
-
Script to extract parameter values from the register map in the HDF5 files that are
|
|
170
|
-
generated by the DPU Processor.
|
|
171
|
-
|
|
172
|
-
* location - the folder that contains the HDF5 files to be checked
|
|
173
|
-
|
|
174
|
-
"""
|
|
175
|
-
global df_awg2
|
|
176
|
-
|
|
177
|
-
location = Path(location)
|
|
178
|
-
output_file = output_file or ("report.csv" if csv_format else "report.txt")
|
|
179
|
-
|
|
180
|
-
files = glob.glob(str(location / '*_SPW_*.hdf5'))
|
|
181
|
-
n_files = len(files)
|
|
182
|
-
|
|
183
|
-
# Read the AEU AWG2 data file to determine the external sync period
|
|
184
|
-
|
|
185
|
-
try:
|
|
186
|
-
df_awg2 = load_aeu_awg2_data(location)
|
|
187
|
-
except FileNotFoundError:
|
|
188
|
-
df_awg2 = None
|
|
189
|
-
|
|
190
|
-
# Extract all the parameters from the HDF5 register map
|
|
191
|
-
|
|
192
|
-
data = []
|
|
193
|
-
errors = []
|
|
194
|
-
|
|
195
|
-
print(f"Number of files: {n_files}")
|
|
196
|
-
|
|
197
|
-
for filename in track(sorted(files), description=f"Extracting register from {n_files} files"):
|
|
198
|
-
# for filename in sorted(files):
|
|
199
|
-
try:
|
|
200
|
-
row = extract_register_values(Path(filename))
|
|
201
|
-
data.append(list(row))
|
|
202
|
-
if row[-1] == 'x': # the last element is the has_error_flags, the first is the OBSID
|
|
203
|
-
errors.append(row[0])
|
|
204
|
-
except Exception as exc:
|
|
205
|
-
print(f"[red]ERROR[/]: {Path(filename).name}: {exc!s}")
|
|
206
|
-
MODULE_LOGGER.error(f"{exc!s}", exc_info=True)
|
|
207
|
-
|
|
208
|
-
if csv_format:
|
|
209
|
-
print_csv(output_file, data, errors)
|
|
210
|
-
else:
|
|
211
|
-
print_table(output_file, data, errors)
|
|
212
|
-
|
|
213
|
-
def exclude_items(*indices):
|
|
214
|
-
"""
|
|
215
|
-
Returns a function that excludes the items of its operand at the given indices and returns a tuple
|
|
216
|
-
containing the other elements of the operand using the `__getitem__` method of the operand.
|
|
217
|
-
|
|
218
|
-
Args:
|
|
219
|
-
*indices: indices of items that shall be excluded, can be a negative index also.
|
|
220
|
-
|
|
221
|
-
"""
|
|
222
|
-
def func(obj):
|
|
223
|
-
size = len(obj)
|
|
224
|
-
pos_indices = [idx if idx > 0 else size + idx for idx in indices]
|
|
225
|
-
return tuple(obj[idx] for idx in range(size) if idx not in pos_indices)
|
|
226
|
-
return func
|
|
227
|
-
|
|
228
|
-
def print_csv(output_file: str, data: List, errors: List):
|
|
229
|
-
header = [
|
|
230
|
-
"obsid",
|
|
231
|
-
"timestamp",
|
|
232
|
-
"HDF5 filename",
|
|
233
|
-
"v_start",
|
|
234
|
-
"v_end",
|
|
235
|
-
"n_final_dump",
|
|
236
|
-
"digitise",
|
|
237
|
-
"DG",
|
|
238
|
-
"sync",
|
|
239
|
-
"sync period",
|
|
240
|
-
"mode",
|
|
241
|
-
"sensor",
|
|
242
|
-
"CCD order",
|
|
243
|
-
"CI",
|
|
244
|
-
"CI width",
|
|
245
|
-
"CI gap",
|
|
246
|
-
"VGD",
|
|
247
|
-
"error_flags",
|
|
248
|
-
]
|
|
249
|
-
|
|
250
|
-
prep = {"column_names": header, "mode": 'w', "quote_char": '\"'}
|
|
251
|
-
with CSV2(output_file, prep=prep) as csv:
|
|
252
|
-
for row in data:
|
|
253
|
-
csv.create(row[:-2]) # remove last two values, i.e. all_error_flags_str and has_error_flags
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
def print_table(output_file: str, data: List, errors: List):
|
|
257
|
-
table = Table(title="HDF5 & Register Map", min_width=180)
|
|
258
|
-
|
|
259
|
-
table.add_column("obsid")
|
|
260
|
-
table.add_column("timestamp", width=20)
|
|
261
|
-
table.add_column("HDF5 filename", no_wrap=True)
|
|
262
|
-
table.add_column("v_start", justify="right")
|
|
263
|
-
table.add_column("v_end", justify="right")
|
|
264
|
-
table.add_column("n_final_dump", justify="right")
|
|
265
|
-
table.add_column("digitise", justify="right")
|
|
266
|
-
table.add_column("DG", justify="right")
|
|
267
|
-
table.add_column("sync")
|
|
268
|
-
table.add_column("sync period")
|
|
269
|
-
table.add_column("mode")
|
|
270
|
-
table.add_column("sensor")
|
|
271
|
-
table.add_column("CCD order")
|
|
272
|
-
table.add_column("CI")
|
|
273
|
-
table.add_column("CI width")
|
|
274
|
-
table.add_column("CI gap")
|
|
275
|
-
table.add_column("VGD")
|
|
276
|
-
table.add_column("error_flags")
|
|
277
|
-
|
|
278
|
-
# We don't need the error_flags-by-value, we need the error_flags-by-str/bin
|
|
279
|
-
# and, do not use the last element which is the has_error_flags. So, all rows
|
|
280
|
-
# should exclude element -3 and -1
|
|
281
|
-
snip = exclude_items(-1, -3)
|
|
282
|
-
|
|
283
|
-
for row in data:
|
|
284
|
-
table.add_row(*snip(row))
|
|
285
|
-
|
|
286
|
-
with Console().status("Saving report...", spinner='clock'):
|
|
287
|
-
with open(output_file, "wt") as report_file:
|
|
288
|
-
console = Console(file=report_file, width=300)
|
|
289
|
-
if errors:
|
|
290
|
-
console.print(f"Observations with N-FEE errors: {', '.join(set(errors))}")
|
|
291
|
-
console.print(table)
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
if __name__ == "__main__":
|
|
295
|
-
cli()
|