fg-measurements/plots.py
2025-06-02 09:17:37 +02:00

75 lines
2.0 KiB
Python

# pyright: basic
import plotly.express as px
import pandas as p
from datetime import datetime
from pathlib import Path
p.options.plotting.backend = "plotly"
SHIELD_CERNOX = "LS336 CHD[K]"
BOTTOM_SCREWED_CERNOX = "LS336 CHB[K]"
TOP_SCREWED_CERNOX = "LS336 CHA[K]"
BOTTOM_SAMPLE_CERNOX = "LS218 CH8[K]"
TOP_SAMPLE_CERNOX = "LS218 CH1[K]"
CERNOXES = [
SHIELD_CERNOX,
TOP_SCREWED_CERNOX,
TOP_SAMPLE_CERNOX,
BOTTOM_SAMPLE_CERNOX,
BOTTOM_SCREWED_CERNOX,
]
SHIELD_CUTOFF_TEMP: float = 70.0
CERNOX_CUTOFF_TEMP: float = 25.0
def read_file(
filename: Path,
channels: list[str],
experiment_start: datetime | None = None,
experiment_end: datetime | None = None,
) -> p.DataFrame:
"""
Reads tab-separated file with measurement data, keeping only the columns with the specified header and the date.
"""
df = p.DataFrame(
p.read_csv(filename, sep="\t", index_col=False)[["date"] + channels]
)
df["date"] = p.to_datetime(df["date"], format="%Y-%m-%d_%H-%M-%S-%f")
if experiment_start:
df = df.loc[df["date"] >= experiment_start]
if experiment_end:
df = df.loc[df["date"] <= experiment_end]
df.set_index("date", inplace=True)
return df
def cleanup_query(
min_temp: float = 0, shield_cutoff: float = 70.0, probe_cutoff: float = 25
) -> str:
return f"""0 < `{SHIELD_CERNOX}` < {shield_cutoff} and \
0 < `{TOP_SCREWED_CERNOX}` < {probe_cutoff} and \
0 < `{BOTTOM_SCREWED_CERNOX}` < {probe_cutoff} and \
0 < `{TOP_SAMPLE_CERNOX}` < {probe_cutoff} and \
0 < `{BOTTOM_SCREWED_CERNOX}` < {probe_cutoff}"""
fg230 = read_file(
Path("FG230_monitoring.txt"),
CERNOXES,
experiment_start=datetime.fromisoformat("2025-04-29T14:32:00"),
experiment_end=datetime.fromisoformat("2025-04-29T15:45:00"),
).query(cleanup_query())
fg500 = read_file(
Path("FG500_monitoring.txt"),
CERNOXES,
datetime.fromisoformat("2025-05-30T10:30:00"),
datetime.fromisoformat("2025-05-30T11:32:00"),
).query(cleanup_query())
fg230.plot().show()
fg500.plot().show()