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
egse/dpu/hdf5_viewer.py
DELETED
|
@@ -1,506 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
A simple GUI application to visualise the content of an HDF5 file that contains N-FEE SpceWire data.
|
|
3
|
-
"""
|
|
4
|
-
# The original attempt was to use the TreeModel dynamically, but that didn't work and I finally
|
|
5
|
-
# found the reason in this StackOverflow topic:
|
|
6
|
-
#
|
|
7
|
-
# https://stackoverflow.com/questions/22713374/
|
|
8
|
-
#
|
|
9
|
-
# My solution to this problem was to save the internal_pointers in a set() because then they would
|
|
10
|
-
# not be duplicated, but that didn't work out. I then saved them in a list, this version was
|
|
11
|
-
# working, but very slow and the _internal_pointers grow indefinitely. My next try was to use a
|
|
12
|
-
# dictionary and create / retrieve the internal pointers. That work fine and is already faster, but
|
|
13
|
-
# it is not an elegant solution.
|
|
14
|
-
#
|
|
15
|
-
# The current implementation is based on the Simple Tree Model Example from the Qt documentation:
|
|
16
|
-
#
|
|
17
|
-
# https://doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html#treemodel-class-definition
|
|
18
|
-
#
|
|
19
|
-
# The model in the example builds a complete fixed tree structure from the input data. I tried to
|
|
20
|
-
# optimize that by updating the tree structure whenever the user chooses to expand the nodes in
|
|
21
|
-
# the tree. The trick I used is to define a new role ExpandableRole and assign that role to Groups.
|
|
22
|
-
#
|
|
23
|
-
# Although I really want to stick to PEP8 for naming methods, functions and variable, I also wanted
|
|
24
|
-
# to stick to the Qt naming convention. For classes and methods that are in the realm of Qt I stick
|
|
25
|
-
# to their convention, this is the case for TreeModel, all other naming follows PEP8.
|
|
26
|
-
#
|
|
27
|
-
# TODO: data and headerData shall return a QVariant object. Is this needed for Python?
|
|
28
|
-
|
|
29
|
-
import logging
|
|
30
|
-
import sys
|
|
31
|
-
from pathlib import Path
|
|
32
|
-
from typing import Optional
|
|
33
|
-
from typing import Tuple
|
|
34
|
-
|
|
35
|
-
import h5py
|
|
36
|
-
import numpy as np
|
|
37
|
-
from PyQt5.QtCore import QModelIndex
|
|
38
|
-
from PyQt5.QtCore import QObject
|
|
39
|
-
from PyQt5.QtCore import QRunnable
|
|
40
|
-
from PyQt5.QtCore import QThreadPool
|
|
41
|
-
from PyQt5.QtCore import QTimer
|
|
42
|
-
from PyQt5.QtCore import pyqtSignal as QSignal
|
|
43
|
-
from PyQt5.QtCore import pyqtSlot as QSlot
|
|
44
|
-
from PyQt5.QtWidgets import QApplication
|
|
45
|
-
from PyQt5.QtWidgets import QFileDialog
|
|
46
|
-
from PyQt5.QtWidgets import QLabel
|
|
47
|
-
from PyQt5.QtWidgets import QMainWindow
|
|
48
|
-
from PyQt5.QtWidgets import QProgressBar
|
|
49
|
-
from rich.console import Console
|
|
50
|
-
|
|
51
|
-
from egse.dpu.ccd_ui import ImageCreatorFullSize
|
|
52
|
-
from egse.dpu.hdf5_model import HDF5Item
|
|
53
|
-
from egse.dpu.hdf5_model import HDF5Model
|
|
54
|
-
from egse.dpu.hdf5_model import RegisterTableModel
|
|
55
|
-
from egse.dpu.hdf5_ui import AttributesModel
|
|
56
|
-
from egse.dpu.hdf5_ui import DataPacketHeaderModel
|
|
57
|
-
from egse.dpu.hdf5_ui import DatasetPropertiesModel
|
|
58
|
-
from egse.dpu.hdf5_ui import FilePropertiesModel
|
|
59
|
-
from egse.dpu.hdf5_ui import GroupPropertiesModel
|
|
60
|
-
from egse.dpu.hdf5_ui import MainWindowGUI
|
|
61
|
-
from egse.dpu.hdf5_ui import PropertiesModel
|
|
62
|
-
from egse.exceptions import InternalError
|
|
63
|
-
from egse.fee.nfee import HousekeepingData
|
|
64
|
-
from egse.reg import RegisterMap
|
|
65
|
-
from egse.setup import SetupError
|
|
66
|
-
from egse.spw import DataPacket
|
|
67
|
-
from egse.spw import HousekeepingPacket
|
|
68
|
-
from egse.spw import SpaceWirePacket
|
|
69
|
-
from egse.state import GlobalState
|
|
70
|
-
|
|
71
|
-
MODULE_LOGGER = logging.getLogger(__name__)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
class WorkerSignals(QObject):
|
|
75
|
-
"""
|
|
76
|
-
Defines the signals available from a running worker thread.
|
|
77
|
-
|
|
78
|
-
* progress (int): progress complete,from 0-100
|
|
79
|
-
* finished (no data): the worker is finished
|
|
80
|
-
* result (object): the result from the Worker run() method, e.g.
|
|
81
|
-
* a 2D Numpy array with the image data
|
|
82
|
-
* error (tuple): exception type, value, traceback.format_exc()
|
|
83
|
-
"""
|
|
84
|
-
|
|
85
|
-
progress = QSignal(int)
|
|
86
|
-
result = QSignal(tuple)
|
|
87
|
-
finished = QSignal()
|
|
88
|
-
error = QSignal(tuple)
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
class Worker(QRunnable):
|
|
92
|
-
"""
|
|
93
|
-
Worker thread
|
|
94
|
-
|
|
95
|
-
Inherits from QRunnable to handle worker thread setup, signals
|
|
96
|
-
and wrap-up.
|
|
97
|
-
"""
|
|
98
|
-
|
|
99
|
-
def __init__(self, func, *args, **kwargs):
|
|
100
|
-
super().__init__()
|
|
101
|
-
self.func = func
|
|
102
|
-
self.args = args
|
|
103
|
-
self.kwargs = kwargs
|
|
104
|
-
self.signals = WorkerSignals()
|
|
105
|
-
|
|
106
|
-
# Add the callback for signals to the kwargs, that way the function
|
|
107
|
-
# has access to the signals of the worker. The signature of the
|
|
108
|
-
# function needs to take args and kwargs into account.
|
|
109
|
-
|
|
110
|
-
kwargs["signals"] = self.signals
|
|
111
|
-
|
|
112
|
-
@QSlot()
|
|
113
|
-
def run(self):
|
|
114
|
-
try:
|
|
115
|
-
result = self.func(*self.args, **self.kwargs)
|
|
116
|
-
except (Exception, ) as exc:
|
|
117
|
-
exc_type, value, tb = sys.exc_info()
|
|
118
|
-
self.signals.error.emit((exc_type, value, tb))
|
|
119
|
-
else:
|
|
120
|
-
self.signals.result.emit(result)
|
|
121
|
-
finally:
|
|
122
|
-
self.signals.finished.emit()
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
class MainWindow(QMainWindow, MainWindowGUI):
|
|
126
|
-
def __init__(self):
|
|
127
|
-
super().__init__()
|
|
128
|
-
|
|
129
|
-
self.n_fee_side = GlobalState.setup.camera.fee.ccd_sides.enum
|
|
130
|
-
|
|
131
|
-
# Setup the complete GUI
|
|
132
|
-
|
|
133
|
-
self.setup_gui(self)
|
|
134
|
-
|
|
135
|
-
# Add triggers / signals to the different views
|
|
136
|
-
|
|
137
|
-
self.tree_view.clicked.connect(self.on_clicked)
|
|
138
|
-
self.table_view.clicked.connect(self.on_cell_clicked)
|
|
139
|
-
|
|
140
|
-
self.open_doc_action.triggered.connect(self.on_open_doc_clicked)
|
|
141
|
-
|
|
142
|
-
self.reg_model = RegisterTableModel(RegisterMap())
|
|
143
|
-
|
|
144
|
-
if len(sys.argv) > 0:
|
|
145
|
-
filename = sys.argv[-1]
|
|
146
|
-
self.load_hdf5_file(Path(filename))
|
|
147
|
-
|
|
148
|
-
self.thread_pool = QThreadPool()
|
|
149
|
-
|
|
150
|
-
self.counter = 0
|
|
151
|
-
|
|
152
|
-
self.timer = QTimer()
|
|
153
|
-
self.timer.setInterval(1000)
|
|
154
|
-
self.timer.timeout.connect(self.recurring_timer)
|
|
155
|
-
|
|
156
|
-
def on_open_doc_clicked(self, *args, **kwargs):
|
|
157
|
-
|
|
158
|
-
filename = QFileDialog.getOpenFileName(
|
|
159
|
-
self, "Open a HDF5 file", filter="HDF5 Files (*.hdf5 *.h5)")
|
|
160
|
-
filename = Path(filename[0])
|
|
161
|
-
|
|
162
|
-
self.load_hdf5_file(filename)
|
|
163
|
-
|
|
164
|
-
def load_hdf5_file(self, filename: Path):
|
|
165
|
-
if filename.exists():
|
|
166
|
-
try:
|
|
167
|
-
hdf_file = h5py.File(filename, mode='r', locking=False)
|
|
168
|
-
h5_model = HDF5Model(hdf_file)
|
|
169
|
-
except OSError:
|
|
170
|
-
self.status_bar.showMessage(f"OSError: could not open file {filename.name}", 5000)
|
|
171
|
-
return
|
|
172
|
-
|
|
173
|
-
self.tree_view.setModel(h5_model)
|
|
174
|
-
self.tree_view.expanded.connect(h5_model.update_model_data)
|
|
175
|
-
|
|
176
|
-
self.properties.setModel(FilePropertiesModel(hdf_file))
|
|
177
|
-
|
|
178
|
-
def on_cell_clicked(self, index: QModelIndex, *args, **kwargs):
|
|
179
|
-
self.proxy_model.sourceModel().toggleDisplayRole(index)
|
|
180
|
-
|
|
181
|
-
def on_clicked(self, index: QModelIndex, *args, **kwargs):
|
|
182
|
-
item: HDF5Item = index.internalPointer()
|
|
183
|
-
hdf_item = item.get_item()
|
|
184
|
-
|
|
185
|
-
self.packet_header.setModel(None)
|
|
186
|
-
|
|
187
|
-
if len(hdf_item.attrs):
|
|
188
|
-
self.attributes.setModel(AttributesModel(hdf_item))
|
|
189
|
-
else:
|
|
190
|
-
self.attributes.setModel(None)
|
|
191
|
-
|
|
192
|
-
if isinstance(hdf_item, h5py.Group):
|
|
193
|
-
self.properties.setModel(GroupPropertiesModel(hdf_item))
|
|
194
|
-
elif isinstance(hdf_item, h5py.Dataset):
|
|
195
|
-
self.properties.setModel(DatasetPropertiesModel(hdf_item))
|
|
196
|
-
else:
|
|
197
|
-
self.properties.setModel(PropertiesModel())
|
|
198
|
-
|
|
199
|
-
if isinstance(hdf_item, h5py.Dataset):
|
|
200
|
-
if "register" in hdf_item.name:
|
|
201
|
-
reg_map = RegisterMap("N-FEE", memory_map=hdf_item[()])
|
|
202
|
-
self.reg_model.setRegisterMap(reg_map)
|
|
203
|
-
self.proxy_model.setSourceModel(self.reg_model)
|
|
204
|
-
self.data_view.setCurrentWidget(self.table_box)
|
|
205
|
-
self.table_view.resizeColumnsToContents()
|
|
206
|
-
self.proxy_model.layoutChanged.emit()
|
|
207
|
-
elif "hk_data" in hdf_item.name:
|
|
208
|
-
packet = HousekeepingData(hdf_item[()])
|
|
209
|
-
self.display_hk_data_text(packet)
|
|
210
|
-
elif "hk" in hdf_item.name:
|
|
211
|
-
packet = HousekeepingPacket(hdf_item[()])
|
|
212
|
-
self.display_hk_packet_view(packet)
|
|
213
|
-
elif "timecode" in hdf_item.name:
|
|
214
|
-
data = hdf_item[()]
|
|
215
|
-
self.text_box.setText(str(data))
|
|
216
|
-
self.data_view.setCurrentWidget(self.text_box)
|
|
217
|
-
else:
|
|
218
|
-
data = hdf_item[()]
|
|
219
|
-
if DataPacket.is_data_packet(data):
|
|
220
|
-
self.packet_header.setModel(DataPacketHeaderModel(DataPacket(data)))
|
|
221
|
-
self.packet_header.resizeColumnsToContents()
|
|
222
|
-
self.text_box.setText(ndarray_to_str(data))
|
|
223
|
-
self.data_view.setCurrentWidget(self.text_box)
|
|
224
|
-
elif isinstance(hdf_item, h5py.Group):
|
|
225
|
-
if "data" in hdf_item:
|
|
226
|
-
self.handle_image_data(hdf_item)
|
|
227
|
-
|
|
228
|
-
def display_hk_data_text(self, hk_data: HousekeepingData):
|
|
229
|
-
|
|
230
|
-
console = Console(width=120, force_terminal=False, force_jupyter=False)
|
|
231
|
-
with console.capture() as capture:
|
|
232
|
-
console.print(hk_data)
|
|
233
|
-
text = capture.get()
|
|
234
|
-
self.text_box.setText(text)
|
|
235
|
-
self.data_view.setCurrentWidget(self.text_box)
|
|
236
|
-
|
|
237
|
-
def display_hk_packet_view(self, packet: HousekeepingPacket):
|
|
238
|
-
hk_data = HousekeepingData(packet.data)
|
|
239
|
-
|
|
240
|
-
fields = self.hk_box.spw_status.fields
|
|
241
|
-
for par in fields:
|
|
242
|
-
fields[par].setText(f"{hk_data[par]:8d}")
|
|
243
|
-
|
|
244
|
-
fields = self.hk_box.tou_sense.fields
|
|
245
|
-
for par in fields:
|
|
246
|
-
x = f"TOU_SENSE_{par}"
|
|
247
|
-
fields[par].setText(f"{hk_data[x]}")
|
|
248
|
-
|
|
249
|
-
fields = self.hk_box.n_fee_voltages.fields
|
|
250
|
-
for par in fields:
|
|
251
|
-
fields[par].setText(f"{hk_data[par]:8d}")
|
|
252
|
-
|
|
253
|
-
fields = self.hk_box.n_fee_temperatures.fields
|
|
254
|
-
for par in fields:
|
|
255
|
-
fields[par].setText(f"{hk_data[par]:8d}")
|
|
256
|
-
|
|
257
|
-
fields = self.hk_box.ccd_voltages.fields
|
|
258
|
-
for par in fields:
|
|
259
|
-
fields[par].setText(f"{hk_data[par]:8d}")
|
|
260
|
-
|
|
261
|
-
self.hk_box.spw_leds.update_leds(hk_data["spw_status"])
|
|
262
|
-
|
|
263
|
-
self.hk_box.error_flags.update_flags(hk_data["error_flags"])
|
|
264
|
-
|
|
265
|
-
self.data_view.setCurrentWidget(self.hk_box)
|
|
266
|
-
|
|
267
|
-
def display_hk_packet_text(self, packet: HousekeepingPacket):
|
|
268
|
-
hk_data = HousekeepingData(packet.data)
|
|
269
|
-
|
|
270
|
-
console = Console(width=120, force_terminal=False, force_jupyter=False)
|
|
271
|
-
with console.capture() as capture:
|
|
272
|
-
console.print(hk_data)
|
|
273
|
-
text = capture.get()
|
|
274
|
-
self.text_box.setText(text)
|
|
275
|
-
self.data_view.setCurrentWidget(self.text_box)
|
|
276
|
-
|
|
277
|
-
def handle_image_data(self, hdf_item: h5py.Group):
|
|
278
|
-
if "timecode" not in hdf_item:
|
|
279
|
-
return None
|
|
280
|
-
|
|
281
|
-
data_item = hdf_item["data"]
|
|
282
|
-
|
|
283
|
-
if "v_start" not in data_item.attrs:
|
|
284
|
-
reg_map = find_current_register_map(hdf_item)
|
|
285
|
-
if not reg_map:
|
|
286
|
-
return
|
|
287
|
-
|
|
288
|
-
v_start = reg_map["v_start"]
|
|
289
|
-
v_end = reg_map["v_end"]
|
|
290
|
-
h_end = reg_map["h_end"]
|
|
291
|
-
|
|
292
|
-
else:
|
|
293
|
-
v_start = data_item.attrs["v_start"]
|
|
294
|
-
v_end = data_item.attrs["v_end"]
|
|
295
|
-
h_end = data_item.attrs["h_end"]
|
|
296
|
-
|
|
297
|
-
# Create the Worker, any other args, kwargs are passed to the run function
|
|
298
|
-
|
|
299
|
-
worker = Worker(
|
|
300
|
-
create_image, data_item, v_start, v_end, h_end
|
|
301
|
-
)
|
|
302
|
-
worker.signals.result.connect(self.show_image_data)
|
|
303
|
-
worker.signals.finished.connect(self.worker_finished)
|
|
304
|
-
worker.signals.progress.connect(self.update_progress)
|
|
305
|
-
|
|
306
|
-
# Execute the Worker run() method
|
|
307
|
-
|
|
308
|
-
self.thread_pool.start(worker)
|
|
309
|
-
|
|
310
|
-
self.timer.start()
|
|
311
|
-
|
|
312
|
-
self.progress_label = QLabel(f"Generating image[{v_start}, {v_end}]")
|
|
313
|
-
self.timer_label = QLabel("0s")
|
|
314
|
-
self.progress = QProgressBar()
|
|
315
|
-
self.status_bar.addWidget(self.progress_label)
|
|
316
|
-
self.status_bar.addWidget(self.progress)
|
|
317
|
-
self.status_bar.addWidget(self.timer_label)
|
|
318
|
-
|
|
319
|
-
def recurring_timer(self):
|
|
320
|
-
self.counter += 1
|
|
321
|
-
self.timer_label.setText(f"{self.counter}s")
|
|
322
|
-
|
|
323
|
-
def worker_finished(self):
|
|
324
|
-
self.status_bar.removeWidget(self.progress)
|
|
325
|
-
self.status_bar.removeWidget(self.progress_label)
|
|
326
|
-
self.status_bar.removeWidget(self.timer_label)
|
|
327
|
-
self.status_bar.show()
|
|
328
|
-
self.timer.stop()
|
|
329
|
-
self.counter = 0
|
|
330
|
-
|
|
331
|
-
def update_progress(self, progress):
|
|
332
|
-
self.progress.setValue(progress)
|
|
333
|
-
|
|
334
|
-
def show_image_data(self, data: Tuple):
|
|
335
|
-
ccd_nr, image_left, image_right = data
|
|
336
|
-
# MODULE_LOGGER.info(f"{ccd_nr=}, {image_e.shape=}, {image_f.shape}")
|
|
337
|
-
self.graph_box.ccd_number = ccd_nr
|
|
338
|
-
if image_left is not None and sum(image_left.shape) > 0:
|
|
339
|
-
self.graph_box.show_image_data(self.n_fee_side.LEFT_SIDE, image_left)
|
|
340
|
-
self.data_view.setCurrentWidget(self.graph_box)
|
|
341
|
-
if image_right is not None and sum(image_right.shape) > 0:
|
|
342
|
-
self.graph_box.show_image_data(self.n_fee_side.RIGHT_SIDE, image_right)
|
|
343
|
-
self.data_view.setCurrentWidget(self.graph_box)
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
def ndarray_to_str(data: np.ndarray):
|
|
347
|
-
|
|
348
|
-
if not isinstance(data, np.ndarray):
|
|
349
|
-
return str(data)
|
|
350
|
-
|
|
351
|
-
packet: DataPacket = SpaceWirePacket.create_packet(data)
|
|
352
|
-
data = packet.data_as_ndarray
|
|
353
|
-
data_as_bytes = packet.data
|
|
354
|
-
|
|
355
|
-
t = data.dtype
|
|
356
|
-
w = data.shape[0]
|
|
357
|
-
|
|
358
|
-
sdata = f"{w=} {t=}\n"
|
|
359
|
-
sdata += f"{packet.type=!s}\n"
|
|
360
|
-
|
|
361
|
-
# Represent the bytes object data, i.e. the original data coming from the SpaceWire
|
|
362
|
-
|
|
363
|
-
sdata += "data_as_bytes: "
|
|
364
|
-
sdata += ", ".join(f"{data_as_bytes[ix]:08b} {data_as_bytes[ix+1]:08b}" for ix in range(0, 66, 2))
|
|
365
|
-
sdata += " ... "
|
|
366
|
-
sdata += ", ".join(f"{data_as_bytes[ix]:08b} {data_as_bytes[ix+1]:08b}" for ix in range((w-40)*2, w*2, 2))
|
|
367
|
-
sdata += "\n"
|
|
368
|
-
|
|
369
|
-
# Represent the numpy array, first as integers, seconds as binary strings
|
|
370
|
-
|
|
371
|
-
sdata += "data_as_ndarray: "
|
|
372
|
-
sdata += ", ".join(f"{data[ix]:d}" for ix in range(33))
|
|
373
|
-
sdata += " ... "
|
|
374
|
-
sdata += ", ".join(f"{data[ix]:d}" for ix in range(w - 40, w))
|
|
375
|
-
sdata += "\n"
|
|
376
|
-
|
|
377
|
-
sdata += "data_as_ndarray: "
|
|
378
|
-
sdata += ", ".join(f"{data[ix] >> 8 & 0b11111111:08b} {data[ix] & 0b11111111:08b}" for ix in range(33))
|
|
379
|
-
sdata += " ... "
|
|
380
|
-
sdata += ", ".join(f"{data[ix] >> 8 & 0b11111111:08b} {data[ix] & 0b11111111:08b}" for ix in range(w - 40, w))
|
|
381
|
-
sdata += "\n"
|
|
382
|
-
|
|
383
|
-
return sdata
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
# @profile(sort_by='cumulative', lines_to_print=10, strip_dirs=True)
|
|
387
|
-
def create_image(hdf_item: h5py.Group, v_start: int, v_end: int, h_end: int,
|
|
388
|
-
signals: WorkerSignals):
|
|
389
|
-
|
|
390
|
-
n_fee_side = GlobalState.setup.camera.fee.ccd_sides.enum
|
|
391
|
-
|
|
392
|
-
# MODULE_LOGGER.info(f"Creating image: {v_start=}, {v_end=}")
|
|
393
|
-
|
|
394
|
-
nr_lines = v_end - v_start + 1
|
|
395
|
-
nr_columns = h_end + 1
|
|
396
|
-
|
|
397
|
-
image = ImageCreatorFullSize(v_start, v_end, h_end)
|
|
398
|
-
|
|
399
|
-
ccd_nr = None
|
|
400
|
-
lines_count = 0
|
|
401
|
-
data_group = hdf_item
|
|
402
|
-
nr_data = len(data_group)
|
|
403
|
-
|
|
404
|
-
# If v_end is larger than 4509 it means we have parallel overscan data
|
|
405
|
-
|
|
406
|
-
last_packet = [2, 2] if v_end > 4509 else [1, 1]
|
|
407
|
-
|
|
408
|
-
for data_count in sorted(data_group, key=int):
|
|
409
|
-
data = data_group[data_count][()]
|
|
410
|
-
|
|
411
|
-
if not isinstance(data, np.ndarray):
|
|
412
|
-
raise InternalError('HDF5 data group should only contain numpy arrays.')
|
|
413
|
-
|
|
414
|
-
data_packet = SpaceWirePacket.create_packet(data)
|
|
415
|
-
data = data_packet.data_as_ndarray
|
|
416
|
-
|
|
417
|
-
image.add_data(data_packet)
|
|
418
|
-
|
|
419
|
-
signals.progress.emit(int(data_count) * 100 // nr_data)
|
|
420
|
-
|
|
421
|
-
# MODULE_LOGGER.info(f"{lines_count=}, {nr_lines=}")
|
|
422
|
-
# MODULE_LOGGER.info(f"{image_e.shape=}, {image_f.shape=}")
|
|
423
|
-
# MODULE_LOGGER.info(f"{last_packet=}")
|
|
424
|
-
|
|
425
|
-
image_left = image.get_image(n_fee_side.LEFT_SIDE).astype(float)
|
|
426
|
-
image_right = image.get_image(n_fee_side.RIGHT_SIDE).astype(float)
|
|
427
|
-
|
|
428
|
-
try:
|
|
429
|
-
image_left[image_left == 0] = np.nan
|
|
430
|
-
image_right[image_right == 0] = np.nan
|
|
431
|
-
except (Exception, ) as exc:
|
|
432
|
-
MODULE_LOGGER.error(exc)
|
|
433
|
-
|
|
434
|
-
# MODULE_LOGGER.info(f"{image_e.shape=}, {image_f.shape=}")
|
|
435
|
-
|
|
436
|
-
if nr_data:
|
|
437
|
-
try:
|
|
438
|
-
data_packet = SpaceWirePacket.create_packet(data_group["0"][()])
|
|
439
|
-
ccd_nr = data_packet.header.type_as_object.ccd_number # N-FEE CCD number [0-3]
|
|
440
|
-
# MODULE_LOGGER.info(f"before {ccd_nr=}")
|
|
441
|
-
try:
|
|
442
|
-
ccd_nr = GlobalState.setup.camera.fee.ccd_numbering.CCD_BIN_TO_ID[ccd_nr]
|
|
443
|
-
except AttributeError:
|
|
444
|
-
raise SetupError("No entry in the setup for camera.fee.ccd_numbering.CCD_BIN_TO_ID")
|
|
445
|
-
# MODULE_LOGGER.info(f"after {ccd_nr=}")
|
|
446
|
-
except (Exception, ) as exc:
|
|
447
|
-
MODULE_LOGGER.error(exc)
|
|
448
|
-
|
|
449
|
-
# MODULE_LOGGER.info(f"Return: {ccd_nr=}, {image_e.shape=}, {image_f.shape=}")
|
|
450
|
-
|
|
451
|
-
return ccd_nr, image_left, image_right
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
def find_current_register_map(hdf_item: h5py.Group) -> Optional[RegisterMap]:
|
|
455
|
-
# The current register map is the one with the valid values for the current data.
|
|
456
|
-
# Current means, for the hdf_item that was passed into this function
|
|
457
|
-
# The algorithm is not fail safe yet, what we would actually need is attributes
|
|
458
|
-
# to the readout group: v_start, v_end, h_end
|
|
459
|
-
parent = hdf_item.parent
|
|
460
|
-
parent_path = Path(parent.name)
|
|
461
|
-
|
|
462
|
-
if "register" in parent:
|
|
463
|
-
path = str(parent_path / "register")
|
|
464
|
-
reg_map = RegisterMap("N-FEE", memory_map=hdf_item[path][()])
|
|
465
|
-
return reg_map
|
|
466
|
-
|
|
467
|
-
try:
|
|
468
|
-
name = Path(hdf_item.name).name
|
|
469
|
-
readout_count = count = int(name)
|
|
470
|
-
except ValueError:
|
|
471
|
-
MODULE_LOGGER.warning(
|
|
472
|
-
f"Corrupt HDF5 file? Expected readout count as group name, got {hdf_item.name}.")
|
|
473
|
-
return None
|
|
474
|
-
|
|
475
|
-
MODULE_LOGGER.info(f"Processing readout count {count}.")
|
|
476
|
-
|
|
477
|
-
# Search for the last readout containing a register map
|
|
478
|
-
|
|
479
|
-
while True:
|
|
480
|
-
count -= 1
|
|
481
|
-
name = str(count)
|
|
482
|
-
if name not in parent:
|
|
483
|
-
break
|
|
484
|
-
item = parent[name]
|
|
485
|
-
if "register" in item and "data" not in item:
|
|
486
|
-
MODULE_LOGGER.info(f"Found register in {name}.")
|
|
487
|
-
path = str(parent_path / name / "register")
|
|
488
|
-
reg_map = RegisterMap("N-FEE", memory_map=hdf_item[path][()])
|
|
489
|
-
return reg_map
|
|
490
|
-
|
|
491
|
-
return None
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
def main():
|
|
495
|
-
app = QApplication(sys.argv)
|
|
496
|
-
window = MainWindow()
|
|
497
|
-
window.show()
|
|
498
|
-
|
|
499
|
-
rc = app.exec()
|
|
500
|
-
|
|
501
|
-
return rc
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
if __name__ == "__main__":
|
|
505
|
-
|
|
506
|
-
sys.exit(main())
|