Belle II Software light-2509-fornax
createBellePi0EtaVetoProbabilityPayloadFromCSV.py
1#!/usr/bin/env python3
2
3
10
11import numpy as np
12import sys
13from typing import Any
14import ROOT
15from ROOT import Belle2
16
17
18def load_csv_as_numpy(filename: str) -> np.ndarray:
19 """
20 Load a CSV with possibly trailing commas and spaces into a flat numpy array of floats.
21 Ensures exactly 7200 values are read.
22 """
23 values = []
24 with open(filename) as f:
25 for line in f:
26 # Split on commas, strip spaces, skip empties
27 numbers = [float(x) for x in line.strip().split(",") if x.strip() != ""]
28 values.extend(numbers)
29
30 values = np.array(values, dtype=np.float64)
31 if values.size != 7200:
32 raise ValueError(f"Expected 7200 values, but got {values.size}")
33 return values
34
35
36def numpy_to_std_vector(array: np.ndarray) -> Any:
37 """
38 Convert a 1D numpy array of floats into a ROOT std::vector<double>.
39 """
40 vec = ROOT.std.vector("double")()
41 vec.reserve(len(array)) # reserve memory for speed
42 for val in array:
43 vec.push_back(float(val))
44 return vec
45
46
47if __name__ == "__main__":
48 if len(sys.argv) < 2:
49 print(f"Usage: {sys.argv[0]} data.csv")
50 sys.exit(1)
51
52 filename = sys.argv[1]
53
54 # --- load CSV as numpy array ---
55 values = load_csv_as_numpy(filename)
56
57 # --- reshape into six chunks of 1200 ---
58 vectors = values.reshape(6, 1200)
59 pi0ProbsFWD, pi0ProbsBRL, pi0ProbsBWD, etaProbsFWD, etaProbsBRL, etaProbsBWD = vectors
60
61 # --- fill ROOT std::vector<double> ---
62 vec_pi0ProbsFWD = numpy_to_std_vector(pi0ProbsFWD)
63 vec_pi0ProbsBRL = numpy_to_std_vector(pi0ProbsBRL)
64 vec_pi0ProbsBWD = numpy_to_std_vector(pi0ProbsBWD)
65 vec_etaProbsFWD = numpy_to_std_vector(etaProbsFWD)
66 vec_etaProbsBRL = numpy_to_std_vector(etaProbsBRL)
67 vec_etaProbsBWD = numpy_to_std_vector(etaProbsBWD)
68
69 # --- create Belle2 parameters object (ROOT class) ---
71 vec_pi0ProbsFWD,
72 vec_pi0ProbsBRL,
73 vec_pi0ProbsBWD,
74 vec_etaProbsFWD,
75 vec_etaProbsBRL,
76 vec_etaProbsBWD,
77 )
78
79 # --- store into conditions database ---
82 db.storeData("BellePi0EtaProbParameters", params, iov)
83
84 print("Successfully loaded parameters and added to DB")
Class for handling the payloads with lookup tables for Belle pi0 and eta probabilities.
static IntervalOfValidity always()
Function that returns an interval of validity that is always valid, c.f.
static Database & Instance()
Instance of a singleton Database.
Definition Database.cc:41