33 |
|
#include "Electron.h" |
34 |
|
#include "Muon.h" |
35 |
|
#include "Vertex.h" |
36 |
+ |
#include "PFJet.h" |
37 |
|
#include "PFCandidate.h" |
38 |
|
#include "PFCandidateCol.h" |
39 |
|
#include "PileupInfoCol.h" |
81 |
|
// |
82 |
|
// globals |
83 |
|
//---------------------------------------------------------------------------- |
84 |
< |
TH1D * hpu; |
84 |
> |
TH1D *hpu_2011, *hpu_2012; |
85 |
|
mithep::RunLumiRangeMap rlrm; |
86 |
|
vector<SimpleLepton> failingLeptons ; // for fake estimation |
87 |
|
vector<SimpleLepton> passingLeptons; // for fake estimation |
92 |
|
vector<string> cutstrs; |
93 |
|
bool passes_HLT_MC; |
94 |
|
vector<bool> PFnoPUflag;; |
95 |
+ |
vector<int> muTrigObjs,eleTrigObjs,muTriggers,eleTriggers; |
96 |
+ |
std::bitset<TRIGGER_BIG_NUMBER> triggerBits; |
97 |
|
|
98 |
|
// |
99 |
|
// prototypes |
100 |
|
//---------------------------------------------------------------------------- |
101 |
< |
void initRunLumiRangeMap(); |
99 |
< |
void initPUWeights(); |
100 |
< |
double getPUWeight(unsigned npu); |
101 |
> |
void initRunLumiRangeMap(ControlFlags &ctrl); |
102 |
|
|
103 |
|
// |
104 |
|
// MAIN |
109 |
|
|
110 |
|
string cmsswpath(CMSSW_BASE); |
111 |
|
cmsswpath.append("/src"); |
111 |
– |
std::bitset<1024> triggerBits; |
112 |
|
map<string,unsigned> entrymap; // number of unskimmed entries in each file |
113 |
|
|
114 |
|
// |
192 |
|
if(ctrl.mc) { |
193 |
|
nt.makeWeightBranch(weights); |
194 |
|
if(ctrl.fillGen ) nt.makeGenInfoBranch(geninfo); |
195 |
< |
initEfficiencyWeights(); |
195 |
> |
// initEfficiencyWeights(); |
196 |
> |
cout << "\n\nWARNING: not initializing eff weights\n\n" << endl; |
197 |
|
initPUWeights(); |
198 |
|
|
199 |
|
// Higgs only, pt reweighting |
207 |
|
} |
208 |
|
|
209 |
|
} else { |
210 |
< |
initRunLumiRangeMap(); |
210 |
> |
initRunLumiRangeMap(ctrl); |
211 |
|
} |
212 |
|
|
213 |
|
// initMuonIDMVA(); |
217 |
|
initElectronIsoMVA(); |
218 |
|
initTrigger(); |
219 |
|
|
220 |
+ |
muTriggers.push_back(kHLT_IsoMu24_eta2p1); muTrigObjs.push_back(kHLT_IsoMu24_eta2p1_MuObj); |
221 |
+ |
eleTriggers.push_back(kHLT_Ele27_WP80); eleTrigObjs.push_back(kHLT_Ele27_WP80_EleObj); |
222 |
+ |
|
223 |
|
// hack |
224 |
|
initEvtRhoMap(evtrhoMap); |
225 |
|
|
229 |
|
//-------------------------------------------------------------------------------------------------------------- |
230 |
|
string currentFile(""); |
231 |
|
|
232 |
+ |
UInt_t fNMaxTriggers = TRIGGER_BIG_NUMBER; |
233 |
|
mithep::EventHeader *info = new mithep::EventHeader(); |
234 |
|
mithep::Array<mithep::PFMet> *metArr = new mithep::Array<mithep::PFMet>(); |
235 |
|
mithep::Array<mithep::Electron> *electronArr = new mithep::Array<mithep::Electron>(); |
236 |
|
mithep::Array<mithep::Muon> *muonArr = new mithep::Array<mithep::Muon>(); |
237 |
|
mithep::Array<mithep::Vertex> *vtxArr = new mithep::Array<mithep::Vertex>(); |
238 |
|
mithep::Array<mithep::PFCandidate> *pfArr = new mithep::Array<mithep::PFCandidate>(); |
239 |
+ |
mithep::Array<mithep::PFJet> *jetArr = new mithep::Array<mithep::PFJet>(); |
240 |
|
mithep::Array<mithep::PileupInfo> *puArr = new mithep::Array<mithep::PileupInfo>(); |
241 |
|
mithep::Array<mithep::PileupEnergyDensity> *puDArr = new mithep::Array<mithep::PileupEnergyDensity>(); |
242 |
|
mithep::Array<mithep::Track> *trkArr = new mithep::Array<mithep::Track>(); |
245 |
|
mithep::TriggerMask *trigMask = new mithep::TriggerMask(); |
246 |
|
mithep::TriggerTable *hltTable = new mithep::TriggerTable(); |
247 |
|
vector<string> *hltTableStrings = new vector<string>(); |
248 |
+ |
vector<string> *hltLabelStrings = new vector<string>(); |
249 |
+ |
mithep::Array<mithep::TriggerObject> *hltObjArr = new mithep::Array<mithep::TriggerObject>(); |
250 |
+ |
mithep::Array<mithep::TriggerObjectRel> *hltRelsArr = new mithep::Array<mithep::TriggerObjectRel>(); |
251 |
+ |
std::vector<std::string> *hltTab = new vector<string>(); |
252 |
+ |
std::vector<std::string> *hltLab = new vector<string>(); |
253 |
+ |
mithep::TriggerObjectsTable *fTrigObjs = new TriggerObjectsTable(hltTable,fNMaxTriggers); |
254 |
+ |
mithep::Array<mithep::DecayParticle> *fConversions = new mithep::Array<mithep::DecayParticle>(); |
255 |
|
|
243 |
– |
TString fElectronName(Names::gkElectronBrn); |
244 |
– |
TString fMuonName(Names::gkMuonBrn); |
245 |
– |
TString fInfoName(Names::gkEvtHeaderBrn); |
246 |
– |
TString fPFMetName("PFMet"); |
247 |
– |
TString fPrimVtxName(Names::gkPVBrn); |
248 |
– |
TString fPFCandidateName(Names::gkPFCandidatesBrn); |
249 |
– |
TString fPileupInfoName(Names::gkPileupInfoBrn); |
250 |
– |
TString fPileupEnergyDensityName(Names::gkPileupEnergyDensityBrn); |
251 |
– |
TString fTrackName(Names::gkTrackBrn); |
252 |
– |
TString fMCParticleName(Names::gkMCPartBrn); |
253 |
– |
TString fMCEvtInfoName(Names::gkMCEvtInfoBrn); |
254 |
– |
TString fTriggerMaskName(Names::gkHltBitBrn); |
256 |
|
TString fTriggerTableName(Names::gkHltTableBrn); |
257 |
< |
|
258 |
< |
chain->SetBranchAddress(fInfoName, &info); |
259 |
< |
chain->SetBranchAddress(fPFMetName, &metArr); |
260 |
< |
chain->SetBranchAddress(fElectronName, &electronArr); |
261 |
< |
chain->SetBranchAddress(fMuonName, &muonArr); |
262 |
< |
chain->SetBranchAddress(fPrimVtxName, &vtxArr); |
263 |
< |
chain->SetBranchAddress(fPFCandidateName, &pfArr); |
257 |
> |
chain->SetBranchAddress(Names::gkEvtHeaderBrn, &info); |
258 |
> |
chain->SetBranchAddress("PFMet", &metArr); |
259 |
> |
chain->SetBranchAddress(Names::gkElectronBrn, &electronArr); |
260 |
> |
chain->SetBranchAddress(Names::gkMuonBrn, &muonArr); |
261 |
> |
chain->SetBranchAddress(Names::gkPVBrn, &vtxArr); |
262 |
> |
chain->SetBranchAddress(Names::gkPFCandidatesBrn, &pfArr); |
263 |
> |
chain->SetBranchAddress(Names::gkPFJetBrn, &jetArr); |
264 |
|
if( ctrl.mc ) { |
265 |
< |
chain->SetBranchAddress(fPileupInfoName, &puArr); |
266 |
< |
chain->SetBranchAddress(fMCParticleName, &mcArr); |
267 |
< |
chain->SetBranchAddress(fMCEvtInfoName, &mcEvtInfo); |
265 |
> |
chain->SetBranchAddress(Names::gkPileupInfoBrn, &puArr); |
266 |
> |
chain->SetBranchAddress(Names::gkMCPartBrn, &mcArr); |
267 |
> |
chain->SetBranchAddress(Names::gkMCEvtInfoBrn, &mcEvtInfo); |
268 |
|
} |
269 |
< |
chain->SetBranchAddress(fPileupEnergyDensityName, &puDArr); |
270 |
< |
chain->SetBranchAddress(fTrackName, &trkArr); |
271 |
< |
chain->SetBranchAddress(fTriggerMaskName, &trigMask); |
272 |
< |
cout << "hlttable: " << fTriggerTableName << endl; |
273 |
< |
hltchain->SetBranchAddress(fTriggerTableName, &hltTableStrings); |
269 |
> |
chain->SetBranchAddress(Names::gkPileupEnergyDensityBrn, &puDArr); |
270 |
> |
chain->SetBranchAddress(Names::gkTrackBrn, &trkArr); |
271 |
> |
chain->SetBranchAddress(Names::gkHltBitBrn, &trigMask); |
272 |
> |
chain->SetBranchAddress(Names::gkHltObjBrn, &hltObjArr); |
273 |
> |
chain->SetBranchAddress("HLTObjectsRelation", &hltRelsArr); |
274 |
> |
chain->SetBranchAddress(Names::gkMvfConversionBrn, &fConversions); |
275 |
> |
hltchain->SetBranchAddress(fTriggerTableName, &hltTableStrings); |
276 |
> |
hltchain->SetBranchAddress(Names::gkHltLabelBrn, &hltLabelStrings); |
277 |
|
|
278 |
|
mithep::Vertex vtx; // best primary vertex in the event |
279 |
|
|
297 |
|
string fname = string(chain->GetFile()->GetEndpointUrl()->GetFile()); |
298 |
|
setEra( fname, ctrl ); |
299 |
|
|
296 |
– |
|
300 |
|
// pfNoPU |
301 |
|
PFnoPUflag.clear(); |
302 |
|
int pfnopu_size = makePFnoPUArray( pfArr, PFnoPUflag, vtxArr ); |
311 |
|
fillTriggerNames(hltTable, hltTableStrings ); |
312 |
|
} |
313 |
|
fillTriggerBits( hltTable, trigMask, triggerBits ); |
314 |
+ |
setHLTObjectRelations( hltObjArr, hltRelsArr, hltTableStrings, hltLabelStrings, fTrigObjs ); |
315 |
|
|
316 |
|
// |
317 |
|
// data/MC |
320 |
|
if( ctrl.fillGen ) |
321 |
|
fillGenInfo( mcArr, mcEvtInfo, geninfo, ESampleType::kHZZ, ctrl); |
322 |
|
} else { |
319 |
– |
/* |
320 |
– |
// JSON |
323 |
|
if(!(ctrl.noJSON) ) { |
324 |
< |
RunLumiRangeMap::RunLumiPairType rl(info->RunNum(), info->LumiSec()); |
325 |
< |
if( !(rlrm.HasRunLumi(rl)) ) { |
324 |
< |
if( ctrl.debug ) cout << "\tfails JSON" << endl; |
325 |
< |
continue; |
326 |
< |
} |
324 |
> |
RunLumiRangeMap::RunLumiPairType rl(info->RunNum(), info->LumiSec()); |
325 |
> |
if( !(rlrm.HasRunLumi(rl)) ) continue; |
326 |
|
} |
328 |
– |
*/ |
327 |
|
// if( !passHLTEMU(ctrl,triggerBits) ) { |
328 |
|
// continue; |
329 |
|
// } |
332 |
|
// lepton/kinematic selection ... |
333 |
|
failingLeptons.clear(); |
334 |
|
passingLeptons.clear(); |
335 |
< |
EventData ret4l = |
335 |
> |
EventData ret4l; |
336 |
|
|
337 |
< |
apply_HZZ4L_EMU_selection(ctrl, info, |
338 |
< |
vtxArr, |
339 |
< |
pfArr, |
340 |
< |
puDArr, |
341 |
< |
electronArr, |
342 |
< |
&electronReferencePreSelection, |
343 |
< |
&electronReferenceIDMVASelectionV1, |
344 |
< |
&electronReferenceIsoSelection, |
345 |
< |
muonArr, |
346 |
< |
&muonReferencePreSelection, |
347 |
< |
&muonIDPFSelection, |
348 |
< |
&muonReferenceIsoSelection); |
349 |
< |
|
337 |
> |
ret4l = apply_HZZ4L_EMU_selection(ctrl, info, |
338 |
> |
hltTable, |
339 |
> |
hltObjArr, |
340 |
> |
fTrigObjs, |
341 |
> |
vtxArr, |
342 |
> |
pfArr, |
343 |
> |
puDArr, |
344 |
> |
fConversions, |
345 |
> |
electronArr, |
346 |
> |
&electronReferencePreSelection, |
347 |
> |
&electronReferenceIDMVASelectionV1, |
348 |
> |
&electronReferenceIsoSelection, |
349 |
> |
muonArr, |
350 |
> |
&muonReferencePreSelection, |
351 |
> |
&muonIDPFSelection, |
352 |
> |
&muonReferenceIsoSelection); |
353 |
|
|
354 |
|
if( ret4l.status.pass() ) { |
355 |
< |
|
355 |
> |
fillKinematics(ret4l,kinematics); |
356 |
|
TLorentzVector pfmet; pfmet.SetPxPyPzE(metArr->At(0)->Mex(),metArr->At(0)->Mey(),0,0); |
357 |
< |
fillEventInfo(info,pfmet,evtinfo); |
357 |
> |
fillEventInfo( info, pfmet, evtinfo, ctrl.mc ? getNPU(puArr) : 0, vtxArr->GetEntries()); |
358 |
|
foTree.Fill(); |
358 |
– |
|
359 |
– |
if( ctrl.mc) |
360 |
– |
setEffiencyWeights(ret4l, weights); |
361 |
– |
|
359 |
|
nt.Fill(); |
360 |
|
} |
361 |
< |
|
361 |
> |
|
362 |
|
} |
363 |
|
foTree.getFile()->cd(); |
364 |
|
foTree.getTree()->Write(); |
365 |
|
nt.WriteClose(); |
366 |
|
} |
367 |
|
//---------------------------------------------------------------------------- |
368 |
< |
void initRunLumiRangeMap() |
368 |
> |
void initRunLumiRangeMap(ControlFlags &ctrl) |
369 |
|
//---------------------------------------------------------------------------- |
370 |
|
{ |
371 |
|
/* |
379 |
|
*/ |
380 |
|
|
381 |
|
// 2012 only for now ... |
382 |
< |
rlrm.AddJSONFile(std::string("./data/Cert_190456-194479_8TeV_PromptReco_Collisions12_JSON.txt")); |
382 |
> |
rlrm.AddJSONFile(string(ctrl.jsonFile)); |
383 |
|
|
384 |
|
}; |
388 |
– |
|
389 |
– |
|
390 |
– |
//---------------------------------------------------------------------------- |
391 |
– |
void initPUWeights() |
392 |
– |
//---------------------------------------------------------------------------- |
393 |
– |
{ |
394 |
– |
TFile * puf = new TFile("data/PileupReweighting.Summer11DYmm_To_Full2011.root"); |
395 |
– |
hpu = (TH1D*)(puf->Get("puWeights")); |
396 |
– |
} |
397 |
– |
|
398 |
– |
//---------------------------------------------------------------------------- |
399 |
– |
double getPUWeight(unsigned npu) |
400 |
– |
//---------------------------------------------------------------------------- |
401 |
– |
{ |
402 |
– |
return hpu->GetBinContent(hpu->FindBin(npu)); |
403 |
– |
} |
404 |
– |
|