ATLAS Offline Software
CommonSmearingTool.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Framework include(s):
8 
9 // local include(s)
12 
15 
16 // ROOT include(s)
17 #include "TROOT.h"
18 #include "TF1.h"
19 #include "TClass.h"
20 #include "TKey.h"
21 
22 // tauRecTools include(s)
24 
25 using namespace TauAnalysisTools;
26 /*
27  This tool acts as a common tool to apply tau energy smearing and
28  uncertainties. By default, only nominal smearings without systematic
29  variations are applied. Unavailable systematic variations are ignored, meaning
30  that the tool only returns the nominal value. In case the one available
31  systematic is requested, the smeared scale factor is computed as:
32  - pTsmearing = pTsmearing_nominal +/- n * uncertainty
33 
34  where n is in general 1 (representing a 1 sigma smearing), but can be any
35  arbitrary value. In case multiple systematic variations are passed they are
36  added in quadrature. Note that it's currently only supported if all are up or
37  down systematics.
38 
39  The tool reads in root files including TH2 histograms which need to fulfill a
40  predefined structure:
41 
42  nominal smearing:
43  - sf_<workingpoint>_<prongness>p
44  uncertainties:
45  - <NP>_<up/down>_<workingpoint>_<prongness>p (for asymmetric uncertainties)
46  - <NP>_<workingpoint>_<prongness>p (for symmetric uncertainties)
47 
48  where the <workingpoint> (e.g. loose/medium/tight) fields may be
49  optional. <prongness> represents either 1 or 3, whereas 3 is currently used
50  for multiprong in general. The <NP> fields are names for the type of nuisance
51  parameter (e.g. STAT or SYST), note the tool decides whether the NP is a
52  recommended or only an available systematic based on the first character:
53  - uppercase -> recommended
54  - lowercase -> available
55  This magic happens here:
56  - CommonSmearingTool::generateSystematicSets()
57 
58  In addition the root input file can also contain objects of type TF1 that can
59  be used to provide kind of unbinned smearings or systematics. Currently there
60  is no usecase for tau energy smearing
61 
62  The files may also include TNamed objects which is used to define how x and
63  y-axes should be treated. By default the x-axis is given in units of tau-pT in
64  GeV and the y-axis is given as tau-eta. If there is for example a TNamed
65  object with name "Yaxis" and title "|eta|" the y-axis is treated in units of
66  absolute tau eta. All this is done in:
67  - void CommonSmearingTool::ReadInputs(TFile* fFile)
68 
69  Other tools for scale factors may build up on this tool and overwrite or add
70  particular functionality.
71 */
72 
73 //______________________________________________________________________________
74 CommonSmearingTool::CommonSmearingTool(const std::string& sName)
75  : asg::AsgMetadataTool( sName )
76  , m_sSystematicSet(nullptr)
77  , m_fX(&finalTauPt)
78  , m_fY(&finalTauEta)
79  , m_bIsData(false)
80  , m_bIsConfigured(false)
81  , m_tTauCombinedTES("TauCombinedTES", this)
82  , m_eCheckTruth(TauAnalysisTools::Unknown)
83 {
84 }
85 
86 /*
87  need to clear the map of histograms cause we have the ownership, not ROOT
88 */
90 {
91  for (auto& mEntry : m_mSF)
92  delete mEntry.second;
93 }
94 
95 /*
96  - Find the root files with smearing inputs on cvmfs using PathResolver
97  (more info here:
98  https://twiki.cern.ch/twiki/bin/viewauth/AtlasComputing/PathResolver)
99  - Call further functions to process and define NP strings and so on
100  - Configure to provide nominal smearings by default
101 */
103 {
104  ATH_MSG_INFO( "Initializing CommonSmearingTool" );
105 
106  // FIXME: do we expect initialize() to be called several times?
107  // only read in histograms once
108  if (m_mSF.empty())
109  {
110  std::string sInputFilePath = PathResolverFindCalibFile(m_sInputFilePath);
111  std::unique_ptr<TFile> fSF( TFile::Open(sInputFilePath.c_str()) );
112  if(fSF == nullptr) {
113  ATH_MSG_FATAL("Could not open file " << sInputFilePath.c_str());
114  return StatusCode::FAILURE;
115  }
116  ReadInputs(fSF.get(), m_mSF);
117  fSF->Close();
118  }
119 
121 
122  // load empty systematic variation by default
123  if (applySystematicVariation(CP::SystematicSet()) != StatusCode::SUCCESS )
124  return StatusCode::FAILURE;
125 
126  // TauCombinedTES tool must be set up when checking compatibility between calo TES and MVA TES
128  {
130  ATH_CHECK(m_tTauCombinedTES.setProperty("WeightFileName", "CombinedTES_R22_Round2.5_v2.root"));
132  }
133 
134  return StatusCode::SUCCESS;
135 }
136 
137 /*
138  Retrieve the smearing value and if requested the values for the NP's and add
139  this stuff in quadrature. Finally apply the correction to the tau pt of the
140  non-const tau.
141 */
142 //______________________________________________________________________________
144 {
145  // optional consistency check between calo-only pt ("ptTauEnergyScale") and MVA pt ("ptFinalCalib" i.e. "pt", MVA TES is the default calibration)
146  // not recommended until validated in R22: MVA TES always has better resolution than calo-only TES for true taus
147  // in practice this check mostly discards muons faking taus with large track momentum but little energy deposit in the calorimeter:
148  // when enforcing calo-only pt, the muon will likely fail the tau pt cut applied by TauSelectionTool
149 
150  if (m_bMVATESQualityCheck) {
151  bool compatibility = true;
152  static const SG::ConstAccessor<float> accPtTauEnergyScale ("ptTauEnergyScale");
153  if(accPtTauEnergyScale.isAvailable(xTau)) {
154  const auto combinedTEStool = dynamic_cast<const TauCombinedTES*>(m_tTauCombinedTES.get());
155  compatibility = combinedTEStool->getTESCompatibility(xTau);
156  }
157  static const SG::Accessor<char> accTESCompatibility("TESCompatibility");
158  accTESCompatibility(xTau) = char(compatibility);
159  }
160 
161  // step out here if we run on data
162  if (m_bIsData)
163  return CP::CorrectionCode::Ok;
164 
165  // check which true state is requested
167  return CP::CorrectionCode::Ok;
168  }
169 
170  // skip taus which are not 1 or 3 prong
171  if( xTau.nTracks() != 1 && xTau.nTracks() != 3) {
172  return CP::CorrectionCode::Ok;
173  }
174 
175  // get prong extension for histogram name
176  std::string sProng = ConvertProngToString(xTau.nTracks());
177 
178  double dCorrection = 1.;
179  CP::CorrectionCode tmpCorrectionCode;
181  {
182  // get standard scale factor
183  tmpCorrectionCode = getValue("sf"+sProng,
184  xTau,
185  dCorrection);
186  // return correction code if histogram is not available
187  if (tmpCorrectionCode != CP::CorrectionCode::Ok)
188  return tmpCorrectionCode;
189  }
190 
191  // skip further process if systematic set is empty
192  if (!m_sSystematicSet->empty())
193  {
194  // get uncertainties summed in quadrature
195  double dTotalSystematic2 = 0.;
196  double dDirection = 0.;
197  for (auto& syst : *m_sSystematicSet)
198  {
199  // check if systematic is available
200  auto it = m_mSystematicsHistNames.find(syst.basename());
201 
202  // get uncertainty value
203  double dUncertaintySyst = 0.;
204  tmpCorrectionCode = getValue(it->second+sProng,
205  xTau,
206  dUncertaintySyst);
207  // return correction code if histogram is not available
208  if (tmpCorrectionCode != CP::CorrectionCode::Ok)
209  return tmpCorrectionCode;
210 
211  // needed for up/down decision
212  dDirection = syst.parameter();
213 
214  // scale uncertainty with direction, i.e. +/- n*sigma
215  dUncertaintySyst *= dDirection;
216 
217  // square uncertainty and add to total uncertainty
218  dTotalSystematic2 += dUncertaintySyst * dUncertaintySyst;
219  }
220 
221  // now use dDirection to use up/down uncertainty
222  dDirection = (dDirection > 0.) ? 1. : -1.;
223 
224  // finally apply uncertainty (eff * ( 1 +/- \sum )
225  dCorrection *= 1 + dDirection * std::sqrt(dTotalSystematic2);
226  }
227 
228  // finally apply correction
229  // in-situ TES is applied w.r.t. ptFinalCalib, use explicit calibration for pt to avoid irreproducibility upon re-calibration (PHYSLITE)
230  // not required for eta/phi/m that we don't correct (only ptFinalCalib and etaFinalCalib are stored in DAODs)
231  xTau.setP4( xTau.ptFinalCalib() * dCorrection,
232  xTau.eta(), xTau.phi(), xTau.m());
233  return CP::CorrectionCode::Ok;
234 }
235 
236 /*
237  Create a non-const copy of the passed const xTau object and apply the
238  correction to the non-const copy.
239  */
240 //______________________________________________________________________________
242  xAOD::TauJet*& xTauCopy ) const
243 {
244 
245  // A sanity check:
246  if( xTauCopy )
247  {
248  ATH_MSG_WARNING( "Non-null pointer received. "
249  "There's a possible memory leak!" );
250  }
251 
252  // Create a new object:
253  xTauCopy = new xAOD::TauJet();
254  xTauCopy->makePrivateStore( xTau );
255 
256  // Use the other function to modify this object:
257  return applyCorrection( *xTauCopy );
258 }
259 
260 /*
261  standard check if a systematic is available
262 */
263 //______________________________________________________________________________
265 {
267  return sys.find(systematic) != sys.end();
268 }
269 
270 /*
271  standard way to return systematics that are available (including recommended
272  systematics)
273 */
274 //______________________________________________________________________________
276 {
278 }
279 
280 /*
281  standard way to return systematics that are recommended
282 */
283 //______________________________________________________________________________
285 {
287 }
288 
289 /*
290  Configure the tool to use a systematic variation for further usage, until the
291  tool is reconfigured with this function. The passed systematic set is checked
292  for sanity:
293  - unsupported systematics are skipped
294  - only combinations of up or down supported systematics is allowed
295  - don't mix recommended systematics with other available systematics, cause
296  sometimes recommended are a quadratic sum of the other variations,
297  e.g. TOTAL=(SYST^2 + STAT^2)^0.5
298 */
299 //______________________________________________________________________________
301 {
302  // first check if we already know this systematic configuration
303  auto itSystematicSet = m_mSystematicSets.find(sSystematicSet);
304  if (itSystematicSet != m_mSystematicSets.end())
305  {
306  m_sSystematicSet = &itSystematicSet->first;
307  return StatusCode::SUCCESS;
308  }
309 
310  // sanity checks if systematic set is supported
311  double dDirection = 0.;
312  CP::SystematicSet sSystematicSetAvailable;
313  for (auto& sSyst : sSystematicSet)
314  {
315  // check if systematic is available
316  auto it = m_mSystematicsHistNames.find(sSyst.basename());
317  if (it == m_mSystematicsHistNames.end())
318  {
319  ATH_MSG_VERBOSE("unsupported systematic variation: "<< sSyst.basename()<<"; skipping this one");
320  continue;
321  }
322 
323  if (sSyst.parameter() * dDirection < 0)
324  {
325  ATH_MSG_ERROR("unsupported set of systematic variations, you should either use only \"UP\" or only \"DOWN\" systematics in one set!");
326  ATH_MSG_ERROR("systematic set will not be applied");
327  return StatusCode::FAILURE;
328  }
329  dDirection = sSyst.parameter();
330 
331  if ((m_sRecommendedSystematics.find(sSyst.basename()) != m_sRecommendedSystematics.end()) and sSystematicSet.size() > 1)
332  {
333  ATH_MSG_ERROR("unsupported set of systematic variations, you should not combine \"TAUS_{TRUE|FAKE}_SME_TOTAL\" with other systematic variations!");
334  ATH_MSG_ERROR("systematic set will not be applied");
335  return StatusCode::FAILURE;
336  }
337 
338  // finally add the systematic to the set of systematics to process
339  sSystematicSetAvailable.insert(sSyst);
340  }
341 
342  // store this calibration for future use, and make it current
343  m_sSystematicSet = &m_mSystematicSets.insert(std::pair<CP::SystematicSet,std::string>(sSystematicSetAvailable, sSystematicSet.name())).first->first;
344 
345  return StatusCode::SUCCESS;
346 }
347 
348 //=================================PRIVATE-PART=================================
349 /*
350  Executed at the beginning of each event, checks if the tool is used on data or MC.
351  This tool is mostly for MC (in-situ TES correction).
352  But the TES compatibility requirement is applied to both data and MC (when MVATESQualityCheck=true).
353 */
354 //______________________________________________________________________________
356 {
357  if (m_bIsConfigured)
358  return StatusCode::SUCCESS;
359 
360  const xAOD::EventInfo* xEventInfo = nullptr;
361  ATH_CHECK(evtStore()->retrieve(xEventInfo,"EventInfo"));
363  m_bIsConfigured = true;
364 
365  return StatusCode::SUCCESS;
366 }
367 
368 //______________________________________________________________________________
369 std::string CommonSmearingTool::ConvertProngToString(const int fProngness) const
370 {
371  return fProngness == 1 ? "_1p" : "_3p";
372 }
373 
374 //______________________________________________________________________________
375 template<class T>
376 void CommonSmearingTool::ReadInputs(TFile* fFile, std::map<std::string, T>& mMap)
377 {
378  // initialize function pointer
379  m_fX = &finalTauPt;
380  m_fY = &finalTauEta;
381 
382  TKey *kKey;
383  TIter itNext(fFile->GetListOfKeys());
384  while ((kKey = (TKey*)itNext()))
385  {
386  TClass *cClass = gROOT->GetClass(kKey->GetClassName());
387 
388  // parse file content for objects of type TNamed, check their title for
389  // known strings and reset funtion pointer
390  std::string sKeyName = kKey->GetName();
391  if (sKeyName == "Xaxis")
392  {
393  TNamed* tObj = (TNamed*)kKey->ReadObj();
394  std::string sTitle = tObj->GetTitle();
395  delete tObj;
396  if (sTitle == "P" || sTitle == "PFinalCalib")
397  {
398  m_fX = &finalTauP;
399  ATH_MSG_DEBUG("using full momentum for x-axis");
400  }
401  }
402  if (sKeyName == "Yaxis")
403  {
404  TNamed* tObj = (TNamed*)kKey->ReadObj();
405  std::string sTitle = tObj->GetTitle();
406  delete tObj;
407  if (sTitle == "track-eta")
408  {
410  ATH_MSG_DEBUG("using leading track eta for y-axis");
411  }
412  else if (sTitle == "|eta|")
413  {
414  m_fY = &finalTauAbsEta;
415  ATH_MSG_DEBUG("using absolute tau eta for y-axis");
416  }
417  }
418  if (!cClass->InheritsFrom("TH1"))
419  continue;
420  T tObj = (T)kKey->ReadObj();
421  tObj->SetDirectory(0);
422  mMap[sKeyName] = tObj;
423  }
424  ATH_MSG_INFO("data loaded from " << fFile->GetName());
425 }
426 
427 //______________________________________________________________________________
429 {
430  std::vector<std::string> vInputFilePath;
431  split(m_sInputFilePath,'/',vInputFilePath);
432  std::string sInputFileName = vInputFilePath.back();
433 
434  // creation of basic string for all NPs, e.g. "TAUS_TRUEHADTAU_SME_TES_"
435  std::vector<std::string> vSplitInputFilePath = {};
436  split(sInputFileName,'_',vSplitInputFilePath);
437  std::string sEfficiencyType = vSplitInputFilePath.at(0);
438  std::string sTruthType = vSplitInputFilePath.at(1);
439  std::transform(sEfficiencyType.begin(), sEfficiencyType.end(), sEfficiencyType.begin(), toupper);
440  std::transform(sTruthType.begin(), sTruthType.end(), sTruthType.begin(), toupper);
441  std::string sSystematicBaseString = "TAUS_" + sTruthType + "_SME_" + sEfficiencyType + "_";
442 
443  // set truth type to check for in truth matching - only true hadronic tau is supported at the moment
444  if (sTruthType=="TRUEHADTAU") m_eCheckTruth = TauAnalysisTools::TruthHadronicTau;
445 
446 
447  for (auto& mSF : m_mSF)
448  {
449  // parse for nuisance parameter in histogram name
450  std::vector<std::string> vSplitNP = {};
451  split(mSF.first,'_',vSplitNP);
452  std::string sNP;
453  std::string sNPUppercase;
454  if (vSplitNP.size() > 2)
455  {
456  sNP = vSplitNP.at(0)+'_'+vSplitNP.at(1);
457  sNPUppercase = vSplitNP.at(0) + '_' + vSplitNP.at(1);
458  } else {
459  sNP = vSplitNP.at(0);
460  sNPUppercase = vSplitNP.at(0);
461  }
462 
463  // skip nominal scale factors
464  if (sNP == "sf") continue;
465  // skip if non 1p histogram to avoid duplications (TODO: come up with a better solution)
466  if (mSF.first.find("_1p") == std::string::npos) continue;
467 
468  // test if NP starts with a capital letter indicating that this should be recommended
469  bool bIsRecommended = false;
470  if (isupper(sNP.at(0)))
471  bIsRecommended = true;
472 
473  // make sNP uppercase and build final NP entry name
474  std::transform(sNPUppercase.begin(), sNPUppercase.end(), sNPUppercase.begin(), toupper);
475  std::string sSystematicString = sSystematicBaseString + sNPUppercase;
476 
477  // add all found systematics to the AffectingSystematics
479  m_sAffectingSystematics.insert(CP::SystematicVariation (sSystematicString, -1));
480  // only add found uppercase systematics to the RecommendedSystematics
481  if (bIsRecommended)
482  {
485  }
486 
487  ATH_MSG_DEBUG("connected histogram base name " << sNP << " with systematic " << sSystematicString);
488  m_mSystematicsHistNames.insert({sSystematicString,sNP});
489  }
490 }
491 
492 //______________________________________________________________________________
494  const xAOD::TauJet& xTau,
495  double& dEfficiencyScaleFactor) const
496 {
497  TH1* hHist = m_mSF.at(sHistName);
498  if (hHist == nullptr)
499  {
500  ATH_MSG_ERROR("Histogram with name " << sHistName << " was not found in input file.");
502  }
503 
504  double dPt = m_fX(xTau);
505  double dEta = m_fY(xTau);
506 
507  // protect values from underflow bins
508  dPt = std::max(dPt,hHist->GetXaxis()->GetXmin());
509  dEta = std::max(dEta,hHist->GetYaxis()->GetXmin());
510  // protect values from overflow bins (times .999 to keep it inside last bin)
511  dPt = std::min(dPt,hHist->GetXaxis()->GetXmax() * .999);
512  dEta = std::min(dEta,hHist->GetYaxis()->GetXmax() * .999);
513 
514  int iBin = hHist->FindFixBin(dPt,dEta);
515  dEfficiencyScaleFactor = hHist->GetBinContent(iBin);
516 
517  if (m_bApplyFading)
518  {
519  std::string sTitle = hHist->GetTitle();
520  if (!sTitle.empty())
521  {
522  TF1 f("",sTitle.c_str(), 0, 1000);
523  if (sHistName.find("sf_") != std::string::npos)
524  dEfficiencyScaleFactor = (dEfficiencyScaleFactor -1.) *f.Eval(m_fX(xTau)) + 1.;
525  else
526  dEfficiencyScaleFactor *= f.Eval(m_fX(xTau));
527  }
528  }
529  return CP::CorrectionCode::Ok;
530 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
asg::AnaToolHandle::initialize
StatusCode initialize()
initialize the tool
TauAnalysisTools::CommonSmearingTool::m_bApplyFading
Gaudi::Property< bool > m_bApplyFading
Definition: CommonSmearingTool.h:104
TauAnalysisTools::CommonSmearingTool::ReadInputs
void ReadInputs(TFile *fFile, std::map< std::string, T > &mMap)
Definition: CommonSmearingTool.cxx:376
TauAnalysisTools
Definition: TruthCollectionMakerTau.h:16
TauAnalysisTools::CommonSmearingTool::recommendedSystematics
virtual CP::SystematicSet recommendedSystematics() const
returns: the list of all systematics this tool recommends to use
Definition: CommonSmearingTool.cxx:284
TauCombinedTES::getTESCompatibility
bool getTESCompatibility(const xAOD::TauJet &tau) const
Check if MVA TES and CaloTES are compatible, invoked by TauSmearing tool.
Definition: TauCombinedTES.cxx:181
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
TauAnalysisTools::CommonSmearingTool::m_bSkipTruthMatchCheck
Gaudi::Property< bool > m_bSkipTruthMatchCheck
Definition: CommonSmearingTool.h:103
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
xAOD::TauJet_v3::eta
virtual double eta() const
The pseudorapidity ( ) of the particle.
SG::Accessor< char >
TauAnalysisTools::TruthHadronicTau
@ TruthHadronicTau
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:99
max
constexpr double max()
Definition: ap_fixedTest.cxx:33
min
constexpr double min()
Definition: ap_fixedTest.cxx:26
CP::SystematicSet::empty
bool empty() const
returns: whether the set is empty
Definition: SystematicSet.h:67
TruthParticleContainer.h
xAOD::TauJet_v3::m
virtual double m() const
The invariant mass of the particle.
TauCombinedTES
Definition: TauCombinedTES.h:21
xAOD::char
char
Definition: TrigDecision_v1.cxx:38
TauAnalysisTools::CommonSmearingTool::m_sSystematicSet
const CP::SystematicSet * m_sSystematicSet
Definition: CommonSmearingTool.h:85
xAOD::TauJet_v3::nTracks
size_t nTracks(TauJetParameters::TauTrackFlag flag=TauJetParameters::TauTrackFlag::classifiedCharged) const
Definition: TauJet_v3.cxx:488
skel.it
it
Definition: skel.GENtoEVGEN.py:407
asg
Definition: DataHandleTestTool.h:28
CP::SystematicSet
Class to wrap a set of SystematicVariations.
Definition: SystematicSet.h:31
TauAnalysisTools::CommonSmearingTool::m_sRecommendedSystematics
CP::SystematicSet m_sRecommendedSystematics
Definition: CommonSmearingTool.h:115
CP::SystematicSet::name
std::string name() const
returns: the systematics joined into a single string.
Definition: SystematicSet.cxx:277
TauAnalysisTools::CommonSmearingTool::m_bApplyInsituCorrection
Gaudi::Property< bool > m_bApplyInsituCorrection
Definition: CommonSmearingTool.h:106
SG::ConstAccessor< float >
TauAnalysisTools::finalTauPt
double finalTauPt(const xAOD::TauJet &xTau)
return MVA based tau pt in GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:114
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
CP::SystematicVariation
Definition: SystematicVariation.h:47
TauAnalysisTools::Unknown
@ Unknown
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/TauAnalysisTools/Enums.h:98
ASG_MAKE_ANA_TOOL
#define ASG_MAKE_ANA_TOOL(handle, type)
create the tool in the given tool handle
Definition: AnaToolHandle.h:690
asg::AnaToolHandle::setProperty
StatusCode setProperty(const std::string &property, const T2 &value)
set the given property of the tool.
xAOD::EventInfo_v1::IS_SIMULATION
@ IS_SIMULATION
true: simulation, false: data
Definition: EventInfo_v1.h:151
xAOD::TauJet_v3::setP4
void setP4(double pt, double eta, double phi, double m)
Set methods for IParticle values.
Definition: TauJet_v3.cxx:171
mapkey::sys
@ sys
Definition: TElectronEfficiencyCorrectionTool.cxx:42
TauAnalysisTools::CommonSmearingTool::applyCorrection
virtual CP::CorrectionCode applyCorrection(xAOD::TauJet &xTau) const
Apply the correction on a modifyable object.
Definition: CommonSmearingTool.cxx:143
TauAnalysisTools::CommonSmearingTool::m_sInputFilePath
Gaudi::Property< std::string > m_sInputFilePath
Definition: CommonSmearingTool.h:102
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
TauAnalysisTools::finalTauP
double finalTauP(const xAOD::TauJet &xTau)
return MVA based tau P in GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:135
xAOD::TauJet_v3::phi
virtual double phi() const
The azimuthal angle ( ) of the particle.
TauAnalysisTools::CommonSmearingTool::~CommonSmearingTool
~CommonSmearingTool()
Definition: CommonSmearingTool.cxx:89
CP::CorrectionCode::Error
@ Error
Some error happened during the object correction.
Definition: CorrectionCode.h:36
TauAnalysisTools::CommonSmearingTool::m_eCheckTruth
TruthMatchedParticleType m_eCheckTruth
Definition: CommonSmearingTool.h:113
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
TauSmearingTool.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
TauAnalysisTools::CommonSmearingTool::applySystematicVariation
virtual StatusCode applySystematicVariation(const CP::SystematicSet &sSystematicSet)
configure this tool for the given list of systematic variations.
Definition: CommonSmearingTool.cxx:300
xAOD::TauJet_v3
Class describing a tau jet.
Definition: TauJet_v3.h:41
TauGNNUtils::Variables::Track::dEta
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, float &out)
Definition: TauGNNUtils.cxx:401
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
TauAnalysisTools::CommonSmearingTool::m_sAffectingSystematics
CP::SystematicSet m_sAffectingSystematics
Definition: CommonSmearingTool.h:114
CP::SystematicSet::end
const_iterator end() const
description: const iterator to the end of the set
Definition: SystematicSet.h:59
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
hist_file_dump.f
f
Definition: hist_file_dump.py:140
xAOD::TauJet
TauJet_v3 TauJet
Definition of the current "tau version".
Definition: Event/xAOD/xAODTau/xAODTau/TauJet.h:17
TauAnalysisTools::CommonSmearingTool::m_tTauCombinedTES
asg::AnaToolHandle< ITauToolBase > m_tTauCombinedTES
Definition: CommonSmearingTool.h:111
TauAnalysisTools::CommonSmearingTool::getValue
virtual CP::CorrectionCode getValue(const std::string &sHistName, const xAOD::TauJet &xTau, double &dEfficiencyScaleFactor) const
Definition: CommonSmearingTool.cxx:493
TauCombinedTES.h
TauAnalysisTools::CommonSmearingTool::isAffectedBySystematic
virtual bool isAffectedBySystematic(const CP::SystematicVariation &systematic) const
returns: whether this tool is affected by the given systematics
Definition: CommonSmearingTool.cxx:264
TauAnalysisTools::CommonSmearingTool::correctedCopy
virtual CP::CorrectionCode correctedCopy(const xAOD::TauJet &xTau, xAOD::TauJet *&xTauCopy) const
Create a corrected copy from a constant tau.
Definition: CommonSmearingTool.cxx:241
TauAnalysisTools::CommonSmearingTool::m_bIsData
bool m_bIsData
Definition: CommonSmearingTool.h:108
PathResolver.h
CP::SystematicSet::insert
void insert(const SystematicVariation &systematic)
description: insert a systematic into the set
Definition: SystematicSet.cxx:87
TauAnalysisTools::CommonSmearingTool::m_bIsConfigured
bool m_bIsConfigured
Definition: CommonSmearingTool.h:109
TauAnalysisTools::CommonSmearingTool::m_fX
double(* m_fX)(const xAOD::TauJet &xTau)
Definition: CommonSmearingTool.h:90
SG::AuxElement::makePrivateStore
void makePrivateStore()
Create a new (empty) private store for this object.
Definition: AuxElement.cxx:192
TauAnalysisTools::CommonSmearingTool::m_fY
double(* m_fY)(const xAOD::TauJet &xTau)
Definition: CommonSmearingTool.h:91
CommonSmearingTool.h
TauAnalysisTools::CommonSmearingTool::initialize
virtual StatusCode initialize()
Dummy implementation of the initialisation function.
Definition: CommonSmearingTool.cxx:102
EventInfo.h
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
PathResolverFindCalibFile
std::string PathResolverFindCalibFile(const std::string &logical_file_name)
Definition: PathResolver.cxx:283
TauAnalysisTools::CommonSmearingTool::m_mSF
std::map< std::string, TH1 * > m_mSF
Definition: CommonSmearingTool.h:83
CP::SystematicSet::find
iterator find(const SystematicVariation &sys) const
description: find an element in the set
Definition: SystematicSet.h:63
TauAnalysisTools::CommonSmearingTool::m_mSystematicSets
std::unordered_map< CP::SystematicSet, std::string > m_mSystematicSets
Definition: CommonSmearingTool.h:84
CP::CorrectionCode::Ok
@ Ok
The correction was done successfully.
Definition: CorrectionCode.h:38
TauAnalysisTools::CommonSmearingTool::beginEvent
virtual StatusCode beginEvent()
Function called when a new events is loaded.
Definition: CommonSmearingTool.cxx:355
TauAnalysisTools::finalTauAbsEta
double finalTauAbsEta(const xAOD::TauJet &xTau)
return MVA based absolute tau eta
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:128
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
TauAnalysisTools::tauLeadTrackEta
double tauLeadTrackEta(const xAOD::TauJet &xTau)
return leading charge tau track eta
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:142
TauAnalysisTools::getTruthParticleType
TruthMatchedParticleType getTruthParticleType(const xAOD::TauJet &xTau)
return TauJet match type
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:494
CP::CorrectionCode
Return value from object correction CP tools.
Definition: CorrectionCode.h:31
TauAnalysisTools::CommonSmearingTool::CommonSmearingTool
CommonSmearingTool(const std::string &sName)
Create a proper constructor for Athena.
Definition: CommonSmearingTool.cxx:74
TauAnalysisTools::CommonSmearingTool::generateSystematicSets
void generateSystematicSets()
Definition: CommonSmearingTool.cxx:428
TauAnalysisTools::CommonSmearingTool::m_mSystematicsHistNames
std::map< std::string, std::string > m_mSystematicsHistNames
Definition: CommonSmearingTool.h:87
TauAnalysisTools::CommonSmearingTool::ConvertProngToString
std::string ConvertProngToString(const int iProngness) const
Definition: CommonSmearingTool.cxx:369
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
TauAnalysisTools::CommonSmearingTool::affectingSystematics
virtual CP::SystematicSet affectingSystematics() const
returns: the list of all systematics this tool can be affected by
Definition: CommonSmearingTool.cxx:275
TauAnalysisTools::CommonSmearingTool::m_bMVATESQualityCheck
Gaudi::Property< bool > m_bMVATESQualityCheck
Definition: CommonSmearingTool.h:105
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
xAOD::TauJet_v3::ptFinalCalib
double ptFinalCalib() const
asg::AnaToolHandle::get
T * get()
access the tool
TauAnalysisTools::finalTauEta
double finalTauEta(const xAOD::TauJet &xTau)
return MVA based tau eta
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:121
xAOD::EventInfo_v1::eventType
bool eventType(EventType type) const
Check for one particular bitmask value.
TauAnalysisTools::split
void split(const std::string &sInput, const char cDelim, std::vector< std::string > &vOut)
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:24