5@date 2025-06-28T18:50:58+09:00
10import plotly.express
as px
11import plotly.graph_objects
as go
12from plotly.subplots
import make_subplots
18def parse_temperature_log(file_path):
20 @brief parse strasse log file
22 @param efile_path input file path
28 in_comment_block =
False
29 with open(file_path,
'r')
as f:
33 if line.startswith(
"///"):
34 in_comment_block =
not in_comment_block
36 if in_comment_block
or line ==
'':
38 data_lines.append(line)
41 df = pd.DataFrame([line.split(
"\t")
for line
in data_lines])
44 df.columns = [
"timestamp"] + [f
"val_{i}" for i
in range(1, len(df.columns))]
48def check_log_onokoro57(input_path=None):
50 @brief read and plot logs
52 @param input_path input file path
55 log_files = sorted(glob.glob(input_path))
57 all_data = pd.concat([parse_temperature_log(f)
for f
in log_files], ignore_index=
True)
59 new_columns = [
"Timestamp",
"Target Holder (bottom)",
"Target Holder (1/3)",
"Target Holder (top)",
"Cold Head (stage 1)",
"Feed-Through (Supply)",
"Feed-Through (Return)",
"2nd stage CH (SD)",
"2nd stage CH (PT)",
"Setpoint(1)",
"PT02 (Cryostat filling line)",
"PT01 (Buffer Tank)",
"Target Chamber",
"Cryostat Chamber",
"Gas System Pump",
"heater output 1",
"heater output 2",
"Cold Valve (ON=100%/OFF=0%)",
"Compressor (ON=100%/OFF=0%)",
"H2 Filling (ON=100%/OFF=0%)"]
61 all_data.columns = new_columns
64 for col
in all_data.columns[1:]:
65 all_data[col] = pd.to_numeric(all_data[col], errors=
'coerce')
67 all_data[
'Timestamp'] = all_data[
'Timestamp'].str.replace(
"h/",
":", regex=
False)\
68 .str.replace(
"m/",
":", regex=
False)\
69 .str.replace(
"s",
"", regex=
False)
71 all_data[
'Timestamp'] = pd.to_datetime(all_data[
'Timestamp'], format=
"%Y/%m/%d_%H:%M:%S")
73 all_data[
'Timestamp'] = all_data[
'Timestamp'].dt.tz_localize(
'Europe/Berlin')
75 all_data[
'Timestamp'] = all_data[
'Timestamp'].dt.tz_convert(
'Asia/Tokyo')
79 x_col = all_data.columns[0]
81 plot_y_labels = [
"Temperatures [K]",
"Pressures [bar]",
"tatus / heater output [%]"]
85 all_data.columns[2:11],
86 all_data.columns[11:16],
87 all_data.columns[16:21],
91 fig = make_subplots(rows=len(groups), cols=1, shared_xaxes=
False, vertical_spacing=0.05)
94 for i, group
in enumerate(groups):
107 fig.update_yaxes(title_text=f
"{plot_y_labels[i]}", row=i + 1, col=1)
111 height=300 * len(groups),
112 title_text=
"STRASSE log viewr",
126 @brief log plot method for uv command
129 @arg input files path for loading
130 @arg experiment-number experiment number
132 parser = argparse.ArgumentParser()
133 parser.add_argument(
"-in",
"--input", help=
"files path for loading", type=str, default=
"./data/onokoro57/logs/*.txt")
134 parser.add_argument(
"-en",
"--experiment-number", help=
"experiment number", type=int, default=57)
135 args = parser.parse_args()
137 input_path: str = args.input
138 experiment_number: int = args.experiment_number
140 if experiment_number == 57:
141 check_log_onokoro57(input_path)
143 print(
'experiment number does not exist')