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 <string>
14#include <vector>
15#include <unordered_map>
16#include <tuple>
17
18#include "TRandom3.h"
19
20namespace jet
21{
25 class UncertaintyGroup;
26 class UncertaintySet;
27 class ConfigHelper;
28 class GroupHelper;
29 class ComponentHelper;
30 class ResolutionHelper;
31}
32
33class TFile;
34class TH2D;
35
36namespace xAOD
37{
39}
40
41// Not thread-safe due to use of statics and TRandom3
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(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(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(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(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(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(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;
135 virtual double getNominalResolutionData(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;
141 virtual CP::CorrectionCode correctedCopy(const xAOD::Jet& input, xAOD::Jet*& output) const;
142 virtual CP::CorrectionCode correctedCopy(const xAOD::Jet& input, xAOD::Jet*& output, const xAOD::EventInfo& eInfo) const;
145
146
147 // Inherited methods from CP::ISystematicsTool to implement
148 // Changes internal state to the specified SystematicSet
149 virtual bool isAffectedBySystematic(const CP::SystematicVariation& systematic) const;
152 virtual CP::SystematicSet appliedSystematics() const;
153 virtual StatusCode applySystematicVariation(const CP::SystematicSet& systConfig);
154
155
156 // Retrieve the correlation matrix for the loaded configuration
157 // Returns NULL on failure
158 virtual TH2D* getPtCorrelationMatrix( const int numBins,
159 const double minPt,
160 const double maxPt,
161 const double valEta );
162 virtual TH2D* getPtCorrelationMatrix( const int numBins,
163 const double minPt,
164 const double maxPt,
165 const double valEta1,
166 const double valEta2);
167 virtual TH2D* getEtaCorrelationMatrix( const int numBins,
168 const double minEta,
169 const double maxEta,
170 const double valPt );
171 virtual TH2D* getEtaCorrelationMatrix( const int numBins,
172 const double minEta,
173 const double maxEta,
174 const double valPt1,
175 const double valPt2 );
176
177 private:
178 // Control variables
180 const std::string m_name;
182
183 // Properties for the python configuration
184 std::string m_release;
185 std::string m_jetDef;
186 std::string m_mcType;
187 std::string m_configFile;
188 std::string m_calibArea;
189 std::string m_path;
190 std::string m_analysisFile;
193 std::vector<std::string> m_systFilters;
195 std::string m_name_EffSF;
196 std::string m_name_SigeffSF;
197 std::string m_name_Efficiency;
198 std::string m_name_TagResult;
199 // bool m_flavourJetByJet;
200
201 // Information to read in and store from the config file
202 std::string m_defAnaFile;
203 float m_refNPV;
204 float m_refMu;
207 std::vector<jet::UncertaintyGroup*> m_groups;
208
209 // The SystematicSet known sets, maps, and current state
214 std::unordered_map<CP::SystematicSet,CP::SystematicSet> m_systFilterMap;
215 std::unordered_map<CP::SystematicSet,jet::UncertaintySet*> m_systSetMap;
216
217 // File-wide validity histogram
219
220 // Jet combined mass information
226
227 // Smearing information
228 long long int m_userSeed;
229 mutable TRandom3 m_rand; // mutable as this we want to call in a const function (everything else is fixed, the random generator is modifiable)
232
233 // Default prefix for each component name
234 const std::string m_namePrefix;
235
236
237
238
239 // Helper methods for this tool's functions
240 StatusCode addUncertaintyGroup (const jet::ConfigHelper& helper);
241 StatusCode addUncertaintyComponent(const jet::ConfigHelper& helper);
244 StatusCode checkIndexInput(const size_t index) const;
245 double getSmearingFactor(const xAOD::Jet& jet, const jet::CompScaleVar::TypeEnum smearType, const double variation) const;
246 double getNominalResolution(const xAOD::Jet& jet, const jet::CompScaleVar::TypeEnum smearType, const jet::JetTopology::TypeEnum topology, const bool readMC) const;
248 double readHistoFromParam(const xAOD::JetFourMom_t& jet4vec, const jet::UncertaintyHistogram& histo, const jet::CompParametrization::TypeEnum param) const;
249
250 // Helper methods for setting shifted moments
251 StatusCode updateSplittingScale12(xAOD::Jet& jet, const double shift) const;
252 StatusCode updateSplittingScale23(xAOD::Jet& jet, const double shift) const;
253 StatusCode updateTau21(xAOD::Jet& jet, const double shift) const;
254 StatusCode updateTau32(xAOD::Jet& jet, const double shift) const;
255 StatusCode updateTau21WTA(xAOD::Jet& jet, const double shift) const;
256 StatusCode updateTau32WTA(xAOD::Jet& jet, const double shift) const;
257 StatusCode updateD2Beta1(xAOD::Jet& jet, const double shift) const;
258 StatusCode updateC2Beta1(xAOD::Jet& jet, const double shift) const;
259 StatusCode updateQw(xAOD::Jet& jet, const double shift) const;
260 StatusCode updateTagScaleFactor(xAOD::Jet& jet, const double shift) const;
261 StatusCode updateTagEfficiency(xAOD::Jet& jet, const double shift) const;
262
263 // Helper methods for CP::ISystematicsTool functions
264 bool checkIfRecommendedSystematic(const jet::UncertaintyGroup& systematic) const;
265 virtual StatusCode addAffectingSystematic(const CP::SystematicVariation& systematic, bool recommended);
266 virtual StatusCode getFilteredSystematicSet(const CP::SystematicSet& systConfig, CP::SystematicSet& filteredSet);
267 virtual StatusCode getUncertaintySet(const CP::SystematicSet& filteredSet, jet::UncertaintySet*& uncSet);
268
269 // accessor to taggign efficiency SF
275
276 // Properties for the flavour configuration
278
279 // toggle only the JER uncertainties for pseudo-data smearing
281};
282
283
284#endif
#define ASG_TOOL_CLASS(CLASSNAME, INT1)
Define macros for attributes used to control the static checker.
#define ATLAS_NOT_THREAD_SAFE
getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats
Return value from object correction CP tools.
virtual SystematicSet affectingSystematics() const =0
the list of all systematics this tool can be affected by
virtual SystematicSet recommendedSystematics() const =0
the list of all systematics this tool recommends to use
virtual StatusCode applySystematicVariation(const SystematicSet &systConfig)=0
effects: configure this tool for the given list of systematic variations.
virtual bool isAffectedBySystematic(const SystematicVariation &systematic) const =0
Declare the interface that this class provides.
Class to wrap a set of SystematicVariations.
virtual CP::CorrectionCode correctedCopy(const xAOD::Jet &input, xAOD::Jet *&output) const =0
virtual CP::CorrectionCode applyCorrection(xAOD::Jet &input) const =0
virtual CP::CorrectionCode applyContainerCorrection(xAOD::JetContainer &inputs) const =0
virtual std::string getComponentName(const size_t index) const =0
virtual bool getComponentScalesTau32(const size_t index) const =0
virtual std::string getComponentDesc(const size_t index) const =0
virtual bool getComponentScalesTau21(const size_t index) const =0
virtual bool getComponentScalesD12(const size_t index) const =0
virtual double getUncertainty(size_t index, const xAOD::Jet &jet) const =0
virtual bool getComponentScalesMass(const size_t index) const =0
virtual bool getValidity(size_t index, const xAOD::Jet &jet) const =0
virtual size_t getNumComponents() const =0
virtual float getRefNPV() const =0
virtual float getRefMu() const =0
virtual bool getComponentScalesPt(const size_t index) const =0
virtual bool getComponentScalesFourVec(const size_t index) const =0
virtual bool getValidUncertainty(size_t index, double &unc, const xAOD::Jet &jet) const =0
virtual size_t getComponentIndex(const std::string &name) const =0
virtual bool getComponentScalesD23(const size_t index) const =0
StatusCode addUncertaintyGroup(const jet::ConfigHelper &helper)
jet::UncertaintyHistogram * m_caloMassWeight
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 std::string getMCType() const
std::vector< jet::UncertaintyGroup * > m_groups
jet::UncertaintyHistogram * m_refMuHist
virtual std::string getConfigFile() const
jet::CompMassDef::TypeEnum m_combMassWeightTAMassDef
virtual std::string getJetDef() const
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
const xAOD::EventInfo * getDefaultEventInfo() const
double getSmearingFactor(const xAOD::Jet &jet, const jet::CompScaleVar::TypeEnum smearType, const double variation) const
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
SG::AuxElement::Accessor< float > m_accEfficiency
std::unordered_map< CP::SystematicSet, CP::SystematicSet > m_systFilterMap
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
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 std::string getRelease() const
jet::UncertaintyHistogram * m_TAMassWeight
StatusCode addUncertaintyComponent(const jet::ConfigHelper &helper)
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
StatusCode updateQw(xAOD::Jet &jet, const double shift) const
bool checkIfRecommendedSystematic(const jet::UncertaintyGroup &systematic) const
std::unordered_map< CP::SystematicSet, jet::UncertaintySet * > m_systSetMap
StatusCode checkIndexInput(const size_t index) const
SG::AuxElement::Accessor< bool > m_accTagResult
jet::ValidityHistogram * m_fileValidHist
jet::CompParametrization::TypeEnum m_combMassParam
virtual StatusCode getFilteredSystematicSet(const CP::SystematicSet &systConfig, CP::SystematicSet &filteredSet)
StatusCode updateTau21WTA(xAOD::Jet &jet, const double shift) const
SG::AuxElement::Accessor< float > m_accSigeffSF
jet::ResolutionHelper * m_resHelper
SG::AuxElement::Accessor< float > m_accTagScaleFactor
virtual std::string getAnalysisHistPattern() const
virtual void setRandomSeed(long long int seed)
jet::UncertaintySet * m_currentUncSet
jet::CompMassDef::TypeEnum m_combMassWeightCaloMassDef
SG::Accessor< T, ALLOC > Accessor
Definition AuxElement.h:572
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
void initialize()