145 def __call__(self, root_file):
146 hist = find_histo(root_file, self.input)
147 if not hist:
148 if crash_on_error:
149 raise RuntimeError(f"Histogram '{self.input}' not found for rebinning.")
150 else:
151 logging.error(f"Histogram '{self.input}' not found for rebinning.")
152 return
153
154 path_parts = self.output.
strip(
"/").
split(
"/")
155 *dir_parts, output_name = path_parts
156 directory_path = "/".join(dir_parts)
157 ensure_directory_exists(root_file, directory_path)
158 root_file.cd(directory_path)
159
160 if hist.GetDimension() == 1:
161 rebinned = hist.Rebin(self.rebin_factor, output_name)
162 rebinned.Write(output_name, ROOT.TObject.kOverwrite)
163 logging.info(f"Rebinned 1D histogram and saved as '{output_name}' in '{directory_path}'.")
164 elif hist.GetDimension() == 2:
165 hist.RebinX(self.rebin_factor)
166 hist.RebinY(self.rebin_factor)
167 hist.SetName(output_name)
168 hist.Write(output_name, ROOT.TObject.kOverwrite)
169 logging.info(f"Rebinned 2D histogram and saved as '{output_name}' in '{directory_path}'.")
170 if self.delete_original:
171 find_histo(root_file, self.input, should_delete=True)
172
std::vector< std::string > split(const std::string &s, const std::string &t=":")