#include "AtlObjectsDefinitionToolR2.h"
#include <cassert>
#include <cmath>
#include <TCollection.h>
#include <TList.h>
#include <TLorentzVector.h>
#include "AtlElectron.h"
#include "AtlEvent.h"
#include "AtlEventHeader.h"
#include "AtlJet.h"
#include "AtlMuon.h"
#include "AtlScaleFactor.h"
namespace {
template<typename _SpecialT, typename _GenericT>
_SpecialT polymorphic_downcast(_GenericT * x) {
assert(dynamic_cast<_SpecialT>(x) == x);
return static_cast<_SpecialT>(x);
}
}
AtlObjectsDefinitionToolR2::AtlObjectsDefinitionToolR2(char const * name, char const * title)
: AtlObjectsDefinitionTool(name, title)
, fElectronPt_min(-INFINITY)
, fMuonPt_min(-INFINITY)
, fJetEta_max(INFINITY)
, fJetPt_min(-INFINITY)
, fJetsAuthor(AtlJet::kInvalidType)
, fBtagger(AtlBTag::kInvalidTagger)
, fBtaggingWorkingPoint(NAN)
, fBtaggingNominalEfficiency(-1)
, fWeights(kAllSF)
, fLeptons(new TList())
, fElectrons(new TList())
, fMuons(new TList())
, fJets(new TList())
, fBJets(new TList())
, fClean(kTRUE)
{
}
AtlObjectsDefinitionToolR2::~AtlObjectsDefinitionToolR2() {
delete fBJets;
delete fJets;
delete fMuons;
delete fElectrons;
delete fLeptons;
}
void AtlObjectsDefinitionToolR2::Clear() {
fLeptons->Clear();
fElectrons->Clear();
fMuons->Clear();
fJets->Clear();
fBJets->Clear();
fClean = kTRUE;
}
Bool_t AtlObjectsDefinitionToolR2::AnalyzeEvent() {
assert(fClean);
fClean = kFALSE;
for ( TIter next(fEvent->GetElectrons()); AtlElectron * lep = polymorphic_downcast<AtlElectron *>(next()); ) {
if ( lep->P().Pt() >= fElectronPt_min ) {
if ( lep->IsTight() ) {
fElectrons->Add(lep);
fLeptons->Add(lep);
}
}
}
for ( TIter next(fEvent->GetMuons()); AtlMuon * lep = polymorphic_downcast<AtlMuon *>(next()); ) {
if ( lep->P().Pt() >= fMuonPt_min ) {
if ( lep->IsTight() ) {
fMuons->Add(lep);
fLeptons->Add(lep);
}
}
}
for ( TIter next(fEvent->GetJets(fJetsAuthor)); AtlJet * jet = polymorphic_downcast<AtlJet *>(next()); ) {
TLorentzVector const & p = jet->P();
if ( p.Pt() >= fJetPt_min && fabs(p.Eta()) < fJetEta_max ) {
fJets->Add(jet);
AtlBTag const * tag = (fBtagger != AtlBTag::kInvalidTagger ? jet->GetTag(fBtagger) : 0);
if ( tag ) {
if ( tag->GetWeight() > fBtaggingWorkingPoint ) {
fBJets->Add(jet);
}
}
}
}
fMuons->Sort(kSortDescending);
fElectrons->Sort(kSortDescending);
fLeptons->Sort(kSortDescending);
fJets->Sort(kSortDescending);
fBJets->Sort(kSortDescending);
AtlEventHeader & eventHeader = *fEvent->GetEventHeader();
if ( eventHeader.IsMC() ) {
double eventWeight = eventHeader.GetMCWeight();
if ( (fWeights & kPileupSF) ) {
eventWeight *= eventHeader.GetPileupWeight();
}
if ( (fWeights & kZVertexSF) ) {
eventWeight *= eventHeader.GetZVtxWeight();
}
if ( (fWeights & kJetVertexSF) ) {
eventWeight *= eventHeader.JetVertexWeight().GetValue();
}
if ( (fWeights & kLeptonSF) ) {
if ( (fWeights & kLeptonSF) == kLeptonSF ) {
eventWeight *= eventHeader.LeptonWeight().GetValue();
}
else {
Fatal(__FUNCTION__, "Individual electron, muon and trigger weights are not supported -- use EWeights::kLepton.");
}
}
eventHeader.SetPreTagEvtWeight(eventWeight);
if ( (fWeights & kBtaggingSF) ) {
eventWeight *= GetBtaggingSF().GetValue();
}
eventHeader.SetTagEvtWeight(eventWeight);
}
else {
double eventWeight = 1.;
eventHeader.SetPreTagEvtWeight(eventWeight);
eventHeader.SetTagEvtWeight(eventWeight);
}
return kTRUE;
}
AtlScaleFactor const & AtlObjectsDefinitionToolR2::GetBtaggingSF() const {
AtlEventHeader & eventHeader = *fEvent->GetEventHeader();
switch ( fBtagger ) {
case AtlBTag::kMV2c10_70:
if ( fJetsAuthor == AtlJet::kAntiKt4TopoEM )
return eventHeader.BtagWeight_MV2c10_70();
break;
case AtlBTag::kMV2c10_77:
if ( fJetsAuthor == AtlJet::kAntiKt4TopoEM )
return eventHeader.BtagWeight_MV2c10_77();
break;
case AtlBTag::kMV2c10_85:
if ( fJetsAuthor == AtlJet::kAntiKt4TopoEM )
return eventHeader.BtagWeight_MV2c10_85();
break;
case AtlBTag::kMV2c20:
switch ( fJetsAuthor ) {
case AtlJet::kAntiKt4TopoEM:
switch ( fBtaggingNominalEfficiency ) {
case 77: return eventHeader.BtagWeight_MV2c20_77();
case 85: return eventHeader.BtagWeight_MV2c20_85();
}
break;
}
break;
}
Fatal(__FUNCTION__, "b-tagging calibration for the chosen tagger and working point not available.");
return AtlScaleFactor::nil;
}
AtlObjectsDefinitionToolR2.cxx:1 AtlObjectsDefinitionToolR2.cxx:2 AtlObjectsDefinitionToolR2.cxx:3 AtlObjectsDefinitionToolR2.cxx:4 AtlObjectsDefinitionToolR2.cxx:5 AtlObjectsDefinitionToolR2.cxx:6 AtlObjectsDefinitionToolR2.cxx:7 AtlObjectsDefinitionToolR2.cxx:8 AtlObjectsDefinitionToolR2.cxx:9 AtlObjectsDefinitionToolR2.cxx:10 AtlObjectsDefinitionToolR2.cxx:11 AtlObjectsDefinitionToolR2.cxx:12 AtlObjectsDefinitionToolR2.cxx:13 AtlObjectsDefinitionToolR2.cxx:14 AtlObjectsDefinitionToolR2.cxx:15 AtlObjectsDefinitionToolR2.cxx:16 AtlObjectsDefinitionToolR2.cxx:17 AtlObjectsDefinitionToolR2.cxx:18 AtlObjectsDefinitionToolR2.cxx:19 AtlObjectsDefinitionToolR2.cxx:20 AtlObjectsDefinitionToolR2.cxx:21 AtlObjectsDefinitionToolR2.cxx:22 AtlObjectsDefinitionToolR2.cxx:23 AtlObjectsDefinitionToolR2.cxx:24 AtlObjectsDefinitionToolR2.cxx:25 AtlObjectsDefinitionToolR2.cxx:26 AtlObjectsDefinitionToolR2.cxx:27 AtlObjectsDefinitionToolR2.cxx:28 AtlObjectsDefinitionToolR2.cxx:29 AtlObjectsDefinitionToolR2.cxx:30 AtlObjectsDefinitionToolR2.cxx:31 AtlObjectsDefinitionToolR2.cxx:32 AtlObjectsDefinitionToolR2.cxx:33 AtlObjectsDefinitionToolR2.cxx:34 AtlObjectsDefinitionToolR2.cxx:35 AtlObjectsDefinitionToolR2.cxx:36 AtlObjectsDefinitionToolR2.cxx:37 AtlObjectsDefinitionToolR2.cxx:38 AtlObjectsDefinitionToolR2.cxx:39 AtlObjectsDefinitionToolR2.cxx:40 AtlObjectsDefinitionToolR2.cxx:41 AtlObjectsDefinitionToolR2.cxx:42 AtlObjectsDefinitionToolR2.cxx:43 AtlObjectsDefinitionToolR2.cxx:44 AtlObjectsDefinitionToolR2.cxx:45 AtlObjectsDefinitionToolR2.cxx:46 AtlObjectsDefinitionToolR2.cxx:47 AtlObjectsDefinitionToolR2.cxx:48 AtlObjectsDefinitionToolR2.cxx:49 AtlObjectsDefinitionToolR2.cxx:50 AtlObjectsDefinitionToolR2.cxx:51 AtlObjectsDefinitionToolR2.cxx:52 AtlObjectsDefinitionToolR2.cxx:53 AtlObjectsDefinitionToolR2.cxx:54 AtlObjectsDefinitionToolR2.cxx:55 AtlObjectsDefinitionToolR2.cxx:56 AtlObjectsDefinitionToolR2.cxx:57 AtlObjectsDefinitionToolR2.cxx:58 AtlObjectsDefinitionToolR2.cxx:59 AtlObjectsDefinitionToolR2.cxx:60 AtlObjectsDefinitionToolR2.cxx:61 AtlObjectsDefinitionToolR2.cxx:62 AtlObjectsDefinitionToolR2.cxx:63 AtlObjectsDefinitionToolR2.cxx:64 AtlObjectsDefinitionToolR2.cxx:65 AtlObjectsDefinitionToolR2.cxx:66 AtlObjectsDefinitionToolR2.cxx:67 AtlObjectsDefinitionToolR2.cxx:68 AtlObjectsDefinitionToolR2.cxx:69 AtlObjectsDefinitionToolR2.cxx:70 AtlObjectsDefinitionToolR2.cxx:71 AtlObjectsDefinitionToolR2.cxx:72 AtlObjectsDefinitionToolR2.cxx:73 AtlObjectsDefinitionToolR2.cxx:74 AtlObjectsDefinitionToolR2.cxx:75 AtlObjectsDefinitionToolR2.cxx:76 AtlObjectsDefinitionToolR2.cxx:77 AtlObjectsDefinitionToolR2.cxx:78 AtlObjectsDefinitionToolR2.cxx:79 AtlObjectsDefinitionToolR2.cxx:80 AtlObjectsDefinitionToolR2.cxx:81 AtlObjectsDefinitionToolR2.cxx:82 AtlObjectsDefinitionToolR2.cxx:83 AtlObjectsDefinitionToolR2.cxx:84 AtlObjectsDefinitionToolR2.cxx:85 AtlObjectsDefinitionToolR2.cxx:86 AtlObjectsDefinitionToolR2.cxx:87 AtlObjectsDefinitionToolR2.cxx:88 AtlObjectsDefinitionToolR2.cxx:89 AtlObjectsDefinitionToolR2.cxx:90 AtlObjectsDefinitionToolR2.cxx:91 AtlObjectsDefinitionToolR2.cxx:92 AtlObjectsDefinitionToolR2.cxx:93 AtlObjectsDefinitionToolR2.cxx:94 AtlObjectsDefinitionToolR2.cxx:95 AtlObjectsDefinitionToolR2.cxx:96 AtlObjectsDefinitionToolR2.cxx:97 AtlObjectsDefinitionToolR2.cxx:98 AtlObjectsDefinitionToolR2.cxx:99 AtlObjectsDefinitionToolR2.cxx:100 AtlObjectsDefinitionToolR2.cxx:101 AtlObjectsDefinitionToolR2.cxx:102 AtlObjectsDefinitionToolR2.cxx:103 AtlObjectsDefinitionToolR2.cxx:104 AtlObjectsDefinitionToolR2.cxx:105 AtlObjectsDefinitionToolR2.cxx:106 AtlObjectsDefinitionToolR2.cxx:107 AtlObjectsDefinitionToolR2.cxx:108 AtlObjectsDefinitionToolR2.cxx:109 AtlObjectsDefinitionToolR2.cxx:110 AtlObjectsDefinitionToolR2.cxx:111 AtlObjectsDefinitionToolR2.cxx:112 AtlObjectsDefinitionToolR2.cxx:113 AtlObjectsDefinitionToolR2.cxx:114 AtlObjectsDefinitionToolR2.cxx:115 AtlObjectsDefinitionToolR2.cxx:116 AtlObjectsDefinitionToolR2.cxx:117 AtlObjectsDefinitionToolR2.cxx:118 AtlObjectsDefinitionToolR2.cxx:119 AtlObjectsDefinitionToolR2.cxx:120 AtlObjectsDefinitionToolR2.cxx:121 AtlObjectsDefinitionToolR2.cxx:122 AtlObjectsDefinitionToolR2.cxx:123 AtlObjectsDefinitionToolR2.cxx:124 AtlObjectsDefinitionToolR2.cxx:125 AtlObjectsDefinitionToolR2.cxx:126 AtlObjectsDefinitionToolR2.cxx:127 AtlObjectsDefinitionToolR2.cxx:128 AtlObjectsDefinitionToolR2.cxx:129 AtlObjectsDefinitionToolR2.cxx:130 AtlObjectsDefinitionToolR2.cxx:131 AtlObjectsDefinitionToolR2.cxx:132 AtlObjectsDefinitionToolR2.cxx:133 AtlObjectsDefinitionToolR2.cxx:134 AtlObjectsDefinitionToolR2.cxx:135 AtlObjectsDefinitionToolR2.cxx:136 AtlObjectsDefinitionToolR2.cxx:137 AtlObjectsDefinitionToolR2.cxx:138 AtlObjectsDefinitionToolR2.cxx:139 AtlObjectsDefinitionToolR2.cxx:140 AtlObjectsDefinitionToolR2.cxx:141 AtlObjectsDefinitionToolR2.cxx:142 AtlObjectsDefinitionToolR2.cxx:143 AtlObjectsDefinitionToolR2.cxx:144 AtlObjectsDefinitionToolR2.cxx:145 AtlObjectsDefinitionToolR2.cxx:146 AtlObjectsDefinitionToolR2.cxx:147 AtlObjectsDefinitionToolR2.cxx:148 AtlObjectsDefinitionToolR2.cxx:149 AtlObjectsDefinitionToolR2.cxx:150 AtlObjectsDefinitionToolR2.cxx:151 AtlObjectsDefinitionToolR2.cxx:152 AtlObjectsDefinitionToolR2.cxx:153 AtlObjectsDefinitionToolR2.cxx:154 AtlObjectsDefinitionToolR2.cxx:155 AtlObjectsDefinitionToolR2.cxx:156 AtlObjectsDefinitionToolR2.cxx:157 AtlObjectsDefinitionToolR2.cxx:158 AtlObjectsDefinitionToolR2.cxx:159 AtlObjectsDefinitionToolR2.cxx:160 AtlObjectsDefinitionToolR2.cxx:161 AtlObjectsDefinitionToolR2.cxx:162 AtlObjectsDefinitionToolR2.cxx:163 AtlObjectsDefinitionToolR2.cxx:164 AtlObjectsDefinitionToolR2.cxx:165 AtlObjectsDefinitionToolR2.cxx:166 AtlObjectsDefinitionToolR2.cxx:167 AtlObjectsDefinitionToolR2.cxx:168 AtlObjectsDefinitionToolR2.cxx:169 AtlObjectsDefinitionToolR2.cxx:170 AtlObjectsDefinitionToolR2.cxx:171 AtlObjectsDefinitionToolR2.cxx:172 AtlObjectsDefinitionToolR2.cxx:173 AtlObjectsDefinitionToolR2.cxx:174 AtlObjectsDefinitionToolR2.cxx:175 AtlObjectsDefinitionToolR2.cxx:176 AtlObjectsDefinitionToolR2.cxx:177 AtlObjectsDefinitionToolR2.cxx:178 AtlObjectsDefinitionToolR2.cxx:179 AtlObjectsDefinitionToolR2.cxx:180 AtlObjectsDefinitionToolR2.cxx:181 AtlObjectsDefinitionToolR2.cxx:182 AtlObjectsDefinitionToolR2.cxx:183 AtlObjectsDefinitionToolR2.cxx:184 AtlObjectsDefinitionToolR2.cxx:185 AtlObjectsDefinitionToolR2.cxx:186 AtlObjectsDefinitionToolR2.cxx:187 AtlObjectsDefinitionToolR2.cxx:188 AtlObjectsDefinitionToolR2.cxx:189 AtlObjectsDefinitionToolR2.cxx:190 AtlObjectsDefinitionToolR2.cxx:191 AtlObjectsDefinitionToolR2.cxx:192 AtlObjectsDefinitionToolR2.cxx:193 AtlObjectsDefinitionToolR2.cxx:194 AtlObjectsDefinitionToolR2.cxx:195 AtlObjectsDefinitionToolR2.cxx:196 AtlObjectsDefinitionToolR2.cxx:197 AtlObjectsDefinitionToolR2.cxx:198 AtlObjectsDefinitionToolR2.cxx:199 AtlObjectsDefinitionToolR2.cxx:200 AtlObjectsDefinitionToolR2.cxx:201 AtlObjectsDefinitionToolR2.cxx:202 AtlObjectsDefinitionToolR2.cxx:203 AtlObjectsDefinitionToolR2.cxx:204 AtlObjectsDefinitionToolR2.cxx:205 AtlObjectsDefinitionToolR2.cxx:206 AtlObjectsDefinitionToolR2.cxx:207