Beamline monitoring (WORK IN PROGRESS)#

Example how to look at the beamline monitoring files.

First let’s set the main imports, functions and load data

[25]:
%load_ext autoreload
%autoreload 2

from pathlib import Path

from famewoks import __version__ as wkflver
from famewoks import __date__ as wkfldate
from famewoks.monitoring import load_monitoring_data
from famewoks.plots import plot_monitoring
from famewoks import _logger

_logger.setLevel("INFO")

#show workflow version
_logger.info(f"--> Using famewoks version: {wkflver} [{wkfldate}]")
INFO [2026-04-03 10:13:16]: --> Using famewoks version: 26.1.0 [2026-03-06]
The autoreload extension is already loaded. To reload it, use:
  %reload_ext autoreload
[26]:
# data directory
datadir = Path("/data/bm30/inhouse/Monitoring_Temp_Vide/status")

# list of configuration settings for the counters (also used in the plot)
confcnts = [  # [flag_load, counter_name, secondary_y, yscale]
    [1, "euro",         True, 1],
    [0, "euro2",        False, 1],
    [0, "ln2",          False, 1],
    [0, "pln2",         False, 1],
    [0, "s7_T1",        False, 1],
    [0, "s7_T2",        False, 1],
    [0, "s7_T3",        False, 1],
    [0, "s7_T4",        False, 1],
    [1, "s7_T5",        False, 1],
    [0, "TGa_in_down",  False, 1],
    [0, "TGa_in_midl",  False, 1],
    [0, "TGa_in_up",    False, 1],
    [0, "TGa_out_down", False, 1],
    [0, "TGa_out_midl", False, 1],
    [0, "TGa_out_up",   False, 1],
    [0, "TXtl2_1",      False, 1],
    [0, "TXtl2_2",      False, 1],
    [0, "T_abs1",       False, 1],
    [0, "T_abs2",       False, 1],
    [0, "T_mc11",       False, 1],
    [0, "T_mc12",       False, 1],
    [0, "T_mc21",       False, 1],
    [0, "T_mc22",       False, 1],
    [0, "T_sb1",        False, 1],
    [0, "T_sd1",        False, 1],
    [0, "T_sd2",        False, 1],
    [0, "T_sf1",        False, 1],
    [0, "T_su1",        False, 1],
    [0, "T_su2",        False, 1],
    [0, "Tmask_in",     False, 1],
    [0, "Tmask_out",    False, 1],
    [0, "Ttungs_down",  False, 1],
    [0, "Ttungs_up",    False, 1],
    [0, "V1",           False, 1],
    [0, "V2",           False, 1],
    [0, "V3",           False, 1],
    [0, "V4",           False, 1],
    [0, "V6",           False, 1],
    [0, "V7",           False, 1],
    [0, "VR",           False, 1],
    [0, "Vac_BSH",      False, 1],
    [0, "Vac_E1",       False, 1],
    [0, "Vac_E2",       False, 1],
    [0, "Vac_E3",       False, 1],
    [0, "Vac_E4",       False, 1],
    [0, "Vac_FE",       False, 1],
    [0, "Vac_M1",       False, 1],
    [0, "Vac_M2",       False, 1],
    [0, "Vac_Mono",     False, 1],
]

# create the list of counters for the data loader and the plotter
selcnts = [confc[1] for confc in confcnts if confc[0]==1]
pltcnts = [confc for confc in confcnts if confc[0]==1]
_logger.info(f"Selected counters: {selcnts}")

# get the list of data files sorted by creation time
fnames = sorted(datadir.glob("*.h5"), key=lambda x: x.stat().st_ctime)
start_date = fnames[0].stem.split("_")[-1]
end_date = fnames[-1].stem.split("_")[-1]
_logger.info(f"Found {len(fnames)} monitoring files from {start_date} to {end_date}")

# choose the last files to load the data
nlast = 3
if nlast > 0:
    fnames = fnames[-nlast:]  # filter on last files
    start_date = fnames[0].stem.split("_")[-1]
    end_date = fnames[-1].stem.split("_")[-1]
    _logger.info(f"Selected last {nlast} files from {start_date} to {end_date}")
INFO [2026-04-03 10:13:16]: Selected counters: ['euro', 's7_T5']
INFO [2026-04-03 10:13:16]: Found 66 monitoring files from 2026-01-01 to 2026-04-03
INFO [2026-04-03 10:13:16]: Selected last 3 files from 2026-04-01 to 2026-04-03
[33]:
df = load_monitoring_data(fnames, selcnts=selcnts)
INFO [2026-04-03 10:40:48]: [monitor_2026-04-01.h5] loaded 46/46 scans: 26-04-01 00:57:12 -> 26-04-01 23:34:46
INFO [2026-04-03 10:40:48]: [monitor_2026-04-02.h5] loaded 46/46 scans: 26-04-02 00:34:43 -> 26-04-02 23:11:35
INFO [2026-04-03 10:40:49]: [monitor_2026-04-03.h5] loaded 20/20 scans: 26-04-03 00:11:32 -> 26-04-03 09:27:24
INFO [2026-04-03 10:40:49]: loaded 112/112 scans
[34]:
fig = plot_monitoring(df, pltcnts)

Data type cannot be displayed: application/vnd.plotly.v1+json

[7]:
from larch.io.specfile_reader import DataSourceSpecH5
[21]:
df = DataSourceSpecH5(fnames[-2])
df.get_scans()
[21]:
[['19813.1', 'loopscan 300 0.2', '2026-04-02T00:34:43.636256+02:00'],
 ['19814.1', 'loopscan 360 1', '2026-04-02T00:36:19.405202+02:00'],
 ['19815.1', 'loopscan 300 0.2', '2026-04-02T01:36:16.031530+02:00'],
 ['19816.1', 'loopscan 360 1', '2026-04-02T01:37:52.542616+02:00'],
 ['19817.1', 'loopscan 300 0.2', '2026-04-02T02:37:49.353902+02:00'],
 ['19818.1', 'loopscan 360 1', '2026-04-02T02:39:26.405384+02:00'],
 ['19819.1', 'loopscan 300 0.2', '2026-04-02T03:39:23.738985+02:00'],
 ['19820.1', 'loopscan 360 1', '2026-04-02T03:40:59.753840+02:00'],
 ['19821.1', 'loopscan 300 0.2', '2026-04-02T04:40:57.120429+02:00'],
 ['19822.1', 'loopscan 360 1', '2026-04-02T04:42:33.916005+02:00'],
 ['19823.1', 'loopscan 300 0.2', '2026-04-02T05:42:30.639637+02:00'],
 ['19824.1', 'loopscan 360 1', '2026-04-02T05:44:07.137903+02:00'],
 ['19825.1', 'loopscan 300 0.2', '2026-04-02T06:44:04.012418+02:00'],
 ['19826.1', 'loopscan 360 1', '2026-04-02T06:45:44.683665+02:00'],
 ['19827.1', 'loopscan 300 0.2', '2026-04-02T07:45:41.079942+02:00'],
 ['19828.1', 'loopscan 360 1', '2026-04-02T07:47:18.113583+02:00'],
 ['19829.1', 'loopscan 300 0.2', '2026-04-02T08:47:14.836748+02:00'],
 ['19830.1', 'loopscan 360 1', '2026-04-02T08:48:56.453521+02:00'],
 ['19831.1', 'loopscan 300 0.2', '2026-04-02T09:48:52.529026+02:00'],
 ['19832.1', 'loopscan 360 1', '2026-04-02T09:50:33.675063+02:00'],
 ['19833.1', 'loopscan 300 0.2', '2026-04-02T10:50:31.952399+02:00'],
 ['19834.1', 'loopscan 360 1', '2026-04-02T10:52:10.289660+02:00'],
 ['19835.1', 'loopscan 300 0.2', '2026-04-02T11:52:07.920423+02:00'],
 ['19836.1', 'loopscan 360 1', '2026-04-02T11:53:47.924275+02:00'],
 ['19837.1', 'loopscan 300 0.2', '2026-04-02T12:53:45.769050+02:00'],
 ['19838.1', 'loopscan 360 1', '2026-04-02T12:55:25.370193+02:00'],
 ['19839.1', 'loopscan 300 0.2', '2026-04-02T13:55:23.001414+02:00'],
 ['19840.1', 'loopscan 360 1', '2026-04-02T13:57:01.555520+02:00'],
 ['19841.1', 'loopscan 300 0.2', '2026-04-02T14:56:58.364559+02:00'],
 ['19842.1', 'loopscan 360 1', '2026-04-02T14:58:40.495378+02:00'],
 ['19843.1', 'loopscan 300 0.2', '2026-04-02T15:58:37.286121+02:00'],
 ['19844.1', 'loopscan 360 1', '2026-04-02T16:00:17.915519+02:00'],
 ['19845.1', 'loopscan 300 0.2', '2026-04-02T17:00:14.834130+02:00'],
 ['19846.1', 'loopscan 360 1', '2026-04-02T17:01:56.337178+02:00'],
 ['19847.1', 'loopscan 300 0.2', '2026-04-02T18:01:53.783180+02:00'],
 ['19848.1', 'loopscan 360 1', '2026-04-02T18:03:35.872555+02:00'],
 ['19849.1', 'loopscan 300 0.2', '2026-04-02T19:03:33.029919+02:00'],
 ['19850.1', 'loopscan 360 1', '2026-04-02T19:05:14.968375+02:00'],
 ['19851.1', 'loopscan 300 0.2', '2026-04-02T20:05:12.034385+02:00'],
 ['19852.1', 'loopscan 360 1', '2026-04-02T20:06:54.829338+02:00'],
 ['19853.1', 'loopscan 300 0.2', '2026-04-02T21:06:52.002326+02:00'],
 ['19854.1', 'loopscan 360 1', '2026-04-02T21:08:28.983257+02:00'],
 ['19855.1', 'loopscan 300 0.2', '2026-04-02T22:08:25.819968+02:00'],
 ['19856.1', 'loopscan 360 1', '2026-04-02T22:10:02.455828+02:00'],
 ['19857.1', 'loopscan 300 0.2', '2026-04-02T23:09:58.532308+02:00'],
 ['19858.1', 'loopscan 360 1', '2026-04-02T23:11:35.602748+02:00']]
[22]:
df.set_scan(19846)
[23]:
df.get_time()
[23]:
'2026-04-02T17:01:56.337178+02:00'
[24]:
df.get_timestamp()
[24]:
1775134916.337178
[ ]: