ATLAS Offline Software
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
python.physvalPostProcessingTools.EfficiencyComputation Class Reference
Collaboration diagram for python.physvalPostProcessingTools.EfficiencyComputation:

Public Member Functions

def __init__ (self, numerator, denominator, output)
 
def __call__ (self, root_file)
 

Static Public Member Functions

def from_yaml (fragment)
 

Public Attributes

 numerator
 
 denominator
 
 output
 

Detailed Description

Definition at line 109 of file physvalPostProcessingTools.py.

Constructor & Destructor Documentation

◆ __init__()

def python.physvalPostProcessingTools.EfficiencyComputation.__init__ (   self,
  numerator,
  denominator,
  output 
)

Definition at line 110 of file physvalPostProcessingTools.py.

110  def __init__(self, numerator, denominator, output):
111  self.numerator = numerator
112  self.denominator = denominator
113  self.output = output
114 

Member Function Documentation

◆ __call__()

def python.physvalPostProcessingTools.EfficiencyComputation.__call__ (   self,
  root_file 
)

Definition at line 115 of file physvalPostProcessingTools.py.

115  def __call__(self, root_file):
116  num = find_histo(root_file, self.numerator)
117  den = find_histo(root_file, self.denominator)
118  if not num or not den:
119  if crash_on_error:
120  raise RuntimeError(f"Missing histogram: {self.numerator} or {self.denominator}")
121  else:
122  logging.error(f"Missing histogram: {self.numerator} or {self.denominator}")
123  return
124 
125  if not ROOT.TEfficiency.CheckConsistency(num, den):
126  logging.warning("Inconsistency detected between numerator and denominator histograms.")
127  logging.info("Attempting to fix...")
128  for i in range(1, num.GetNbinsX() + 1):
129  num_val = num.GetBinContent(i)
130  den_val = den.GetBinContent(i)
131  if den_val == 0:
132  den.SetBinContent(i, 1e-6)
133  den_val = 1e-6 # avoid zero denominator by assigning a tiny epsilon
134  logging.info(f"Setting denominator to a smaller value for bin {i} as it is zero. Any other options?")
135  if num_val > den_val:
136  logging.info(f"For Bin {i}: Num ({num_val}) > Den ({den_val})! Adjusting by setting Den to Num. Any other options?")
137  den.SetBinContent(i, num_val)
138  if not ROOT.TEfficiency.CheckConsistency(num, den):
139  logging.error("Unable to fix histogram inconsistencies. Aborting efficiency calculation.")
140  return
141 
142  eff = ROOT.TEfficiency(num, den)
143  path_parts = self.output.strip("/").split("/")
144  *dir_path, obj_name = path_parts
145  directory_path = "/".join(dir_path)
146  eff.SetName(obj_name)
147  eff.SetTitle(f"{self.numerator}/{self.denominator};{num.GetXaxis().GetTitle()};Efficiency")
148  ensure_directory_exists(root_file, directory_path)
149  root_file.cd(directory_path)
150  eff.Write()
151  logging.info(f"Saved efficiency '{obj_name}' in '{directory_path}'.")
152 

◆ from_yaml()

def python.physvalPostProcessingTools.EfficiencyComputation.from_yaml (   fragment)
static

Definition at line 154 of file physvalPostProcessingTools.py.

154  def from_yaml(fragment):
155  return EfficiencyComputation(
156  numerator=fragment["numerator"],
157  denominator=fragment["denominator"],
158  output=fragment["output"]
159  )
160 

Member Data Documentation

◆ denominator

python.physvalPostProcessingTools.EfficiencyComputation.denominator

Definition at line 112 of file physvalPostProcessingTools.py.

◆ numerator

python.physvalPostProcessingTools.EfficiencyComputation.numerator

Definition at line 111 of file physvalPostProcessingTools.py.

◆ output

python.physvalPostProcessingTools.EfficiencyComputation.output

Definition at line 113 of file physvalPostProcessingTools.py.


The documentation for this class was generated from the following file:
python.processes.powheg.ZZj_MiNNLO.ZZj_MiNNLO.__init__
def __init__(self, base_directory, **kwargs)
Constructor: all process options are set here.
Definition: ZZj_MiNNLO.py:18
python.physvalPostProcessingTools.ensure_directory_exists
def ensure_directory_exists(root_file, path)
— HELPER — ###
Definition: physvalPostProcessingTools.py:37
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:194
TCS::join
std::string join(const std::vector< std::string > &v, const char c=',')
Definition: Trigger/TrigT1/L1Topo/L1TopoCommon/Root/StringUtils.cxx:10
python.physvalPostProcessingTools.find_histo
def find_histo(root_file, path, should_delete=False)
— HELPER — ###
Definition: physvalPostProcessingTools.py:10
Trk::split
@ split
Definition: LayerMaterialProperties.h:38