ATLAS Offline Software
Loading...
Searching...
No Matches
JetUncertaintiesTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef JETUNCERTAINTIES_JETUNCERTAINTIESTOOL_H
6#define JETUNCERTAINTIES_JETUNCERTAINTIESTOOL_H
7
10#include "AsgTools/AsgTool.h"
12
13#include <mutex>
14#include <string>
15#include <vector>
16#include <unordered_map>
17#include <tuple>
18
19#include "TRandom3.h"
20
21namespace jet
22{
26 class UncertaintyGroup;
27 class UncertaintySet;
28 class ConfigHelper;
29 class GroupHelper;
30 class ComponentHelper;
31 class ResolutionHelper;
32}
33
34class TFile;
35class TH2D;
36
37namespace xAOD
38{
40}
41
43 public asg::AsgTool
44{
46
47 public:
48 // Constructor/destructor
49 JetUncertaintiesTool(const std::string& name = "JetUncertaintiesTool");
51 virtual ~JetUncertaintiesTool();
52
53 // Pre-initialization methods
54 // Default scale is MeV per ATLAS policy
55 virtual StatusCode setScaleToMeV();
56 virtual StatusCode setScaleToGeV();
57
58 // Initialization method
59 virtual StatusCode initialize();
60
61 // Control methods
62 virtual void setRandomSeed(long long int seed) { m_userSeed = seed; }
63
64
65 // Tool information retrieval methods
66 virtual std::string getName() const { return m_name; }
67 virtual std::string getRelease() const { return m_release; }
68 virtual std::string getJetDef() const { return m_jetDef; }
69 virtual std::string getMCType() const { return m_mcType; }
70 virtual std::string getConfigFile() const { return m_configFile; }
71 virtual std::string getPath() const { return m_path; }
72 virtual std::string getAnalysisFile() const { return m_analysisFile; }
73 virtual std::string getAnalysisHistPattern() const { return m_analysisHistPattern; }
74 virtual std::string getDefaultAnaFile() const { return m_defAnaFile; }
75 virtual float getSqrtS() const;
76
77 // Tool information retrieval methods that require input
78 virtual float getRefMu() const;
79 virtual float getRefNPV() const;
80 virtual float getRefMu(const xAOD::Jet& jet) const;
81 virtual float getRefNPV(const xAOD::Jet& jet) const;
82
83 // Inherited methods from IJetUncertaintiesTool to implement
84 // Retrieve component information
85 virtual size_t getNumComponents() const;
86 virtual size_t getComponentIndex(const std::string& name) const;
87 virtual size_t getComponentIndex(const TString& name) const;
88 virtual std::string getComponentName(const size_t index) const;
89 virtual std::string getComponentDesc(const size_t index) const;
90 virtual std::string getComponentCategory(const size_t index) const;
91 virtual bool getComponentIsReducible(const size_t index) const;
92 // Retrieve component scaling information
93 virtual bool getComponentScalesFourVec(const size_t index) const;
94 virtual bool getComponentScalesPt(const size_t index) const;
95 virtual bool getComponentScalesMass(const size_t index) const;
96 virtual bool getComponentScalesD12(const size_t index) const;
97 virtual bool getComponentScalesD23(const size_t index) const;
98 virtual bool getComponentScalesTau21(const size_t index) const;
99 virtual bool getComponentScalesTau32(const size_t index) const;
100 virtual bool getComponentScalesTau21WTA(const size_t index) const;
101 virtual bool getComponentScalesTau32WTA(const size_t index) const;
102 virtual bool getComponentScalesD2Beta1(const size_t index) const;
103 virtual bool getComponentScalesC2Beta1(const size_t index) const;
104 virtual bool getComponentScalesQw(const size_t index) const;
105 virtual bool getComponentScalesTagScaleFactor(const size_t index) const;
106 virtual bool getComponentScalesMultiple(const size_t index) const;
107 virtual std::set<jet::CompScaleVar::TypeEnum> getComponentScaleVars(const size_t index) const;
108 virtual jet::JetTopology::TypeEnum getComponentTopology( const size_t index) const;
109 // Retrieve multi-component information
110 virtual std::vector<std::string> getComponentCategories() const;
111 virtual std::vector<size_t> getComponentsInCategory(const std::string& category) const;
112 virtual std::vector<std::string> getComponentNamesInCategory(const std::string& category) const;
113
114 // Inherited methods from IJetUncertaintiesTool to implement
115 // Retrieve uncertainty and validity information for a given component
116 virtual bool getValidity ATLAS_NOT_THREAD_SAFE (size_t index, const xAOD::Jet& jet) const;
117 virtual bool getValidity(size_t index, const xAOD::Jet& jet, const xAOD::EventInfo& eInfo) const;
118 virtual bool getValidity ATLAS_NOT_THREAD_SAFE (size_t index, const xAOD::Jet& jet, const jet::CompScaleVar::TypeEnum scaleVar) const;
119 virtual bool getValidity(size_t index, const xAOD::Jet& jet, const xAOD::EventInfo& eInfo, const jet::CompScaleVar::TypeEnum scaleVar) const;
120
121 virtual double getUncertainty ATLAS_NOT_THREAD_SAFE (size_t index, const xAOD::Jet& jet) const;
122 virtual double getUncertainty(size_t index, const xAOD::Jet& jet, const xAOD::EventInfo& eInfo) const;
123 virtual double getUncertainty ATLAS_NOT_THREAD_SAFE (size_t index, const xAOD::Jet& jet, const jet::CompScaleVar::TypeEnum scaleVar) const;
124 virtual double getUncertainty(size_t index, const xAOD::Jet& jet, const xAOD::EventInfo& eInfo, const jet::CompScaleVar::TypeEnum scaleVar) const;
125
126 virtual bool getValidUncertainty ATLAS_NOT_THREAD_SAFE (size_t index, double& unc, const xAOD::Jet& jet) const;
127 virtual bool getValidUncertainty(size_t index, double& unc, const xAOD::Jet& jet, const xAOD::EventInfo& eInfo) const;
128 virtual bool getValidUncertainty ATLAS_NOT_THREAD_SAFE (size_t index, double& unc, const xAOD::Jet& jet, const jet::CompScaleVar::TypeEnum scaleVar) const;
129 virtual bool getValidUncertainty(size_t index, double& unc, const xAOD::Jet& jet, const xAOD::EventInfo& eInfo, const jet::CompScaleVar::TypeEnum scaleVar) const;
130
131 virtual double getNormalizedCaloMassWeight(const xAOD::Jet& jet) const;
132 virtual double getNormalizedTAMassWeight( const xAOD::Jet& jet) const;
133
134 virtual double getNominalResolutionMC(const xAOD::Jet& jet, const jet::CompScaleVar::TypeEnum smearType, const jet::JetTopology::TypeEnum topology = jet::JetTopology::UNKNOWN) const;
136
137 // Inherited methods from CP::IJetUncertaintiesTool to implement
138 // Apply a systematic variation or get a new copy
140 virtual CP::CorrectionCode applyCorrection(xAOD::Jet& jet, const xAOD::EventInfo& eInfo) const;
142 virtual CP::CorrectionCode correctedCopy(const xAOD::Jet& input, xAOD::Jet*& output, const xAOD::EventInfo& eInfo) const;
146 xAOD::JetContainer& inputs,
147 const CP::SystematicSet& syst) const;
148
149
150 // Inherited methods from CP::ISystematicsTool to implement
151 // Changes internal state to the specified SystematicSet
152 virtual bool isAffectedBySystematic(const CP::SystematicVariation& systematic) const;
156 virtual StatusCode applySystematicVariation(const CP::SystematicSet& systConfig);
157
158
159 // Retrieve the correlation matrix for the loaded configuration
160 // Returns NULL on failure
161 virtual TH2D* getPtCorrelationMatrix ATLAS_NOT_THREAD_SAFE (
162 const int numBins,
163 const double minPt,
164 const double maxPt,
165 const double valEta );
166 virtual TH2D* getPtCorrelationMatrix ATLAS_NOT_THREAD_SAFE (
167 const int numBins,
168 const double minPt,
169 const double maxPt,
170 const double valEta1,
171 const double valEta2);
172 virtual TH2D* getEtaCorrelationMatrix ATLAS_NOT_THREAD_SAFE (
173 const int numBins,
174 const double minEta,
175 const double maxEta,
176 const double valPt );
177 virtual TH2D* getEtaCorrelationMatrix ATLAS_NOT_THREAD_SAFE (
178 const int numBins,
179 const double minEta,
180 const double maxEta,
181 const double valPt1,
182 const double valPt2 );
183
184 private:
185 // Control variables
187 const std::string m_name;
189
190 // Properties for the python configuration
191 std::string m_release;
192 std::string m_jetDef;
193 std::string m_mcType;
194 std::string m_configFile;
195 std::string m_calibArea;
196 std::string m_path;
197 std::string m_analysisFile;
200 std::vector<std::string> m_systFilters;
202 std::string m_name_EffSF;
203 std::string m_name_SigeffSF;
204 std::string m_name_Efficiency;
205 std::string m_name_TagResult;
206 // bool m_flavourJetByJet;
207
208 // Information to read in and store from the config file
209 std::string m_defAnaFile;
210 float m_refNPV;
211 float m_refMu;
214 std::vector<jet::UncertaintyGroup*> m_groups;
215
216 // The SystematicSet known sets, maps, and current state
221 std::unordered_map<CP::SystematicSet,CP::SystematicSet> m_systFilterMap;
222 std::unordered_map<CP::SystematicSet,jet::UncertaintySet*> m_systSetMap;
223
224 // File-wide validity histogram
226
227 // Jet combined mass information
233
234 // Smearing information
235 long long int m_userSeed;
236 mutable TRandom3 m_rand ATLAS_THREAD_SAFE; // protected by m_reentrantMutex in the execute path
237 mutable std::mutex m_reentrantMutex;
240
241 // Default prefix for each component name
242 const std::string m_namePrefix;
243
244
245
246
247 // Helper methods for this tool's functions
248 StatusCode addUncertaintyGroup (const jet::ConfigHelper& helper);
249 StatusCode addUncertaintyComponent(const jet::ConfigHelper& helper);
251 const xAOD::EventInfo* getDefaultEventInfo ATLAS_NOT_THREAD_SAFE () const;
252 StatusCode checkIndexInput(const size_t index) const;
253 double getSmearingFactor(const xAOD::Jet& jet, const jet::CompScaleVar::TypeEnum smearType, const double variation) const;
254 double getNominalResolution(const xAOD::Jet& jet, const jet::CompScaleVar::TypeEnum smearType, const jet::JetTopology::TypeEnum topology, const bool readMC) const;
256 double readHistoFromParam(const xAOD::JetFourMom_t& jet4vec, const jet::UncertaintyHistogram& histo, const jet::CompParametrization::TypeEnum param) const;
257
258 // Helper methods for setting shifted moments
259 StatusCode updateSplittingScale12(xAOD::Jet& jet, const double shift) const;
260 StatusCode updateSplittingScale23(xAOD::Jet& jet, const double shift) const;
261 StatusCode updateTau21(xAOD::Jet& jet, const double shift) const;
262 StatusCode updateTau32(xAOD::Jet& jet, const double shift) const;
263 StatusCode updateTau21WTA(xAOD::Jet& jet, const double shift) const;
264 StatusCode updateTau32WTA(xAOD::Jet& jet, const double shift) const;
265 StatusCode updateD2Beta1(xAOD::Jet& jet, const double shift) const;
266 StatusCode updateC2Beta1(xAOD::Jet& jet, const double shift) const;
267 StatusCode updateQw(xAOD::Jet& jet, const double shift) const;
268 StatusCode updateTagScaleFactor(xAOD::Jet& jet, const double shift) const;
269 StatusCode updateTagEfficiency(xAOD::Jet& jet, const double shift) const;
270
271 // Helper methods for CP::ISystematicsTool functions
272 bool checkIfRecommendedSystematic(const jet::UncertaintyGroup& systematic) const;
273 virtual StatusCode addAffectingSystematic(const CP::SystematicVariation& systematic, bool recommended);
274 virtual StatusCode getFilteredSystematicSet(const CP::SystematicSet& systConfig, CP::SystematicSet& filteredSet);
275 virtual StatusCode getUncertaintySet(const CP::SystematicSet& filteredSet, jet::UncertaintySet*& uncSet);
276
277 // accessor to taggign efficiency SF
278 SG::AuxElement::Accessor<float> m_accTagScaleFactor;
279 SG::AuxElement::Accessor<float> m_accEffSF;
280 SG::AuxElement::Accessor<float> m_accSigeffSF;
281 SG::AuxElement::Accessor<float> m_accEfficiency;
282 SG::AuxElement::Accessor<bool> m_accTagResult;
283
284 // Properties for the flavour configuration
286
287 // toggle only the JER uncertainties for pseudo-data smearing
289};
290
291
292#endif
#define ASG_TOOL_CLASS(CLASSNAME, INT1)
Define macros for attributes used to control the static checker.
#define ATLAS_CTORDTOR_NOT_THREAD_SAFE
Return value from object correction CP tools.
Class to wrap a set of SystematicVariations.
virtual CP::CorrectionCode applyContainerCorrection ATLAS_NOT_THREAD_SAFE(xAOD::JetContainer &inputs) const
virtual bool getComponentScalesTagScaleFactor(const size_t index) const
StatusCode addUncertaintyGroup(const jet::ConfigHelper &helper)
virtual bool getComponentScalesFourVec(const size_t index) const
virtual bool getComponentScalesMass(const size_t index) const
virtual double getNominalResolutionMC(const xAOD::Jet &jet, const jet::CompScaleVar::TypeEnum smearType, const jet::JetTopology::TypeEnum topology=jet::JetTopology::UNKNOWN) const
virtual TH2D *getEtaCorrelationMatrix ATLAS_NOT_THREAD_SAFE(const int numBins, const double minEta, const double maxEta, const double valPt1, const double valPt2)
jet::UncertaintyHistogram * m_caloMassWeight
virtual bool getComponentScalesPt(const size_t index) const
virtual CP::CorrectionCode applyContainerCorrection(xAOD::JetContainer &inputs, const xAOD::EventInfo &eInfo) const
virtual CP::CorrectionCode correctedCopy(const xAOD::Jet &input, xAOD::Jet *&output, const xAOD::EventInfo &eInfo) const
virtual std::string getDefaultAnaFile() const
virtual StatusCode addAffectingSystematic(const CP::SystematicVariation &systematic, bool recommended)
StatusCode updateTau32(xAOD::Jet &jet, const double shift) const
CP::SystematicSet m_currentSystSet
virtual double getNormalizedTAMassWeight(const xAOD::Jet &jet) const
virtual std::string getMCType() const
std::vector< jet::UncertaintyGroup * > m_groups
jet::UncertaintyHistogram * m_refMuHist
virtual CP::CorrectionCode correctedCopy ATLAS_NOT_THREAD_SAFE(const xAOD::Jet &input, xAOD::Jet *&output) const
virtual bool getComponentScalesC2Beta1(const size_t index) const
virtual bool getComponentScalesTau32WTA(const size_t index) const
virtual bool getValidUncertainty ATLAS_NOT_THREAD_SAFE(size_t index, double &unc, const xAOD::Jet &jet) const
virtual std::set< jet::CompScaleVar::TypeEnum > getComponentScaleVars(const size_t index) const
virtual std::string getConfigFile() const
virtual bool getValidUncertainty ATLAS_NOT_THREAD_SAFE(size_t index, double &unc, const xAOD::Jet &jet, const jet::CompScaleVar::TypeEnum scaleVar) const
jet::CompMassDef::TypeEnum m_combMassWeightTAMassDef
virtual std::string getJetDef() const
virtual float getRefNPV() const
virtual bool isAffectedBySystematic(const CP::SystematicVariation &systematic) const
Declare the interface that this class provides.
virtual StatusCode setScaleToGeV()
StatusCode updateTagEfficiency(xAOD::Jet &jet, const double shift) const
jet::UncertaintyComponent * buildUncertaintyComponent(const jet::ComponentHelper &component) const
StatusCode updateC2Beta1(xAOD::Jet &jet, const double shift) const
virtual TH2D *getPtCorrelationMatrix ATLAS_NOT_THREAD_SAFE(const int numBins, const double minPt, const double maxPt, const double valEta1, const double valEta2)
virtual bool getComponentIsReducible(const size_t index) const
double getSmearingFactor(const xAOD::Jet &jet, const jet::CompScaleVar::TypeEnum smearType, const double variation) const
virtual CP::SystematicSet recommendedSystematics() const
the list of all systematics this tool recommends to use
virtual StatusCode getUncertaintySet(const CP::SystematicSet &filteredSet, jet::UncertaintySet *&uncSet)
virtual std::string getPath() const
jet::UncertaintyHistogram * m_refNPVHist
std::vector< std::string > m_systFilters
StatusCode updateTau32WTA(xAOD::Jet &jet, const double shift) const
CP::SystematicSet m_recommendedSystematics
StatusCode updateTau21(xAOD::Jet &jet, const double shift) const
virtual size_t getComponentIndex(const std::string &name) const
virtual bool getComponentScalesMultiple(const size_t index) const
SG::AuxElement::Accessor< float > m_accEfficiency
virtual std::string getComponentDesc(const size_t index) const
std::unordered_map< CP::SystematicSet, CP::SystematicSet > m_systFilterMap
virtual float getRefMu() const
virtual TH2D *getPtCorrelationMatrix ATLAS_NOT_THREAD_SAFE(const int numBins, const double minPt, const double maxPt, const double valEta)
const xAOD::EventInfo *getDefaultEventInfo ATLAS_NOT_THREAD_SAFE() const
virtual bool getComponentScalesTau21(const size_t index) const
StatusCode updateSplittingScale12(xAOD::Jet &jet, const double shift) const
CP::SystematicSet m_recognizedSystematics
StatusCode updateTagScaleFactor(xAOD::Jet &jet, const double shift) const
virtual StatusCode setScaleToMeV()
StatusCode updateSplittingScale23(xAOD::Jet &jet, const double shift) const
SG::AuxElement::Accessor< float > m_accEffSF
virtual std::string getName() const
StatusCode updateD2Beta1(xAOD::Jet &jet, const double shift) const
virtual double getUncertainty ATLAS_NOT_THREAD_SAFE(size_t index, const xAOD::Jet &jet) const
virtual CP::CorrectionCode applyCorrection(xAOD::Jet &jet, const xAOD::EventInfo &eInfo) const
virtual bool getComponentScalesTau21WTA(const size_t index) const
double readHistoFromParam(const xAOD::Jet &jet, const jet::UncertaintyHistogram &histo, const jet::CompParametrization::TypeEnum param, const jet::CompMassDef::TypeEnum massDef) const
JetUncertaintiesTool(const std::string &name="JetUncertaintiesTool")
virtual std::string getAnalysisFile() const
virtual double getUncertainty ATLAS_NOT_THREAD_SAFE(size_t index, const xAOD::Jet &jet, const jet::CompScaleVar::TypeEnum scaleVar) const
virtual std::string getRelease() const
jet::UncertaintyHistogram * m_TAMassWeight
virtual bool getValidity(size_t index, const xAOD::Jet &jet, const xAOD::EventInfo &eInfo) const
virtual float getSqrtS() const
virtual CP::SystematicSet affectingSystematics() const
the list of all systematics this tool can be affected by
virtual bool getComponentScalesQw(const size_t index) const
StatusCode addUncertaintyComponent(const jet::ConfigHelper &helper)
virtual StatusCode applySystematicVariation(const CP::SystematicSet &systConfig)
effects: configure this tool for the given list of systematic variations.
virtual size_t getNumComponents() const
virtual std::vector< std::string > getComponentCategories() const
virtual CP::SystematicSet appliedSystematics() const
virtual double getNormalizedCaloMassWeight(const xAOD::Jet &jet) const
virtual std::string getComponentName(const size_t index) const
const std::string m_namePrefix
double getNominalResolution(const xAOD::Jet &jet, const jet::CompScaleVar::TypeEnum smearType, const jet::JetTopology::TypeEnum topology, const bool readMC) const
virtual bool getValidity ATLAS_NOT_THREAD_SAFE(size_t index, const xAOD::Jet &jet, const jet::CompScaleVar::TypeEnum scaleVar) const
virtual bool getComponentScalesD12(const size_t index) const
virtual double getNominalResolutionData(const xAOD::Jet &jet, const jet::CompScaleVar::TypeEnum smearType, const jet::JetTopology::TypeEnum topology=jet::JetTopology::UNKNOWN) const
virtual CP::CorrectionCode applyCorrection ATLAS_NOT_THREAD_SAFE(xAOD::Jet &jet) const
StatusCode updateQw(xAOD::Jet &jet, const double shift) const
virtual std::string getComponentCategory(const size_t index) const
virtual bool getComponentScalesD23(const size_t index) const
bool checkIfRecommendedSystematic(const jet::UncertaintyGroup &systematic) const
std::unordered_map< CP::SystematicSet, jet::UncertaintySet * > m_systSetMap
StatusCode checkIndexInput(const size_t index) const
virtual std::vector< std::string > getComponentNamesInCategory(const std::string &category) const
SG::AuxElement::Accessor< bool > m_accTagResult
jet::ValidityHistogram * m_fileValidHist
jet::CompParametrization::TypeEnum m_combMassParam
virtual bool getValidUncertainty(size_t index, double &unc, const xAOD::Jet &jet, const xAOD::EventInfo &eInfo) const
TRandom3 m_rand ATLAS_THREAD_SAFE
virtual StatusCode getFilteredSystematicSet(const CP::SystematicSet &systConfig, CP::SystematicSet &filteredSet)
virtual TH2D *getEtaCorrelationMatrix ATLAS_NOT_THREAD_SAFE(const int numBins, const double minEta, const double maxEta, const double valPt)
StatusCode updateTau21WTA(xAOD::Jet &jet, const double shift) const
SG::AuxElement::Accessor< float > m_accSigeffSF
jet::ResolutionHelper * m_resHelper
virtual bool getComponentScalesD2Beta1(const size_t index) const
SG::AuxElement::Accessor< float > m_accTagScaleFactor
virtual jet::JetTopology::TypeEnum getComponentTopology(const size_t index) const
virtual StatusCode initialize()
Dummy implementation of the initialisation function.
virtual double getUncertainty(size_t index, const xAOD::Jet &jet, const xAOD::EventInfo &eInfo) const
virtual std::string getAnalysisHistPattern() const
virtual void setRandomSeed(long long int seed)
jet::UncertaintySet * m_currentUncSet
jet::CompMassDef::TypeEnum m_combMassWeightCaloMassDef
virtual std::vector< size_t > getComponentsInCategory(const std::string &category) const
virtual bool getValidity ATLAS_NOT_THREAD_SAFE(size_t index, const xAOD::Jet &jet) const
virtual bool getComponentScalesTau32(const size_t index) const
Base class for the dual-use tool implementation classes.
Definition AsgTool.h:47
Class creating a shallow copy of an existing auxiliary container.
Definition index.py:1
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Jet_v1 Jet
Definition of the current "jet version".
EventInfo_v1 EventInfo
Definition of the latest event info version.
JetContainer_v1 JetContainer
Definition of the current "jet container version".
ROOT::Math::LorentzVector< ROOT::Math::PtEtaPhiM4D< double > > JetFourMom_t
Base 4 Momentum type for Jet.
Definition JetTypes.h:17