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 |
– |
vector<vector<string> > inputFiles; |
113 |
– |
inputFiles.push_back(vector<string>()); |
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 |
|
|
227 |
|
// |
228 |
|
// Setup tree I/O |
229 |
|
//-------------------------------------------------------------------------------------------------------------- |
228 |
– |
TFile *inputFile=0; |
229 |
– |
TTree *eventTree=0; |
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 |
|
|
247 |
– |
TString fElectronName(Names::gkElectronBrn); |
248 |
– |
TString fMuonName(Names::gkMuonBrn); |
249 |
– |
TString fInfoName(Names::gkEvtHeaderBrn); |
250 |
– |
TString fPFMetName("PFMet"); |
251 |
– |
TString fPrimVtxName(Names::gkPVBrn); |
252 |
– |
TString fPFCandidateName(Names::gkPFCandidatesBrn); |
253 |
– |
TString fPileupInfoName(Names::gkPileupInfoBrn); |
254 |
– |
TString fPileupEnergyDensityName(Names::gkPileupEnergyDensityBrn); |
255 |
– |
TString fTrackName(Names::gkTrackBrn); |
256 |
– |
TString fMCParticleName(Names::gkMCPartBrn); |
257 |
– |
TString fMCEvtInfoName(Names::gkMCEvtInfoBrn); |
258 |
– |
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 |
|
|
312 |
|
fillTriggerNames(hltTable, hltTableStrings ); |
313 |
|
} |
314 |
|
fillTriggerBits( hltTable, trigMask, triggerBits ); |
315 |
+ |
setHLTObjectRelations( hltObjArr, hltRelsArr, hltTableStrings, hltLabelStrings, fTrigObjs ); |
316 |
|
|
317 |
|
// |
318 |
|
// data/MC |
321 |
|
if( ctrl.fillGen ) |
322 |
|
fillGenInfo( mcArr, mcEvtInfo, geninfo, ESampleType::kHZZ, ctrl); |
323 |
|
} else { |
323 |
– |
/* |
324 |
– |
// JSON |
324 |
|
if(!(ctrl.noJSON) ) { |
325 |
< |
RunLumiRangeMap::RunLumiPairType rl(info->RunNum(), info->LumiSec()); |
326 |
< |
if( !(rlrm.HasRunLumi(rl)) ) { |
328 |
< |
if( ctrl.debug ) cout << "\tfails JSON" << endl; |
329 |
< |
continue; |
330 |
< |
} |
325 |
> |
RunLumiRangeMap::RunLumiPairType rl(info->RunNum(), info->LumiSec()); |
326 |
> |
if( !(rlrm.HasRunLumi(rl)) ) continue; |
327 |
|
} |
332 |
– |
*/ |
328 |
|
// if( !passHLTEMU(ctrl,triggerBits) ) { |
329 |
|
// continue; |
330 |
|
// } |
335 |
|
passingLeptons.clear(); |
336 |
|
EventData ret4l = |
337 |
|
|
338 |
< |
apply_HZZ4L_EMU_selection(ctrl, info, |
338 |
> |
apply_HZZ4L_EMU_selection(ctrl, info, |
339 |
> |
hltTable, |
340 |
> |
hltObjArr, |
341 |
> |
fTrigObjs, |
342 |
|
vtxArr, |
343 |
|
pfArr, |
344 |
|
puDArr, |
355 |
|
if( ret4l.status.pass() ) { |
356 |
|
|
357 |
|
TLorentzVector pfmet; pfmet.SetPxPyPzE(metArr->At(0)->Mex(),metArr->At(0)->Mey(),0,0); |
358 |
< |
fillEventInfo(info,pfmet,evtinfo); |
358 |
> |
fillEventInfo( info, pfmet, evtinfo, ctrl.mc ? getNPU(puArr) : 0, vtxArr->GetEntries()); |
359 |
|
foTree.Fill(); |
360 |
|
|
361 |
< |
if( ctrl.mc) |
362 |
< |
setEffiencyWeights(ret4l, weights); |
361 |
> |
// if( ctrl.mc) |
362 |
> |
// setEffiencyWeights(ctrl.era, ret4l, weights); |
363 |
> |
if(ientry<10000) cout << "\n\nWARNING: not setting eff weights\n\n" << endl; |
364 |
|
|
365 |
|
nt.Fill(); |
366 |
|
} |
371 |
|
nt.WriteClose(); |
372 |
|
} |
373 |
|
//---------------------------------------------------------------------------- |
374 |
< |
void initRunLumiRangeMap() |
374 |
> |
void initRunLumiRangeMap(ControlFlags &ctrl) |
375 |
|
//---------------------------------------------------------------------------- |
376 |
|
{ |
377 |
|
/* |
385 |
|
*/ |
386 |
|
|
387 |
|
// 2012 only for now ... |
388 |
< |
rlrm.AddJSONFile(std::string("./data/Cert_190456-194479_8TeV_PromptReco_Collisions12_JSON.txt")); |
388 |
> |
rlrm.AddJSONFile(string(ctrl.jsonFile)); |
389 |
|
|
390 |
|
}; |
392 |
– |
|
393 |
– |
|
394 |
– |
//---------------------------------------------------------------------------- |
395 |
– |
void initPUWeights() |
396 |
– |
//---------------------------------------------------------------------------- |
397 |
– |
{ |
398 |
– |
TFile * puf = new TFile("data/PileupReweighting.Summer11DYmm_To_Full2011.root"); |
399 |
– |
hpu = (TH1D*)(puf->Get("puWeights")); |
400 |
– |
} |
401 |
– |
|
402 |
– |
//---------------------------------------------------------------------------- |
403 |
– |
double getPUWeight(unsigned npu) |
404 |
– |
//---------------------------------------------------------------------------- |
405 |
– |
{ |
406 |
– |
return hpu->GetBinContent(hpu->FindBin(npu)); |
407 |
– |
} |
408 |
– |
|