50int main(
int argc,
char* argv[])
53 const char* filename =
nullptr;
54 bool debug =
false, cmdline_error =
false, toys =
false;
55 for(
int i=1;i<argc;++i)
57 if(
string(argv[i]) ==
"--debug")
debug =
true;
58 else if(
string(argv[i]) ==
"--toys") toys =
true;
59 else if(!filename && *argv[i]!=
'-') filename = argv[i];
60 else cmdline_error =
true;
62 if(!filename || cmdline_error)
64 Error(
MSGSOURCE,
"No file name received!");
65 Error(
MSGSOURCE,
" Usage: %s [--debug] [--toys] [DxAOD file name]", argv[0]);
68 #ifdef XAOD_STANDALONE
70 TFile*
file = TFile::Open(filename,
"READ");
78 StatusCode::enableFailure();
82 TString
file(filename);
84 event.readFrom(
file).ignore();
85 Long64_t
entries =
event.getEntries();
90 Info(
MSGSOURCE,
"Configuring the photon CP tools");
92 ToolHandleArray<IAsgPhotonEfficiencyCorrectionTool> photonEffTools;
94 ToolHandleArray<IAsgPhotonEfficiencyCorrectionTool> photonSFTools;
97 vector<asg::AnaToolHandle<IAsgPhotonEfficiencyCorrectionTool>> factory;
99 const char* mapPath =
"PhotonEfficiencyCorrection/2015_2018/"
100 "rel21.2/Summer2018_Rec_v1/map1.txt";
103 string name =
"AsgPhotonEfficiencyCorrectionTool/" + std::string(j?
"PhTrigEff" :
"PhTrigSF");
104 auto t = factory.emplace(factory.end(), name);
105 t->setProperty(
"MapFilePath", mapPath).ignore();
106 t->setProperty(
"TriggerKey",
string(j?
"":
"Eff_") +
"DI_PH_2015_2016_g20_tight_2016_g22_tight_2017_2018_g20_tight_icalovloose_L1EM15VHI").ignore();
107 t->setProperty(
"IsoKey",
"Loose").ignore();
109 if(t->initialize() != StatusCode::SUCCESS)
111 Error(
MSGSOURCE,
"Unable to initialize the photon CP tool <%s>!",
115 auto& handles = (j? photonSFTools : photonEffTools);
116 handles.push_back(t->getHandle());
121 Info(
MSGSOURCE,
"Configuring the global trigger SF tool");
123 myTool.
setProperty(
"PhotonEfficiencyTools", photonEffTools).ignore();
124 myTool.
setProperty(
"PhotonScaleFactorTools", photonSFTools).ignore();
125 std::map<std::string, std::string> triggers;
126 triggers[
"266904-302872"] =
"2g20_tight";
127 triggers[
"302919-311481"] =
"2g22_tight";
128 triggers[
"2017"] =
"2g22_tight_L12EM15VHI";
129 triggers[
"2018"] =
"2g22_tight_L12EM15VHI";
130 myTool.
setProperty(
"TriggerCombination", triggers).ignore();
133 if(toys) myTool.
setProperty(
"NumberOfToys", 1000).ignore();
134 if(myTool.
initialize() != StatusCode::SUCCESS)
136 Error(
MSGSOURCE,
"Unable to initialize the TrigGlob tool!");
142 const unsigned periodRuns[] = {
144 276262, 278727, 279932, 280423, 281130, 282625,
146 297730, 300345, 301912, 302737, 303638, 303943, 305291, 307124,
147 305359, 309311, 310015,
149 325713, 329385, 330857, 332720, 334842, 336497, 336832, 338183,
151 348885, 349534, 350310, 352274, 354107, 354826, 355261, 355331,
152 355529, 357050, 359191
154 std::uniform_int_distribution<unsigned> uniformPdf(0,
155 sizeof(periodRuns)/
sizeof(*periodRuns) - 1);
156 std::default_random_engine randomEngine;
160 Info(
MSGSOURCE,
"Starting the event loop");
162 double nSuitableEvents = 0., sumW = 0.;
165 for(Long64_t entry = 0; entry <
entries; ++entry)
167 event.getEntry(entry);
171 event.retrieve(eventInfo,
"EventInfo").ignore();
172 unsigned runNumber = periodRuns[uniformPdf(randomEngine)];
173 RandomRunNumberDec(*eventInfo) = runNumber;
175 vector<const xAOD::Photon*> myTriggeringPhotons;
177 event.retrieve(photons,
"Photons").ignore();
178 for(
auto photon : *photons)
180 if(!photon->caloCluster())
continue;
181 float eta = fabs(photon->caloCluster()->etaBE(2));
182 float pt = photon->pt();
183 if(pt<10e3f || eta>=2.37 || (
eta>1.37 &&
eta<1.52))
continue;
184 int t = truthTypeAcc(*photon);
187 if(pt < (runNumber>=302919? 23e3f : 21e3f))
continue;
188 myTriggeringPhotons.push_back(photon);
192 if(myTriggeringPhotons.size() < 2)
continue;
196 auto cc = myTool->getEfficiencyScaleFactor(myTriggeringPhotons, sf);
199 nSuitableEvents += 1;
204 Warning(
MSGSOURCE,
"Scale factor evaluation failed");
209 Error(
MSGSOURCE,
"Too many errors reported!");
213 Info(
MSGSOURCE,
"Average scale factor: %f (over %ld events)",
214 sumW / nSuitableEvents,
long(nSuitableEvents));
215 #ifndef XAOD_STANDALONE
218 return errors? 4 : 0;