cgse 2024.7.0__py3-none-any.whl → 2025.0.1__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.1.dist-info/METADATA +38 -0
- cgse-2025.0.1.dist-info/RECORD +5 -0
- {cgse-2024.7.0.dist-info → cgse-2025.0.1.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/reprocess.py
DELETED
|
@@ -1,693 +0,0 @@
|
|
|
1
|
-
import glob
|
|
2
|
-
import logging
|
|
3
|
-
import os.path
|
|
4
|
-
from pathlib import Path
|
|
5
|
-
from typing import Union
|
|
6
|
-
|
|
7
|
-
import numpy as np
|
|
8
|
-
import pandas as pd
|
|
9
|
-
from pandas._libs.parsers import EmptyDataError
|
|
10
|
-
from pandas.errors import ParserError
|
|
11
|
-
|
|
12
|
-
from egse import h5
|
|
13
|
-
from egse.config import find_file
|
|
14
|
-
from egse.dpu.fitsgen import add_synoptics
|
|
15
|
-
from egse.dpu.fitsgen import create_fits_from_hdf5
|
|
16
|
-
from egse.dpu.fitsgen import get_hdf5_filenames_for_obsid
|
|
17
|
-
from egse.dpu.fitsgen import get_od
|
|
18
|
-
from egse.fee.n_fee_hk import ORIGIN as N_FEE_ORIGIN
|
|
19
|
-
from egse.fee.n_fee_hk import ORIGIN as ORIGIN_NFEE_HK
|
|
20
|
-
from egse.fee.n_fee_hk import get_calibrated_supply_voltages
|
|
21
|
-
from egse.fee.n_fee_hk import get_calibrated_temperatures
|
|
22
|
-
from egse.fee.nfee import HousekeepingData
|
|
23
|
-
from egse.fov import ORIGIN as FOV_ORIGIN
|
|
24
|
-
from egse.hk import read_conversion_dict
|
|
25
|
-
from egse.obsid import ObservationIdentifier
|
|
26
|
-
from egse.obsid import obsid_from_storage
|
|
27
|
-
from egse.settings import Settings
|
|
28
|
-
from egse.setup import NavigableDict
|
|
29
|
-
from egse.setup import Setup
|
|
30
|
-
from egse.spw import SpaceWirePacket
|
|
31
|
-
from egse.storage import HDF5
|
|
32
|
-
from egse.storage.persistence import CSV
|
|
33
|
-
from egse.synoptics import ORIGIN as SYN_ORIGIN
|
|
34
|
-
from egse.synoptics import read_hk_info as read_syn_info
|
|
35
|
-
from egse.tcs.tcs import ORIGIN as TCS_ORIGIN
|
|
36
|
-
|
|
37
|
-
LOGGER = logging.getLogger(__name__)
|
|
38
|
-
|
|
39
|
-
# sensor_cal_filename = "/Users/sara/work/Instrumentation/Plato/softwareDevelopment/plato-cgse-conf/data/nfee_sensor_calibration_em_v3.yaml"
|
|
40
|
-
# sensor_cal = NavigableDict(Settings.load(filename=sensor_cal_filename))#, add_local_settings=False))
|
|
41
|
-
# data_dir = "/STER/platodata/SRON/plato-data"
|
|
42
|
-
# site = "SRON"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
# def reprocess_campaign(od_start: str, od_end: str, sensor_cal: NavigableDict, archive_dir: str, fixed_archive_dir: str,
|
|
46
|
-
# reprocessed_archive_dir: str):
|
|
47
|
-
# """ Re-process the daily data in the given timespan.
|
|
48
|
-
#
|
|
49
|
-
# Args:
|
|
50
|
-
# - od_start:
|
|
51
|
-
# - od_end
|
|
52
|
-
# - archive_dir: Folder (with sub-folders /daily and /obs) in which the HK files are stored.
|
|
53
|
-
# - fixed_archive_dir: Folder (with sub-folders /daily and /obs) in which the fixed HK files are stored.
|
|
54
|
-
# - reprocessed_archive_dir: Folder (with sub-folders /daily and /obs) in which the re-processed files will be
|
|
55
|
-
# stored.
|
|
56
|
-
# """
|
|
57
|
-
#
|
|
58
|
-
# delta = timedelta(days=1)
|
|
59
|
-
# date_end = datetime.strptime(od_end, "%Y%m%d") # The last OD to re-process [YYYYMMDD]
|
|
60
|
-
# date = datetime.strptime(od_start, "%Y%m%d") # The first OD to re-process [YYYYMMDD]
|
|
61
|
-
#
|
|
62
|
-
# # Re-process the daily N-FEE HK (from the HDF5 files) + synoptics
|
|
63
|
-
#
|
|
64
|
-
# while date <= date_end:
|
|
65
|
-
#
|
|
66
|
-
# od = date.strftime("%Y%m%d") # Current OD [YYYYMMDD]
|
|
67
|
-
# # day_dir = Path(f"{archive_dir}/daily/{od}") # Sub-folder with the data for the given OD
|
|
68
|
-
#
|
|
69
|
-
# reprocess_od(od, sensor_cal, archive_dir, fixed_archive_dir, reprocessed_archive_dir)
|
|
70
|
-
#
|
|
71
|
-
# date += delta
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
def reprocess_od(od: str, site: str, setup: Setup, archive_dir: str, fixed_archive_dir: str,
|
|
75
|
-
reprocessed_archive_dir: str):
|
|
76
|
-
""" Re-processing for the given OD.
|
|
77
|
-
|
|
78
|
-
This re-processing consists of the following steps:
|
|
79
|
-
- Re-processing the N-FEE HK from the HDF5 files;
|
|
80
|
-
- Re-processing the synoptics from the contributing (and potentially fixed) HK files.
|
|
81
|
-
|
|
82
|
-
Args:
|
|
83
|
-
- od: Observation day in the format YYYYMMDD.
|
|
84
|
-
- site: Site ID (CSL/CSL1/CSL2/SRON/IAS/INTA).
|
|
85
|
-
- setup: Setup from which to read all calibration information.
|
|
86
|
-
- archive_dir: Folder (with sub-folders /daily and /obs) in which the HK files are stored.
|
|
87
|
-
- fixed_archive_dir: Folder (with sub-folders /daily and /obs) in which the fixed HK files are stored.
|
|
88
|
-
- reprocessed_archive_dir: Folder (with sub-folders /daily and /obs) in which the re-processed synoptics file
|
|
89
|
-
will be stored.
|
|
90
|
-
"""
|
|
91
|
-
|
|
92
|
-
fee_calibration = setup.camera.fee.calibration
|
|
93
|
-
|
|
94
|
-
# Order is important here: Synoptics builds further on N-FEE HK
|
|
95
|
-
reprocess_daily_n_fee_hk(od, site, fee_calibration, archive_dir, reprocessed_archive_dir, setup) # N-FEE HK
|
|
96
|
-
reprocess_daily_synoptics(od, site, archive_dir, fixed_archive_dir, reprocessed_archive_dir, setup) # Synoptics
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
def reprocess_obsid(obsid: Union[str, int, ObservationIdentifier], site: str, setup: Setup, archive_dir: str,
|
|
101
|
-
fixed_archive_dir: str, reprocessed_archive_dir: str):
|
|
102
|
-
""" Re-processing for the given obsid.
|
|
103
|
-
|
|
104
|
-
This re-processing consists of the following steps:
|
|
105
|
-
- Re-processing the N-FEE HK from the HDF5 files;
|
|
106
|
-
- Re-processing the synoptics from the contributing (and potentially fixed HK files);
|
|
107
|
-
- Re-processing the FITS files from the HDF5 files and (re-processed) synoptics.
|
|
108
|
-
|
|
109
|
-
Args:
|
|
110
|
-
- obsid: Observation identifier.
|
|
111
|
-
- site: Site ID (CSL/CSL1/CSL2/SRON/IAS/INTA).
|
|
112
|
-
- setup: Setup from which to read all calibration information.
|
|
113
|
-
- archive_dir: Folder (with sub-folders /daily and /obs) in which the HK files are stored.
|
|
114
|
-
- fixed_archive_dir: Folder (with sub-folders /daily and /obs) in which the fixed HK files are stored.
|
|
115
|
-
- reprocessed_archive_dir: Folder (with sub-folders /daily and /obs) in which the re-processed synoptics file
|
|
116
|
-
will be stored.
|
|
117
|
-
"""
|
|
118
|
-
|
|
119
|
-
fee_calibration = setup.camera.fee.calibration
|
|
120
|
-
|
|
121
|
-
# Order is important here: Synoptics builds further on N-FEE HK
|
|
122
|
-
reprocess_obs_n_fee_hk(obsid, fee_calibration, archive_dir, reprocessed_archive_dir, setup) # N-FEE HK
|
|
123
|
-
reprocess_obs_synoptics(obsid, site, archive_dir, fixed_archive_dir, reprocessed_archive_dir, setup) # Synoptics
|
|
124
|
-
|
|
125
|
-
reprocess_ccd_data(obsid, archive_dir, reprocessed_archive_dir, setup) # FITS files
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
def reprocess_daily_n_fee_hk(od: str, site: str, fee_calibration: NavigableDict, archive_dir: str,
|
|
129
|
-
reprocessed_archive_dir: str, setup: Setup):
|
|
130
|
-
""" Re-processing the N-FEE HK for the given OD.
|
|
131
|
-
|
|
132
|
-
The procedure is as follows:
|
|
133
|
-
- Read the N-FEE HK information from the TM dictionary. This comprises the name conversion from the original
|
|
134
|
-
name (used by the N-FEE itself and in the HDF5 files) to the conventional name starting with "NFEE", and the
|
|
135
|
-
calibration information for the supply voltages and temperatures.
|
|
136
|
-
- Determine the filename for the N-FEE HK for the given OD.
|
|
137
|
-
- Determine the list of HDF5 filenames acquired during the given OD.
|
|
138
|
-
- Determine the column names to use in the new N-FEE HK file and create a new N-FEE HK file with these.
|
|
139
|
-
- Loop over all these HDF5 files. For each of them, read the uncalibrated values and apply the calibration,
|
|
140
|
-
according to the given calibration information. Then append the raw and calibrated values to the N-FEE HK
|
|
141
|
-
file.
|
|
142
|
-
|
|
143
|
-
Args:
|
|
144
|
-
- od: Observation day in the format YYYYMMDD.
|
|
145
|
-
- site: Site ID (CSL/CSL1/CSL2/SRON/IAS/INTA).
|
|
146
|
-
- fee_calibration: Calibration data for the N-FEE HK.
|
|
147
|
-
- archive_dir: Folder (with sub-folders /daily and /obs) in which the HDF5 files are stored.
|
|
148
|
-
- reprocessed_archive_dir: Folder (with sub-folders /daily and /obs) in which the re-processed N-FEE HK files
|
|
149
|
-
will be stored.
|
|
150
|
-
- setup: Setup.
|
|
151
|
-
"""
|
|
152
|
-
|
|
153
|
-
archive_od_dir = f"{archive_dir}/daily/{od}"
|
|
154
|
-
reprocessed_archive_od_dir = f"{reprocessed_archive_dir}/daily/{od}"
|
|
155
|
-
|
|
156
|
-
# Compose the list of HDF5 filenames for the given OD
|
|
157
|
-
# If there are no HDF5 files, exit with a proper log message
|
|
158
|
-
|
|
159
|
-
hdf5_filenames = glob.glob(f"{archive_od_dir}/*.{HDF5.extension}")
|
|
160
|
-
if len(hdf5_filenames) == 0:
|
|
161
|
-
LOGGER.info(f"No HDF5 files found in {archive_od_dir}")
|
|
162
|
-
return
|
|
163
|
-
|
|
164
|
-
# Use the same filename for the N-FEE HK as before, but store it in the re-processed archive now
|
|
165
|
-
# (don't touch the old N-FEE HK file)
|
|
166
|
-
|
|
167
|
-
n_fee_hk_filename = f"{reprocessed_archive_od_dir}/{od}_{site}_{N_FEE_ORIGIN}.{CSV.extension}"
|
|
168
|
-
|
|
169
|
-
_reprocess_n_fee_hk(hdf5_filenames, n_fee_hk_filename, fee_calibration, setup)
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
def reprocess_obs_n_fee_hk(obsid: Union[str, int, ObservationIdentifier], fee_calibration: NavigableDict,
|
|
173
|
-
archive_dir: str, reprocessed_archive_dir: str, setup: Setup):
|
|
174
|
-
""" Re-processing the synoptics for the given obsid.
|
|
175
|
-
|
|
176
|
-
The procedure is as follows:
|
|
177
|
-
- Read the N-FEE HK information from the TM dictionary. This comprises the name conversion from the original
|
|
178
|
-
name (used by the N-FEE itself and in the HDF5 files) to the conventional name starting with "NFEE", and the
|
|
179
|
-
calibration information for the supply voltages and temperatures.
|
|
180
|
-
- Determine the filename for the N-FEE HK for the given obsid.
|
|
181
|
-
- Determine the list of HDF5 filenames acquired during the given obsid.
|
|
182
|
-
- Determine the column names to use in the new N-FEE HK file and create a new N-FEE HK file with these.
|
|
183
|
-
- Loop over all these HDF5 files. For each of them, read the uncalibrated values and apply the calibration,
|
|
184
|
-
according to the given calibration information. Then append the raw and calibrated values to the N-FEE HK
|
|
185
|
-
file.
|
|
186
|
-
|
|
187
|
-
Args:
|
|
188
|
-
- obsid: Observation identifier.
|
|
189
|
-
- site: Site ID (CSL/CSL1/CSL2/SRON/IAS/INTA).
|
|
190
|
-
- fee_calibration: Calibration data for the N-FEE HK.
|
|
191
|
-
- archive_dir: Folder (with sub-folders /daily and /obs) in which the HDF5 files are stored.
|
|
192
|
-
- reprocessed_archive_dir: Folder (with sub-folders /daily and /obs) in which the re-processed N-FEE HK files
|
|
193
|
-
will be stored.
|
|
194
|
-
- setup: Setup.
|
|
195
|
-
"""
|
|
196
|
-
|
|
197
|
-
obsid = obsid_from_storage(obsid, archive_dir)
|
|
198
|
-
|
|
199
|
-
archive_obsid_dir = f"{archive_dir}/obs/{obsid}"
|
|
200
|
-
reprocessed_archive_obsid_dir = f"{reprocessed_archive_dir}/obs/{obsid}"
|
|
201
|
-
|
|
202
|
-
# Compose the list of HDF5 filenames for the given obsid
|
|
203
|
-
# If there are no HDF5 files, exit with a proper log message
|
|
204
|
-
|
|
205
|
-
hdf5_filenames = get_hdf5_filenames_for_obsid(obsid, data_dir=archive_dir)
|
|
206
|
-
if len(hdf5_filenames) == 0:
|
|
207
|
-
LOGGER.info(f"No HDF5 files found for obsid {obsid}")
|
|
208
|
-
return
|
|
209
|
-
|
|
210
|
-
# Use the same filename for the N-FEE HK as before, but store it in the re-processed archive now
|
|
211
|
-
# (don't touch the old N-FEE HK file)
|
|
212
|
-
|
|
213
|
-
pattern = f"{obsid}_{N_FEE_ORIGIN}_*_*.csv"
|
|
214
|
-
n_fee_hk_filename = find_file(pattern, root=archive_obsid_dir)
|
|
215
|
-
if n_fee_hk_filename is None:
|
|
216
|
-
od = get_od(obsid, archive_dir)[0]
|
|
217
|
-
n_fee_hk_filename = f"{reprocessed_archive_obsid_dir}/{obsid}_{N_FEE_ORIGIN}_{od}.{CSV.extension}"
|
|
218
|
-
else:
|
|
219
|
-
n_fee_hk_filename = f"{reprocessed_archive_obsid_dir}/{n_fee_hk_filename.stem}.{CSV.extension}"
|
|
220
|
-
|
|
221
|
-
_reprocess_n_fee_hk(hdf5_filenames, n_fee_hk_filename, fee_calibration, setup)
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
def _reprocess_n_fee_hk(hdf5_filenames, n_fee_hk_filename: str, fee_calibration: NavigableDict, setup: Setup):
|
|
225
|
-
""" Re-processing the N-FEE HK.
|
|
226
|
-
|
|
227
|
-
The procedure is as follows for the "hk" dataset in all groups of the given list of HDF5 files:
|
|
228
|
-
- Extract the raw values from the SpW packets;
|
|
229
|
-
- Re-name the extracted parameters to the corresponding synoptical name;
|
|
230
|
-
- Apply the calibration for the supply voltages and temperatures;
|
|
231
|
-
- Append a row to the N-FEE HK file with the raw and calibrated values.
|
|
232
|
-
|
|
233
|
-
Args:
|
|
234
|
-
- hdf5_filenames: Filenames of the HDF5 files containing the raw N-FEE HK.
|
|
235
|
-
- n_fee_hk_filename: Filename for the re-processed N-FEE HK file.
|
|
236
|
-
- fee_calibration: Calibration data for the N-FEE HK.
|
|
237
|
-
- setup: Setup.
|
|
238
|
-
"""
|
|
239
|
-
|
|
240
|
-
hk_names_mapping = read_conversion_dict(ORIGIN_NFEE_HK, use_site=False, setup=setup)
|
|
241
|
-
|
|
242
|
-
supply_voltage_calibration = fee_calibration.supply_voltages
|
|
243
|
-
temperature_calibration = fee_calibration.temperatures
|
|
244
|
-
|
|
245
|
-
# name_conversion, n_fee_supply_voltage_cal = read_n_fee_hk_info()
|
|
246
|
-
column_names = ["timestamp", *list(hk_names_mapping.values())]
|
|
247
|
-
|
|
248
|
-
with CSV(filename=n_fee_hk_filename, prep={"column_names": column_names, "mode": 'w'}) as csv:
|
|
249
|
-
|
|
250
|
-
for hdf5_filename in hdf5_filenames:
|
|
251
|
-
|
|
252
|
-
with h5.get_file(hdf5_filename, mode="r") as hdf5_file:
|
|
253
|
-
|
|
254
|
-
try:
|
|
255
|
-
|
|
256
|
-
for group in h5.groups(hdf5_file):
|
|
257
|
-
|
|
258
|
-
# Read the HK from the HDF5 groups and rename them
|
|
259
|
-
|
|
260
|
-
if "hk" in group:
|
|
261
|
-
|
|
262
|
-
# Create a dictionary in which we will gather all the raw and calibrated data for the
|
|
263
|
-
# timestamp in the current group of the current HDF5 file
|
|
264
|
-
|
|
265
|
-
values = {"timestamp": group["timecode"].attrs["timestamp"]}
|
|
266
|
-
|
|
267
|
-
hk_packet = SpaceWirePacket.create_packet(h5.get_data(group["hk"]))
|
|
268
|
-
hk_data = HousekeepingData(hk_packet.data)
|
|
269
|
-
|
|
270
|
-
for orig_name in hk_data:
|
|
271
|
-
try:
|
|
272
|
-
new_name = hk_names_mapping[orig_name]
|
|
273
|
-
values[new_name] = hk_data[orig_name]
|
|
274
|
-
except KeyError:
|
|
275
|
-
pass
|
|
276
|
-
|
|
277
|
-
# Apply the correct calibration
|
|
278
|
-
|
|
279
|
-
calibrated_supply_voltages = get_calibrated_supply_voltages(values,
|
|
280
|
-
supply_voltage_calibration)
|
|
281
|
-
values.update(calibrated_supply_voltages)
|
|
282
|
-
calibrated_temperatures = get_calibrated_temperatures(values, temperature_calibration, setup)
|
|
283
|
-
values.update(calibrated_temperatures)
|
|
284
|
-
|
|
285
|
-
# Store the new N-FEE HK
|
|
286
|
-
|
|
287
|
-
csv.create(values)
|
|
288
|
-
except RuntimeError as exc:
|
|
289
|
-
LOGGER.warning(f"Problem occurred when reading HK from {hdf5_filename} ({exc}). Skipping...")
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
def reprocess_daily_synoptics(od: str, site: str, archive_dir: str, fixed_archive_dir: str,
|
|
293
|
-
reprocessed_archive_dir: str, setup: Setup):
|
|
294
|
-
""" Re-processing the N-FEE HK for the given OD.
|
|
295
|
-
|
|
296
|
-
The procedure is as follows:
|
|
297
|
-
- Compose a list of HK files contributing to the synoptics.
|
|
298
|
-
- Read those files one by one and concatenate them.
|
|
299
|
-
- Sort the concatenated tables in order of ascending timestamp.
|
|
300
|
-
- Store only the relevant columns in the synoptics file.
|
|
301
|
-
|
|
302
|
-
Args:
|
|
303
|
-
- od: Observation day in the format YYYYMMDD.
|
|
304
|
-
- site: Site ID (CSL/CSL1/CSL2/SRON/IAS/INTA).
|
|
305
|
-
- archive_dir: Folder (with sub-folders /daily and /obs) in which the HDF5 files are stored.
|
|
306
|
-
- fixed_archive_dir: Folder (with sub-folders /daily and /obs) in which the fixed HK files are stored.
|
|
307
|
-
- reprocessed_archive_dir: Folder (with sub-folders /daily and /obs) in which the re-processed N-FEE HK files
|
|
308
|
-
will be stored.
|
|
309
|
-
- setup: Setup.
|
|
310
|
-
"""
|
|
311
|
-
|
|
312
|
-
archive_day_dir = f"{archive_dir}/daily/{od}"
|
|
313
|
-
fixed_archive_day_dir = f"{fixed_archive_dir}/daily/{od}"
|
|
314
|
-
reprocessed_archive_day_dir = f"{reprocessed_archive_dir}/daily/{od}"
|
|
315
|
-
|
|
316
|
-
# Determine the filename for the HK that contribute to the synoptics
|
|
317
|
-
# - At this point, the N-FEE HK is re-processed already
|
|
318
|
-
# - Most of the other HK will be stored in the original archive, but some of it may be fixed (for some reason)
|
|
319
|
-
|
|
320
|
-
syn_input_filenames = get_syn_input_filenames_od(od, site, archive_day_dir, fixed_archive_day_dir,
|
|
321
|
-
reprocessed_archive_day_dir)
|
|
322
|
-
|
|
323
|
-
if len(syn_input_filenames) == 0:
|
|
324
|
-
LOGGER.info(f"No HK files contributing the synoptics found in {archive_day_dir} nor {fixed_archive_day_dir}")
|
|
325
|
-
return
|
|
326
|
-
|
|
327
|
-
synoptics_filename = f"{reprocessed_archive_day_dir}/{od}_{site}_{SYN_ORIGIN}.{CSV.extension}"
|
|
328
|
-
_reprocess_synoptics(syn_input_filenames, synoptics_filename, setup)
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
def reprocess_obs_synoptics(obsid: Union[str, int, ObservationIdentifier], site: str, archive_dir: str,
|
|
332
|
-
fixed_archive_dir: str, reprocessed_archive_dir: str, setup: Setup):
|
|
333
|
-
""" Re-processing the N-FEE HK for the given obsid.
|
|
334
|
-
|
|
335
|
-
The procedure is as follows:
|
|
336
|
-
- Compose a list of HK files contributing to the synoptics.
|
|
337
|
-
- Read those files one by one and concatenate them.
|
|
338
|
-
- Sort the concatenated tables in order of ascending timestamp.
|
|
339
|
-
- Store only the relevant columns in the synoptics file.
|
|
340
|
-
|
|
341
|
-
Args:
|
|
342
|
-
- obsid: Observation identifier.
|
|
343
|
-
- site: Site ID (CSL/CSL1/CSL2/SRON/IAS/INTA).
|
|
344
|
-
- archive_dir: Folder (with sub-folders /daily and /obs) in which the HDF5 files are stored.
|
|
345
|
-
- fixed_archive_dir: Folder (with sub-folders /daily and /obs) in which the fixed HK files are stored.
|
|
346
|
-
- reprocessed_archive_dir: Folder (with sub-folders /daily and /obs) in which the re-processed synoptics files
|
|
347
|
-
will be stored.
|
|
348
|
-
- setup: Setup.
|
|
349
|
-
"""
|
|
350
|
-
|
|
351
|
-
obsid = obsid_from_storage(obsid, archive_dir)
|
|
352
|
-
|
|
353
|
-
archive_obs_dir = f"{archive_dir}/obs/{obsid}"
|
|
354
|
-
fixed_archive_obs_dir = f"{fixed_archive_dir}/obs/{obsid}"
|
|
355
|
-
reprocessed_archive_obs_dir = f"{reprocessed_archive_dir}/obs/{obsid}"
|
|
356
|
-
|
|
357
|
-
# Determine the filename for the HK that contribute to the synoptics
|
|
358
|
-
# - At this point, the N-FEE HK is re-processed already
|
|
359
|
-
# - Most of the other HK will be stored in the original archive, but some of it may be fixed (for some reason)
|
|
360
|
-
|
|
361
|
-
syn_input_filenames = get_syn_input_filename_obs(obsid, site, archive_obs_dir, fixed_archive_obs_dir,
|
|
362
|
-
reprocessed_archive_obs_dir)
|
|
363
|
-
|
|
364
|
-
if len(syn_input_filenames) == 0:
|
|
365
|
-
LOGGER.info(f"No HK files contributing the synoptics found in {archive_obs_dir} nor {fixed_archive_obs_dir}")
|
|
366
|
-
return
|
|
367
|
-
|
|
368
|
-
pattern = f"{obsid}_{SYN_ORIGIN}_*_*.csv"
|
|
369
|
-
synoptics_filename = find_file(pattern, root=archive_obs_dir)
|
|
370
|
-
|
|
371
|
-
if not os.path.exists(f"{reprocessed_archive_obs_dir}"):
|
|
372
|
-
os.makedirs(f"{reprocessed_archive_obs_dir}/{obsid}")
|
|
373
|
-
|
|
374
|
-
if synoptics_filename is None:
|
|
375
|
-
od = get_od(obsid, archive_dir)[0]
|
|
376
|
-
synoptics_filename = f"{reprocessed_archive_obs_dir}/{obsid}_{SYN_ORIGIN}_{od}.{CSV.extension}"
|
|
377
|
-
else:
|
|
378
|
-
synoptics_filename = f"{reprocessed_archive_obs_dir}/{synoptics_filename.stem}.{CSV.extension}"
|
|
379
|
-
|
|
380
|
-
_reprocess_synoptics(syn_input_filenames, synoptics_filename, setup)
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
def _reprocess_synoptics(syn_input_filenames, synoptics_filename: str, setup: Setup):
|
|
384
|
-
""" Re-processing the synoptics.
|
|
385
|
-
|
|
386
|
-
The procedure is as follows:
|
|
387
|
-
- Compose a list of HK files contributing to the synoptics.
|
|
388
|
-
- Read those files one by one and concatenate them.
|
|
389
|
-
- Sort the concatenated tables in order of ascending timestamp.
|
|
390
|
-
- Store only the relevant columns in the synoptics file.
|
|
391
|
-
|
|
392
|
-
Args:
|
|
393
|
-
- syn_input_filenames: Filenames of the HK files contributing to the synoptics.
|
|
394
|
-
- synoptics_filename: Filename for the re-processed synoptics file.
|
|
395
|
-
- setup: Setup.
|
|
396
|
-
"""
|
|
397
|
-
|
|
398
|
-
syn_names, original_name_egse, original_name_th = read_syn_info(setup)
|
|
399
|
-
|
|
400
|
-
# Concatenate the content of all contributing HK files
|
|
401
|
-
|
|
402
|
-
concatenated_hk = pd.DataFrame()
|
|
403
|
-
|
|
404
|
-
for syn_input_filename in syn_input_filenames:
|
|
405
|
-
try:
|
|
406
|
-
syn_input_file = pd.read_csv(syn_input_filename)
|
|
407
|
-
|
|
408
|
-
concatenated_hk = concatenated_hk.append(syn_input_file)
|
|
409
|
-
except (ParserError, EmptyDataError) as exc:
|
|
410
|
-
LOGGER.warning(f"Problem with the content of {syn_input_file} ({exc}). "
|
|
411
|
-
f"The file is either empty or poorly formatted. Skipping...")
|
|
412
|
-
|
|
413
|
-
# Sort according to ascending timestamp
|
|
414
|
-
|
|
415
|
-
concatenated_hk = concatenated_hk.sort_values(by=['timestamp'])
|
|
416
|
-
|
|
417
|
-
# Convert the HK names to synoptical names (starting with "GSYN_")
|
|
418
|
-
|
|
419
|
-
concatenated_hk = concatenated_hk.rename(columns=original_name_egse)
|
|
420
|
-
concatenated_hk = concatenated_hk.rename(columns=original_name_th)
|
|
421
|
-
|
|
422
|
-
# # Fill NaNs
|
|
423
|
-
#
|
|
424
|
-
# concatenated_hk = concatenated_hk.fillna(method="ffill")
|
|
425
|
-
# # concatenated_hk = concatenated_hk.fillna(method="bfill") # This is only relevant for the first few seconds
|
|
426
|
-
|
|
427
|
-
available_syn_names = np.delete(syn_names, np.where(syn_names == "timestamp"))
|
|
428
|
-
missing_syn_names = np.array([])
|
|
429
|
-
|
|
430
|
-
for syn_name in available_syn_names:
|
|
431
|
-
if syn_name not in concatenated_hk:
|
|
432
|
-
available_syn_names = np.delete(available_syn_names, np.where(available_syn_names == syn_name))
|
|
433
|
-
missing_syn_names = np.append(missing_syn_names, syn_name)
|
|
434
|
-
|
|
435
|
-
# For numerical columns, use the mean; for boolean columns, use any (unless they are all NaN)
|
|
436
|
-
|
|
437
|
-
# agg_dict = {syn_name: np.mean for syn_name in available_syn_names}
|
|
438
|
-
#
|
|
439
|
-
# def any_func(arr):
|
|
440
|
-
# if arr.isnull().values.all():
|
|
441
|
-
# return float('nan')
|
|
442
|
-
# return any(arr)
|
|
443
|
-
#
|
|
444
|
-
# def mean_func(arr):
|
|
445
|
-
# if arr.isnull().values.all():
|
|
446
|
-
# return float('nan')
|
|
447
|
-
# return np.nanmean(arr)
|
|
448
|
-
#
|
|
449
|
-
# agg_dict = {syn_name: mean_func for syn_name in available_syn_names}
|
|
450
|
-
#
|
|
451
|
-
# agg_dict["GSYN_OGSE_LAMP_ON"] = any_func
|
|
452
|
-
# agg_dict["GSYN_OGSE_LASER_ON"] = any_func
|
|
453
|
-
# agg_dict["GSYN_OGSE_SHUTTER_OPEN"] = any_func
|
|
454
|
-
#
|
|
455
|
-
# concatenated_hk = concatenated_hk.groupby("timestamp").agg(agg_dict)
|
|
456
|
-
|
|
457
|
-
num_rows = len(concatenated_hk.index)
|
|
458
|
-
for missing_syn_name in missing_syn_names:
|
|
459
|
-
concatenated_hk[missing_syn_name] = [float('nan')] * num_rows
|
|
460
|
-
|
|
461
|
-
concatenated_hk.to_csv(synoptics_filename, columns=syn_names, index=False)
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
def get_syn_input_filenames_od(od: str, site: str, archive_day_dir: str, fixed_archive_day_dir: str,
|
|
465
|
-
reprocessed_archive_day_dir: str):
|
|
466
|
-
""" Return list of filenames for the HK files contributing to the synoptics of the given TH for the given OD.
|
|
467
|
-
|
|
468
|
-
Returns: List of filenames for the HK files contributing to the synoptics of the given TH.
|
|
469
|
-
|
|
470
|
-
Args:
|
|
471
|
-
- od: Observation day in the format YYYYMMDD.
|
|
472
|
-
- site: Site ID (CSL/CSL1/CSL2/SRON/IAS/INTA).
|
|
473
|
-
- archive_day_dir: Folder in which the HK files are stored for the given OD.
|
|
474
|
-
- fixed_archive_day_dir: Folder in which the fixed HK files are stored for the given OD.
|
|
475
|
-
- reprocessed_archive_day_dir: Folder in which the re-processed synoptics file will be stored for the given OD.
|
|
476
|
-
"""
|
|
477
|
-
|
|
478
|
-
syn_input_origins = get_syn_input_origins(site)
|
|
479
|
-
return get_syn_input_filenames_from_origins_od(syn_input_origins, od, site, archive_day_dir, fixed_archive_day_dir,
|
|
480
|
-
reprocessed_archive_day_dir)
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
def get_syn_input_filename_obs(obsid: str, site: str, archive_obs_dir: str, fixed_archive_obs_dir: str,
|
|
484
|
-
reprocessed_archive_obs_dir: str):
|
|
485
|
-
""" Return list of filenames for the HK files contributing to the synoptics of the given TH for the given obsid.
|
|
486
|
-
|
|
487
|
-
Returns: List of filenames for the HK files contributing to the synoptics of the given TH.
|
|
488
|
-
|
|
489
|
-
Args:
|
|
490
|
-
- obsid: Observation identifier.
|
|
491
|
-
- site: Site ID (CSL/CSL1/CSL2/SRON/IAS/INTA).
|
|
492
|
-
- archive_obs_dir: Folder in which the HK files are stored for the given obsid.
|
|
493
|
-
- fixed_archive_obs_dir: Folder in which the fixed HK files are stored for the given obsid.
|
|
494
|
-
- reprocessed_archive_obs_dir: Folder in which the re-processed synoptics file will be stored for the given
|
|
495
|
-
obsid.
|
|
496
|
-
"""
|
|
497
|
-
|
|
498
|
-
syn_input_origins = get_syn_input_origins(site)
|
|
499
|
-
return get_syn_input_filenames_from_origins_obs(syn_input_origins, obsid, archive_obs_dir,
|
|
500
|
-
fixed_archive_obs_dir, reprocessed_archive_obs_dir)
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
def get_syn_input_origins(site: str):
|
|
504
|
-
""" Return list of storage mnemonics for the HK files contributing to the synoptics at the given TH.
|
|
505
|
-
|
|
506
|
-
Returns: List of storage mnemonics for the HK files contributing to the synoptics at the given TH.
|
|
507
|
-
"""
|
|
508
|
-
|
|
509
|
-
# Non-TH-specific HK files:
|
|
510
|
-
# - N-FEE HK (potentially re-processed)
|
|
511
|
-
# - FOV HK
|
|
512
|
-
|
|
513
|
-
common_syn_input_origins = [N_FEE_ORIGIN, FOV_ORIGIN]
|
|
514
|
-
|
|
515
|
-
# TH-specific HK files
|
|
516
|
-
|
|
517
|
-
sitehash = {
|
|
518
|
-
"CSL": csl_get_syn_input_origins,
|
|
519
|
-
"CSL1": csl_get_syn_input_origins,
|
|
520
|
-
"CSL2": csl_get_syn_input_origins,
|
|
521
|
-
"IAS": ias_get_syn_input_origins,
|
|
522
|
-
"INTA": inta_get_syn_input_origins,
|
|
523
|
-
"SRON": sron_get_syn_input_origins,
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
th_syn_input_origins = sitehash[site]()
|
|
527
|
-
|
|
528
|
-
return [*common_syn_input_origins, *th_syn_input_origins]
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
def csl_get_syn_input_origins():
|
|
532
|
-
""" Return list of storage mnemonics for the HK files contributing to the synoptics specifically for CSL.
|
|
533
|
-
|
|
534
|
-
Returns: List of storage mnemonics for the HK files contributing to the synoptics specifically for CSL.
|
|
535
|
-
"""
|
|
536
|
-
|
|
537
|
-
return ["OGSE"]
|
|
538
|
-
#[Settings.load("OGSE Control Server").STORAGE_MNEMONIC]
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
def sron_get_syn_input_origins():
|
|
542
|
-
""" Return list of storage mnemonics for the HK files contributing to the synoptics specifically for SRON.
|
|
543
|
-
|
|
544
|
-
Returns: List of storage mnemonics for the HK files contributing to the synoptics specifically for SRON.
|
|
545
|
-
"""
|
|
546
|
-
|
|
547
|
-
return [TCS_ORIGIN,
|
|
548
|
-
Settings.load("BeagleBone Lamp Control Server").STORAGE_MNEMONIC,
|
|
549
|
-
Settings.load("Thorlabs PM100 Control Server").STORAGE_MNEMONIC,
|
|
550
|
-
Settings.load("Standa 8SMC5 Control Server").STORAGE_MNEMONIC,
|
|
551
|
-
Settings.load("Thorlabs SC10 Control Server").STORAGE_MNEMONIC,
|
|
552
|
-
Settings.load("Agilent 34970 Control Server").DAQ0["STORAGE_MNEMONIC"],
|
|
553
|
-
Settings.load("Agilent 34970 Control Server").DAQ1["STORAGE_MNEMONIC"],
|
|
554
|
-
Settings.load("Agilent 34972 Control Server").DAQ0["STORAGE_MNEMONIC"],
|
|
555
|
-
Settings.load("Agilent 34972 Control Server").DAQ1["STORAGE_MNEMONIC"]]
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
def ias_get_syn_input_origins():
|
|
559
|
-
""" Return list of storage mnemonics for the HK files contributing to the synoptics specifically for IAS.
|
|
560
|
-
|
|
561
|
-
Returns: List of storage mnemonics for the HK files contributing to the synoptics specifically for IAS.
|
|
562
|
-
"""
|
|
563
|
-
|
|
564
|
-
return [TCS_ORIGIN,
|
|
565
|
-
f"DAS-{Settings.load('Keithley Control Server').STORAGE_MNEMONIC}",
|
|
566
|
-
f"DAS-{Settings.load('SRS PTC10 Control Server').STORAGE_MNEMONIC}",
|
|
567
|
-
Settings.load("Lamp EQ99 Control Server").STORAGE_MNEMONIC,
|
|
568
|
-
Settings.load("Thorlabs PM100 Control Server").STORAGE_MNEMONIC,
|
|
569
|
-
"KSC101"]
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
def inta_get_syn_input_origins():
|
|
573
|
-
""" Return list of storage mnemonics for the HK files contributing to the synoptics specifically for INTA.
|
|
574
|
-
|
|
575
|
-
Returns: List of storage mnemonics for the HK files contributing to the synoptics specifically for INTA.
|
|
576
|
-
"""
|
|
577
|
-
|
|
578
|
-
# return [TCS_ORIGIN,
|
|
579
|
-
# ]
|
|
580
|
-
raise NotImplementedError
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
def get_syn_input_filenames_from_origins_od(origins: list, od: str, site: str, archive_day_dir: str,
|
|
584
|
-
fixed_archive_day_dir: str, reprocessed_archive_day_dir: str):
|
|
585
|
-
"""
|
|
586
|
-
Return list of filenames for the given OD for the given list of origins.
|
|
587
|
-
|
|
588
|
-
Returns: List of filenames for the given OD for the given list of origins.
|
|
589
|
-
|
|
590
|
-
Args:
|
|
591
|
-
- origins: List of storage mnemonics for the HK files contributing to the synoptics at the given TH.
|
|
592
|
-
- od: Observation day in the format YYYYMMDD.
|
|
593
|
-
- site: Site ID (CSL/CSL1/CSL2/SRON/IAS/INTA).
|
|
594
|
-
- archive_day_dir: Folder in which the HK files are stored for the given OD.
|
|
595
|
-
- fixed_archive_day_dir: Folder in which the fixed HK files are stored for the given OD.
|
|
596
|
-
- reprocessed_archive_day_dir: Folder in which the re-processed synoptics file will be stored for the given OD.
|
|
597
|
-
"""
|
|
598
|
-
|
|
599
|
-
filenames = []
|
|
600
|
-
|
|
601
|
-
for origin in origins:
|
|
602
|
-
|
|
603
|
-
filename = f"{od}_{site}_{origin}.{CSV.extension}"
|
|
604
|
-
|
|
605
|
-
# The N-FEE HK must be re-processed already
|
|
606
|
-
|
|
607
|
-
if origin == N_FEE_ORIGIN:
|
|
608
|
-
if Path(f"{reprocessed_archive_day_dir}/{filename}").is_file():
|
|
609
|
-
filenames.append(f"{reprocessed_archive_day_dir}/{filename}")
|
|
610
|
-
else:
|
|
611
|
-
LOGGER.debug(f"No re-processed N-FEE HK available in {reprocessed_archive_day_dir}")
|
|
612
|
-
|
|
613
|
-
# For all other HK: first check whether there is a fixed version. If there is one, use that; otherwise, use
|
|
614
|
-
# the original version from the archive (if that is available).
|
|
615
|
-
|
|
616
|
-
else:
|
|
617
|
-
|
|
618
|
-
if Path(f"{fixed_archive_day_dir}/{filename}").is_file():
|
|
619
|
-
filenames.append(f"{fixed_archive_day_dir}/{filename}")
|
|
620
|
-
LOGGER.debug(f"Using the fixed HK for {origin}")
|
|
621
|
-
elif Path(f"{archive_day_dir}/{filename}").is_file():
|
|
622
|
-
filenames.append(f"{archive_day_dir}/{filename}")
|
|
623
|
-
LOGGER.debug(f"Using the originally archived HK for {origin}")
|
|
624
|
-
else:
|
|
625
|
-
LOGGER.debug(f"No HK file available for {origin}, neither in {fixed_archive_day_dir} nor "
|
|
626
|
-
f"{archive_day_dir}")
|
|
627
|
-
|
|
628
|
-
return filenames
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
def get_syn_input_filenames_from_origins_obs(origins: list, obsid: str, archive_obs_dir: str,
|
|
632
|
-
fixed_archive_obs_dir: str, reprocessed_archive_obs_dir: str):
|
|
633
|
-
""" Return list of filenames for the given obsid for the given list of origins.
|
|
634
|
-
|
|
635
|
-
Returns: List of filenames for the given obsid for the given list of origins.
|
|
636
|
-
|
|
637
|
-
Args:
|
|
638
|
-
- origins: List of storage mnemonics for the HK files contributing to the synoptics at the given TH.
|
|
639
|
-
- obsid: Observation identifier.
|
|
640
|
-
- archive_obs_dir: Folder in which the HK files are stored for the given obsid.
|
|
641
|
-
- fixed_archive_obs_dir: Folder in which the fixed HK files are stored for the given obsid.
|
|
642
|
-
- reprocessed_archive_obs_dir: Folder in which the re-processed synoptics file will be stored for the given
|
|
643
|
-
obsid.
|
|
644
|
-
"""
|
|
645
|
-
|
|
646
|
-
filenames = []
|
|
647
|
-
|
|
648
|
-
for origin in origins:
|
|
649
|
-
|
|
650
|
-
pattern = f"{obsid}_{origin}_*_*.{CSV.extension}"
|
|
651
|
-
filename = find_file(pattern, root=reprocessed_archive_obs_dir)
|
|
652
|
-
|
|
653
|
-
if filename is None:
|
|
654
|
-
|
|
655
|
-
filename = find_file(pattern, root=fixed_archive_obs_dir)
|
|
656
|
-
|
|
657
|
-
if filename is None:
|
|
658
|
-
filename = find_file(pattern, root=archive_obs_dir)
|
|
659
|
-
|
|
660
|
-
if filename is None:
|
|
661
|
-
LOGGER.debug(f"No HK file available for {origin}, neither in {fixed_archive_obs_dir} nor "
|
|
662
|
-
f"{archive_obs_dir}")
|
|
663
|
-
else:
|
|
664
|
-
filenames.append(f"{archive_obs_dir}/{filename}")
|
|
665
|
-
LOGGER.debug(f"Using the originally archived HK for {origin}")
|
|
666
|
-
else:
|
|
667
|
-
filenames.append(f"{fixed_archive_obs_dir}/{filename.stem}.{CSV.extension}")
|
|
668
|
-
LOGGER.debug(f"Using the fixed HK for {origin}")
|
|
669
|
-
|
|
670
|
-
else:
|
|
671
|
-
filenames.append(f"{fixed_archive_obs_dir}/{filename.stem}.{CSV.extension}")
|
|
672
|
-
LOGGER.debug(f"Using the re-processed HK for {origin}")
|
|
673
|
-
|
|
674
|
-
return filenames
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
def reprocess_ccd_data(obsid: str, archive_dir: str, reprocessed_archive_dir: str, setup: Setup):
|
|
678
|
-
""" Re-processing of the CCD data for the given obsid.
|
|
679
|
-
|
|
680
|
-
Args:
|
|
681
|
-
- obsid: Observation identifier.
|
|
682
|
-
- archive_dir: Folder (with sub-folders /daily and /obs) in which the HDF5 and HK files are stored.
|
|
683
|
-
- fixed_archive_dir: Folder (with sub-folders /daily and /obs) in which the fixed HK files are stored.
|
|
684
|
-
- reprocessed_archive_dir: Folder (with sub-folders /daily and /obs) in which the re-processed files will be
|
|
685
|
-
stored.
|
|
686
|
-
"""
|
|
687
|
-
|
|
688
|
-
hdf5_filenames = get_hdf5_filenames_for_obsid(obsid, data_dir=archive_dir)
|
|
689
|
-
create_fits_from_hdf5(hdf5_filenames, location=reprocessed_archive_dir, setup=setup)
|
|
690
|
-
|
|
691
|
-
fee_side = setup.camera.fee.ccd_sides.enum
|
|
692
|
-
|
|
693
|
-
add_synoptics(obsid, data_dir=reprocessed_archive_dir, fee_side=fee_side)
|