cgse 2024.7.0__py3-none-any.whl → 2025.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- README.md +27 -0
- bump.py +85 -0
- cgse-2025.0.2.dist-info/METADATA +38 -0
- cgse-2025.0.2.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.2.dist-info}/WHEEL +1 -2
- cgse-2024.7.0.dist-info/COPYING +0 -674
- cgse-2024.7.0.dist-info/COPYING.LESSER +0 -165
- cgse-2024.7.0.dist-info/METADATA +0 -144
- cgse-2024.7.0.dist-info/RECORD +0 -660
- cgse-2024.7.0.dist-info/entry_points.txt +0 -75
- cgse-2024.7.0.dist-info/top_level.txt +0 -2
- egse/__init__.py +0 -12
- egse/__main__.py +0 -32
- egse/aeu/aeu.py +0 -5238
- egse/aeu/aeu_awg.yaml +0 -265
- egse/aeu/aeu_crio.yaml +0 -273
- egse/aeu/aeu_cs.py +0 -627
- egse/aeu/aeu_devif.py +0 -321
- egse/aeu/aeu_main_ui.py +0 -903
- egse/aeu/aeu_metrics.py +0 -131
- egse/aeu/aeu_protocol.py +0 -463
- egse/aeu/aeu_psu.yaml +0 -204
- egse/aeu/aeu_ui.py +0 -873
- egse/aeu/arbdata/FccdRead.arb +0 -2
- egse/aeu/arbdata/FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/HeaterSync_FccdRead.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/HeaterSync_ccdRead50.arb +0 -2
- egse/aeu/arbdata/Heater_FccdRead_min_points.arb +0 -2
- egse/aeu/arbdata/ccdRead25.arb +0 -2
- egse/aeu/arbdata/ccdRead25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25.arb +0 -2
- egse/aeu/arbdata/ccdRead31_25_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50.arb +0 -2
- egse/aeu/arbdata/ccdRead37_50_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75.arb +0 -2
- egse/aeu/arbdata/ccdRead43_75_150ms.arb +0 -2
- egse/aeu/arbdata/ccdRead50.arb +0 -2
- egse/aeu/arbdata/ccdRead50_150ms.arb +0 -2
- egse/alert/__init__.py +0 -1049
- egse/alert/alertman.yaml +0 -37
- egse/alert/alertman_cs.py +0 -233
- egse/alert/alertman_ui.py +0 -600
- egse/alert/gsm/beaglebone.py +0 -138
- egse/alert/gsm/beaglebone.yaml +0 -51
- egse/alert/gsm/beaglebone_cs.py +0 -108
- egse/alert/gsm/beaglebone_devif.py +0 -122
- egse/alert/gsm/beaglebone_protocol.py +0 -46
- egse/bits.py +0 -318
- egse/camera.py +0 -44
- egse/collimator/__init__.py +0 -0
- egse/collimator/fcul/__init__.py +0 -0
- egse/collimator/fcul/ogse.py +0 -1077
- egse/collimator/fcul/ogse.yaml +0 -14
- egse/collimator/fcul/ogse_cs.py +0 -154
- egse/collimator/fcul/ogse_devif.py +0 -358
- egse/collimator/fcul/ogse_protocol.py +0 -132
- egse/collimator/fcul/ogse_sim.py +0 -431
- egse/collimator/fcul/ogse_ui.py +0 -1108
- egse/command.py +0 -699
- egse/config.py +0 -410
- egse/confman/__init__.py +0 -1058
- egse/confman/confman.yaml +0 -70
- egse/confman/confman_cs.py +0 -240
- egse/confman/confman_ui.py +0 -381
- egse/confman/setup_ui.py +0 -565
- egse/control.py +0 -632
- egse/coordinates/__init__.py +0 -534
- egse/coordinates/avoidance.py +0 -100
- egse/coordinates/cslmodel.py +0 -127
- egse/coordinates/laser_tracker_to_dict.py +0 -122
- egse/coordinates/point.py +0 -707
- egse/coordinates/pyplot.py +0 -194
- egse/coordinates/referenceFrame.py +0 -1279
- egse/coordinates/refmodel.py +0 -737
- egse/coordinates/rotationMatrix.py +0 -85
- egse/coordinates/transform3d_addon.py +0 -419
- egse/csl/__init__.py +0 -50
- egse/csl/commanding.py +0 -78
- egse/csl/icons/hexapod-connected-selected.svg +0 -30
- egse/csl/icons/hexapod-connected.svg +0 -30
- egse/csl/icons/hexapod-homing-selected.svg +0 -68
- egse/csl/icons/hexapod-homing.svg +0 -68
- egse/csl/icons/hexapod-retract-selected.svg +0 -56
- egse/csl/icons/hexapod-retract.svg +0 -51
- egse/csl/icons/hexapod-zero-selected.svg +0 -56
- egse/csl/icons/hexapod-zero.svg +0 -56
- egse/csl/icons/logo-puna.svg +0 -92
- egse/csl/icons/stop.svg +0 -1
- egse/csl/initialisation.py +0 -102
- egse/csl/mech_pos_settings.yaml +0 -18
- egse/das.py +0 -1240
- egse/das.yaml +0 -7
- egse/data/conf/SETUP_CSL_00000_170620_150000.yaml +0 -5
- egse/data/conf/SETUP_CSL_00001_170620_151010.yaml +0 -69
- egse/data/conf/SETUP_CSL_00002_170620_151020.yaml +0 -69
- egse/data/conf/SETUP_CSL_00003_170620_151030.yaml +0 -69
- egse/data/conf/SETUP_CSL_00004_170620_151040.yaml +0 -69
- egse/data/conf/SETUP_CSL_00005_170620_151050.yaml +0 -69
- egse/data/conf/SETUP_CSL_00006_170620_151060.yaml +0 -69
- egse/data/conf/SETUP_CSL_00007_170620_151070.yaml +0 -69
- egse/data/conf/SETUP_CSL_00008_170620_151080.yaml +0 -75
- egse/data/conf/SETUP_CSL_00010_210308_083016.yaml +0 -138
- egse/data/conf/SETUP_INTA_00000_170620_150000.yaml +0 -4
- egse/data/conf/SETUP_SRON_00000_170620_150000.yaml +0 -4
- egse/decorators.py +0 -514
- egse/device.py +0 -269
- egse/dpu/__init__.py +0 -2698
- egse/dpu/ccd_ui.py +0 -514
- egse/dpu/dpu.py +0 -783
- egse/dpu/dpu.yaml +0 -153
- egse/dpu/dpu_cs.py +0 -272
- egse/dpu/dpu_ui.py +0 -671
- egse/dpu/fitsgen.py +0 -2096
- egse/dpu/fitsgen_ui.py +0 -399
- egse/dpu/hdf5_model.py +0 -332
- egse/dpu/hdf5_ui.py +0 -277
- egse/dpu/hdf5_viewer.py +0 -506
- egse/dpu/hk_ui.py +0 -468
- egse/dpu_commands.py +0 -81
- egse/dsi/__init__.py +0 -33
- egse/dsi/_libesl.py +0 -232
- egse/dsi/constants.py +0 -296
- egse/dsi/esl.py +0 -630
- egse/dsi/rmap.py +0 -444
- egse/dsi/rmapci.py +0 -39
- egse/dsi/spw.py +0 -335
- egse/dsi/spw_state.py +0 -29
- egse/dummy.py +0 -318
- egse/dyndummy.py +0 -179
- egse/env.py +0 -278
- egse/exceptions.py +0 -88
- egse/fdir/__init__.py +0 -26
- egse/fdir/fdir_manager.py +0 -85
- egse/fdir/fdir_manager.yaml +0 -37
- egse/fdir/fdir_manager_controller.py +0 -136
- egse/fdir/fdir_manager_cs.py +0 -164
- egse/fdir/fdir_manager_interface.py +0 -15
- egse/fdir/fdir_remote.py +0 -73
- egse/fdir/fdir_remote.yaml +0 -30
- egse/fdir/fdir_remote_controller.py +0 -30
- egse/fdir/fdir_remote_cs.py +0 -94
- egse/fdir/fdir_remote_interface.py +0 -9
- egse/fdir/fdir_remote_popup.py +0 -26
- egse/fee/__init__.py +0 -106
- egse/fee/f_fee_register.yaml +0 -43
- egse/fee/feesim.py +0 -914
- egse/fee/n_fee_hk.py +0 -768
- egse/fee/nfee.py +0 -188
- egse/filterwheel/__init__.py +0 -4
- egse/filterwheel/eksma/__init__.py +0 -49
- egse/filterwheel/eksma/fw8smc4.py +0 -657
- egse/filterwheel/eksma/fw8smc4.yaml +0 -121
- egse/filterwheel/eksma/fw8smc4_cs.py +0 -144
- egse/filterwheel/eksma/fw8smc4_devif.py +0 -473
- egse/filterwheel/eksma/fw8smc4_protocol.py +0 -82
- egse/filterwheel/eksma/fw8smc4_ui.py +0 -940
- egse/filterwheel/eksma/fw8smc5.py +0 -115
- egse/filterwheel/eksma/fw8smc5.yaml +0 -105
- egse/filterwheel/eksma/fw8smc5_controller.py +0 -307
- egse/filterwheel/eksma/fw8smc5_cs.py +0 -141
- egse/filterwheel/eksma/fw8smc5_interface.py +0 -65
- egse/filterwheel/eksma/fw8smc5_simulator.py +0 -29
- egse/filterwheel/eksma/fw8smc5_ui.py +0 -1065
- egse/filterwheel/eksma/testpythonfw.py +0 -215
- egse/fov/__init__.py +0 -65
- egse/fov/fov_hk.py +0 -710
- egse/fov/fov_ui.py +0 -859
- egse/fov/fov_ui_controller.py +0 -140
- egse/fov/fov_ui_model.py +0 -200
- egse/fov/fov_ui_view.py +0 -345
- egse/gimbal/__init__.py +0 -32
- egse/gimbal/symetrie/__init__.py +0 -26
- egse/gimbal/symetrie/alpha.py +0 -586
- egse/gimbal/symetrie/generic_gimbal_ui.py +0 -1521
- egse/gimbal/symetrie/gimbal.py +0 -877
- egse/gimbal/symetrie/gimbal.yaml +0 -168
- egse/gimbal/symetrie/gimbal_cs.py +0 -183
- egse/gimbal/symetrie/gimbal_protocol.py +0 -138
- egse/gimbal/symetrie/gimbal_ui.py +0 -361
- egse/gimbal/symetrie/pmac.py +0 -1006
- egse/gimbal/symetrie/pmac_regex.py +0 -83
- egse/graph.py +0 -132
- egse/gui/__init__.py +0 -47
- egse/gui/buttons.py +0 -378
- egse/gui/focalplane.py +0 -1285
- egse/gui/formatter.py +0 -10
- egse/gui/led.py +0 -162
- egse/gui/limitswitch.py +0 -143
- egse/gui/mechanisms.py +0 -587
- egse/gui/states.py +0 -148
- egse/gui/stripchart.py +0 -729
- egse/gui/styles.qss +0 -48
- egse/gui/switch.py +0 -112
- egse/h5.py +0 -274
- egse/help/__init__.py +0 -0
- egse/help/help_ui.py +0 -126
- egse/hexapod/__init__.py +0 -32
- egse/hexapod/symetrie/__init__.py +0 -137
- egse/hexapod/symetrie/alpha.py +0 -874
- egse/hexapod/symetrie/dynalpha.py +0 -1387
- egse/hexapod/symetrie/hexapod_ui.py +0 -1516
- egse/hexapod/symetrie/pmac.py +0 -1010
- egse/hexapod/symetrie/pmac_regex.py +0 -83
- egse/hexapod/symetrie/puna.py +0 -1167
- egse/hexapod/symetrie/puna.yaml +0 -193
- egse/hexapod/symetrie/puna_cs.py +0 -195
- egse/hexapod/symetrie/puna_protocol.py +0 -134
- egse/hexapod/symetrie/puna_ui.py +0 -433
- egse/hexapod/symetrie/punaplus.py +0 -107
- egse/hexapod/symetrie/zonda.py +0 -872
- egse/hexapod/symetrie/zonda.yaml +0 -337
- egse/hexapod/symetrie/zonda_cs.py +0 -172
- egse/hexapod/symetrie/zonda_devif.py +0 -414
- egse/hexapod/symetrie/zonda_protocol.py +0 -123
- egse/hexapod/symetrie/zonda_ui.py +0 -449
- egse/hk.py +0 -791
- egse/icons/aeu-cs-start.svg +0 -117
- egse/icons/aeu-cs-stop.svg +0 -118
- egse/icons/aeu-cs.svg +0 -107
- egse/icons/aeu_cs-started.svg +0 -112
- egse/icons/aeu_cs-stopped.svg +0 -112
- egse/icons/aeu_cs.svg +0 -55
- egse/icons/alert.svg +0 -1
- egse/icons/arrow-double-left.png +0 -0
- egse/icons/arrow-double-right.png +0 -0
- egse/icons/arrow-up.svg +0 -11
- egse/icons/backward.svg +0 -1
- egse/icons/busy.svg +0 -1
- egse/icons/cleaning.svg +0 -115
- egse/icons/color-scheme.svg +0 -1
- egse/icons/cs-connected-alert.svg +0 -91
- egse/icons/cs-connected-disabled.svg +0 -43
- egse/icons/cs-connected.svg +0 -89
- egse/icons/cs-not-connected.svg +0 -44
- egse/icons/double-left-arrow.svg +0 -1
- egse/icons/double-right-arrow.svg +0 -1
- egse/icons/erase-disabled.svg +0 -19
- egse/icons/erase.svg +0 -59
- egse/icons/fitsgen-start.svg +0 -47
- egse/icons/fitsgen-stop.svg +0 -48
- egse/icons/fitsgen.svg +0 -1
- egse/icons/forward.svg +0 -1
- egse/icons/fov-hk-start.svg +0 -33
- egse/icons/fov-hk-stop.svg +0 -37
- egse/icons/fov-hk.svg +0 -1
- egse/icons/front-desk.svg +0 -1
- egse/icons/home-actioned.svg +0 -15
- egse/icons/home-disabled.svg +0 -15
- egse/icons/home.svg +0 -13
- egse/icons/info.svg +0 -1
- egse/icons/invalid.png +0 -0
- egse/icons/led-green.svg +0 -20
- egse/icons/led-grey.svg +0 -20
- egse/icons/led-orange.svg +0 -20
- egse/icons/led-red.svg +0 -20
- egse/icons/led-square-green.svg +0 -134
- egse/icons/led-square-grey.svg +0 -134
- egse/icons/led-square-orange.svg +0 -134
- egse/icons/led-square-red.svg +0 -134
- egse/icons/limit-switch-all-green.svg +0 -115
- egse/icons/limit-switch-all-red.svg +0 -117
- egse/icons/limit-switch-el+.svg +0 -116
- egse/icons/limit-switch-el-.svg +0 -117
- egse/icons/location-marker.svg +0 -1
- egse/icons/logo-dpu.svg +0 -48
- egse/icons/logo-gimbal.svg +0 -112
- egse/icons/logo-huber.svg +0 -23
- egse/icons/logo-ogse.svg +0 -31
- egse/icons/logo-puna.svg +0 -92
- egse/icons/logo-tcs.svg +0 -29
- egse/icons/logo-zonda.svg +0 -66
- egse/icons/maximize.svg +0 -1
- egse/icons/meter.svg +0 -1
- egse/icons/more.svg +0 -45
- egse/icons/n-fee-hk-start.svg +0 -24
- egse/icons/n-fee-hk-stop.svg +0 -25
- egse/icons/n-fee-hk.svg +0 -83
- egse/icons/observing-off.svg +0 -46
- egse/icons/observing-on.svg +0 -46
- egse/icons/open-document-hdf5.png +0 -0
- egse/icons/open-document-hdf5.svg +0 -21
- egse/icons/ops-mode.svg +0 -1
- egse/icons/play-green.svg +0 -17
- egse/icons/plugged-disabled.svg +0 -27
- egse/icons/plugged.svg +0 -21
- egse/icons/pm_ui.svg +0 -1
- egse/icons/power-button-green.svg +0 -27
- egse/icons/power-button-red.svg +0 -27
- egse/icons/power-button.svg +0 -27
- egse/icons/radar.svg +0 -1
- egse/icons/radioactive.svg +0 -2
- egse/icons/reload.svg +0 -1
- egse/icons/remote-control-off.svg +0 -28
- egse/icons/remote-control-on.svg +0 -28
- egse/icons/repeat-blue.svg +0 -15
- egse/icons/repeat.svg +0 -1
- egse/icons/settings.svg +0 -1
- egse/icons/shrink.svg +0 -1
- egse/icons/shutter.svg +0 -1
- egse/icons/sign-off.svg +0 -1
- egse/icons/sign-on.svg +0 -1
- egse/icons/sim-mode.svg +0 -1
- egse/icons/small-buttons-go.svg +0 -20
- egse/icons/small-buttons-minus.svg +0 -51
- egse/icons/small-buttons-plus.svg +0 -51
- egse/icons/sponge.svg +0 -220
- egse/icons/start-button-disabled.svg +0 -84
- egse/icons/start-button.svg +0 -50
- egse/icons/stop-button-disabled.svg +0 -84
- egse/icons/stop-button.svg +0 -50
- egse/icons/stop-red.svg +0 -17
- egse/icons/stop.svg +0 -1
- egse/icons/switch-disabled-square.svg +0 -87
- egse/icons/switch-disabled.svg +0 -15
- egse/icons/switch-off-square.svg +0 -87
- egse/icons/switch-off.svg +0 -72
- egse/icons/switch-on-square.svg +0 -87
- egse/icons/switch-on.svg +0 -61
- egse/icons/temperature-control.svg +0 -44
- egse/icons/th_ui_logo.svg +0 -1
- egse/icons/unplugged.svg +0 -23
- egse/icons/unvalid.png +0 -0
- egse/icons/user-interface.svg +0 -1
- egse/icons/vacuum.svg +0 -1
- egse/icons/valid.png +0 -0
- egse/icons/zoom-to-pixel-dark.svg +0 -64
- egse/icons/zoom-to-pixel-white.svg +0 -36
- egse/images/big-rotation-stage.png +0 -0
- egse/images/connected-100.png +0 -0
- egse/images/cross.svg +0 -6
- egse/images/disconnected-100.png +0 -0
- egse/images/gui-icon.png +0 -0
- egse/images/home.svg +0 -6
- egse/images/info-icon.png +0 -0
- egse/images/led-black.svg +0 -89
- egse/images/led-green.svg +0 -85
- egse/images/led-orange.svg +0 -85
- egse/images/led-red.svg +0 -85
- egse/images/load-icon.png +0 -0
- egse/images/load-setup.png +0 -0
- egse/images/load.png +0 -0
- egse/images/pause.png +0 -0
- egse/images/play-button.svg +0 -8
- egse/images/play.png +0 -0
- egse/images/process-status.png +0 -0
- egse/images/restart.png +0 -0
- egse/images/search.png +0 -0
- egse/images/sma.png +0 -0
- egse/images/start.png +0 -0
- egse/images/stop-button.svg +0 -8
- egse/images/stop.png +0 -0
- egse/images/switch-off.svg +0 -48
- egse/images/switch-on.svg +0 -48
- egse/images/undo.png +0 -0
- egse/images/update-button.svg +0 -11
- egse/imageviewer/exposureselection.py +0 -475
- egse/imageviewer/imageviewer.py +0 -198
- egse/imageviewer/matchfocalplane.py +0 -179
- egse/imageviewer/subfieldposition.py +0 -133
- egse/lampcontrol/__init__.py +0 -4
- egse/lampcontrol/beaglebone/beaglebone.py +0 -178
- egse/lampcontrol/beaglebone/beaglebone.yaml +0 -62
- egse/lampcontrol/beaglebone/beaglebone_cs.py +0 -106
- egse/lampcontrol/beaglebone/beaglebone_devif.py +0 -150
- egse/lampcontrol/beaglebone/beaglebone_protocol.py +0 -73
- egse/lampcontrol/energetiq/__init__.py +0 -22
- egse/lampcontrol/energetiq/eq99.yaml +0 -98
- egse/lampcontrol/energetiq/lampEQ99.py +0 -283
- egse/lampcontrol/energetiq/lampEQ99_cs.py +0 -128
- egse/lampcontrol/energetiq/lampEQ99_devif.py +0 -158
- egse/lampcontrol/energetiq/lampEQ99_encode_decode_errors.py +0 -73
- egse/lampcontrol/energetiq/lampEQ99_protocol.py +0 -71
- egse/lampcontrol/energetiq/lampEQ99_ui.py +0 -465
- egse/lib/CentOS-7/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/CentOS-8/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/CentOS-8/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Debian/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Debian/libetherspacelink_v35_21.dylib +0 -0
- egse/lib/Linux/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Linux/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/ESL-RMAP_v34_86.dylib +0 -0
- egse/lib/Ubuntu-20/EtherSpaceLink_v34_86.dylib +0 -0
- egse/lib/gssw/python3-gssw_2.2.3+31f63c9f-1_all.deb +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38 2.pyc +0 -0
- egse/lib/ximc/__pycache__/pyximc.cpython-38.pyc +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libbindy.dylib +0 -0
- egse/lib/ximc/libximc.framework/Frameworks/libxiwrapper.dylib +0 -0
- egse/lib/ximc/libximc.framework/Headers/ximc.h +0 -5510
- egse/lib/ximc/libximc.framework/Resources/Info.plist +0 -42
- egse/lib/ximc/libximc.framework/Resources/keyfile.sqlite +0 -0
- egse/lib/ximc/libximc.framework/libbindy.so +0 -0
- egse/lib/ximc/libximc.framework/libximc +0 -0
- egse/lib/ximc/libximc.framework/libximc.so +0 -0
- egse/lib/ximc/libximc.framework/libximc.so.7.0.0 +0 -0
- egse/lib/ximc/libximc.framework/libxiwrapper.so +0 -0
- egse/lib/ximc/pyximc.py +0 -922
- egse/listener.py +0 -179
- egse/logger/__init__.py +0 -243
- egse/logger/log_cs.py +0 -321
- egse/metrics.py +0 -102
- egse/mixin.py +0 -464
- egse/monitoring.py +0 -95
- egse/ni/alarms/__init__.py +0 -26
- egse/ni/alarms/cdaq9375.py +0 -300
- egse/ni/alarms/cdaq9375.yaml +0 -89
- egse/ni/alarms/cdaq9375_cs.py +0 -130
- egse/ni/alarms/cdaq9375_devif.py +0 -183
- egse/ni/alarms/cdaq9375_protocol.py +0 -48
- egse/obs_inspection.py +0 -165
- egse/observer.py +0 -41
- egse/obsid.py +0 -163
- egse/powermeter/__init__.py +0 -0
- egse/powermeter/ni/__init__.py +0 -38
- egse/powermeter/ni/cdaq9184.py +0 -224
- egse/powermeter/ni/cdaq9184.yaml +0 -73
- egse/powermeter/ni/cdaq9184_cs.py +0 -130
- egse/powermeter/ni/cdaq9184_devif.py +0 -201
- egse/powermeter/ni/cdaq9184_protocol.py +0 -48
- egse/powermeter/ni/cdaq9184_ui.py +0 -544
- egse/powermeter/thorlabs/__init__.py +0 -25
- egse/powermeter/thorlabs/pm100a.py +0 -380
- egse/powermeter/thorlabs/pm100a.yaml +0 -132
- egse/powermeter/thorlabs/pm100a_cs.py +0 -136
- egse/powermeter/thorlabs/pm100a_devif.py +0 -127
- egse/powermeter/thorlabs/pm100a_protocol.py +0 -80
- egse/powermeter/thorlabs/pm100a_ui.py +0 -725
- egse/process.py +0 -451
- egse/procman/__init__.py +0 -834
- egse/procman/cannot_start_process_popup.py +0 -43
- egse/procman/procman.yaml +0 -49
- egse/procman/procman_cs.py +0 -201
- egse/procman/procman_ui.py +0 -2081
- egse/protocol.py +0 -605
- egse/proxy.py +0 -531
- egse/randomwalk.py +0 -140
- egse/reg.py +0 -585
- egse/reload.py +0 -122
- egse/reprocess.py +0 -693
- egse/resource.py +0 -333
- egse/rmap.py +0 -406
- egse/rst.py +0 -135
- egse/search.py +0 -182
- egse/serialdevice.py +0 -190
- egse/services.py +0 -247
- egse/services.yaml +0 -68
- egse/settings.py +0 -379
- egse/settings.yaml +0 -980
- egse/setup.py +0 -1181
- egse/shutter/__init__.py +0 -0
- egse/shutter/thorlabs/__init__.py +0 -19
- egse/shutter/thorlabs/ksc101.py +0 -205
- egse/shutter/thorlabs/ksc101.yaml +0 -105
- egse/shutter/thorlabs/ksc101_cs.py +0 -136
- egse/shutter/thorlabs/ksc101_devif.py +0 -201
- egse/shutter/thorlabs/ksc101_protocol.py +0 -71
- egse/shutter/thorlabs/ksc101_ui.py +0 -548
- egse/shutter/thorlabs/sc10.py +0 -82
- egse/shutter/thorlabs/sc10.yaml +0 -52
- egse/shutter/thorlabs/sc10_controller.py +0 -81
- egse/shutter/thorlabs/sc10_cs.py +0 -108
- egse/shutter/thorlabs/sc10_interface.py +0 -25
- egse/shutter/thorlabs/sc10_simulator.py +0 -30
- egse/simulator.py +0 -41
- egse/slack.py +0 -61
- egse/socketdevice.py +0 -218
- egse/sockets.py +0 -218
- egse/spw.py +0 -1401
- egse/stages/__init__.py +0 -12
- egse/stages/aerotech/ensemble.py +0 -245
- egse/stages/aerotech/ensemble.yaml +0 -205
- egse/stages/aerotech/ensemble_controller.py +0 -275
- egse/stages/aerotech/ensemble_cs.py +0 -110
- egse/stages/aerotech/ensemble_interface.py +0 -132
- egse/stages/aerotech/ensemble_parameters.py +0 -433
- egse/stages/aerotech/ensemble_simulator.py +0 -27
- egse/stages/aerotech/mgse_sim.py +0 -188
- egse/stages/arun/smd3.py +0 -110
- egse/stages/arun/smd3.yaml +0 -68
- egse/stages/arun/smd3_controller.py +0 -470
- egse/stages/arun/smd3_cs.py +0 -112
- egse/stages/arun/smd3_interface.py +0 -53
- egse/stages/arun/smd3_simulator.py +0 -27
- egse/stages/arun/smd3_stop.py +0 -16
- egse/stages/huber/__init__.py +0 -49
- egse/stages/huber/smc9300.py +0 -920
- egse/stages/huber/smc9300.yaml +0 -63
- egse/stages/huber/smc9300_cs.py +0 -178
- egse/stages/huber/smc9300_devif.py +0 -345
- egse/stages/huber/smc9300_protocol.py +0 -113
- egse/stages/huber/smc9300_sim.py +0 -547
- egse/stages/huber/smc9300_ui.py +0 -973
- egse/state.py +0 -173
- egse/statemachine.py +0 -274
- egse/storage/__init__.py +0 -1067
- egse/storage/persistence.py +0 -2295
- egse/storage/storage.yaml +0 -79
- egse/storage/storage_cs.py +0 -231
- egse/styles/dark.qss +0 -343
- egse/styles/default.qss +0 -48
- egse/synoptics/__init__.py +0 -417
- egse/synoptics/syn.yaml +0 -9
- egse/synoptics/syn_cs.py +0 -195
- egse/system.py +0 -1611
- egse/tcs/__init__.py +0 -14
- egse/tcs/tcs.py +0 -879
- egse/tcs/tcs.yaml +0 -14
- egse/tcs/tcs_cs.py +0 -202
- egse/tcs/tcs_devif.py +0 -292
- egse/tcs/tcs_protocol.py +0 -180
- egse/tcs/tcs_sim.py +0 -177
- egse/tcs/tcs_ui.py +0 -543
- egse/tdms.py +0 -171
- egse/tempcontrol/__init__.py +0 -23
- egse/tempcontrol/agilent/agilent34970.py +0 -109
- egse/tempcontrol/agilent/agilent34970.yaml +0 -44
- egse/tempcontrol/agilent/agilent34970_cs.py +0 -114
- egse/tempcontrol/agilent/agilent34970_devif.py +0 -182
- egse/tempcontrol/agilent/agilent34970_protocol.py +0 -96
- egse/tempcontrol/agilent/agilent34972.py +0 -111
- egse/tempcontrol/agilent/agilent34972.yaml +0 -44
- egse/tempcontrol/agilent/agilent34972_cs.py +0 -115
- egse/tempcontrol/agilent/agilent34972_devif.py +0 -189
- egse/tempcontrol/agilent/agilent34972_protocol.py +0 -98
- egse/tempcontrol/beaglebone/beaglebone.py +0 -341
- egse/tempcontrol/beaglebone/beaglebone.yaml +0 -110
- egse/tempcontrol/beaglebone/beaglebone_cs.py +0 -117
- egse/tempcontrol/beaglebone/beaglebone_protocol.py +0 -134
- egse/tempcontrol/beaglebone/beaglebone_ui.py +0 -674
- egse/tempcontrol/digalox/digalox.py +0 -115
- egse/tempcontrol/digalox/digalox.yaml +0 -36
- egse/tempcontrol/digalox/digalox_cs.py +0 -108
- egse/tempcontrol/digalox/digalox_protocol.py +0 -56
- egse/tempcontrol/keithley/__init__.py +0 -33
- egse/tempcontrol/keithley/daq6510.py +0 -662
- egse/tempcontrol/keithley/daq6510.yaml +0 -105
- egse/tempcontrol/keithley/daq6510_cs.py +0 -163
- egse/tempcontrol/keithley/daq6510_devif.py +0 -343
- egse/tempcontrol/keithley/daq6510_protocol.py +0 -79
- egse/tempcontrol/keithley/daq6510_sim.py +0 -186
- egse/tempcontrol/lakeshore/__init__.py +0 -33
- egse/tempcontrol/lakeshore/lsci.py +0 -361
- egse/tempcontrol/lakeshore/lsci.yaml +0 -162
- egse/tempcontrol/lakeshore/lsci_cs.py +0 -174
- egse/tempcontrol/lakeshore/lsci_devif.py +0 -292
- egse/tempcontrol/lakeshore/lsci_protocol.py +0 -76
- egse/tempcontrol/lakeshore/lsci_ui.py +0 -387
- egse/tempcontrol/ni/__init__.py +0 -0
- egse/tempcontrol/spid/spid.py +0 -109
- egse/tempcontrol/spid/spid.yaml +0 -81
- egse/tempcontrol/spid/spid_controller.py +0 -279
- egse/tempcontrol/spid/spid_cs.py +0 -136
- egse/tempcontrol/spid/spid_protocol.py +0 -107
- egse/tempcontrol/spid/spid_ui.py +0 -723
- egse/tempcontrol/srs/__init__.py +0 -22
- egse/tempcontrol/srs/ptc10.py +0 -867
- egse/tempcontrol/srs/ptc10.yaml +0 -227
- egse/tempcontrol/srs/ptc10_cs.py +0 -128
- egse/tempcontrol/srs/ptc10_devif.py +0 -116
- egse/tempcontrol/srs/ptc10_protocol.py +0 -39
- egse/tempcontrol/srs/ptc10_ui.py +0 -906
- egse/ups/apc/apc.py +0 -236
- egse/ups/apc/apc.yaml +0 -45
- egse/ups/apc/apc_cs.py +0 -101
- egse/ups/apc/apc_protocol.py +0 -125
- egse/user.yaml +0 -7
- egse/vacuum/beaglebone/beaglebone.py +0 -149
- egse/vacuum/beaglebone/beaglebone.yaml +0 -44
- egse/vacuum/beaglebone/beaglebone_cs.py +0 -108
- egse/vacuum/beaglebone/beaglebone_devif.py +0 -159
- egse/vacuum/beaglebone/beaglebone_protocol.py +0 -192
- egse/vacuum/beaglebone/beaglebone_ui.py +0 -638
- egse/vacuum/instrutech/igm402.py +0 -91
- egse/vacuum/instrutech/igm402.yaml +0 -90
- egse/vacuum/instrutech/igm402_controller.py +0 -124
- egse/vacuum/instrutech/igm402_cs.py +0 -108
- egse/vacuum/instrutech/igm402_interface.py +0 -49
- egse/vacuum/instrutech/igm402_simulator.py +0 -36
- egse/vacuum/keller/kellerBus.py +0 -256
- egse/vacuum/keller/leo3.py +0 -100
- egse/vacuum/keller/leo3.yaml +0 -38
- egse/vacuum/keller/leo3_controller.py +0 -81
- egse/vacuum/keller/leo3_cs.py +0 -101
- egse/vacuum/keller/leo3_interface.py +0 -33
- egse/vacuum/mks/evision.py +0 -86
- egse/vacuum/mks/evision.yaml +0 -75
- egse/vacuum/mks/evision_cs.py +0 -101
- egse/vacuum/mks/evision_devif.py +0 -313
- egse/vacuum/mks/evision_interface.py +0 -60
- egse/vacuum/mks/evision_simulator.py +0 -24
- egse/vacuum/mks/evision_ui.py +0 -701
- egse/vacuum/pfeiffer/acp40.py +0 -87
- egse/vacuum/pfeiffer/acp40.yaml +0 -60
- egse/vacuum/pfeiffer/acp40_controller.py +0 -117
- egse/vacuum/pfeiffer/acp40_cs.py +0 -109
- egse/vacuum/pfeiffer/acp40_interface.py +0 -40
- egse/vacuum/pfeiffer/acp40_simulator.py +0 -37
- egse/vacuum/pfeiffer/tc400.py +0 -87
- egse/vacuum/pfeiffer/tc400.yaml +0 -83
- egse/vacuum/pfeiffer/tc400_controller.py +0 -136
- egse/vacuum/pfeiffer/tc400_cs.py +0 -109
- egse/vacuum/pfeiffer/tc400_interface.py +0 -70
- egse/vacuum/pfeiffer/tc400_simulator.py +0 -35
- egse/vacuum/pfeiffer/tpg261.py +0 -80
- egse/vacuum/pfeiffer/tpg261.yaml +0 -66
- egse/vacuum/pfeiffer/tpg261_controller.py +0 -150
- egse/vacuum/pfeiffer/tpg261_cs.py +0 -109
- egse/vacuum/pfeiffer/tpg261_interface.py +0 -59
- egse/vacuum/pfeiffer/tpg261_simulator.py +0 -23
- egse/version.py +0 -174
- egse/visitedpositions.py +0 -398
- egse/windowing.py +0 -213
- egse/zmq/__init__.py +0 -28
- egse/zmq/spw.py +0 -160
- egse/zmq_ser.py +0 -41
- scripts/alerts/cold.yaml +0 -278
- scripts/alerts/example_alerts.yaml +0 -54
- scripts/alerts/transition.yaml +0 -14
- scripts/alerts/warm.yaml +0 -49
- scripts/analyse_n_fee_hk_data.py +0 -52
- scripts/check_hdf5_files.py +0 -192
- scripts/check_register_sync.py +0 -47
- scripts/check_tcs_calib_coef.py +0 -90
- scripts/correct_ccd_cold_temperature_cal.py +0 -157
- scripts/create_hdf5_report.py +0 -293
- scripts/csl_model.py +0 -420
- scripts/csl_restore_setup.py +0 -229
- scripts/export-grafana-dashboards.py +0 -49
- scripts/fdir/cs_recovery/fdir_cs_recovery.py +0 -54
- scripts/fdir/fdir_table.yaml +0 -70
- scripts/fdir/fdir_test_recovery.py +0 -10
- scripts/fdir/hw_recovery/fdir_agilent_hw_recovery.py +0 -73
- scripts/fdir/limit_recovery/fdir_agilent_limit.py +0 -61
- scripts/fdir/limit_recovery/fdir_bb_heater_limit.py +0 -59
- scripts/fdir/limit_recovery/fdir_ensemble_limit.py +0 -33
- scripts/fdir/limit_recovery/fdir_pressure_limit_recovery.py +0 -71
- scripts/fix_csv.py +0 -80
- scripts/ias/correct_ccd_temp_cal_elfique.py +0 -43
- scripts/ias/correct_ccd_temp_cal_floreffe.py +0 -43
- scripts/ias/correct_trp_swap_achel.py +0 -199
- scripts/inta/correct_ccd_temp_cal_duvel.py +0 -43
- scripts/inta/correct_ccd_temp_cal_gueuze.py +0 -43
- scripts/n_fee_supply_voltage_calculation.py +0 -92
- scripts/playground.py +0 -30
- scripts/print_hdf5_hk_data.py +0 -68
- scripts/print_register_map.py +0 -43
- scripts/remove_lines_between_matches.py +0 -188
- scripts/sron/commanding/control_heaters.py +0 -44
- scripts/sron/commanding/pumpdown.py +0 -46
- scripts/sron/commanding/set_pid_setpoint.py +0 -19
- scripts/sron/commanding/shutdown_bbb_heaters.py +0 -10
- scripts/sron/commanding/shutdown_pumps.py +0 -33
- scripts/sron/correct_mgse_coordinates_brigand_chimay.py +0 -272
- scripts/sron/correct_trp_swap_brigand.py +0 -204
- scripts/sron/gimbal_conversions.py +0 -75
- scripts/sron/tm_gen/tm_gen_agilent.py +0 -37
- scripts/sron/tm_gen/tm_gen_heaters.py +0 -4
- scripts/sron/tm_gen/tm_gen_spid.py +0 -13
- scripts/update_operational_cgse.py +0 -268
- scripts/update_operational_cgse_old.py +0 -273
egse/dpu/hdf5_model.py
DELETED
|
@@ -1,332 +0,0 @@
|
|
|
1
|
-
from __future__ import annotations
|
|
2
|
-
|
|
3
|
-
from typing import Any
|
|
4
|
-
from typing import List
|
|
5
|
-
from typing import Optional
|
|
6
|
-
|
|
7
|
-
import h5py
|
|
8
|
-
import natsort
|
|
9
|
-
from PyQt5.QtCore import QAbstractItemModel
|
|
10
|
-
from PyQt5.QtCore import QAbstractTableModel
|
|
11
|
-
from PyQt5.QtCore import QModelIndex
|
|
12
|
-
from PyQt5.QtCore import QObject
|
|
13
|
-
from PyQt5.QtCore import Qt
|
|
14
|
-
|
|
15
|
-
from egse.bits import beautify_binary
|
|
16
|
-
from egse.reg import RegisterMap
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
def get_type_name(x) -> str:
|
|
20
|
-
"""Return a readable representation of the type of the given object."""
|
|
21
|
-
if isinstance(x, h5py.Dataset):
|
|
22
|
-
return "Dataset"
|
|
23
|
-
if isinstance(x, h5py.Group):
|
|
24
|
-
return "Group"
|
|
25
|
-
if isinstance(x, h5py.File):
|
|
26
|
-
return "File"
|
|
27
|
-
return str(type(x))
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
class TreeItem:
|
|
31
|
-
"""
|
|
32
|
-
An item (node or leaf) in a generic tree structure.
|
|
33
|
-
"""
|
|
34
|
-
def __init__(self, data: Any, parent: TreeItem = None):
|
|
35
|
-
self._child_items = []
|
|
36
|
-
self._item_data = data
|
|
37
|
-
self._parent_item = parent
|
|
38
|
-
|
|
39
|
-
def append_child(self, child: TreeItem):
|
|
40
|
-
"""Adds a child HDF5Item to this object."""
|
|
41
|
-
self._child_items.append(child)
|
|
42
|
-
|
|
43
|
-
def child(self, row: int) -> Optional[TreeItem]:
|
|
44
|
-
"""Returns the child at the given row. If an invalid row is given, None will be returned."""
|
|
45
|
-
if 0 <= row < len(self._child_items):
|
|
46
|
-
return self._child_items[row]
|
|
47
|
-
return None
|
|
48
|
-
|
|
49
|
-
def child_index(self, item: TreeItem) -> int:
|
|
50
|
-
"""Returns the index (=row) of the child in the list of children."""
|
|
51
|
-
return self._child_items.index(item)
|
|
52
|
-
|
|
53
|
-
def child_count(self) -> int:
|
|
54
|
-
"""Returns the number of children."""
|
|
55
|
-
return len(self._child_items)
|
|
56
|
-
|
|
57
|
-
def last_child(self) -> TreeItem:
|
|
58
|
-
"""Returns the last child from the list of children."""
|
|
59
|
-
return self._child_items[-1]
|
|
60
|
-
|
|
61
|
-
def column_count(self) -> int:
|
|
62
|
-
"""Returns the number of columns for this item."""
|
|
63
|
-
return len(self._item_data)
|
|
64
|
-
|
|
65
|
-
def data(self, column: int):
|
|
66
|
-
"""
|
|
67
|
-
Returns the data in the given column for this item. If an invalid column is provided,
|
|
68
|
-
None is returned.
|
|
69
|
-
"""
|
|
70
|
-
if 0 <= column < len(self._item_data):
|
|
71
|
-
return self._item_data[column]
|
|
72
|
-
return None
|
|
73
|
-
|
|
74
|
-
def row(self) -> int:
|
|
75
|
-
"""
|
|
76
|
-
Returns the row index of this item in the list of children of its parent. Since the root
|
|
77
|
-
item has no parent, row=0 will be returned.
|
|
78
|
-
"""
|
|
79
|
-
if self._parent_item:
|
|
80
|
-
return self._parent_item.child_index(self)
|
|
81
|
-
return 0
|
|
82
|
-
|
|
83
|
-
def parent_item(self) -> Optional[TreeItem]:
|
|
84
|
-
"""Returns the parent item for this item."""
|
|
85
|
-
return self._parent_item
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
class HDF5Item(TreeItem):
|
|
89
|
-
"""
|
|
90
|
-
An item (node or leaf) in a tree structure representing the HDF5 file. The structure is
|
|
91
|
-
represented by a list of child items for this item and a link to the parent for this item.
|
|
92
|
-
|
|
93
|
-
The parent item (HDF5TreeItem) is None for the root item in this linked list. Leaf items have
|
|
94
|
-
no children, i.e. child_count=0.
|
|
95
|
-
"""
|
|
96
|
-
def __init__(self, data: Any, parent: TreeItem = None, expandable: bool = False, item = None):
|
|
97
|
-
super().__init__(data, parent)
|
|
98
|
-
self._expandable = expandable
|
|
99
|
-
self._item = item
|
|
100
|
-
|
|
101
|
-
@property
|
|
102
|
-
def is_expandable(self):
|
|
103
|
-
return self._expandable
|
|
104
|
-
|
|
105
|
-
@property
|
|
106
|
-
def item_name(self):
|
|
107
|
-
return self._item.name
|
|
108
|
-
|
|
109
|
-
@property
|
|
110
|
-
def item_type(self):
|
|
111
|
-
return type(self._item)
|
|
112
|
-
|
|
113
|
-
@property
|
|
114
|
-
def item_size(self):
|
|
115
|
-
if isinstance(self._item, h5py.Dataset):
|
|
116
|
-
size = self._item.shape
|
|
117
|
-
elif isinstance(self._item, h5py.Group):
|
|
118
|
-
size = len(self._item)
|
|
119
|
-
else:
|
|
120
|
-
size = 0
|
|
121
|
-
return size
|
|
122
|
-
|
|
123
|
-
def get_item(self):
|
|
124
|
-
return self._item
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
class TreeModel(QAbstractItemModel):
|
|
128
|
-
"""
|
|
129
|
-
A (more or less) generic tree model.
|
|
130
|
-
|
|
131
|
-
Args:
|
|
132
|
-
data: a list of lists
|
|
133
|
-
|
|
134
|
-
"""
|
|
135
|
-
ExpandableRole = Qt.UserRole + 500
|
|
136
|
-
|
|
137
|
-
def __init__(self, data: Any, header_data: List[str], parent: QObject = None):
|
|
138
|
-
super().__init__(parent)
|
|
139
|
-
self._root_item = TreeItem(header_data)
|
|
140
|
-
self.set_model_data(data, self._root_item)
|
|
141
|
-
|
|
142
|
-
def data(self, index: QModelIndex, role: int = ...) -> Any:
|
|
143
|
-
if not index.isValid():
|
|
144
|
-
return None
|
|
145
|
-
|
|
146
|
-
item: HDF5Item = index.internalPointer()
|
|
147
|
-
|
|
148
|
-
if role == Qt.DisplayRole:
|
|
149
|
-
return item.data(index.column())
|
|
150
|
-
if role == TreeModel.ExpandableRole:
|
|
151
|
-
return item.is_expandable
|
|
152
|
-
return None
|
|
153
|
-
|
|
154
|
-
def flags(self, index: QModelIndex) -> Qt.ItemFlags:
|
|
155
|
-
if not index.isValid():
|
|
156
|
-
return Qt.NoItemFlags
|
|
157
|
-
return super().flags(index)
|
|
158
|
-
|
|
159
|
-
def headerData(self, section: int, orientation: Qt.Orientation, role: int = ...) -> Any:
|
|
160
|
-
if orientation == Qt.Horizontal and role == Qt.DisplayRole:
|
|
161
|
-
return self._root_item.data(section)
|
|
162
|
-
return None
|
|
163
|
-
|
|
164
|
-
def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex:
|
|
165
|
-
|
|
166
|
-
if not self.hasIndex(row, column, parent):
|
|
167
|
-
return QModelIndex()
|
|
168
|
-
|
|
169
|
-
if not parent.isValid():
|
|
170
|
-
parent_item = self._root_item
|
|
171
|
-
else:
|
|
172
|
-
parent_item = parent.internalPointer()
|
|
173
|
-
|
|
174
|
-
child_item = parent_item.child(row)
|
|
175
|
-
|
|
176
|
-
if child_item:
|
|
177
|
-
return self.createIndex(row, column, child_item)
|
|
178
|
-
|
|
179
|
-
return QModelIndex()
|
|
180
|
-
|
|
181
|
-
def parent(self, child: QModelIndex) -> QModelIndex:
|
|
182
|
-
if not child.isValid():
|
|
183
|
-
return QModelIndex()
|
|
184
|
-
|
|
185
|
-
child_item = child.internalPointer()
|
|
186
|
-
parent_item = child_item.parent_item()
|
|
187
|
-
|
|
188
|
-
if parent_item is self._root_item:
|
|
189
|
-
return QModelIndex()
|
|
190
|
-
|
|
191
|
-
return self.createIndex(parent_item.row(), 0, parent_item)
|
|
192
|
-
|
|
193
|
-
def rowCount(self, parent: QModelIndex = ...) -> int:
|
|
194
|
-
if parent.column() > 0:
|
|
195
|
-
row_count = 0
|
|
196
|
-
return row_count
|
|
197
|
-
|
|
198
|
-
if not parent.isValid():
|
|
199
|
-
parent_item = self._root_item
|
|
200
|
-
else:
|
|
201
|
-
parent_item = parent.internalPointer()
|
|
202
|
-
|
|
203
|
-
row_count = parent_item.child_count()
|
|
204
|
-
return row_count
|
|
205
|
-
|
|
206
|
-
def columnCount(self, parent: QModelIndex = ...) -> int:
|
|
207
|
-
if parent.isValid():
|
|
208
|
-
col_count = parent.internalPointer().column_count()
|
|
209
|
-
else:
|
|
210
|
-
col_count = self._root_item.column_count()
|
|
211
|
-
return col_count
|
|
212
|
-
|
|
213
|
-
def hasChildren(self, index: QModelIndex = QModelIndex(), *args, **kwargs):
|
|
214
|
-
|
|
215
|
-
if self.data(index, TreeModel.ExpandableRole):
|
|
216
|
-
has_children = True
|
|
217
|
-
else:
|
|
218
|
-
has_children = super().hasChildren(index)
|
|
219
|
-
|
|
220
|
-
return has_children
|
|
221
|
-
|
|
222
|
-
def set_model_data(self, data: Any, parent: TreeItem):
|
|
223
|
-
raise NotImplementedError
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
class HDF5Model(TreeModel):
|
|
227
|
-
def __init__(self, hdf_file: h5py.File, parent: QObject = None):
|
|
228
|
-
self._hdf_file = hdf_file
|
|
229
|
-
self._hdf_root = hdf_file['/']
|
|
230
|
-
|
|
231
|
-
# Load the first items from the top level group '/' and pass them to the super class
|
|
232
|
-
|
|
233
|
-
data = self.get_model_data(self._hdf_root)
|
|
234
|
-
|
|
235
|
-
header_data = ['Datasets', 'Size', 'Type']
|
|
236
|
-
|
|
237
|
-
super().__init__(data, header_data, parent)
|
|
238
|
-
|
|
239
|
-
def set_model_data(self, data: Any, parent: TreeItem):
|
|
240
|
-
|
|
241
|
-
for item_data, expand, item in data:
|
|
242
|
-
parent.append_child(HDF5Item(item_data, parent, expandable=expand, item=item))
|
|
243
|
-
|
|
244
|
-
def get_model_data(self, group: h5py.Group):
|
|
245
|
-
data = []
|
|
246
|
-
|
|
247
|
-
if len(group) < 2000:
|
|
248
|
-
items = natsort.natsorted(group.items(), key=lambda x: x[0])
|
|
249
|
-
else:
|
|
250
|
-
items = group.items()
|
|
251
|
-
|
|
252
|
-
for name, item in items:
|
|
253
|
-
if isinstance(item, h5py.Dataset):
|
|
254
|
-
size = str(item.shape)
|
|
255
|
-
type_name = str(item.dtype)
|
|
256
|
-
expandable = False
|
|
257
|
-
else:
|
|
258
|
-
size = len(item)
|
|
259
|
-
type_name = get_type_name(item)
|
|
260
|
-
expandable = True
|
|
261
|
-
data.append(([name, size, type_name], expandable, item))
|
|
262
|
-
|
|
263
|
-
return data
|
|
264
|
-
|
|
265
|
-
def update_model_data(self, index: QModelIndex):
|
|
266
|
-
|
|
267
|
-
item: HDF5Item = index.internalPointer()
|
|
268
|
-
|
|
269
|
-
if isinstance(item, h5py.Dataset):
|
|
270
|
-
return
|
|
271
|
-
|
|
272
|
-
if not item.child_count():
|
|
273
|
-
group_name = item.item_name
|
|
274
|
-
group = self._hdf_file[group_name]
|
|
275
|
-
data = self.get_model_data(group)
|
|
276
|
-
self.set_model_data(data, item)
|
|
277
|
-
self.layoutChanged.emit()
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
def convert_data_for_role(data, role):
|
|
281
|
-
if role == 0:
|
|
282
|
-
return int(data)
|
|
283
|
-
if role == 1:
|
|
284
|
-
return f"0x{data:08X}"
|
|
285
|
-
if role == 2:
|
|
286
|
-
return beautify_binary(data, prefix="0b")
|
|
287
|
-
|
|
288
|
-
return data
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
class RegisterTableModel(QAbstractTableModel):
|
|
292
|
-
def __init__(self, reg_map: RegisterMap):
|
|
293
|
-
super().__init__()
|
|
294
|
-
|
|
295
|
-
self.setRegisterMap(reg_map)
|
|
296
|
-
|
|
297
|
-
self._col_names = ["Register name", "Parameter name", "Value"]
|
|
298
|
-
self._display_role = dict()
|
|
299
|
-
|
|
300
|
-
def data(self, index, role):
|
|
301
|
-
if role == Qt.DisplayRole:
|
|
302
|
-
# See below for the nested-list data structure.
|
|
303
|
-
# .row() indexes into the outer list,
|
|
304
|
-
# .column() indexes into the sub-list
|
|
305
|
-
col = index.column()
|
|
306
|
-
row = index.row()
|
|
307
|
-
if col in (0, 1):
|
|
308
|
-
return self._reg_names[row].split(':')[col]
|
|
309
|
-
if col == 2:
|
|
310
|
-
data = self._reg_data[self._reg_names[row]]
|
|
311
|
-
return convert_data_for_role(data, self._display_role.get(row, 0))
|
|
312
|
-
|
|
313
|
-
def setRegisterMap(self, reg_map: RegisterMap):
|
|
314
|
-
self._reg_map = reg_map
|
|
315
|
-
self._reg_data = reg_map.as_dict(flatten=True)
|
|
316
|
-
self._reg_names = list(self._reg_data)
|
|
317
|
-
|
|
318
|
-
def headerData(self, section: int, orientation: Qt.Orientation, role: int = None) -> Any:
|
|
319
|
-
# section is the index of the column/row.
|
|
320
|
-
if role == Qt.DisplayRole and orientation == Qt.Horizontal:
|
|
321
|
-
return self._col_names[section]
|
|
322
|
-
|
|
323
|
-
def toggleDisplayRole(self, index: QModelIndex):
|
|
324
|
-
if index.column() == 2:
|
|
325
|
-
role = self._display_role.get(index.row(), 0) + 1
|
|
326
|
-
self._display_role[index.row()] = role if role < 3 else 0
|
|
327
|
-
|
|
328
|
-
def rowCount(self, index):
|
|
329
|
-
return len(self._reg_names)
|
|
330
|
-
|
|
331
|
-
def columnCount(self, index):
|
|
332
|
-
return 3
|
egse/dpu/hdf5_ui.py
DELETED
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This module provides all the code to generate the main GUI and the GUI components
|
|
3
|
-
used by the HDF5 Viewer.
|
|
4
|
-
"""
|
|
5
|
-
import logging
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
|
|
8
|
-
import h5py
|
|
9
|
-
from PyQt5.QtCore import QAbstractTableModel
|
|
10
|
-
from PyQt5.QtCore import QSize
|
|
11
|
-
from PyQt5.QtCore import QSortFilterProxyModel
|
|
12
|
-
from PyQt5.QtCore import Qt
|
|
13
|
-
from PyQt5.QtGui import QFont
|
|
14
|
-
from PyQt5.QtGui import QIcon
|
|
15
|
-
from PyQt5.QtWidgets import QAction
|
|
16
|
-
from PyQt5.QtWidgets import QLineEdit
|
|
17
|
-
from PyQt5.QtWidgets import QMainWindow
|
|
18
|
-
from PyQt5.QtWidgets import QScrollArea
|
|
19
|
-
from PyQt5.QtWidgets import QSplitter
|
|
20
|
-
from PyQt5.QtWidgets import QStackedWidget
|
|
21
|
-
from PyQt5.QtWidgets import QStatusBar
|
|
22
|
-
from PyQt5.QtWidgets import QTabWidget
|
|
23
|
-
from PyQt5.QtWidgets import QTableView
|
|
24
|
-
from PyQt5.QtWidgets import QTextEdit
|
|
25
|
-
from PyQt5.QtWidgets import QToolBar
|
|
26
|
-
from PyQt5.QtWidgets import QTreeView
|
|
27
|
-
from PyQt5.QtWidgets import QVBoxLayout
|
|
28
|
-
from PyQt5.QtWidgets import QWidget
|
|
29
|
-
|
|
30
|
-
from egse.bits import humanize_bytes
|
|
31
|
-
from egse.dpu.ccd_ui import NFEECCDWidget
|
|
32
|
-
from egse.dpu.hk_ui import NFEEHousekeepingWidget
|
|
33
|
-
from egse.resource import get_resource
|
|
34
|
-
from egse.spw import DataPacket
|
|
35
|
-
|
|
36
|
-
MODULE_LOGGER = logging.getLogger(__name__)
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
class MainWindowGUI:
|
|
40
|
-
def setup_gui(self, main_window: QMainWindow):
|
|
41
|
-
"""
|
|
42
|
-
Creates the widgets in the main window.
|
|
43
|
-
|
|
44
|
-
This method creates the following widgets that are accessible from the main window:
|
|
45
|
-
|
|
46
|
-
* tree_view (QTreeView): visualises a tree structure view of the HDF5 file
|
|
47
|
-
* table_view (QTableView): visualise a table
|
|
48
|
-
* data_view (QStackedLayout): a widget that contains different views
|
|
49
|
-
* graph_box (QtGraph ImageView): visualise a CCD image
|
|
50
|
-
* status_bar (QStatusBar): the status bar of the main window
|
|
51
|
-
|
|
52
|
-
Args:
|
|
53
|
-
main_window (QMainWindow): the main window of the application
|
|
54
|
-
"""
|
|
55
|
-
main_window.setWindowTitle("N-FEE Data Inspector")
|
|
56
|
-
main_window.setObjectName("main_window")
|
|
57
|
-
main_window.resize(1400, 800)
|
|
58
|
-
|
|
59
|
-
splitter = QSplitter()
|
|
60
|
-
splitter.setContentsMargins(0, 0, 0, 0)
|
|
61
|
-
|
|
62
|
-
self.data_box = QSplitter(Qt.Vertical, splitter)
|
|
63
|
-
self.data_box.setMinimumWidth(300)
|
|
64
|
-
self.data_box.setContentsMargins(5, 5, 5, 5)
|
|
65
|
-
|
|
66
|
-
self.tree_view = QTreeView(self.data_box)
|
|
67
|
-
|
|
68
|
-
self.details_view = QTabWidget(self.data_box)
|
|
69
|
-
self.details_view.setTabsClosable(False)
|
|
70
|
-
self.details_view.setMovable(False)
|
|
71
|
-
self.details_view.setDocumentMode(True)
|
|
72
|
-
self.details_view.setElideMode(Qt.ElideRight)
|
|
73
|
-
self.details_view.setUsesScrollButtons(True)
|
|
74
|
-
|
|
75
|
-
self.properties = QTableView()
|
|
76
|
-
self.attributes = QTableView()
|
|
77
|
-
self.packet_header = QTableView()
|
|
78
|
-
|
|
79
|
-
self.details_view.addTab(self.properties, "Properties")
|
|
80
|
-
self.details_view.addTab(self.attributes, "Attributes")
|
|
81
|
-
self.details_view.addTab(self.packet_header, "Packet Header")
|
|
82
|
-
|
|
83
|
-
self.text_box: QTextEdit = QTextEdit()
|
|
84
|
-
self.text_box.setReadOnly(True)
|
|
85
|
-
self.text_box.setFont(QFont("Courier New"))
|
|
86
|
-
self.text_box.setLineWrapMode(QTextEdit.NoWrap)
|
|
87
|
-
|
|
88
|
-
self.table_view = QTableView()
|
|
89
|
-
|
|
90
|
-
self.proxy_model = QSortFilterProxyModel()
|
|
91
|
-
self.proxy_model.setFilterKeyColumn(-1) # Search all columns
|
|
92
|
-
self.proxy_model.setFilterCaseSensitivity(Qt.CaseInsensitive)
|
|
93
|
-
|
|
94
|
-
self.table_view.setModel(self.proxy_model)
|
|
95
|
-
|
|
96
|
-
self.searchbar = QLineEdit()
|
|
97
|
-
|
|
98
|
-
# You can choose the type of search by connecting to a different slot here.
|
|
99
|
-
# see https://doc.qt.io/qt-5/qsortfilterproxymodel.html#public-slots
|
|
100
|
-
|
|
101
|
-
self.searchbar.textChanged.connect(self.proxy_model.setFilterRegExp)
|
|
102
|
-
|
|
103
|
-
layout = QVBoxLayout()
|
|
104
|
-
layout.setContentsMargins(0, 10, 10, 0)
|
|
105
|
-
|
|
106
|
-
layout.addWidget(self.searchbar)
|
|
107
|
-
layout.addWidget(self.table_view)
|
|
108
|
-
|
|
109
|
-
self.table_box = QWidget()
|
|
110
|
-
self.table_box.setLayout(layout)
|
|
111
|
-
|
|
112
|
-
self.hk_box = NFEEHousekeepingWidget()
|
|
113
|
-
|
|
114
|
-
self.graph_box = NFEECCDWidget(ccd_number=None, n_fee_side=main_window.n_fee_side, maximize=False)
|
|
115
|
-
|
|
116
|
-
self.data_view: QStackedWidget = QStackedWidget(splitter)
|
|
117
|
-
self.data_view.addWidget(self.text_box)
|
|
118
|
-
self.data_view.addWidget(self.table_box)
|
|
119
|
-
self.data_view.addWidget(self.hk_box)
|
|
120
|
-
self.data_view.addWidget(self.graph_box)
|
|
121
|
-
self.data_view.setCurrentIndex(0)
|
|
122
|
-
|
|
123
|
-
scroll = QScrollArea()
|
|
124
|
-
scroll.setObjectName("scroll")
|
|
125
|
-
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
|
|
126
|
-
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
|
|
127
|
-
scroll.setWidgetResizable(True)
|
|
128
|
-
|
|
129
|
-
main_window.setCentralWidget(splitter)
|
|
130
|
-
|
|
131
|
-
toolbar = QToolBar("Main Toolbar")
|
|
132
|
-
toolbar.setIconSize(QSize(36, 36))
|
|
133
|
-
main_window.addToolBar(toolbar)
|
|
134
|
-
|
|
135
|
-
self.open_doc_action = QAction(QIcon(str(get_resource(":/icons/open-document-hdf5.png"))),
|
|
136
|
-
"Open HDF5 file...", main_window)
|
|
137
|
-
self.open_doc_action.setStatusTip("Open a new HDF5 file...")
|
|
138
|
-
toolbar.addAction(self.open_doc_action)
|
|
139
|
-
|
|
140
|
-
self.status_bar = QStatusBar(main_window)
|
|
141
|
-
main_window.setStatusBar(self.status_bar)
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
class PropertiesModel(QAbstractTableModel):
|
|
145
|
-
def __init__(self):
|
|
146
|
-
super().__init__()
|
|
147
|
-
self._header = ["Name", "Value"]
|
|
148
|
-
self._data = []
|
|
149
|
-
|
|
150
|
-
def data(self, index, role):
|
|
151
|
-
if role == Qt.DisplayRole:
|
|
152
|
-
value = self._data[index.row()][index.column()]
|
|
153
|
-
try:
|
|
154
|
-
return str(value)
|
|
155
|
-
except (Exception,) as exc:
|
|
156
|
-
return str(exc)
|
|
157
|
-
|
|
158
|
-
def rowCount(self, index):
|
|
159
|
-
return len(self._data)
|
|
160
|
-
|
|
161
|
-
def columnCount(self, index):
|
|
162
|
-
return len(self._data[0])
|
|
163
|
-
|
|
164
|
-
def headerData(self, section, orientation, role):
|
|
165
|
-
if role == Qt.DisplayRole:
|
|
166
|
-
if orientation == Qt.Horizontal:
|
|
167
|
-
return str(self._header[section])
|
|
168
|
-
|
|
169
|
-
if orientation == Qt.Vertical:
|
|
170
|
-
return None
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
class FilePropertiesModel(PropertiesModel):
|
|
174
|
-
def __init__(self, data: h5py.File):
|
|
175
|
-
"""
|
|
176
|
-
Args:
|
|
177
|
-
data: h5py.File
|
|
178
|
-
"""
|
|
179
|
-
super().__init__()
|
|
180
|
-
self._data = [
|
|
181
|
-
["Name", data.name],
|
|
182
|
-
["Path", data.filename],
|
|
183
|
-
["Size", humanize_bytes(Path(data.filename).stat().st_size, precision=0)]
|
|
184
|
-
]
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
class GroupPropertiesModel(PropertiesModel):
|
|
188
|
-
def __init__(self, data: h5py.Group):
|
|
189
|
-
"""
|
|
190
|
-
Args:
|
|
191
|
-
data: h5py.Group
|
|
192
|
-
"""
|
|
193
|
-
super().__init__()
|
|
194
|
-
self._data = [
|
|
195
|
-
["Name", data.name],
|
|
196
|
-
["Id", data.id],
|
|
197
|
-
["Nr. items", len(data.items())],
|
|
198
|
-
]
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
class DatasetPropertiesModel(PropertiesModel):
|
|
202
|
-
def __init__(self, data: h5py.Dataset):
|
|
203
|
-
"""
|
|
204
|
-
Args:
|
|
205
|
-
data: h5py.Dataset
|
|
206
|
-
"""
|
|
207
|
-
super().__init__()
|
|
208
|
-
self._data = [
|
|
209
|
-
["Name", data.name],
|
|
210
|
-
["Id", data.id],
|
|
211
|
-
["Shape", data.shape],
|
|
212
|
-
["Type", data.dtype],
|
|
213
|
-
["Chunks", data.chunks],
|
|
214
|
-
["Nr. dimensions", data.ndim],
|
|
215
|
-
["Size", humanize_bytes(data.size)],
|
|
216
|
-
["Nr. bytes", humanize_bytes(data.nbytes)]
|
|
217
|
-
]
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
class AttributesModel(QAbstractTableModel):
|
|
221
|
-
def __init__(self, data):
|
|
222
|
-
"""
|
|
223
|
-
Args:
|
|
224
|
-
data: h5py.File
|
|
225
|
-
"""
|
|
226
|
-
super().__init__()
|
|
227
|
-
h5_file: h5py.File = data
|
|
228
|
-
self._header = ["Name", "Value"]
|
|
229
|
-
self._data = [[k, str(v)] for k, v in data.attrs.items()]
|
|
230
|
-
|
|
231
|
-
def data(self, index, role):
|
|
232
|
-
if role == Qt.DisplayRole:
|
|
233
|
-
return self._data[index.row()][index.column()]
|
|
234
|
-
|
|
235
|
-
def rowCount(self, index):
|
|
236
|
-
return len(self._data)
|
|
237
|
-
|
|
238
|
-
def columnCount(self, index):
|
|
239
|
-
return len(self._data[0])
|
|
240
|
-
|
|
241
|
-
def headerData(self, section, orientation, role):
|
|
242
|
-
if role == Qt.DisplayRole:
|
|
243
|
-
if orientation == Qt.Horizontal:
|
|
244
|
-
return str(self._header[section])
|
|
245
|
-
|
|
246
|
-
if orientation == Qt.Vertical:
|
|
247
|
-
return None
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
class DataPacketHeaderModel(QAbstractTableModel):
|
|
251
|
-
def __init__(self, data: DataPacket):
|
|
252
|
-
"""
|
|
253
|
-
Args:
|
|
254
|
-
data (DataPacket): SpaceWire data packet
|
|
255
|
-
"""
|
|
256
|
-
super().__init__()
|
|
257
|
-
self._header = ["Name", "Value"]
|
|
258
|
-
packet_header = data.header
|
|
259
|
-
self._data = [[k, str(v)] for k, v in packet_header.as_dict().items()]
|
|
260
|
-
|
|
261
|
-
def data(self, index, role):
|
|
262
|
-
if role == Qt.DisplayRole:
|
|
263
|
-
return self._data[index.row()][index.column()]
|
|
264
|
-
|
|
265
|
-
def rowCount(self, index):
|
|
266
|
-
return len(self._data)
|
|
267
|
-
|
|
268
|
-
def columnCount(self, index):
|
|
269
|
-
return len(self._data[0])
|
|
270
|
-
|
|
271
|
-
def headerData(self, section, orientation, role):
|
|
272
|
-
if role == Qt.DisplayRole:
|
|
273
|
-
if orientation == Qt.Horizontal:
|
|
274
|
-
return str(self._header[section])
|
|
275
|
-
|
|
276
|
-
if orientation == Qt.Vertical:
|
|
277
|
-
return None
|