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>
55
56// Forward declarations
57namespace Trig {
58 class ChainGroup;
59}
60
61namespace ST {
62
63 struct SystInfo{
67 unsigned int affectsType;
68 std::set<unsigned int> affectedWeights;
69 };
70
71 // Define a more compact enum than the IParticle one
87
88
89 // Define types of weights
90 // This doesn't work with enums: class enums can't be assigned to an std::int8_t easily
91 // Normal enums means redefinitions of e.g. "Trigger" and "Isolation"
92 namespace Weights {
93 static const unsigned int Unknown = 0;
94
95 namespace Jet {
96 static const unsigned int Btag = 1001;
97 static const unsigned int JVT = 1002;
98 static const unsigned int Btag_Track = 1003;
99 static const unsigned int FJVT = 1004;
100 }
101
102 namespace Muon {
103 static const unsigned int Reconstruction = 1101;
104 static const unsigned int Isolation = 1102;
105 static const unsigned int ID = 1103;
106 static const unsigned int Trigger = 1104;
107 }
108
109 namespace Electron {
110 static const unsigned int Reconstruction = 1201;
111 static const unsigned int Isolation = 1202;
112 static const unsigned int ID = 1203;
113 static const unsigned int Trigger = 1204;
114 static const unsigned int ChargeID = 1205;
115 }
116
117 namespace Tau {
118 static const unsigned int Reconstruction = 1301;
119 static const unsigned int Trigger = 1302;
120 }
121
122 namespace Photon {
123 static const unsigned int Reconstruction = 1401;
124 static const unsigned int Isolation = 1402;
125 static const unsigned int ID = 1403;
126 static const unsigned int Trigger = 1404;
127 }
128 }
129
130 static const double DUMMYDEF = -999.;
131
132 // Helper method for affected objects
133 static inline bool testAffectsObject(xAOD::Type::ObjectType type, unsigned int test) {
134 switch(test) {
135 case Jet: return (type==xAOD::Type::Jet);
137 case Electron: return (type==xAOD::Type::Electron);
138 case Photon: return (type==xAOD::Type::Photon);
139 case Muon: return (type==xAOD::Type::Muon);
140 case Tau: return (type==xAOD::Type::Tau);
141 case BTag: return (type==xAOD::Type::BTag);
143 default: break;
144 }
145 return false;
146 }
147
148 // Helper method for affected objects
149 static inline std::string testAffectsObject(unsigned int test) {
150 switch(test) {
151 case Jet: return "Jet";
152 case Egamma: return "Egamma";
153 case Electron: return "Electron";
154 case Photon: return "Photon";
155 case Muon: return "Muon";
156 case Tau: return "Tau";
157 case BTag: return "BTag";
158 case MET_TST:
159 case MET_CST:
160 case MET_Track: return "MET";
161 case EventWeight: return "EventWeight";
162 case LRT_Object: return "LRT_objects";
163 default: break;
164 }
165 return "Unknown";
166 }
167
168 static inline int getMCShowerType(const std::string& sample_name, const std::string& tagger="") {
170 // This needs VERY careful syncing with m_showerType in SUSYToolsInit! Change with care!
171 const static std::vector<TString> gen_mc_generator_keys = {"PYTHIA8EVTGEN517","POWHEGHERWIG7","PHH7EG","SHERPA_2210","SHERPA_2211","SHERPA_2212","SHERPA_2214","SHERPA_UNKNOWN"};
172 const static std::vector<TString> gen_mc_generator_keys_dl1d = {"POWHEGHERWIG7","PHH7EG", "SHERPA_221_", "SHERPA_2210","SHERPA_2211","SHERPA_2212", "AMCATNLOPY8","AMCATNLOHERWIG7"};
173
174 //pre-process sample name
175 TString tmp_name(sample_name);
176
177 if(tmp_name.Contains("Py8EG") && !tmp_name.Contains("aMcAtNloPy8EG")) tmp_name.ReplaceAll("Py8EG","PYTHIA8EVTGEN");
178 if(tmp_name.Contains("Pythia") && !tmp_name.Contains("Pythia8") && !tmp_name.Contains("EvtGen")) tmp_name.ReplaceAll("Pythia","PYTHIA8EVTGEN");
179 if(tmp_name.Contains("Pythia8") && !tmp_name.Contains("EvtGen")) tmp_name.ReplaceAll("Pythia8","PYTHIA8EVTGEN");
180 if(tmp_name.Contains("Py8") && !tmp_name.Contains("EG")) tmp_name.ReplaceAll("Py8","PYTHIA8EVTGEN");
181 if(tmp_name.Contains("Sh_2")) tmp_name.ReplaceAll("Sh_2","SHERPA_2");
182 if(tmp_name.Contains("Sh_") && !tmp_name.Contains("Sh_2")) tmp_name.ReplaceAll("Sh_","SHERPA_UNKNOWN_");
183 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
184 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
185
186 //capitalize the entire sample name
187 tmp_name.ToUpper();
188 //find shower type in name
189 unsigned int ishower = 0;
190 if (tagger=="DL1dv01"){
191 for( const auto & gen : gen_mc_generator_keys_dl1d ){
192 if( tmp_name.Contains(gen) ){return ishower+1;}
193 ishower++;
194 }
195 } else if (tagger=="GN2v01"){
196 for( const auto & gen : gen_mc_generator_keys ){
197 if( tmp_name.Contains(gen) ){return ishower+1;}
198 ishower++;
199 }
200 } else {
201 std::cout << "ST::getMCShowerType ERROR: Invalid tagger " << tagger << ". Supported values are GN2v01 and DL1dv01." << std::endl;
202 return -1;
203 }
204 if( tmp_name.Contains("PYTHIA8EVTGEN") || tmp_name.Contains("PhPy8EG") ) return 0;
205
206 // See if they are doing something really unwise, just in case
207 TRegexp is_data("^data1[5-9]_13TeV");
208 TRegexp is_dataRun3("^data2[2-5]_13p6TeV");
209 if (tmp_name.Contains(is_data) || tmp_name.Contains(is_dataRun3)){
210 std::cout << "ST::getMCShowerType WARNING: Asking for the MC shower when running on a data file is not advised. Just returning 0." << std::endl;
211 return 0;
212 }
213
214 std::cout << "ST::getMCShowerType WARNING: Unknown MC generator detected. Returning default 0 = PowhegPythia8 ShowerType for btagging MC/MC maps." << std::endl;
215 return 0;
216 }
217
218
219 // Simple interface
220 //
221 // Following the design principles outlined in the TF3 recommendations.
222 //
223 //
224 class ISUSYObjDef_xAODTool : public virtual asg::IAsgTool {
225
226 // Declare the interface that the class provides
228
229 public:
230 virtual StatusCode readConfig() = 0;
231
232 virtual int getMCShowerType(const std::string& sample_name, const std::string& tagger="") const = 0;
233
234 // For checking the origin of the input
235 virtual bool isData() const = 0;
236 virtual bool isAtlfast() const = 0;
237
238 // method to access properties of the tool
239 template<typename T> const T* getProperty(const std::string& name) {
240 return dynamic_cast<asg::AsgTool&>(*this).getProperty<T>(name);
241 }
242
243 // override the AsgTool setProperty function for booleans
244 virtual StatusCode setBoolProperty(const std::string& name, const bool& property) = 0;
245
246 // Apply the correction on a modifyable object
247 virtual StatusCode FillMuon(xAOD::Muon& input, const float ptcut, const float etacut) = 0;
248 virtual StatusCode FillJet(xAOD::Jet& input, const bool doCalib = true, const bool isFat = false, const bool doLargeRdecorations = false) = 0;
249 virtual StatusCode FillTrackJet(xAOD::Jet& input) = 0;
250 virtual StatusCode FillTau(xAOD::TauJet& input) = 0;
251 virtual StatusCode FillElectron(xAOD::Electron& input, const float etcut, const float etacut) = 0;
252 virtual StatusCode FillPhoton(xAOD::Photon& input, const float ptcut, const float etacut) = 0;
253
254 virtual const xAOD::Vertex* GetPrimVtx() const = 0;
255
256 virtual StatusCode GetJets(xAOD::JetContainer*& copy,xAOD::ShallowAuxContainer*& copyaux,const bool recordSG=true, const std::string& jetkey="", const xAOD::JetContainer* containerToBeCopied = nullptr) = 0;
257 virtual StatusCode GetTrackJets(xAOD::JetContainer*& copy,xAOD::ShallowAuxContainer*& copyaux,const bool recordSG=true, const std::string& jetkey="", const xAOD::JetContainer* containerToBeCopied = nullptr) = 0;
258 virtual StatusCode GetJetsSyst(const xAOD::JetContainer& calibjets,xAOD::JetContainer*& copy,xAOD::ShallowAuxContainer*& copyaux, const bool recordSG=true, const std::string& jetkey="") = 0;
259 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;
260 virtual StatusCode GetTaus(xAOD::TauJetContainer*& copy,xAOD::ShallowAuxContainer*& copyaux,const bool recordSG=true, const std::string& taukey="TauJets", const xAOD::TauJetContainer* containerToBeCopied = nullptr) = 0;
261 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;
262 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;
263 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 const xAOD::JetContainer* jet,
266 const xAOD::ElectronContainer* elec = nullptr,
267 const xAOD::MuonContainer* muon = nullptr,
268 const xAOD::PhotonContainer* gamma = nullptr,
269 const xAOD::TauJetContainer* taujet = nullptr,
270 bool doTST=true, bool doJVTCut=true,
271 const xAOD::IParticleContainer* invis = nullptr) = 0;
272
274 const xAOD::JetContainer* jet,
275 const xAOD::ElectronContainer* elec = nullptr,
276 const xAOD::MuonContainer* muon = nullptr
277 ) = 0;
278
280 double& metSignificance,
281 bool doTST = true, bool doJVTCut = true
282 ) = 0;
283
284 virtual StatusCode MergeMuons(const xAOD::MuonContainer & muons, const std::vector<bool> &writeMuon, xAOD::MuonContainer* outputCol) const = 0;
285
286 virtual StatusCode prepareLRTMuons(const xAOD::MuonContainer* inMuons, xAOD::MuonContainer* copy) const = 0;
287
288 virtual StatusCode MergeElectrons(const xAOD::ElectronContainer & electrons, xAOD::ElectronContainer* outputCol, const std::set<const xAOD::Electron *> &ElectronsToRemove) const = 0;
289
290 virtual StatusCode prepareLRTElectrons(const xAOD::ElectronContainer* inElectrons, xAOD::ElectronContainer* copy) const = 0;
291
292 virtual StatusCode SetBtagWeightDecorations(const xAOD::Jet& input, const asg::AnaToolHandle<IBTaggingSelectionTool>& btagSelTool, const std::string& btagTagger) const = 0;
293
294 virtual bool IsSignalJet(const xAOD::Jet& input, const float ptcut, const float etacut) const = 0;
295
296 virtual bool IsBadJet(const xAOD::Jet& input) const = 0;
297
298 virtual bool IsBJetLoose(const xAOD::Jet& input) const = 0;
299 virtual bool JetPassJVT(xAOD::Jet& input) = 0;
300
301 virtual bool IsHighPtMuon(const xAOD::Muon& input) const = 0;
302
303 virtual bool IsSignalMuon(const xAOD::Muon& input, const float ptcut, const float d0sigcut, const float z0cut, const float etacut = DUMMYDEF) const = 0;
304
305 virtual bool IsSignalElectron(const xAOD::Electron& input, const float etcut, const float d0sigcut, const float z0cut, const float etacut = DUMMYDEF) const = 0;
306
307 virtual bool IsCosmicMuon(const xAOD::Muon& input,const float z0cut, const float d0cut) const = 0;
308
309 virtual bool IsSignalTau(const xAOD::TauJet& input, const float ptcut, const float etacut) const = 0;
310
311 virtual bool IsBadMuon(const xAOD::Muon& input, const float qopcut) const = 0;
312
313 virtual bool IsSignalPhoton(const xAOD::Photon& input, const float ptcut, const float etacut = DUMMYDEF) const = 0;
314
315 virtual bool IsBJet(const xAOD::Jet& input) const = 0;
316
317 virtual bool IsTrackBJet(const xAOD::Jet& input) const = 0;
318
319 virtual bool IsTruthBJet(const xAOD::Jet& input) const = 0;
320
321 virtual int IsBJetContinuous(const xAOD::Jet& input) const = 0;
322
323 virtual int IsTrackBJetContinuous(const xAOD::Jet& input) const = 0;
324
325 virtual double JVT_SF(const xAOD::JetContainer* jets) = 0;
326
327 virtual double JVT_SFsys(const xAOD::JetContainer* jets, const CP::SystematicSet& systConfig) = 0;
328
329 virtual double FJVT_SF(const xAOD::JetContainer* jets) = 0;
330
331 virtual double FJVT_SFsys(const xAOD::JetContainer* jets, const CP::SystematicSet& systConfig) = 0;
332
333 virtual float BtagSF(const xAOD::JetContainer* jets) = 0;
334
335 virtual float BtagSFsys(const xAOD::JetContainer* jets, const CP::SystematicSet& systConfig) = 0;
336
337 virtual float BtagSF_trkJet(const xAOD::JetContainer* trkjets) = 0;
338
339 virtual float BtagSFsys_trkJet(const xAOD::JetContainer* trkjets, const CP::SystematicSet& systConfig) = 0;
340
341 virtual float GetSignalMuonSF(const xAOD::Muon& mu, const bool recoSF = true, const bool isoSF = true, const bool doBadMuonHP = true, const bool warnOVR = true) = 0;
342
343 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;
344
345 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;
346
347 virtual double GetTriggerGlobalEfficiency(const xAOD::ElectronContainer& electrons, const xAOD::MuonContainer& muons, const std::string& trigExpr = "diLepton") = 0;
348
349 virtual double GetTriggerGlobalEfficiency(const xAOD::PhotonContainer& photons, const std::string& trigExpr = "diPhoton") = 0;
350
351 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;
352
353 virtual double GetTriggerGlobalEfficiencySF(const xAOD::ElectronContainer& electrons, const xAOD::MuonContainer& muons, const std::string& trigExpr = "diLepton") = 0;
354
355 virtual double GetTriggerGlobalEfficiencySF(const xAOD::PhotonContainer& photons, const std::string& trigExpr = "diPhoton") = 0;
356
357 virtual double GetTriggerGlobalEfficiencySFsys(const xAOD::ElectronContainer& electrons, const xAOD::MuonContainer& muons, const CP::SystematicSet& systConfig, const std::string& trigExpr = "diLepton") = 0;
358
359 virtual double GetTriggerGlobalEfficiencySFsys(const xAOD::PhotonContainer& photons, const CP::SystematicSet& systConfig, const std::string& trigExpr = "diPhoton") = 0;
360
361 virtual double GetMuonTriggerEfficiency(const xAOD::Muon& mu, const std::string& trigExpr = "HLT_mu20_iloose_L1MU15_OR_HLT_mu50", const bool isdata = false) = 0;
362
363 virtual double GetTotalMuonTriggerSF(const xAOD::MuonContainer& sfmuons, const std::string& trigExpr) = 0;
364
365 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;
366
367 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
368
369 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;
370
371 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
372
373 virtual double GetSignalTauSF(const xAOD::TauJet& tau, const bool idSF = true, const bool triggerSF = true, const std::string& trigExpr = "tau25_medium1_tracktwo") = 0;
374
375 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;
376
377 virtual double GetTauTriggerEfficiencySF(const xAOD::TauJet& tau, const std::string& trigExpr = "tau25_medium1_tracktwo") = 0;
378
379 virtual double GetTotalTauSF(const xAOD::TauJetContainer& taus, const bool idSF = true, const bool triggerSF = true, const std::string& trigExpr = "tau25_medium1_tracktwo") = 0;
380
381 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;
382
383 virtual double GetSignalPhotonSF(const xAOD::Photon& ph, const bool effSF = true, const bool isoSF = true, const bool triggerSF = false) const = 0;
384
385 virtual double GetSignalPhotonSFsys(const xAOD::Photon& ph, const CP::SystematicSet& systConfig, const bool effSF = true, const bool isoSF = true, const bool triggerSF = false) = 0;
386
387 virtual double GetTotalPhotonSF(const xAOD::PhotonContainer& photons, const bool effSF = true, const bool isoSF = true, const bool triggerSF = false) const = 0;
388
389 virtual double GetTotalPhotonSFsys(const xAOD::PhotonContainer& photons, const CP::SystematicSet& systConfig, const bool effSF = true, const bool isoSF = true, const bool triggerSF = false) = 0;
390
391 virtual double GetTotalJetSF(const xAOD::JetContainer* jets, const bool btagSF = true, const bool jvtSF = true, const bool fjvtSF = false) = 0;
392
393 virtual double GetTotalJetSFsys(const xAOD::JetContainer* jets, const CP::SystematicSet& systConfig, const bool btagSF = true, const bool jvtSF = true, const bool fjvtSF = false) = 0;
394
395 virtual bool IsMETTrigPassed(unsigned int runnumber = 0, bool j400_OR = false) const = 0;
396 virtual bool IsMETTrigPassed(const std::string& triggerName, bool j400_OR = false, const std::string& L1_name = "L1_XE50") const = 0;
397
398 virtual bool IsTrigPassed(const std::string&, unsigned int condition=TrigDefs::Physics) const = 0;
399
400 virtual bool IsTrigMatched(const xAOD::IParticle *part, const std::string& tr_item) = 0;
401 virtual bool IsTrigMatched(const xAOD::IParticle *part1, const xAOD::IParticle *part2, const std::string& tr_item) = 0;
402 virtual bool IsTrigMatched(const std::vector<const xAOD::IParticle*>& v, const std::string& tr_item) = 0;
403 virtual bool IsTrigMatched(const std::initializer_list<const xAOD::IParticle*> &v, const std::string& tr_item) = 0;
404
405 virtual void TrigMatch(const xAOD::IParticle* p, std::initializer_list<std::string>::iterator, std::initializer_list<std::string>::iterator) = 0;
406 virtual void TrigMatch(const xAOD::IParticle* p, const std::vector<std::string>& items) = 0;
407 virtual void TrigMatch(const xAOD::IParticle* p, const std::initializer_list<std::string>& items) = 0;
408 virtual void TrigMatch(const xAOD::IParticleContainer* v, const std::vector<std::string>& items) = 0;
409 virtual void TrigMatch(const xAOD::IParticleContainer* v, const std::initializer_list<std::string>& items) = 0;
410 virtual void TrigMatch(const std::initializer_list<const xAOD::IParticle*>& v, const std::vector<std::string>& items) = 0;
411 virtual void TrigMatch(const std::initializer_list<const xAOD::IParticle*>& v, const std::initializer_list<std::string>& items) = 0;
412 virtual void TrigMatch(const xAOD::IParticle* p, const std::string& item) = 0;
413 virtual void TrigMatch(const xAOD::IParticleContainer* v, const std::string& item) = 0;
414 virtual void TrigMatch(const std::initializer_list<const xAOD::IParticle*> &v, const std::string& item) = 0;
415
416
417 virtual float GetTrigPrescale(const std::string&) const = 0;
418
419 virtual const Trig::ChainGroup* GetTrigChainGroup(const std::string&) const = 0;
420
421 virtual const xAOD::EventInfo* GetEventInfo() const = 0;
422
423 virtual float GetPileupWeight() = 0;
424
425 virtual float GetPileupWeightPrescaledTrigger(const std::string & trigger_expr) = 0;
426
427 virtual ULong64_t GetPileupWeightHash( ) = 0;
428
429 virtual float GetDataWeight(const std::string&) = 0;
430
431 virtual float GetCorrectedAverageInteractionsPerCrossing(bool includeDataSF=false) = 0;
432
433 virtual float GetCorrectedActualInteractionsPerCrossing(bool includeDataSF=false) = 0;
434
435 virtual double GetSumOfWeights(int channel) = 0;
436
437 virtual unsigned int GetRandomRunNumber(bool muDependentRRN = true) = 0;
438
439 virtual StatusCode ApplyPRWTool(bool muDependentRRN = true) = 0;
440
441 virtual unsigned int GetRunNumber() const = 0;
442
443 virtual const xAOD::TrackParticleContainer& GetInDetLargeD0Tracks(const EventContext &ctx) const = 0;
444
445 virtual const xAOD::TrackParticleContainer& GetInDetLargeD0GSFTracks(const EventContext &ctx) const = 0;
446
447 virtual StatusCode ApplyLRTUncertainty() = 0;
448
449 virtual int treatAsYear(const int runNumber=-1) const = 0;
450
451 virtual StatusCode OverlapRemoval(const xAOD::ElectronContainer *electrons, const xAOD::MuonContainer *muons, const xAOD::JetContainer *jets,
452 const xAOD::PhotonContainer* gamma = nullptr, const xAOD::TauJetContainer* taujet = nullptr, const xAOD::JetContainer *fatjets = nullptr) = 0;
453
454 virtual StatusCode NearbyLeptonCorrections(xAOD::ElectronContainer *electrons = nullptr, xAOD::MuonContainer *muons = nullptr) const = 0;
455
456 virtual StatusCode resetSystematics() = 0;
457
458 virtual StatusCode applySystematicVariation( const CP::SystematicSet& systConfig ) = 0;
459
460 virtual bool isPrompt(const xAOD::IParticle* part) const = 0;
461
462 virtual StatusCode FindSusyHP(const xAOD::TruthParticleContainer *truthP, int& pdgid1, int& pdgid2, bool isTruth3 = false) const = 0;
463
464 virtual StatusCode FindSusyHP(const xAOD::TruthEvent *truthE, int& pdgid1, int& pdgid2) const = 0;
465
466 virtual ST::SystInfo getSystInfo(const CP::SystematicVariation& sys) const = 0;
467 virtual std::vector<ST::SystInfo> getSystInfoList() const = 0;
468
469 virtual std::string TrigSingleLep() const = 0;
470
471 // Temporary function for Sherpa 2.2 V+jets n-jets reweighting
472 // (see https://twiki.cern.ch/twiki/bin/viewauth/AtlasProtected/CentralMC15ProductionList#NEW_Sherpa_v2_2_V_jets_NJet_rewe)
473 virtual float getSherpaVjetsNjetsWeight() const = 0;
474 virtual float getSherpaVjetsNjetsWeight(const std::string& jetContainer) const = 0;
475
482
483 }; // class ISUSYObjDef_xAODTool
484
485} // namespace ST
486
487#endif // SUSYTOOLS_SUSYOBJDEF_XAODTOOL_H
#define ASG_TOOL_INTERFACE(CLASSNAME)
static Double_t taus
Class to wrap a set of SystematicVariations.
virtual void TrigMatch(const xAOD::IParticle *p, const std::vector< std::string > &items)=0
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 void TrigMatch(const xAOD::IParticle *p, std::initializer_list< std::string >::iterator, std::initializer_list< std::string >::iterator)=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 void TrigMatch(const std::initializer_list< const xAOD::IParticle * > &v, const std::initializer_list< std::string > &items)=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 bool IsTrigMatched(const std::initializer_list< const xAOD::IParticle * > &v, const std::string &tr_item)=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 void TrigMatch(const xAOD::IParticleContainer *v, const std::string &item)=0
virtual const xAOD::TrackParticleContainer & GetInDetLargeD0GSFTracks(const EventContext &ctx) const =0
virtual double GetTriggerGlobalEfficiencySFsys(const xAOD::PhotonContainer &photons, const CP::SystematicSet &systConfig, const std::string &trigExpr="diPhoton")=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 void TrigMatch(const std::initializer_list< const xAOD::IParticle * > &v, const std::string &item)=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 void TrigMatch(const std::initializer_list< const xAOD::IParticle * > &v, const std::vector< std::string > &items)=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 bool IsTrigMatched(const std::vector< const xAOD::IParticle * > &v, const std::string &tr_item)=0
virtual void TrigMatch(const xAOD::IParticleContainer *v, const std::initializer_list< std::string > &items)=0
virtual StatusCode ApplyLRTUncertainty()=0
virtual bool IsTrigMatched(const xAOD::IParticle *part1, const xAOD::IParticle *part2, const std::string &tr_item)=0
virtual bool IsHighPtMuon(const xAOD::Muon &input) const =0
virtual void TrigMatch(const xAOD::IParticleContainer *v, const std::vector< std::string > &items)=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 void TrigMatch(const xAOD::IParticle *p, const std::initializer_list< std::string > &items)=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 double GetTriggerGlobalEfficiency(const xAOD::PhotonContainer &photons, const std::string &trigExpr="diPhoton")=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 void TrigMatch(const xAOD::IParticle *p, const std::string &item)=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 double GetTriggerGlobalEfficiencySF(const xAOD::PhotonContainer &photons, const std::string &trigExpr="diPhoton")=0
virtual StatusCode FindSusyHP(const xAOD::TruthEvent *truthE, int &pdgid1, int &pdgid2) 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 float getSherpaVjetsNjetsWeight(const std::string &jetContainer) 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 bool IsMETTrigPassed(const std::string &triggerName, bool j400_OR=false, const std::string &L1_name="L1_XE50") 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 FillJet(xAOD::Jet &input, const bool doCalib=true, const bool isFat=false, const bool doLargeRdecorations=false)=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 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
a modified tool handle that allows its owner to configure new tools from the C++ side
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
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
The common trigger namespace for trigger analysis tools.
Definition part1.py:1
Definition part2.py:1
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
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".
EventInfo_v1 EventInfo
Definition of the latest event info version.
@ Unknown
Track fitter not defined.
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