R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
neuland_read_hit_par.py
Go to the documentation of this file.
1"""@package docstring
2Checking the values of cal_to_hit parameters in the root file. The corresponding pandas dataframe can be retrieved.
3"""
4
5import warnings
6
7import numpy as np
8import pandas as pd
9import ROOT
10
11
13 def __init__(self, filename: str):
14 self._filename: str = filename
15 self._hit_par_name: str = "NeulandHitPar"
16 self._par_name_list: list[str] = [
17 "t_diff",
18 "t_sync",
19 "effective_speed",
20 "light_attenuation_length",
21 "light_attenuation_factor",
22 "pedestal",
23 "energy_gain",
24 "pmt_saturation",
25 "pmt_threshold",
26 ]
27 self._par_dict: dict[str, np.typing.NDArray] = {}
28 self._dataframe = pd.DataFrame()
29
30 @property
31 def par_dict(self):
32 """The par_dict property."""
33 return self._par_dict
34
35 @par_dict.setter
36 def par_dict(self, value):
37 self._par_dict = value
38
39 @property
40 def filename(self):
41 """The filename property."""
42 return self._filename
43
44 @filename.setter
45 def filename(self, value):
46 self._filename = value
47
48 @property
49 def hit_par_name(self):
50 """The hit_par_name property."""
51 return self._hit_par_name
52
53 @hit_par_name.setter
54 def hit_par_name(self, value):
55 self._hit_par_name = value
56
57 @property
58 def par_name_list(self):
59 """The par_name_list property."""
60 return self._par_name_list
61
62 @par_name_list.setter
63 def par_name_list(self, value: list[str]):
64 self._par_name_list = value
65
66 @property
67 def dataframe(self):
68 """The dataframe property."""
69 return self._dataframe
70
71 @dataframe.setter
72 def dataframe(self, value):
73 self._dataframe = value
74
75 def header(self):
76 return list(self._dataframe.columns.values)
77
78 def read(self):
79 par_file = ROOT.TFile(self._filename, "read")
80 hit_par = par_file.Get(f"{self._hit_par_name}")
81 self._construct_empty_dict(hit_par)
82 self._fill_data(hit_par)
83 self._dataframe = pd.DataFrame(self._par_dict)
84
85 def _construct_empty_dict(self, hit_par):
86 num_of_modules = hit_par.GetNumOfModules()
87 self._par_dict["bar_id"] = np.zeros(num_of_modules)
88 for par_name in self._par_name_list:
89 dicts = dir(getattr(ROOT.R3B.Neuland.HitModulePar(), par_name))
90 if "left" in dicts:
91 for side in ["left", "right"]:
92 self._par_dict[f"{par_name}.{side}.value"] = np.zeros(
93 num_of_modules
94 )
95 self._par_dict[f"{par_name}.{side}.error"] = np.zeros(
96 num_of_modules
97 )
98 else:
99 self._par_dict[f"{par_name}.error"] = np.zeros(num_of_modules)
100 self._par_dict[f"{par_name}.value"] = np.zeros(num_of_modules)
101
102 def _fill_data(self, hit_par):
103 num_of_modules = hit_par.GetNumOfModules()
104 for bar_id in range(num_of_modules):
105 self._par_dict["bar_id"][bar_id] = bar_id
106 if not hit_par.HasModuleParAt(bar_id + 1):
107 warnings.warn(
108 f"Parameter with module num {bar_id + 1} doesn't exist in the file!"
109 )
110 continue
111 module_par = hit_par.GetModuleParAt(bar_id + 1)
112 for par_name in self._par_name_list:
113 dicts = dir(getattr(ROOT.R3B.Neuland.HitModulePar(), par_name))
114 if "left" in dicts:
115 for side in ["left", "right"]:
116 self._par_dict[f"{par_name}.{side}.value"][bar_id] = getattr(
117 getattr(module_par, par_name), side
118 )().value
119 self._par_dict[f"{par_name}.{side}.error"][bar_id] = getattr(
120 getattr(module_par, par_name), side
121 )().error
122 else:
123 self._par_dict[f"{par_name}.value"][bar_id] = getattr(
124 module_par, par_name
125 ).value
126 self._par_dict[f"{par_name}.error"][bar_id] = getattr(
127 module_par, par_name
128 ).error
hit_par_name(self)
The hit_par_name property.
filename(self)
The filename property.
dataframe(self)
The dataframe property.
par_name_list(self)
The par_name_list property.
par_dict(self)
The par_dict property.