ATLAS Offline Software
AsgForwardElectronLikelihoodTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
13 // Include this class's header
18 
19 // STL includes
20 #include <cmath>
21 #include <cstdint>
22 #include <string>
23 
24 // EDM includes
28 #include "TEnv.h"
30 #include "xAODEgamma/Electron.h"
31 #include "xAODTracking/Vertex.h"
32 
33 //=============================================================================
34 // Standard constructor
35 //=============================================================================
36 AsgForwardElectronLikelihoodTool::AsgForwardElectronLikelihoodTool(
37  const std::string& myname)
38  : AsgTool(myname)
39  , m_configFile{ "" }
40  , m_rootForwardTool{ nullptr }
41 {
42 
43  // Create an instance of the underlying ROOT tool
44  m_rootForwardTool =
45  new Root::TForwardElectronLikelihoodTool(("T" + myname).c_str());
46 
47  // Declare the needed properties
48  declareProperty("WorkingPoint", m_WorkingPoint = "", "The Working Point");
49  declareProperty("ConfigFile", m_configFile = "", "The config file to use");
51  "usePVContainer", m_usePVCont = true, "Whether to use the PV container");
53  "nPVdefault", m_nPVdefault = 0, "The default number of PVs if not counted");
54  //
55  // Configurables in the root tool
56  //
57  // pdf file name. Managed in the Asg tool.
58  declareProperty("inputPDFFileName",
59  m_pdfFileName = "",
60  "The input ROOT file name that holds the PDFs");
61  // the variable names, if non-standard - nope, it's done above!
62  declareProperty("VariableNames",
63  m_rootForwardTool->m_variableNames,
64  "Variable names input to the LH");
65 
66  // The likelihood cut values
67  declareProperty("CutLikelihood",
68  m_rootForwardTool->m_cutLikelihood,
69  "Cut on likelihood discriminant");
70  // do pileup-dependent discriminant cut
71  declareProperty("DiscCutSlopeForPileupTransform",
72  m_rootForwardTool->m_cutLikelihoodPileupCorrectionA,
73  "Slope correction for pileup dependent discriminant cut");
74  declareProperty("DiscCutForPileupTransform",
75  m_rootForwardTool->m_cutLikelihoodPileupCorrectionB,
76  "Additional offset for pileup dependent discriminant cut");
77  declareProperty("doPileupCorrection",
78  m_rootForwardTool->m_doPileupCorrection,
79  "Do pileup-dependent discriminant cut");
80 }
81 
82 //=============================================================================
83 // Standard destructor
84 //=============================================================================
86 {
87  delete m_rootForwardTool;
88 }
89 
90 //=============================================================================
91 // Asg/Athena initialize method
92 //=============================================================================
95 {
96 
97  ATH_MSG_INFO("initialize : WP " << m_WorkingPoint.size() << " "
98  << m_configFile.size());
99 
100  std::string PDFfilename(""); // Default
101 
102  if (!m_WorkingPoint.empty()) {
105  ATH_MSG_INFO("operating point : " << this->getOperatingPointName());
106  }
107 
108  if (!m_configFile.empty()) {
110  if (configFile.empty()) {
111  ATH_MSG_ERROR("Could not locate " << m_configFile);
112  return StatusCode::FAILURE;
113  }
114 
115  ATH_MSG_DEBUG("Get the input PDFs in the tool ");
116  TEnv env;
117  env.ReadFile(configFile.c_str(), kEnvLocal);
118 
119  // Get the input PDFs in the tool.
120  ATH_MSG_DEBUG("Get the input PDFs in the tool ");
121 
122  if (!m_pdfFileName
123  .empty()) { // If the property was set by the user, take that.
124  ATH_MSG_INFO("Setting user specified PDF file " << m_pdfFileName);
125  PDFfilename = m_pdfFileName;
126  } else {
127  if (m_configFile.find("dev/") != std::string::npos) {
128  std::string PDFdevval = env.GetValue(
129  "inputPDFFileName",
130  "ElectronPhotonSelectorTools/offline/mc16_20180716/"
131  "ForwardElectronLikelihoodPdfs.root"); // this is the first PDF ever
132  // released
133  PDFfilename = ("dev/" + PDFdevval);
134  ATH_MSG_DEBUG("Getting the input PDFs from: " << PDFfilename);
135  } else {
136  PDFfilename =
137  env.GetValue("inputPDFFileName",
138  "ElectronPhotonSelectorTools/offline/mc16_20180716/"
139  "ForwardElectronLikelihoodPdfs.root");
140  ATH_MSG_DEBUG("Getting the input PDFs from: " << PDFfilename);
141  }
142  }
143  std::string filename = PathResolverFindCalibFile(PDFfilename);
144 
145  if (!filename.empty()) {
147  } else {
148  ATH_MSG_ERROR("Could not find PDF file");
149  return StatusCode::FAILURE;
150  }
151 
152  m_rootForwardTool->m_variableNames = env.GetValue("VariableNames", "");
154  AsgConfigHelper::HelperDouble("CutLikelihood", env);
156  AsgConfigHelper::HelperDouble("DiscCutSlopeForPileupCorrection", env);
158  AsgConfigHelper::HelperDouble("DiscCutForPileupCorrection", env);
160  env.GetValue("doPileupCorrection", false);
161  } else { // Error if it cant find the conf
162  ATH_MSG_ERROR("Could not find configuration file");
163  return StatusCode::FAILURE;
164  }
165 
167 
168  // Setup primary vertex key handle
170 
171  // Get the name of the current operating point, and massage the other strings
172  // accordingly
174  "Going to massage the labels based on the provided operating point...");
175 
176  // Get the message level and set the underlying ROOT tool message level
177  // accordingly
178  m_rootForwardTool->msg().setLevel(this->msg().level());
179 
180  // We need to initialize the underlying ROOT TSelectorTool
181  if (m_rootForwardTool->initialize().isFailure()) {
183  "ERROR! Could not initialize the TForwardElectronLikelihoodTool!");
184  return StatusCode::FAILURE;
185  }
186 
187  return StatusCode::SUCCESS;
188 }
189 
190 //=============================================================================
191 // return the accept info object
192 //=============================================================================
193 
194 const asg::AcceptInfo&
196 {
198 }
199 
200 //=============================================================================
201 // The main accept method: the actual cuts are applied here
202 //=============================================================================
205  double mu) const
206 {
207 
208  const xAOD::Electron* el = dynamic_cast<const xAOD::Electron*>(eg);
209  return accept(el, mu);
210 }
211 
214  double mu) const
215 {
216 
217  // Backwards compatbility
218  return accept(Gaudi::Hive::currentContext(), eg, mu);
219 }
220 
223  const xAOD::Egamma* eg,
224  double mu) const
225 {
226 
227  const xAOD::Electron* el = dynamic_cast<const xAOD::Electron*>(eg);
228  return accept(ctx, el, mu);
229 }
230 
231 //=============================================================================
232 // The main accept method: the actual cuts are applied here
233 //=============================================================================
236  const xAOD::Electron* eg,
237  double mu) const
238 {
239  if (!eg) {
240  ATH_MSG_ERROR("Failed, no egamma object.");
241  return m_rootForwardTool->accept();
242  }
243 
244  const xAOD::CaloCluster* cluster = eg->caloCluster();
245  if (!cluster) {
246  ATH_MSG_WARNING("Failed, no cluster.");
247  return m_rootForwardTool->accept();
248  }
249 
250  const double energy = cluster->e();
251  const float eta = (cluster->eta());
252  if (fabs(eta) > 300.0) {
253  ATH_MSG_WARNING("Failed, eta > 3000.");
254  return m_rootForwardTool->accept();
255  }
256 
257  // transverse energy of the electron (using the track eta)
258  double et = (cosh(eta) != 0.) ? energy / cosh(eta) : 0.;
259  double ip(0);
260 
261  // Get the number of primary vertices in this event
262  if (mu < 0) { // use npv if mu is negative (not given)
263  ip = static_cast<double>(m_usePVCont ? this->getNPrimVertices(ctx)
264  : m_nPVdefault);
265  } else {
266  ip = mu;
267  }
268 
269  // for now don't cache.
270  double likelihood = calculate(ctx, eg, ip);
271 
272  // Get the answer from the underlying ROOT tool
273  return m_rootForwardTool->accept(likelihood, eta, et, ip);
274 }
275 
276 //=============================================================================
277 // Calculate method for EFCaloLH in the trigger; do full LH if !CaloCutsOnly
278 //=============================================================================
279 double
281  double mu) const
282 {
283 
284  const xAOD::Electron* el = dynamic_cast<const xAOD::Electron*>(eg);
285  return calculate(el, mu);
286 }
287 
288 double
290  double mu) const
291 {
292  // Backward compatbility
293  return calculate(Gaudi::Hive::currentContext(), el, mu);
294 }
295 
296 double
298  const xAOD::Egamma* eg,
299  double mu) const
300 {
301 
302  const xAOD::Electron* el = dynamic_cast<const xAOD::Electron*>(eg);
303  return calculate(ctx, el, mu);
304 }
305 
306 //=============================================================================
307 // The main result method: the actual likelihood is calculated here
308 //=============================================================================
309 double
311  const xAOD::Electron* eg,
312  double mu) const
313 {
314  if (!eg) {
315  ATH_MSG_ERROR("Failed, no egamma object.");
316  return -999;
317  }
318 
319  const xAOD::CaloCluster* cluster = eg->caloCluster();
320  if (!cluster) {
321  ATH_MSG_ERROR("Failed, no cluster.");
322  return -999;
323  }
324 
325  const double energy = cluster->e();
326  const float eta = cluster->eta();
327  if (fabs(eta) > 300.0) {
328  ATH_MSG_ERROR("Failed, eta range.");
329  ATH_MSG_ERROR("checking at other place ." << eta);
330  return -999;
331  }
332 
333  const double et = (cosh(eta) != 0.) ? energy / cosh(eta) : 0.;
334 
335  // Shower shape variables
336  double secondDensity(0), significance(0), secondLambda(0), lateral(0),
337  longitudinal(0), fracMax(0), secondR(0), centerLambda(0);
338 
339  bool allFound = true;
340  std::string notFoundList = "";
341 
342  // secondLambda
344  secondLambda)) {
345  allFound = false;
346  notFoundList += "secondLambda ";
347  }
348  // lateral
349  if (!cluster->retrieveMoment(xAOD::CaloCluster::LATERAL, lateral)) {
350  allFound = false;
351  notFoundList += "lateral ";
352  }
353  // longitudinal
354  if (!cluster->retrieveMoment(xAOD::CaloCluster::LONGITUDINAL, longitudinal)) {
355  allFound = false;
356  notFoundList += "longitudinal ";
357  }
358  // fracMax
359  if (!cluster->retrieveMoment(xAOD::CaloCluster::ENG_FRAC_MAX, fracMax)) {
360  allFound = false;
361  notFoundList += "fracMax ";
362  }
363  // secondR
364  if (!cluster->retrieveMoment(xAOD::CaloCluster::SECOND_R, secondR)) {
365  allFound = false;
366  notFoundList += "secondR ";
367  }
368  // centerlambda
370  centerLambda)) {
371  allFound = false;
372  notFoundList += "centerLambda ";
373  }
375  secondDensity)) {
376  allFound = false;
377  notFoundList += "secondDensity ";
378  }
379  if (!cluster->retrieveMoment(xAOD::CaloCluster::SIGNIFICANCE, significance)) {
380  allFound = false;
381  notFoundList += "significance ";
382  }
383 
384  // Get the number of primary vertices in this event
385  double ip = static_cast<double>(m_nPVdefault);
386 
387  if (mu < 0) { // use npv if mu is negative (not given)
388  ip = static_cast<double>(m_usePVCont ? this->getNPrimVertices(ctx)
389  : m_nPVdefault);
390  } else {
391  ip = mu;
392  }
393 
395  Form("Vars: eta=%8.5f, et=%8.5f, 2nd lambda=%8.5f, lateral=%8.5f, "
396  "longitudinal=%8.5f, center lambda=%8.5f, frac max=%8.5f, "
397  "secondR=%8.5f, significance=%8.5f, 2nd density=%8.5f, ip=%8.5f",
398  eta,
399  et,
400  secondLambda,
401  lateral,
402  longitudinal,
403  centerLambda,
404  fracMax,
405  secondR,
406  significance,
407  secondDensity,
408  ip));
409 
410  if (!allFound) {
412  "Skipping LH calculation! The following variables are missing: "
413  << notFoundList);
414  return -999;
415  }
416 
417  // Get the answer from the underlying ROOT tool
419  et,
420  secondLambda,
421  lateral,
422  longitudinal,
423  centerLambda,
424  fracMax,
425  secondR,
426  significance,
427  secondDensity,
428  ip);
429 }
430 
431 //=============================================================================
433 //=============================================================================
434 std::string
436 {
437  return m_WorkingPoint;
438 }
439 //=============================================================================
442 {
443  // Backwards compatibility
444  return accept(Gaudi::Hive::currentContext(), part);
445 }
446 
449  const xAOD::IParticle* part) const
450 {
451  if (part->type() == xAOD::Type::Electron) {
452  const xAOD::Electron* el = static_cast<const xAOD::Electron*>(part);
453  return accept(ctx, el);
454  }
455  ATH_MSG_ERROR("Input is not an electron");
456  return m_rootForwardTool->accept();
457 }
458 //=============================================================================
459 double
461 {
462  // Backwards compatibily
463  return calculate(Gaudi::Hive::currentContext(), part);
464 }
465 
466 double
468  const xAOD::IParticle* part) const
469 {
470  if (part->type() == xAOD::Type::Electron) {
471  const xAOD::Electron* el = static_cast<const xAOD::Electron*>(part);
472  return calculate(ctx, el);
473  }
474  ATH_MSG_ERROR("Input is not an electron");
475  return -999;
476 }
477 
478 //=============================================================================
479 // Helper method to get the number of primary vertices
480 // ( This is horrible! We don't want to iterate over all vertices in the event
481 // for each electron!!!
482 // This is slow!)
483 //=============================================================================
484 unsigned int
486  const EventContext& ctx) const
487 {
488  unsigned int nVtx(0);
490  if (!vtxCont.isValid()) {
491  ATH_MSG_WARNING("Cannot find " << m_primVtxContKey.key()
492  << " container, returning default nVtx");
493  return m_nPVdefault;
494  }
495  for (const auto *vxcand : *vtxCont) {
496  if (vxcand->nTrackParticles() >= 2)
497  nVtx++;
498  }
499  return nVtx;
500 }
501 
xAOD::CaloCluster_v1::SECOND_R
@ SECOND_R
Second Moment in .
Definition: CaloCluster_v1.h:123
LArG4FSStartPointFilter.part
part
Definition: LArG4FSStartPointFilter.py:21
AsgForwardElectronLikelihoodTool::getNPrimVertices
unsigned int getNPrimVertices(const EventContext &ctx) const
Get the number of primary vertices.
Definition: AsgForwardElectronLikelihoodTool.cxx:485
et
Extra patterns decribing particle interation process.
AsgForwardElectronLikelihoodTool.h
AsgForwardElectronLikelihoodTool::m_usePVCont
bool m_usePVCont
Whether to use the PV (not available for trigger)
Definition: AsgForwardElectronLikelihoodTool.h:169
xAOD::Electron
Electron_v1 Electron
Definition of the current "egamma version".
Definition: Event/xAOD/xAODEgamma/xAODEgamma/Electron.h:17
Root::TForwardElectronLikelihoodTool::accept
asg::AcceptData accept(LikeEnumForward::LHAcceptVars_t &vars_struct) const
The main accept method: the actual cuts are applied here.
Definition: TForwardElectronLikelihoodTool.cxx:251
taskman.configFile
configFile
Definition: taskman.py:311
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ParticleTest.eg
eg
Definition: ParticleTest.py:29
EgammaSelectors::ForwardLHPointToConfFile
const std::map< std::string, std::string > ForwardLHPointToConfFile
Definition: EGSelectorConfigurationMapping.h:89
AsgForwardElectronLikelihoodTool::getAcceptInfo
virtual const asg::AcceptInfo & getAcceptInfo() const override
Method to get the plain AcceptInfo.
Definition: AsgForwardElectronLikelihoodTool.cxx:195
CurrentContext.h
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
AsgForwardElectronLikelihoodTool::getOperatingPointName
virtual std::string getOperatingPointName() const override
Get the name of the current operating point.
Definition: AsgForwardElectronLikelihoodTool.cxx:435
Root::TForwardElectronLikelihoodTool::setPDFFileName
void setPDFFileName(const std::string &val)
Add an input file that holds the PDFs.
Definition: TForwardElectronLikelihoodTool.h:131
xAOD::CaloCluster_v1::CENTER_LAMBDA
@ CENTER_LAMBDA
Shower depth at Cluster Centroid.
Definition: CaloCluster_v1.h:136
AsgEGammaConfigHelper.h
Root::TForwardElectronLikelihoodTool::m_cutLikelihoodPileupCorrectionA
std::vector< double > m_cutLikelihoodPileupCorrectionA
the cut on the PU discriminant is adjusted as a function of nVtx cut + nVtx*cutA + cutB this is diffe...
Definition: TForwardElectronLikelihoodTool.h:195
xAOD::Egamma_v1
Definition: Egamma_v1.h:56
AsgForwardElectronLikelihoodTool::~AsgForwardElectronLikelihoodTool
virtual ASG_TOOL_CLASS2(AsgForwardElectronLikelihoodTool, IAsgElectronLikelihoodTool, IAsgSelectionTool) public ~AsgForwardElectronLikelihoodTool()
Standard constructor.
Definition: AsgForwardElectronLikelihoodTool.cxx:85
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
xAOD::CaloCluster_v1::ENG_FRAC_MAX
@ ENG_FRAC_MAX
Energy fraction of hottest cell.
Definition: CaloCluster_v1.h:140
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:40
AsgForwardElectronLikelihoodTool::m_nPVdefault
unsigned int m_nPVdefault
defualt nPV (when not using PVCont)
Definition: AsgForwardElectronLikelihoodTool.h:172
empty
bool empty(TH1 *h)
Definition: computils.cxx:294
AsgForwardElectronLikelihoodTool::m_primVtxContKey
SG::ReadHandleKey< xAOD::VertexContainer > m_primVtxContKey
read handle key to primary vertex container
Definition: AsgForwardElectronLikelihoodTool.h:175
Root::TForwardElectronLikelihoodTool::calculate
double calculate(LikeEnumForward::LHCalcVars_t &vars_struct) const
Definition: TForwardElectronLikelihoodTool.cxx:344
python.iconfTool.models.loaders.level
level
Definition: loaders.py:20
xAOD::CaloCluster_v1::SECOND_LAMBDA
@ SECOND_LAMBDA
Second Moment in .
Definition: CaloCluster_v1.h:124
xAOD::CaloCluster_v1::SECOND_ENG_DENS
@ SECOND_ENG_DENS
Second Moment in E/V.
Definition: CaloCluster_v1.h:144
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:59
Root::TForwardElectronLikelihoodTool::m_cutLikelihood
std::vector< double > m_cutLikelihood
cut on likelihood output
Definition: TForwardElectronLikelihoodTool.h:189
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ParticleGun_FastCalo_ChargeFlip_Config.energy
energy
Definition: ParticleGun_FastCalo_ChargeFlip_Config.py:78
asg::AcceptInfo
Definition: AcceptInfo.h:28
AsgForwardElectronLikelihoodTool::m_pdfFileName
std::string m_pdfFileName
The input ROOT file name that holds the PDFs.
Definition: AsgForwardElectronLikelihoodTool.h:183
xAOD::CaloCluster_v1::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
Definition: CaloCluster_v1.cxx:251
TForwardElectronLikelihoodTool.h
CaloCluster.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
asg::AsgMessaging::msg
MsgStream & msg() const
The standard message stream.
Definition: AsgMessaging.cxx:49
plotIsoValidation.el
el
Definition: plotIsoValidation.py:197
find_tgc_unfilled_channelids.ip
ip
Definition: find_tgc_unfilled_channelids.py:3
Root::TForwardElectronLikelihoodTool
Definition: TForwardElectronLikelihoodTool.h:89
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::CaloCluster_v1::retrieveMoment
bool retrieveMoment(MomentType type, double &value) const
Retrieve individual moment.
Definition: CaloCluster_v1.cxx:738
AsgForwardElectronLikelihoodTool::m_WorkingPoint
std::string m_WorkingPoint
Get the name of the current operating point.
Definition: AsgForwardElectronLikelihoodTool.h:160
AsgForwardElectronLikelihoodTool::initialize
virtual StatusCode initialize() override final
Gaudi Service Interface method implementations.
Definition: AsgForwardElectronLikelihoodTool.cxx:94
Vertex.h
AsgForwardElectronLikelihoodTool::m_rootForwardTool
Root::TForwardElectronLikelihoodTool * m_rootForwardTool
Pointer to the underlying ROOT based tool.
Definition: AsgForwardElectronLikelihoodTool.h:166
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
PathResolver.h
ReadHandle.h
Handle class for reading from StoreGate.
xAOD::Electron_v1
Definition: Electron_v1.h:34
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:431
Root::TForwardElectronLikelihoodTool::m_doPileupCorrection
bool m_doPileupCorrection
Apply a transform to zoom into the LH output peaks.
Definition: TForwardElectronLikelihoodTool.h:187
EGSelectorConfigurationMapping.h
xAOD::CaloCluster_v1::SIGNIFICANCE
@ SIGNIFICANCE
Cluster significance.
Definition: CaloCluster_v1.h:157
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
CaloCellTimeCorrFiller.filename
filename
Definition: CaloCellTimeCorrFiller.py:24
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
xAOD::CaloCluster_v1::LATERAL
@ LATERAL
Normalized lateral moment.
Definition: CaloCluster_v1.h:137
Root::TForwardElectronLikelihoodTool::m_variableNames
std::string m_variableNames
variables to use in the LH
Definition: TForwardElectronLikelihoodTool.h:199
Electron.h
Root::TForwardElectronLikelihoodTool::getAcceptInfo
const asg::AcceptInfo & getAcceptInfo() const
accesss to the accept info object
Definition: TForwardElectronLikelihoodTool.h:105
AsgForwardElectronLikelihoodTool::calculate
double calculate(const xAOD::IParticle *part) const
The main result method: the actual likelihood is calculated here.
Definition: AsgForwardElectronLikelihoodTool.cxx:460
AsgForwardElectronLikelihoodTool::accept
asg::AcceptData accept(const xAOD::IParticle *part) const override
The main accept method: using the generic interface.
Definition: AsgForwardElectronLikelihoodTool.cxx:441
Root::TForwardElectronLikelihoodTool::m_cutLikelihoodPileupCorrectionB
std::vector< double > m_cutLikelihoodPileupCorrectionB
pileup constant factor for cut on likelihood output
Definition: TForwardElectronLikelihoodTool.h:197
AsgForwardElectronLikelihoodTool::m_configFile
std::string m_configFile
Definition: AsgForwardElectronLikelihoodTool.h:163
python.DataFormatRates.env
env
Definition: DataFormatRates.py:32
asg::AcceptData
Definition: AcceptData.h:30
xAOD::CaloCluster_v1::LONGITUDINAL
@ LONGITUDINAL
Normalized longitudinal moment.
Definition: CaloCluster_v1.h:138
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:53
AsgConfigHelper::HelperDouble
std::vector< double > HelperDouble(const std::string &input, TEnv &env)
Definition: AsgEGammaConfigHelper.cxx:105
xAOD::CaloCluster_v1::e
virtual double e() const
The total energy of the particle.
Definition: CaloCluster_v1.cxx:265
Root::TForwardElectronLikelihoodTool::initialize
StatusCode initialize()
Initialize this class.
Definition: TForwardElectronLikelihoodTool.cxx:65
AsgConfigHelper::findConfigFile
std::string findConfigFile(const std::string &input, const std::map< std::string, std::string > &configmap)
Definition: AsgEGammaConfigHelper.cxx:14