ATLAS Offline Software
Loading...
Searching...
No Matches
ISUSYObjDef_xAODTool.h
Go to the documentation of this file.
1// This file's extension implies that it's C, but it's really -*- C++ -*-.
2
3/*
4 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
5*/
6
7#ifndef SUSYTOOLS_SUSYOBJDEF_XAODTOOL_H
8#define SUSYTOOLS_SUSYOBJDEF_XAODTOOL_H
9
10// Framework include(s) -- base class
11#include "AsgTools/IAsgTool.h"
12
13// EDM include(s):
14// Note that these are type defs, so we must include headers here
16#include "xAODEgamma/Electron.h"
18#include "xAODMuon/Muon.h"
22#include "xAODTracking/Vertex.h"
23#include "xAODJet/Jet.h"
25#include "xAODEgamma/Photon.h"
27#include "xAODTau/TauJet.h"
33
34// Needed for jet functions (take a shallow copy)
36
37// For the SystInfo struct
39
40// Tool handles
43
44// For the TrigDefs
46
47// For string search
48#include "TString.h"
49#include "TRegexp.h"
50
51// System includes
52#include <iostream> // For warnings in static functions
53#include <vector>
54#include <string>
56
57// Forward declarations
58namespace Trig {
59 class ChainGroup;
60}
61
62namespace ST {
63
64 struct SystInfo{
68 unsigned int affectsType;
69 std::set<unsigned int> affectedWeights;
70 };
71
72 // Define a more compact enum than the IParticle one
88
89
90 // Define types of weights
91 // This doesn't work with enums: class enums can't be assigned to an std::int8_t easily
92 // Normal enums means redefinitions of e.g. "Trigger" and "Isolation"
93 namespace Weights {
94 static const unsigned int Unknown = 0;
95
96 namespace Jet {
97 static const unsigned int Btag = 1001;
98 static const unsigned int JVT = 1002;
99 static const unsigned int Btag_Track = 1003;
100 static const unsigned int FJVT = 1004;
101 }
102
103 namespace Muon {
104 static const unsigned int Reconstruction = 1101;
105 static const unsigned int Isolation = 1102;
106 static const unsigned int ID = 1103;
107 static const unsigned int Trigger = 1104;
108 }
109
110 namespace Electron {
111 static const unsigned int Reconstruction = 1201;
112 static const unsigned int Isolation = 1202;
113 static const unsigned int ID = 1203;
114 static const unsigned int Trigger = 1204;
115 static const unsigned int ChargeID = 1205;
116 }
117
118 namespace Tau {
119 static const unsigned int Reconstruction = 1301;
120 static const unsigned int Trigger = 1302;
121 }
122
123 namespace Photon {
124 static const unsigned int Reconstruction = 1401;
125 static const unsigned int Isolation = 1402;
126 static const unsigned int ID = 1403;
127 static const unsigned int Trigger = 1404;
128 }
129 }
130
131 static const double DUMMYDEF = -999.;
132
133 // Helper method for affected objects
134 static inline bool testAffectsObject(xAOD::Type::ObjectType type, unsigned int test) {
135 switch(test) {
136 case Jet: return (type==xAOD::Type::Jet);
138 case Electron: return (type==xAOD::Type::Electron);
139 case Photon: return (type==xAOD::Type::Photon);
140 case Muon: return (type==xAOD::Type::Muon);
141 case Tau: return (type==xAOD::Type::Tau);
142 case BTag: return (type==xAOD::Type::BTag);
144 default: break;
145 }
146 return false;
147 }
148
149 // Helper method for affected objects
150 static inline std::string testAffectsObject(unsigned int test) {
151 switch(test) {
152 case Jet: return "Jet";
153 case Egamma: return "Egamma";
154 case Electron: return "Electron";
155 case Photon: return "Photon";
156 case Muon: return "Muon";
157 case Tau: return "Tau";
158 case BTag: return "BTag";
159 case MET_TST:
160 case MET_CST:
161 case MET_Track: return "MET";
162 case EventWeight: return "EventWeight";
163 case LRT_Object: return "LRT_objects";
164 default: break;
165 }
166 return "Unknown";
167 }
168
169 static inline int getMCShowerType(const std::string& sample_name, const std::string& tagger="") {
171 // This needs VERY careful syncing with m_showerType in SUSYToolsInit! Change with care!
172 const static std::vector<TString> gen_mc_generator_keys = {"PYTHIA8EVTGEN517","POWHEGHERWIG7","PHH7EG","SHERPA_2210","SHERPA_2211","SHERPA_2212","SHERPA_2214","SHERPA_UNKNOWN"};
173 const static std::vector<TString> gen_mc_generator_keys_dl1d = {"POWHEGHERWIG7","PHH7EG", "SHERPA_221_", "SHERPA_2210","SHERPA_2211","SHERPA_2212", "AMCATNLOPY8","AMCATNLOHERWIG7"};
174
175 //pre-process sample name
176 TString tmp_name(sample_name);
177
178 if(tmp_name.Contains("Py8EG") && !tmp_name.Contains("aMcAtNloPy8EG")) tmp_name.ReplaceAll("Py8EG","PYTHIA8EVTGEN");
179 if(tmp_name.Contains("Pythia") && !tmp_name.Contains("Pythia8") && !tmp_name.Contains("EvtGen")) tmp_name.ReplaceAll("Pythia","PYTHIA8EVTGEN");
180 if(tmp_name.Contains("Pythia8") && !tmp_name.Contains("EvtGen")) tmp_name.ReplaceAll("Pythia8","PYTHIA8EVTGEN");
181 if(tmp_name.Contains("Py8") && !tmp_name.Contains("EG")) tmp_name.ReplaceAll("Py8","PYTHIA8EVTGEN");
182 if(tmp_name.Contains("Sh_2")) tmp_name.ReplaceAll("Sh_2","SHERPA_2");
183 if(tmp_name.Contains("Sh_") && !tmp_name.Contains("Sh_2")) tmp_name.ReplaceAll("Sh_","SHERPA_UNKNOWN_");
184 if(tmp_name.Contains("Sherpa_") && !tmp_name.Contains("Sherpa_2")) tmp_name.ReplaceAll("Sherpa_","SHERPA_UNKNOWN_"); //This is needed as some samples don't label the Sherpa version
185 if(tmp_name.Contains("PYTHIA8EVTGEN517")) tmp_name.ReplaceAll("PYTHIA8EVTGEN517","PYTHIA8EVTGEN"); //This is no longer a special case, but we want to leave it in the generator keys to avoid renumbering for backwards compatibility
186
187 //capitalize the entire sample name
188 tmp_name.ToUpper();
189 //find shower type in name
190 unsigned int ishower = 0;
191 if (tagger=="DL1dv01"){
192 for( const auto & gen : gen_mc_generator_keys_dl1d ){
193 if( tmp_name.Contains(gen) ){return ishower+1;}
194 ishower++;
195 }
196 } else if (tagger=="GN2v01"){
197 for( const auto & gen : gen_mc_generator_keys ){
198 if( tmp_name.Contains(gen) ){return ishower+1;}
199 ishower++;
200 }
201 } else {
202 std::cout << "ST::getMCShowerType ERROR: Invalid tagger " << tagger << ". Supported values are GN2v01 and DL1dv01." << std::endl;
203 return -1;
204 }
205 if( tmp_name.Contains("PYTHIA8EVTGEN") || tmp_name.Contains("PhPy8EG") ) return 0;
206
207 // See if they are doing something really unwise, just in case
208 TRegexp is_data("^data1[5-9]_13TeV");
209 TRegexp is_dataRun3("^data2[2-5]_13p6TeV");
210 if (tmp_name.Contains(is_data) || tmp_name.Contains(is_dataRun3)){
211 std::cout << "ST::getMCShowerType WARNING: Asking for the MC shower when running on a data file is not advised. Just returning 0." << std::endl;
212 return 0;
213 }
214
215 std::cout << "ST::getMCShowerType WARNING: Unknown MC generator detected. Returning default 0 = PowhegPythia8 ShowerType for btagging MC/MC maps." << std::endl;
216 return 0;
217 }
218
219
220 // Simple interface
221 //
222 // Following the design principles outlined in the TF3 recommendations.
223 //
224 //
225 class ISUSYObjDef_xAODTool : public virtual asg::IAsgTool {
226
227 // Declare the interface that the class provides
229
230 public:
231 virtual StatusCode readConfig() = 0;
232
233 virtual int getMCShowerType(const std::string& sample_name, const std::string& tagger="") const = 0;
234
235 // For checking the origin of the input
236 virtual bool isData() const = 0;
237 virtual bool isAtlfast() const = 0;
238
239 // method to access properties of the tool
240 template<typename T> const T* getProperty(const std::string& name) {
241 return dynamic_cast<asg::AsgTool&>(*this).getProperty<T>(name);
242 }
243
244 // override the AsgTool setProperty function for booleans
245 virtual StatusCode setBoolProperty(const std::string& name, const bool& property) = 0;
246
247 // Apply the correction on a modifyable object
248 virtual StatusCode FillMuon(xAOD::Muon& input, const float ptcut, const float etacut) = 0;
249 virtual StatusCode FillJet(xAOD::Jet& input, const bool doCalib = true, const bool isFat = false, const bool doLargeRdecorations = false) ATLAS_NOT_THREAD_SAFE = 0;
250 virtual StatusCode FillTrackJet(xAOD::Jet& input) = 0;
251 virtual StatusCode FillTau(xAOD::TauJet& input) = 0;
252 virtual StatusCode FillElectron(xAOD::Electron& input, const float etcut, const float etacut) = 0;
253 virtual StatusCode FillPhoton(xAOD::Photon& input, const float ptcut, const float etacut) = 0;
254
256
257 virtual StatusCode GetJets(xAOD::JetContainer*& copy,xAOD::ShallowAuxContainer*& copyaux,const bool recordSG=true, const std::string& jetkey="", const xAOD::JetContainer* containerToBeCopied = nullptr) = 0;
258 virtual StatusCode GetTrackJets(xAOD::JetContainer*& copy,xAOD::ShallowAuxContainer*& copyaux,const bool recordSG=true, const std::string& jetkey="", const xAOD::JetContainer* containerToBeCopied = nullptr) = 0;
259 virtual StatusCode GetJetsSyst(const xAOD::JetContainer& calibjets,xAOD::JetContainer*& copy,xAOD::ShallowAuxContainer*& copyaux, const bool recordSG=true, const std::string& jetkey="") = 0;
260 virtual StatusCode GetFatJets(xAOD::JetContainer*& copy, xAOD::ShallowAuxContainer*& copyaux, const bool recordSG = false, const std::string& jetkey = "", const bool doLargeRdecorations = false, const xAOD::JetContainer* containerToBeCopied = nullptr) = 0;
261 virtual StatusCode GetTaus(xAOD::TauJetContainer*& copy,xAOD::ShallowAuxContainer*& copyaux,const bool recordSG=true, const std::string& taukey="TauJets", const xAOD::TauJetContainer* containerToBeCopied = nullptr) = 0;
262 virtual StatusCode GetMuons(xAOD::MuonContainer*& copy,xAOD::ShallowAuxContainer*& copyaux,const bool recordSG=true, const std::string& muonkey="Muons", const std::string& lrtmuonkey = "MuonsLRT", const xAOD::MuonContainer* containerToBeCopied = nullptr) = 0;
263 virtual StatusCode GetElectrons(xAOD::ElectronContainer*& copy,xAOD::ShallowAuxContainer*& copyaux,const bool recordSG=true,const std::string& elekey="Electrons", const std::string& lrtelekey = "LRTElectrons", const xAOD::ElectronContainer* containerToBeCopied = nullptr) = 0;
264 virtual StatusCode GetPhotons(xAOD::PhotonContainer*& copy,xAOD::ShallowAuxContainer*& copyaux,const bool recordSG=true,const std::string& photonkey="Photons", const xAOD::PhotonContainer* containerToBeCopied = nullptr) = 0;
265 virtual StatusCode GetMET(xAOD::MissingETContainer& met,
267 const xAOD::ElectronContainer* elec = nullptr,
268 const xAOD::MuonContainer* muon = nullptr,
269 const xAOD::PhotonContainer* gamma = nullptr,
270 const xAOD::TauJetContainer* taujet = nullptr,
271 bool doTST=true, bool doJVTCut=true,
272 const xAOD::IParticleContainer* invis = nullptr) = 0;
273
276 const xAOD::ElectronContainer* elec = nullptr,
277 const xAOD::MuonContainer* muon = nullptr
278 ) = 0;
279
280 virtual StatusCode GetMETSig(xAOD::MissingETContainer& met,
281 double& metSignificance,
282 bool doTST = true, bool doJVTCut = true
283 ) = 0;
284
285 virtual StatusCode MergeMuons(const xAOD::MuonContainer & muons, const std::vector<bool> &writeMuon, xAOD::MuonContainer* outputCol) const = 0;
286
287 virtual StatusCode prepareLRTMuons(const xAOD::MuonContainer* inMuons, xAOD::MuonContainer* copy) const = 0;
288
289 virtual StatusCode MergeElectrons(const xAOD::ElectronContainer & electrons, xAOD::ElectronContainer* outputCol, const std::set<const xAOD::Electron *> &ElectronsToRemove) const = 0;
290
291 virtual StatusCode prepareLRTElectrons(const xAOD::ElectronContainer* inElectrons, xAOD::ElectronContainer* copy) const = 0;
292
293 virtual StatusCode SetBtagWeightDecorations(const xAOD::Jet& input, const asg::AnaToolHandle<IBTaggingSelectionTool>& btagSelTool, const std::string& btagTagger) const = 0;
294
295 virtual bool IsSignalJet(const xAOD::Jet& input, const float ptcut, const float etacut) const = 0;
296
297 virtual bool IsBadJet(const xAOD::Jet& input) const = 0;
298
299 virtual bool IsBJetLoose(const xAOD::Jet& input) const = 0;
300 virtual bool JetPassJVT(xAOD::Jet& input) = 0;
301
302 virtual bool IsHighPtMuon(const xAOD::Muon& input) const = 0;
303
304 virtual bool IsSignalMuon(const xAOD::Muon& input, const float ptcut, const float d0sigcut, const float z0cut, const float etacut = DUMMYDEF) const = 0;
305
306 virtual bool IsSignalElectron(const xAOD::Electron& input, const float etcut, const float d0sigcut, const float z0cut, const float etacut = DUMMYDEF) const = 0;
307
308 virtual bool IsCosmicMuon(const xAOD::Muon& input,const float z0cut, const float d0cut) const = 0;
309
310 virtual bool IsSignalTau(const xAOD::TauJet& input, const float ptcut, const float etacut) const = 0;
311
312 virtual bool IsBadMuon(const xAOD::Muon& input, const float qopcut) const = 0;
313
314 virtual bool IsSignalPhoton(const xAOD::Photon& input, const float ptcut, const float etacut = DUMMYDEF) const = 0;
315
316 virtual bool IsBJet(const xAOD::Jet& input) const = 0;
317
318 virtual bool IsTrackBJet(const xAOD::Jet& input) const = 0;
319
320 virtual bool IsTruthBJet(const xAOD::Jet& input) const = 0;
321
322 virtual int IsBJetContinuous(const xAOD::Jet& input) const = 0;
323
324 virtual int IsTrackBJetContinuous(const xAOD::Jet& input) const = 0;
325
326 virtual double JVT_SF(const xAOD::JetContainer* jets) = 0;
327
328 virtual double JVT_SFsys(const xAOD::JetContainer* jets, const CP::SystematicSet& systConfig) = 0;
329
330 virtual double FJVT_SF(const xAOD::JetContainer* jets) = 0;
331
332 virtual double FJVT_SFsys(const xAOD::JetContainer* jets, const CP::SystematicSet& systConfig) = 0;
333
334 virtual float BtagSF(const xAOD::JetContainer* jets) = 0;
335
336 virtual float BtagSFsys(const xAOD::JetContainer* jets, const CP::SystematicSet& systConfig) = 0;
337
338 virtual float BtagSF_trkJet(const xAOD::JetContainer* trkjets) = 0;
339
340 virtual float BtagSFsys_trkJet(const xAOD::JetContainer* trkjets, const CP::SystematicSet& systConfig) = 0;
341
342 virtual float GetSignalMuonSF(const xAOD::Muon& mu, const bool recoSF = true, const bool isoSF = true, const bool doBadMuonHP = true, const bool warnOVR = true) = 0;
343
344 virtual float GetSignalElecSF(const xAOD::Electron& el, const bool recoSF = true, const bool idSF = true, const bool triggerSF = true, const bool isoSF = true, const std::string& trigExpr = "singleLepton", const bool ecidsSF = false, const bool cidSF = false) = 0;
345
346 virtual double GetEleTriggerEfficiency(const xAOD::Electron& el, const std::string& trigExpr = "SINGLE_E_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_2018_e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0") const = 0;
347
348 virtual double GetTriggerGlobalEfficiency(const xAOD::ElectronContainer& electrons, const xAOD::MuonContainer& muons, const std::string& trigExpr = "diLepton") = 0;
349
350 virtual double GetTriggerGlobalEfficiency(const xAOD::PhotonContainer& photons, const std::string& trigExpr = "diPhoton") = 0;
351
352 virtual double GetEleTriggerEfficiencySF(const xAOD::Electron& el, const std::string& trigExpr = "SINGLE_E_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_2018_e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0") const = 0;
353
354 virtual double GetTriggerGlobalEfficiencySF(const xAOD::ElectronContainer& electrons, const xAOD::MuonContainer& muons, const std::string& trigExpr = "diLepton") = 0;
355
356 virtual double GetTriggerGlobalEfficiencySF(const xAOD::PhotonContainer& photons, const std::string& trigExpr = "diPhoton") = 0;
357
358 virtual double GetTriggerGlobalEfficiencySFsys(const xAOD::ElectronContainer& electrons, const xAOD::MuonContainer& muons, const CP::SystematicSet& systConfig, const std::string& trigExpr = "diLepton") = 0;
359
360 virtual double GetTriggerGlobalEfficiencySFsys(const xAOD::PhotonContainer& photons, const CP::SystematicSet& systConfig, const std::string& trigExpr = "diPhoton") = 0;
361
362 virtual double GetMuonTriggerEfficiency(const xAOD::Muon& mu, const std::string& trigExpr = "HLT_mu20_iloose_L1MU15_OR_HLT_mu50", const bool isdata = false) = 0;
363
364 virtual double GetTotalMuonTriggerSF(const xAOD::MuonContainer& sfmuons, const std::string& trigExpr) = 0;
365
366 virtual double GetTotalMuonSF(const xAOD::MuonContainer& muons, const bool recoSF = true, const bool isoSF = true, const std::string& trigExpr = "HLT_mu20_iloose_L1MU15_OR_HLT_mu50", const bool bmhptSF = true) = 0;
367
368 virtual float GetTotalElectronSF(const xAOD::ElectronContainer& electrons, const bool recoSF = true, const bool idSF = true, const bool triggerSF = true, const bool isoSF = true, const std::string& trigExpr = "singleLepton", const bool ecidsSF = false, const bool cidSF = false) = 0; // singleLepton == Ele.TriggerSFStringSingle value
369
370 virtual double GetTotalMuonSFsys(const xAOD::MuonContainer& muons, const CP::SystematicSet& systConfig, const bool recoSF = true, const bool isoSF = true, const std::string& trigExpr = "HLT_mu20_iloose_L1MU15_OR_HLT_mu50", const bool bmhptSF = true) = 0;
371
372 virtual float GetTotalElectronSFsys(const xAOD::ElectronContainer& electrons, const CP::SystematicSet& systConfig, const bool recoSF = true, const bool idSF = true, const bool triggerSF = true, const bool isoSF = true, const std::string& trigExpr = "singleLepton", const bool ecidsSF = false, const bool cidSF = false) = 0; // singleLepton == Ele.TriggerSFStringSingle value
373
374 virtual double GetSignalTauSF(const xAOD::TauJet& tau, const bool idSF = true, const bool triggerSF = true, const std::string& trigExpr = "tau25_medium1_tracktwo") = 0;
375
376 virtual double GetSignalTauSFsys(const xAOD::TauJet& tau, const CP::SystematicSet& systConfig, const bool idSF = true, const bool triggerSF = true, const std::string& trigExpr = "tau25_medium1_tracktwo") = 0;
377
378 virtual double GetTauTriggerEfficiencySF(const xAOD::TauJet& tau, const std::string& trigExpr = "tau25_medium1_tracktwo") = 0;
379
380 virtual double GetTotalTauSF(const xAOD::TauJetContainer& taus, const bool idSF = true, const bool triggerSF = true, const std::string& trigExpr = "tau25_medium1_tracktwo") = 0;
381
382 virtual double GetTotalTauSFsys(const xAOD::TauJetContainer& taus, const CP::SystematicSet& systConfig, const bool idSF = true, const bool triggerSF = true, const std::string& trigExpr = "tau25_medium1_tracktwo") = 0;
383
384 virtual double GetSignalPhotonSF(const xAOD::Photon& ph, const bool effSF = true, const bool isoSF = true, const bool triggerSF = false) const = 0;
385
386 virtual double GetSignalPhotonSFsys(const xAOD::Photon& ph, const CP::SystematicSet& systConfig, const bool effSF = true, const bool isoSF = true, const bool triggerSF = false) = 0;
387
388 virtual double GetTotalPhotonSF(const xAOD::PhotonContainer& photons, const bool effSF = true, const bool isoSF = true, const bool triggerSF = false) const = 0;
389
390 virtual double GetTotalPhotonSFsys(const xAOD::PhotonContainer& photons, const CP::SystematicSet& systConfig, const bool effSF = true, const bool isoSF = true, const bool triggerSF = false) = 0;
391
392 virtual double GetTotalJetSF(const xAOD::JetContainer* jets, const bool btagSF = true, const bool jvtSF = true, const bool fjvtSF = false) = 0;
393
394 virtual double GetTotalJetSFsys(const xAOD::JetContainer* jets, const CP::SystematicSet& systConfig, const bool btagSF = true, const bool jvtSF = true, const bool fjvtSF = false) = 0;
395
396 virtual bool IsMETTrigPassed(unsigned int runnumber = 0, bool j400_OR = false) const = 0;
397 virtual bool IsMETTrigPassed(const std::string& triggerName, bool j400_OR = false, const std::string& L1_name = "L1_XE50") const = 0;
398
399 virtual bool IsTrigPassed(const std::string&, unsigned int condition=TrigDefs::Physics) const = 0;
400
401 virtual bool IsTrigMatched(const xAOD::IParticle *part, const std::string& tr_item) = 0;
402 virtual bool IsTrigMatched(const xAOD::IParticle *part1, const xAOD::IParticle *part2, const std::string& tr_item) = 0;
403 virtual bool IsTrigMatched(const std::vector<const xAOD::IParticle*>& v, const std::string& tr_item) = 0;
404 virtual bool IsTrigMatched(const std::initializer_list<const xAOD::IParticle*> &v, const std::string& tr_item) = 0;
405
406 virtual void TrigMatch(const xAOD::IParticle* p, std::initializer_list<std::string>::iterator, std::initializer_list<std::string>::iterator) = 0;
407 virtual void TrigMatch(const xAOD::IParticle* p, const std::vector<std::string>& items) = 0;
408 virtual void TrigMatch(const xAOD::IParticle* p, const std::initializer_list<std::string>& items) = 0;
409 virtual void TrigMatch(const xAOD::IParticleContainer* v, const std::vector<std::string>& items) = 0;
410 virtual void TrigMatch(const xAOD::IParticleContainer* v, const std::initializer_list<std::string>& items) = 0;
411 virtual void TrigMatch(const std::initializer_list<const xAOD::IParticle*>& v, const std::vector<std::string>& items) = 0;
412 virtual void TrigMatch(const std::initializer_list<const xAOD::IParticle*>& v, const std::initializer_list<std::string>& items) = 0;
413 virtual void TrigMatch(const xAOD::IParticle* p, const std::string& item) = 0;
414 virtual void TrigMatch(const xAOD::IParticleContainer* v, const std::string& item) = 0;
415 virtual void TrigMatch(const std::initializer_list<const xAOD::IParticle*> &v, const std::string& item) = 0;
416
417
418 virtual float GetTrigPrescale(const std::string&) const = 0;
419
421
423
424 virtual float GetPileupWeight() = 0;
425
426 virtual float GetPileupWeightPrescaledTrigger(const std::string & trigger_expr) = 0;
427
428 virtual ULong64_t GetPileupWeightHash( ) = 0;
429
430 virtual float GetDataWeight(const std::string&) = 0;
431
432 virtual float GetCorrectedAverageInteractionsPerCrossing(bool includeDataSF=false) = 0;
433
434 virtual float GetCorrectedActualInteractionsPerCrossing(bool includeDataSF=false) = 0;
435
436 virtual double GetSumOfWeights(int channel) = 0;
437
438 virtual unsigned int GetRandomRunNumber(bool muDependentRRN = true) = 0;
439
440 virtual StatusCode ApplyPRWTool(bool muDependentRRN = true) = 0;
441
442 virtual unsigned int GetRunNumber() const = 0;
443
445
447
448 virtual StatusCode ApplyLRTUncertainty() = 0;
449
450 virtual int treatAsYear(const int runNumber=-1) const = 0;
451
452 virtual StatusCode OverlapRemoval(const xAOD::ElectronContainer *electrons, const xAOD::MuonContainer *muons, const xAOD::JetContainer *jets,
453 const xAOD::PhotonContainer* gamma = nullptr, const xAOD::TauJetContainer* taujet = nullptr, const xAOD::JetContainer *fatjets = nullptr) = 0;
454
455 virtual StatusCode NearbyLeptonCorrections(xAOD::ElectronContainer *electrons = nullptr, xAOD::MuonContainer *muons = nullptr) const = 0;
456
457 virtual StatusCode resetSystematics() = 0;
458
459 virtual StatusCode applySystematicVariation( const CP::SystematicSet& systConfig ) = 0;
460
461 virtual bool isPrompt(const xAOD::IParticle* part) const = 0;
462
463 virtual StatusCode FindSusyHP(const xAOD::TruthParticleContainer *truthP, int& pdgid1, int& pdgid2, bool isTruth3 = false) const = 0;
464
465 virtual StatusCode FindSusyHP(const xAOD::TruthEvent *truthE, int& pdgid1, int& pdgid2) const = 0;
466
468 virtual std::vector<ST::SystInfo> getSystInfoList() const = 0;
469
470 virtual std::string TrigSingleLep() const = 0;
471
472 // Temporary function for Sherpa 2.2 V+jets n-jets reweighting
473 // (see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/CentralMC15ProductionList#NEW_Sherpa_v2_2_V_jets_NJet_rewe)
474 virtual float getSherpaVjetsNjetsWeight() const = 0;
475 virtual float getSherpaVjetsNjetsWeight(const std::string& jetContainer) const = 0;
476
483
484 }; // class ISUSYObjDef_xAODTool
485
486} // namespace ST
487
488#endif // SUSYTOOLS_SUSYOBJDEF_XAODTOOL_H
#define ASG_TOOL_INTERFACE(CLASSNAME)
static Double_t taus
Define macros for attributes used to control the static checker.
Class to wrap a set of SystematicVariations.
virtual double GetTotalMuonSF(const xAOD::MuonContainer &muons, const bool recoSF=true, const bool isoSF=true, const std::string &trigExpr="HLT_mu20_iloose_L1MU15_OR_HLT_mu50", const bool bmhptSF=true)=0
virtual float getSherpaVjetsNjetsWeight() const =0
virtual bool JetPassJVT(xAOD::Jet &input)=0
virtual double GetSignalPhotonSF(const xAOD::Photon &ph, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false) const =0
virtual bool IsTrigMatched(const xAOD::IParticle *part, const std::string &tr_item)=0
virtual StatusCode GetMuons(xAOD::MuonContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &muonkey="Muons", const std::string &lrtmuonkey="MuonsLRT", const xAOD::MuonContainer *containerToBeCopied=nullptr)=0
virtual float BtagSFsys(const xAOD::JetContainer *jets, const CP::SystematicSet &systConfig)=0
virtual float GetTrigPrescale(const std::string &) const =0
virtual bool IsSignalJet(const xAOD::Jet &input, const float ptcut, const float etacut) const =0
virtual int IsTrackBJetContinuous(const xAOD::Jet &input) const =0
virtual double GetTotalJetSF(const xAOD::JetContainer *jets, const bool btagSF=true, const bool jvtSF=true, const bool fjvtSF=false)=0
virtual bool isData() const =0
virtual StatusCode applySystematicVariation(const CP::SystematicSet &systConfig)=0
virtual float GetSignalMuonSF(const xAOD::Muon &mu, const bool recoSF=true, const bool isoSF=true, const bool doBadMuonHP=true, const bool warnOVR=true)=0
virtual StatusCode FillTrackJet(xAOD::Jet &input)=0
virtual bool IsBJetLoose(const xAOD::Jet &input) const =0
virtual bool IsTrigPassed(const std::string &, unsigned int condition=TrigDefs::Physics) const =0
virtual StatusCode GetTrackJets(xAOD::JetContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &jetkey="", const xAOD::JetContainer *containerToBeCopied=nullptr)=0
virtual int treatAsYear(const int runNumber=-1) const =0
virtual StatusCode prepareLRTElectrons(const xAOD::ElectronContainer *inElectrons, xAOD::ElectronContainer *copy) const =0
virtual StatusCode GetMETSig(xAOD::MissingETContainer &met, double &metSignificance, bool doTST=true, bool doJVTCut=true)=0
virtual float GetTotalElectronSFsys(const xAOD::ElectronContainer &electrons, const CP::SystematicSet &systConfig, const bool recoSF=true, const bool idSF=true, const bool triggerSF=true, const bool isoSF=true, const std::string &trigExpr="singleLepton", const bool ecidsSF=false, const bool cidSF=false)=0
virtual std::vector< ST::SystInfo > getSystInfoList() const =0
virtual float GetPileupWeight()=0
virtual ULong64_t GetPileupWeightHash()=0
virtual StatusCode prepareLRTMuons(const xAOD::MuonContainer *inMuons, xAOD::MuonContainer *copy) const =0
virtual StatusCode FillElectron(xAOD::Electron &input, const float etcut, const float etacut)=0
virtual double GetTriggerGlobalEfficiencySF(const xAOD::ElectronContainer &electrons, const xAOD::MuonContainer &muons, const std::string &trigExpr="diLepton")=0
virtual double JVT_SFsys(const xAOD::JetContainer *jets, const CP::SystematicSet &systConfig)=0
virtual StatusCode readConfig()=0
virtual int IsBJetContinuous(const xAOD::Jet &input) const =0
virtual StatusCode GetJetsSyst(const xAOD::JetContainer &calibjets, xAOD::JetContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &jetkey="")=0
virtual double GetMuonTriggerEfficiency(const xAOD::Muon &mu, const std::string &trigExpr="HLT_mu20_iloose_L1MU15_OR_HLT_mu50", const bool isdata=false)=0
virtual StatusCode GetJets(xAOD::JetContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &jetkey="", const xAOD::JetContainer *containerToBeCopied=nullptr)=0
virtual const xAOD::TrackParticleContainer & GetInDetLargeD0GSFTracks(const EventContext &ctx) const =0
virtual double FJVT_SF(const xAOD::JetContainer *jets)=0
virtual double GetEleTriggerEfficiency(const xAOD::Electron &el, const std::string &trigExpr="SINGLE_E_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_2018_e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0") const =0
virtual unsigned int GetRandomRunNumber(bool muDependentRRN=true)=0
virtual double GetSumOfWeights(int channel)=0
virtual float GetCorrectedActualInteractionsPerCrossing(bool includeDataSF=false)=0
virtual double GetTriggerGlobalEfficiencySFsys(const xAOD::ElectronContainer &electrons, const xAOD::MuonContainer &muons, const CP::SystematicSet &systConfig, const std::string &trigExpr="diLepton")=0
virtual float GetTotalElectronSF(const xAOD::ElectronContainer &electrons, const bool recoSF=true, const bool idSF=true, const bool triggerSF=true, const bool isoSF=true, const std::string &trigExpr="singleLepton", const bool ecidsSF=false, const bool cidSF=false)=0
virtual double GetSignalTauSFsys(const xAOD::TauJet &tau, const CP::SystematicSet &systConfig, const bool idSF=true, const bool triggerSF=true, const std::string &trigExpr="tau25_medium1_tracktwo")=0
virtual double GetTotalMuonTriggerSF(const xAOD::MuonContainer &sfmuons, const std::string &trigExpr)=0
virtual bool IsCosmicMuon(const xAOD::Muon &input, const float z0cut, const float d0cut) const =0
virtual int getMCShowerType(const std::string &sample_name, const std::string &tagger="") const =0
virtual StatusCode MergeElectrons(const xAOD::ElectronContainer &electrons, xAOD::ElectronContainer *outputCol, const std::set< const xAOD::Electron * > &ElectronsToRemove) const =0
virtual bool IsSignalElectron(const xAOD::Electron &input, const float etcut, const float d0sigcut, const float z0cut, const float etacut=DUMMYDEF) const =0
virtual StatusCode MergeMuons(const xAOD::MuonContainer &muons, const std::vector< bool > &writeMuon, xAOD::MuonContainer *outputCol) const =0
virtual double GetTotalJetSFsys(const xAOD::JetContainer *jets, const CP::SystematicSet &systConfig, const bool btagSF=true, const bool jvtSF=true, const bool fjvtSF=false)=0
virtual StatusCode ApplyLRTUncertainty()=0
virtual bool IsHighPtMuon(const xAOD::Muon &input) const =0
virtual StatusCode GetTaus(xAOD::TauJetContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &taukey="TauJets", const xAOD::TauJetContainer *containerToBeCopied=nullptr)=0
virtual double GetTotalPhotonSFsys(const xAOD::PhotonContainer &photons, const CP::SystematicSet &systConfig, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false)=0
virtual float GetSignalElecSF(const xAOD::Electron &el, const bool recoSF=true, const bool idSF=true, const bool triggerSF=true, const bool isoSF=true, const std::string &trigExpr="singleLepton", const bool ecidsSF=false, const bool cidSF=false)=0
virtual float GetPileupWeightPrescaledTrigger(const std::string &trigger_expr)=0
virtual StatusCode NearbyLeptonCorrections(xAOD::ElectronContainer *electrons=nullptr, xAOD::MuonContainer *muons=nullptr) const =0
virtual StatusCode resetSystematics()=0
virtual double GetEleTriggerEfficiencySF(const xAOD::Electron &el, const std::string &trigExpr="SINGLE_E_2015_e24_lhmedium_L1EM20VH_OR_e60_lhmedium_OR_e120_lhloose_2016_2018_e26_lhtight_nod0_ivarloose_OR_e60_lhmedium_nod0_OR_e140_lhloose_nod0") const =0
virtual float BtagSFsys_trkJet(const xAOD::JetContainer *trkjets, const CP::SystematicSet &systConfig)=0
virtual double JVT_SF(const xAOD::JetContainer *jets)=0
virtual float BtagSF(const xAOD::JetContainer *jets)=0
virtual double GetTriggerGlobalEfficiency(const xAOD::ElectronContainer &electrons, const xAOD::MuonContainer &muons, const std::string &trigExpr="diLepton")=0
virtual float GetDataWeight(const std::string &)=0
virtual StatusCode ApplyPRWTool(bool muDependentRRN=true)=0
virtual bool IsSignalTau(const xAOD::TauJet &input, const float ptcut, const float etacut) const =0
virtual bool IsBadJet(const xAOD::Jet &input) const =0
virtual double FJVT_SFsys(const xAOD::JetContainer *jets, const CP::SystematicSet &systConfig)=0
virtual StatusCode GetFatJets(xAOD::JetContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=false, const std::string &jetkey="", const bool doLargeRdecorations=false, const xAOD::JetContainer *containerToBeCopied=nullptr)=0
virtual bool IsTrackBJet(const xAOD::Jet &input) const =0
virtual double GetSignalPhotonSFsys(const xAOD::Photon &ph, const CP::SystematicSet &systConfig, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false)=0
virtual bool IsBadMuon(const xAOD::Muon &input, const float qopcut) const =0
virtual bool IsSignalMuon(const xAOD::Muon &input, const float ptcut, const float d0sigcut, const float z0cut, const float etacut=DUMMYDEF) const =0
virtual double GetTotalPhotonSF(const xAOD::PhotonContainer &photons, const bool effSF=true, const bool isoSF=true, const bool triggerSF=false) const =0
virtual bool IsMETTrigPassed(unsigned int runnumber=0, bool j400_OR=false) const =0
virtual StatusCode FillMuon(xAOD::Muon &input, const float ptcut, const float etacut)=0
virtual bool IsBJet(const xAOD::Jet &input) const =0
virtual double GetTauTriggerEfficiencySF(const xAOD::TauJet &tau, const std::string &trigExpr="tau25_medium1_tracktwo")=0
virtual StatusCode FillTau(xAOD::TauJet &input)=0
virtual double GetSignalTauSF(const xAOD::TauJet &tau, const bool idSF=true, const bool triggerSF=true, const std::string &trigExpr="tau25_medium1_tracktwo")=0
virtual float GetCorrectedAverageInteractionsPerCrossing(bool includeDataSF=false)=0
virtual StatusCode GetElectrons(xAOD::ElectronContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &elekey="Electrons", const std::string &lrtelekey="LRTElectrons", const xAOD::ElectronContainer *containerToBeCopied=nullptr)=0
virtual StatusCode FindSusyHP(const xAOD::TruthParticleContainer *truthP, int &pdgid1, int &pdgid2, bool isTruth3=false) const =0
virtual unsigned int GetRunNumber() const =0
virtual bool isPrompt(const xAOD::IParticle *part) const =0
virtual StatusCode GetMET(xAOD::MissingETContainer &met, const xAOD::JetContainer *jet, const xAOD::ElectronContainer *elec=nullptr, const xAOD::MuonContainer *muon=nullptr, const xAOD::PhotonContainer *gamma=nullptr, const xAOD::TauJetContainer *taujet=nullptr, bool doTST=true, bool doJVTCut=true, const xAOD::IParticleContainer *invis=nullptr)=0
const T * getProperty(const std::string &name)
virtual const xAOD::TrackParticleContainer & GetInDetLargeD0Tracks(const EventContext &ctx) const =0
virtual double GetTotalMuonSFsys(const xAOD::MuonContainer &muons, const CP::SystematicSet &systConfig, const bool recoSF=true, const bool isoSF=true, const std::string &trigExpr="HLT_mu20_iloose_L1MU15_OR_HLT_mu50", const bool bmhptSF=true)=0
virtual ST::SystInfo getSystInfo(const CP::SystematicVariation &sys) const =0
virtual StatusCode SetBtagWeightDecorations(const xAOD::Jet &input, const asg::AnaToolHandle< IBTaggingSelectionTool > &btagSelTool, const std::string &btagTagger) const =0
virtual bool IsSignalPhoton(const xAOD::Photon &input, const float ptcut, const float etacut=DUMMYDEF) const =0
virtual StatusCode FillPhoton(xAOD::Photon &input, const float ptcut, const float etacut)=0
virtual StatusCode GetTrackMET(xAOD::MissingETContainer &met, const xAOD::JetContainer *jet, const xAOD::ElectronContainer *elec=nullptr, const xAOD::MuonContainer *muon=nullptr)=0
virtual bool IsTruthBJet(const xAOD::Jet &input) const =0
virtual std::string TrigSingleLep() const =0
virtual StatusCode OverlapRemoval(const xAOD::ElectronContainer *electrons, const xAOD::MuonContainer *muons, const xAOD::JetContainer *jets, const xAOD::PhotonContainer *gamma=nullptr, const xAOD::TauJetContainer *taujet=nullptr, const xAOD::JetContainer *fatjets=nullptr)=0
virtual const xAOD::Vertex * GetPrimVtx() const =0
virtual double GetTotalTauSF(const xAOD::TauJetContainer &taus, const bool idSF=true, const bool triggerSF=true, const std::string &trigExpr="tau25_medium1_tracktwo")=0
virtual float BtagSF_trkJet(const xAOD::JetContainer *trkjets)=0
virtual StatusCode GetPhotons(xAOD::PhotonContainer *&copy, xAOD::ShallowAuxContainer *&copyaux, const bool recordSG=true, const std::string &photonkey="Photons", const xAOD::PhotonContainer *containerToBeCopied=nullptr)=0
virtual double GetTotalTauSFsys(const xAOD::TauJetContainer &taus, const CP::SystematicSet &systConfig, const bool idSF=true, const bool triggerSF=true, const std::string &trigExpr="tau25_medium1_tracktwo")=0
virtual StatusCode FillJet(xAOD::Jet &input, const bool doCalib=true, const bool isFat=false, const bool doLargeRdecorations=false) ATLAS_NOT_THREAD_SAFE=0
virtual const Trig::ChainGroup * GetTrigChainGroup(const std::string &) const =0
virtual StatusCode setBoolProperty(const std::string &name, const bool &property)=0
virtual bool isAtlfast() const =0
virtual const xAOD::EventInfo * GetEventInfo() const =0
Class to wrap a set of SystematicVariations.
Base class for the dual-use tool implementation classes.
Definition AsgTool.h:47
const T * getProperty(const std::string &name) const
Get one of the tool's properties.
Base class for the dual-use tool interface classes.
Definition IAsgTool.h:41
Class providing the definition of the 4-vector interface.
Class creating a shallow copy of an existing auxiliary container.
static std::vector< uint32_t > runnumber
Definition iLumiCalc.h:37
Select isolated Photons, Electrons and Muons.
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
static const unsigned int Reconstruction
static const unsigned int ID
static const unsigned int Trigger
static const unsigned int ChargeID
static const unsigned int Isolation
static const unsigned int Btag_Track
static const unsigned int FJVT
static const unsigned int Btag
static const unsigned int JVT
static const unsigned int Reconstruction
static const unsigned int ID
static const unsigned int Isolation
static const unsigned int Trigger
static const unsigned int Trigger
static const unsigned int ID
static const unsigned int Isolation
static const unsigned int Reconstruction
static const unsigned int Reconstruction
static const unsigned int Trigger
static const unsigned int Unknown
static int getMCShowerType(const std::string &sample_name, const std::string &tagger="")
static bool testAffectsObject(xAOD::Type::ObjectType type, unsigned int test)
static const double DUMMYDEF
helper namespace for calculating deltaR for unknown object types
The common trigger namespace for trigger analysis tools.
Definition part1.py:1
Definition part2.py:1
STL namespace.
ObjectType
Type of objects that have a representation in the xAOD EDM.
Definition ObjectType.h:32
@ Jet
The object is a jet.
Definition ObjectType.h:40
@ Photon
The object is a photon.
Definition ObjectType.h:47
@ Muon
The object is a muon.
Definition ObjectType.h:48
@ BTag
The object is a b-tagging object.
Definition ObjectType.h:60
@ Electron
The object is an electron.
Definition ObjectType.h:46
@ Tau
The object is a tau (jet).
Definition ObjectType.h:49
ICaloAffectedTool is abstract interface for tools checking if 4 mom is in calo affected region.
Jet_v1 Jet
Definition of the current "jet version".
PhotonContainer_v1 PhotonContainer
Definition of the current "photon container version".
ElectronContainer_v1 ElectronContainer
Definition of the current "electron container version".
@ Unknown
Track fitter not defined.
void ErrorHandler ATLAS_NOT_THREAD_SAFE(Int_t level, Bool_t abort, const char *location, const char *message)
Function filtering the warnings coming from ROOT.
Definition Init.cxx:105
Vertex_v1 Vertex
Define the latest version of the vertex class.
TauJet_v3 TauJet
Definition of the current "tau version".
TruthEvent_v1 TruthEvent
Typedef to implementation.
Definition TruthEvent.h:17
TrackParticleContainer_v1 TrackParticleContainer
Definition of the current "TrackParticle container version".
Muon_v1 Muon
Reference the current persistent version:
Photon_v1 Photon
Definition of the current "egamma version".
JetContainer_v1 JetContainer
Definition of the current "jet container version".
TauJetContainer_v3 TauJetContainer
Definition of the current "taujet container version".
MuonContainer_v1 MuonContainer
Definition of the current "Muon container version".
TruthParticleContainer_v1 TruthParticleContainer
Declare the latest version of the truth particle container.
Electron_v1 Electron
Definition of the current "egamma version".
DataVector< IParticle > IParticleContainer
Simple convenience declaration of IParticleContainer.
std::set< unsigned int > affectedWeights
unsigned int affectsType
CP::SystematicSet systset