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
[ ]: