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" |
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 |
109 |
|
|
110 |
|
string cmsswpath(CMSSW_BASE); |
111 |
|
cmsswpath.append("/src"); |
109 |
– |
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 |
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 |
|
|
241 |
– |
TString fElectronName(Names::gkElectronBrn); |
242 |
– |
TString fMuonName(Names::gkMuonBrn); |
243 |
– |
TString fInfoName(Names::gkEvtHeaderBrn); |
244 |
– |
TString fPFMetName("PFMet"); |
245 |
– |
TString fPrimVtxName(Names::gkPVBrn); |
246 |
– |
TString fPFCandidateName(Names::gkPFCandidatesBrn); |
247 |
– |
TString fPileupInfoName(Names::gkPileupInfoBrn); |
248 |
– |
TString fPileupEnergyDensityName(Names::gkPileupEnergyDensityBrn); |
249 |
– |
TString fTrackName(Names::gkTrackBrn); |
250 |
– |
TString fMCParticleName(Names::gkMCPartBrn); |
251 |
– |
TString fMCEvtInfoName(Names::gkMCEvtInfoBrn); |
252 |
– |
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 |
|
|
294 |
– |
|
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 |
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, ctrl.mc ? getNPU(puArr) : 0); |
357 |
> |
fillEventInfo( info, pfmet, evtinfo, ctrl.mc ? getNPU(puArr) : 0, vtxArr->GetEntries()); |
358 |
|
foTree.Fill(); |
350 |
– |
|
351 |
– |
if( ctrl.mc) |
352 |
– |
setEffiencyWeights(ctrl.era, ret4l, weights); |
353 |
– |
|
359 |
|
nt.Fill(); |
360 |
|
} |
361 |
< |
|
361 |
> |
|
362 |
|
} |
363 |
|
foTree.getFile()->cd(); |
364 |
|
foTree.getTree()->Write(); |