Skip to content

Commit 4e20631

Browse files
committed
2016C Jet tuple reduction
1 parent b50be03 commit 4e20631

File tree

4 files changed

+111
-122
lines changed

4 files changed

+111
-122
lines changed

AnalysisFW/python/LocalProducer/LocalOpenDataTreeProducer.C

Lines changed: 93 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -54,32 +54,37 @@ void LocalOpenDataTreeProducer::Loop()
5454
if (fChain_ak4 == 0) return;
5555

5656
TDirectory *currDir = gDirectory;
57-
TFile *fout = new TFile("./OpenDataTree.root", "RECREATE");
57+
58+
std::string outName = "./OpenDataTree.root";
59+
TFile *fout = new TFile(outName.c_str(), "RECREATE");
60+
61+
std::cout << "Output will be saved in file: " << outName << std::endl;
62+
5863
TTree *tree = new TTree("OpenDataTree", "OpenDataTree");
5964
currDir->cd();
6065

6166
const UInt_t kMaxNjet = 64;
6267
const UInt_t kMaxNtrg = 64;
6368

6469
// PF AK5 jets
65-
UInt_t ak4_njet;
66-
Float_t ak4_pt[kMaxNjet];
67-
Float_t ak4_eta[kMaxNjet];
68-
Float_t ak4_phi[kMaxNjet];
69-
Float_t ak4_E[kMaxNjet];
70-
Bool_t ak4_tightID[kMaxNjet];
71-
Float_t ak4_area[kMaxNjet];
72-
Float_t ak4_jes[kMaxNjet];
73-
Int_t ak4_igen[kMaxNjet];
70+
UInt_t njet;
71+
Float_t jet_pt[kMaxNjet];
72+
Float_t jet_eta[kMaxNjet];
73+
Float_t jet_phi[kMaxNjet];
74+
Float_t jet_E[kMaxNjet];
75+
Bool_t jet_tightID[kMaxNjet];
76+
Float_t jet_area[kMaxNjet];
77+
Float_t jet_jes[kMaxNjet];
78+
Int_t jet_igen[kMaxNjet];
7479

7580
// PF AK7 jets
76-
UInt_t ak7_njet;
77-
Float_t ak7_pt[kMaxNjet];
78-
Float_t ak7_eta[kMaxNjet];
79-
Float_t ak7_phi[kMaxNjet];
80-
Float_t ak7_E[kMaxNjet];
81-
Float_t ak7_area[kMaxNjet];
82-
Float_t ak7_jes[kMaxNjet];
81+
UInt_t njet_ak7;
82+
Float_t jet_pt_ak7[kMaxNjet];
83+
Float_t jet_eta_ak7[kMaxNjet];
84+
Float_t jet_phi_ak7[kMaxNjet];
85+
Float_t jet_E_ak7[kMaxNjet];
86+
Float_t jet_area_ak7[kMaxNjet];
87+
Float_t jet_jes_ak7[kMaxNjet];
8388
Int_t ak7_to_ak4[kMaxNjet];
8489

8590
// Jet composition
@@ -132,45 +137,45 @@ void LocalOpenDataTreeProducer::Loop()
132137

133138
Bool_t isMC = false;
134139

135-
TBranch *b_ak4_njet = tree->Branch("ak4_njet", &ak4_njet, "ak4_njet/i");
136-
TBranch *b_ak4_pt = tree->Branch("ak4_pt", ak4_pt, "ak4_pt[ak4_njet]/F");
137-
TBranch *b_ak4_eta = tree->Branch("ak4_eta", ak4_eta, "ak4_eta[ak4_njet]/F");
138-
TBranch *b_ak4_phi = tree->Branch("ak4_phi", ak4_phi, "ak4_phi[ak4_njet]/F");
139-
TBranch *b_ak4_E = tree->Branch("ak4_E", ak4_E, "ak4_E[ak4_njet]/F");
140-
TBranch *b_ak4_tightID = tree->Branch("ak4_tightID", ak4_tightID, "ak4_tightID[ak4_njet]/O");
141-
TBranch *b_ak4_area = tree->Branch("ak4_area", ak4_area, "ak4_area[ak4_njet]/F");
142-
TBranch *b_ak4_jes = tree->Branch("ak4_jes", ak4_jes, "ak4_jes[ak4_njet]/F");
140+
TBranch *b_njet = tree->Branch("njet", &njet, "njet/i");
141+
TBranch *b_jet_pt = tree->Branch("jet_pt", jet_pt, "jet_pt[njet]/F");
142+
TBranch *b_jet_eta = tree->Branch("jet_eta", jet_eta, "jet_eta[njet]/F");
143+
TBranch *b_jet_phi = tree->Branch("jet_phi", jet_phi, "jet_phi[njet]/F");
144+
TBranch *b_jet_E = tree->Branch("jet_E", jet_E, "jet_E[njet]/F");
145+
TBranch *b_jet_tightID = tree->Branch("jet_tightID", jet_tightID, "jet_tightID[njet]/O");
146+
TBranch *b_jet_area = tree->Branch("jet_area", jet_area, "jet_area[njet]/F");
147+
TBranch *b_jet_jes = tree->Branch("jet_jes", jet_jes, "jet_jes[njet]/F");
143148

144-
TBranch *b_ak7_njet = tree->Branch("ak7_njet", &ak7_njet, "ak7_njet/i");
145-
TBranch *b_ak7_pt = tree->Branch("ak7_pt", ak7_pt, "ak7_pt[ak7_njet]/F");
146-
TBranch *b_ak7_eta = tree->Branch("ak7_eta", ak7_eta, "ak7_eta[ak7_njet]/F");
147-
TBranch *b_ak7_phi = tree->Branch("ak7_phi", ak7_phi, "ak7_phi[ak7_njet]/F");
148-
TBranch *b_ak7_E = tree->Branch("ak7_E", ak7_E, "ak7_E[ak7_njet]/F");
149-
TBranch *b_ak7_area = tree->Branch("ak7_area", ak7_area, "ak7_area[ak7_njet]/F");
150-
TBranch *b_ak7_jes = tree->Branch("ak7_jes", ak7_jes, "ak7_jes[ak7_njet]/F");
151-
TBranch *b_ak7_to_ak4 = tree->Branch("ak7_to_ak4", ak7_to_ak4, "ak7_to_ak4[ak7_njet]/I");
152-
153-
TBranch *b_chf = tree->Branch("chf", chf, "chf[ak4_njet]/F");
154-
TBranch *b_nhf = tree->Branch("nhf", nhf, "nhf[ak4_njet]/F");
155-
TBranch *b_phf = tree->Branch("phf", phf, "phf[ak4_njet]/F");
156-
TBranch *b_elf = tree->Branch("elf", elf, "elf[ak4_njet]/F");
157-
TBranch *b_muf = tree->Branch("muf", muf, "muf[ak4_njet]/F");
158-
159-
TBranch *b_hf_hf = tree->Branch("hf_hf", hf_hf, "hf_hf[ak4_njet]/F");
160-
TBranch *b_hf_phf = tree->Branch("hf_phf", hf_phf, "hf_phf[ak4_njet]/F");
161-
TBranch *b_hf_hm = tree->Branch("hf_hm", hf_hm, "hf_hm[ak4_njet]/i");
162-
TBranch *b_hf_phm = tree->Branch("hf_phm", hf_phm, "hf_phm[ak4_njet]/i");
149+
TBranch *b_njet_ak7 = tree->Branch("njet_ak7", &njet_ak7, "njet_ak7/i");
150+
TBranch *b_jet_pt_ak7 = tree->Branch("jet_pt_ak7", jet_pt_ak7, "jet_pt_ak7[njet_ak7]/F");
151+
TBranch *b_jet_eta_ak7 = tree->Branch("jet_eta_ak7", jet_eta_ak7, "jet_eta_ak7[njet_ak7]/F");
152+
TBranch *b_jet_phi_ak7 = tree->Branch("jet_phi_ak7", jet_phi_ak7, "jet_phi_ak7[njet_ak7]/F");
153+
TBranch *b_jet_E_ak7 = tree->Branch("jet_E_ak7", jet_E_ak7, "jet_E_ak7[njet_ak7]/F");
154+
TBranch *b_jet_area_ak7 = tree->Branch("jet_area_ak7", jet_area_ak7, "jet_area_ak7[njet_ak7]/F");
155+
TBranch *b_jet_jes_ak7 = tree->Branch("jet_jes_ak7", jet_jes_ak7, "jet_jes_ak7[njet_ak7]/F");
156+
TBranch *b_ak7_to_ak4 = tree->Branch("ak7_to_ak4", ak7_to_ak4, "ak7_to_ak4[njet_ak7]/I");
157+
158+
TBranch *b_chf = tree->Branch("chf", chf, "chf[njet]/F");
159+
TBranch *b_nhf = tree->Branch("nhf", nhf, "nhf[njet]/F");
160+
TBranch *b_phf = tree->Branch("phf", phf, "phf[njet]/F");
161+
TBranch *b_elf = tree->Branch("elf", elf, "elf[njet]/F");
162+
TBranch *b_muf = tree->Branch("muf", muf, "muf[njet]/F");
163+
164+
TBranch *b_hf_hf = tree->Branch("hf_hf", hf_hf, "hf_hf[njet]/F");
165+
TBranch *b_hf_phf = tree->Branch("hf_phf", hf_phf, "hf_phf[njet]/F");
166+
TBranch *b_hf_hm = tree->Branch("hf_hm", hf_hm, "hf_hm[njet]/i");
167+
TBranch *b_hf_phm = tree->Branch("hf_phm", hf_phm, "hf_phm[njet]/i");
163168

164-
TBranch *b_chm = tree->Branch("chm", chm, "chm[ak4_njet]/i");
165-
TBranch *b_nhm = tree->Branch("nhm", nhm, "nhm[ak4_njet]/i");
166-
TBranch *b_phm = tree->Branch("phm", phm, "phm[ak4_njet]/i");
167-
TBranch *b_elm = tree->Branch("elm", elm, "elm[ak4_njet]/i");
168-
TBranch *b_mum = tree->Branch("mum", mum, "mum[ak4_njet]/i");
169+
TBranch *b_chm = tree->Branch("chm", chm, "chm[njet]/i");
170+
TBranch *b_nhm = tree->Branch("nhm", nhm, "nhm[njet]/i");
171+
TBranch *b_phm = tree->Branch("phm", phm, "phm[njet]/i");
172+
TBranch *b_elm = tree->Branch("elm", elm, "elm[njet]/i");
173+
TBranch *b_mum = tree->Branch("mum", mum, "mum[njet]/i");
169174

170-
TBranch *b_hof = tree->Branch("hof", hof, "hof[ak4_njet]/F");
171-
TBranch *b_beta = tree->Branch("beta", beta, "beta[ak4_njet]/F");
172-
TBranch *b_bstar = tree->Branch("bstar", bstar, "bstar[ak4_njet]/F");
173-
TBranch *b_qgl = tree->Branch("qgl", qgl, "qgl[ak4_njet]/F");
175+
TBranch *b_hof = tree->Branch("hof", hof, "hof[njet]/F");
176+
TBranch *b_beta = tree->Branch("beta", beta, "beta[njet]/F");
177+
TBranch *b_bstar = tree->Branch("bstar", bstar, "bstar[njet]/F");
178+
TBranch *b_qgl = tree->Branch("qgl", qgl, "qgl[njet]/F");
174179

175180
if (isMC) {
176181
TBranch *b_ngen = tree->Branch("ngen", &ngen, "ngen/i");
@@ -201,9 +206,7 @@ void LocalOpenDataTreeProducer::Loop()
201206
fChain_ak7->SetBranchStatus("*",0);
202207

203208

204-
// AK7
205-
206-
// To begin, read only these 3 variables
209+
// To begin, read only these 3 variables (AK7)
207210
fChain_ak7->SetBranchStatus("EvtHdr_.mRun",1); // run
208211
fChain_ak7->SetBranchStatus("EvtHdr_.mLumi",1); // lumi
209212
fChain_ak7->SetBranchStatus("EvtHdr_.mEvent",1); // event
@@ -219,12 +222,11 @@ void LocalOpenDataTreeProducer::Loop()
219222
assert(ak7entry[EvtHdr__mRun_ak7][EvtHdr__mLumi_ak7][EvtHdr__mEvent_ak7] == 0);
220223
ak7entry[EvtHdr__mRun_ak7][EvtHdr__mLumi_ak7][EvtHdr__mEvent_ak7] = jentry7;
221224
}
222-
223225
std::cout << "Found mapping for " << ak7entry.size() << " runs" << std::endl;
224226

225227
// Enable the remaining variables
226228

227-
fChain_ak4->SetBranchStatus("PFJets_",1); // ak4_njet
229+
fChain_ak4->SetBranchStatus("PFJets_",1); // njet
228230
fChain_ak4->SetBranchStatus("PFJets_.P4_.fCoordinates.f*",1); // Four-momentum
229231

230232
fChain_ak4->SetBranchStatus("PFJets_.tightID_",1); // jet_tightID
@@ -281,7 +283,8 @@ void LocalOpenDataTreeProducer::Loop()
281283
std::cout << "Total entries: " << nentries << std::endl;
282284

283285
// DEBUG!!
284-
//nentries = 1000000;
286+
// Change number of events here
287+
nentries = 100000;
285288

286289
// Convert set into vector
287290
std::vector<std::string> trg_vec;
@@ -304,21 +307,19 @@ void LocalOpenDataTreeProducer::Loop()
304307
s.insert(removeTrgVersion(trg_name));
305308
}
306309

310+
// Assign the set of names to a vector
307311
trg_vec.assign( s.begin(), s.end() );
308-
// And sort the vector wrt. the trigger momentum
309-
//sort(trg_vec.begin(), trg_vec.end(), compareTrgNames);
310-
312+
311313
// Number of triggers
312314
ntrg = trg_vec.size();
313315

314-
// Shorter trigger names for output
316+
// Shorten trigger names
315317
for (auto i : trg_vec ) {
316318
triggernames.push_back(transformName(i));
317319
}
318320
}
319321

320322

321-
322323
// Iterating over the events
323324
for (Long64_t jentry = 0; jentry != nentries; ++jentry) {
324325

@@ -327,26 +328,27 @@ void LocalOpenDataTreeProducer::Loop()
327328

328329
fChain_ak4->GetEntry(jentry);
329330

331+
// Jet index in the output (after pT cut)
330332
int i_out = 0;
333+
331334
for (int i = 0; i != PFJets__; ++i) {
332335

333336
p4.SetPxPyPzE( PFJets__P4__fCoordinates_fX[i], PFJets__P4__fCoordinates_fY[i],
334337
PFJets__P4__fCoordinates_fZ[i], PFJets__P4__fCoordinates_fT[i]);
335338

336339
// pT selection
337340
Float_t minPt = 15;
338-
339341
if (p4.Pt() > minPt) {
340342

341-
ak4_pt[i_out] = p4.Pt();
342-
ak4_eta[i_out] = p4.Eta();
343-
ak4_phi[i_out] = p4.Phi();
344-
ak4_E[i_out] = p4.E();
343+
jet_pt[i_out] = p4.Pt();
344+
jet_eta[i_out] = p4.Eta();
345+
jet_phi[i_out] = p4.Phi();
346+
jet_E[i_out] = p4.E();
345347

346348

347-
ak4_tightID[i_out] = PFJets__tightID_[i];
348-
ak4_area[i_out] = PFJets__area_[i];
349-
ak4_jes[i_out] = PFJets__cor_[i];
349+
jet_tightID[i_out] = PFJets__tightID_[i];
350+
jet_area[i_out] = PFJets__area_[i];
351+
jet_jes[i_out] = PFJets__cor_[i];
350352

351353

352354
// Jet composition
@@ -369,66 +371,59 @@ void LocalOpenDataTreeProducer::Loop()
369371
beta[i_out] = PFJets__beta_[i];
370372
bstar[i_out] = PFJets__betaStar_[i];
371373
hof[i_out] = PFJets__hof_[i];
372-
373-
374+
374375
++i_out;
375376
}
376377
}
377-
ak4_njet = i_out;
378-
379-
// Using the entry mapping (AK4 to AK7)
378+
njet = i_out;
380379

380+
// Read corresponding AK7 event using the entry mapping
381381
fChain_ak7->GetEntry(ak7entry[EvtHdr__mRun][EvtHdr__mLumi][EvtHdr__mEvent]);
382382

383-
384-
385383
// Safety check
386384
if (EvtHdr__mRun != EvtHdr__mRun_ak7 ||
387385
EvtHdr__mEvent != EvtHdr__mEvent_ak7 ||
388386
EvtHdr__mLumi != EvtHdr__mLumi_ak7) {
389387

390388
assert(false && "Mismatch between AK4 and AK7 events!!");
391-
}
392-
393-
389+
}
394390

395391
// Keep only four leading jets
396-
ak7_njet = min(PFJets_ak7__, 4);
397-
for (int i = 0; i != ak7_njet; ++i) {
392+
njet_ak7 = min(PFJets_ak7__, 4);
393+
for (int i = 0; i != njet_ak7; ++i) {
398394

399395
p4_ak7.SetPxPyPzE( PFJets__P4__fCoordinates_fX_ak7[i], PFJets__P4__fCoordinates_fY_ak7[i],
400396
PFJets__P4__fCoordinates_fZ_ak7[i], PFJets__P4__fCoordinates_fT_ak7[i]);
401397

402-
ak7_pt[i] = p4_ak7.Pt();
403-
ak7_eta[i] = p4_ak7.Eta();
404-
ak7_phi[i] = p4_ak7.Phi();
405-
ak7_E[i] = p4_ak7.E();
398+
// 4-momentum (corrected!)
399+
jet_pt_ak7[i] = p4_ak7.Pt();
400+
jet_eta_ak7[i] = p4_ak7.Eta();
401+
jet_phi_ak7[i] = p4_ak7.Phi();
402+
jet_E_ak7[i] = p4_ak7.E();
406403

407-
408-
ak7_area[i] = PFJets__area_ak7_[i];
409-
ak7_jes[i] = PFJets__cor_ak7_[i];
404+
// Area and jet energy correction
405+
jet_area_ak7[i] = PFJets__area_ak7_[i];
406+
jet_jes_ak7[i] = PFJets__cor_ak7_[i];
410407

411408
// Matching AK7 jet to AK4
412409
ak7_to_ak4[i] = -1;
413410

414411
// Search AK4 jet with minimum distance to this PFjet
415412
float rMin(999);
416-
for (unsigned int ak4_i = 0; ak4_i != ak4_njet; ++ak4_i) {
413+
for (unsigned int ak4_i = 0; ak4_i != njet; ++ak4_i) {
417414

418-
419415
// Initialize AK4 jet
420-
p4_ak4.SetPtEtaPhiE( ak4_pt[ak4_i], ak4_eta[ak4_i],
421-
ak4_phi[ak4_i], ak4_E[ak4_i]);
416+
p4_ak4.SetPtEtaPhiE( jet_pt[ak4_i], jet_eta[ak4_i],
417+
jet_phi[ak4_i], jet_E[ak4_i]);
418+
422419
// Distance between jets
423420
double deltaR = p4_ak7.DeltaR(p4_ak4);
424421

425-
426422
if (deltaR < rMin) {
427423
rMin = deltaR;
428424
ak7_to_ak4[i] = ak4_i;
429425
}
430426
}
431-
432427
}
433428

434429
// MC jets
@@ -453,7 +448,7 @@ void LocalOpenDataTreeProducer::Loop()
453448
auto trg_list = TriggerNames->GetXaxis()->GetLabels();
454449
for (int itrg = 0; itrg != trg_list->GetSize(); ++itrg ) {
455450

456-
int pass = TriggerDecision_[itrg]; // -1, 0, 1
451+
int pass = TriggerDecision_[itrg]; // -1, 0 or 1
457452
if (pass == -1) {
458453
continue;
459454
}
@@ -471,7 +466,6 @@ void LocalOpenDataTreeProducer::Loop()
471466
event = EvtHdr__mEvent;
472467
lumi = EvtHdr__mLumi;
473468

474-
475469
// MET, SuMET, rho
476470
met = PFMet__et_;
477471
sumet = PFMet__sumEt_;

AnalysisFW/python/LocalProducer/LocalOpenDataTreeProducer.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,14 @@ LocalOpenDataTreeProducer::LocalOpenDataTreeProducer(TTree *tree_ak4, TTree *tre
195195

196196
const std::string treeName = "ProcessedTree";
197197
const int numFiles = 3;
198+
199+
// Here are the input files!
198200
const char *fileNames[numFiles] = { "root://eoscms.cern.ch//store/group/phys_smp/Multijet/13TeV/Data/2016/Ntuples-Data-2016-RunC-v2-part1.root",
199201
"root://eoscms.cern.ch//store/group/phys_smp/Multijet/13TeV/Data/2016/Ntuples-Data-2016-RunC-v2-part2.root",
200202
"root://eoscms.cern.ch//store/group/phys_smp/Multijet/13TeV/Data/2016/Ntuples-Data-2016-RunC-v2-part3.root",
201203
};
202204

205+
// AK4 and AK7 trees
203206
TChain *chain_ak4 = new TChain(("ak4/" + treeName).c_str());
204207
TChain *chain_ak7 = new TChain(("ak7/" + treeName).c_str());
205208

@@ -208,10 +211,12 @@ LocalOpenDataTreeProducer::LocalOpenDataTreeProducer(TTree *tree_ak4, TTree *tre
208211
chain_ak7->Add(fileNames[i]);
209212
}
210213

214+
// Retrieve trigger names
211215
TFile *f = TFile::Open(fileNames[0]);
212216
TDirectory *dir = (TDirectory*)f->Get("ak4");
213217
dir->GetObject("TriggerNames", TriggerNames);
214218

219+
// Process the trees
215220
tree_ak4 = chain_ak4;
216221
tree_ak7 = chain_ak7;
217222
Init(tree_ak4, tree_ak7);
@@ -220,11 +225,7 @@ LocalOpenDataTreeProducer::LocalOpenDataTreeProducer(TTree *tree_ak4, TTree *tre
220225

221226
LocalOpenDataTreeProducer::~LocalOpenDataTreeProducer()
222227
{
223-
if (!fChain_ak4) return;
224-
delete fChain_ak4->GetCurrentFile();
225228

226-
if (!fChain_ak7) return;
227-
delete fChain_ak7->GetCurrentFile();
228229
}
229230

230231
Int_t LocalOpenDataTreeProducer::GetEntry(Long64_t entry)
@@ -277,7 +278,7 @@ void LocalOpenDataTreeProducer::Init(TTree *tree_ak4, TTree *tree_ak7)
277278
fChain_ak4->SetBranchAddress("TriggerDecision_", &TriggerDecision_, &b_events_TriggerDecision_);
278279
fChain_ak4->SetBranchAddress("L1Prescale_", &L1Prescale_, &b_events_L1Prescale_);
279280
fChain_ak4->SetBranchAddress("HLTPrescale_", &HLTPrescale_, &b_events_HLTPrescale_);
280-
/*
281+
/* MC
281282
fChain_ak4->SetBranchAddress("GenJets_", &GenJets__, &b_events_GenJets__);
282283
fChain_ak4->SetBranchAddress("GenJets_.fCoordinates.fX", GenJets__fCoordinates_fX, &b_GenJets__fCoordinates_fX);
283284
fChain_ak4->SetBranchAddress("GenJets_.fCoordinates.fY", GenJets__fCoordinates_fY, &b_GenJets__fCoordinates_fY);
@@ -290,7 +291,7 @@ void LocalOpenDataTreeProducer::Init(TTree *tree_ak4, TTree *tree_ak7)
290291
fChain_ak4->SetBranchAddress("PFJets_.P4_.fCoordinates.fZ", PFJets__P4__fCoordinates_fZ, &b_PFJets__P4__fCoordinates_fZ);
291292
fChain_ak4->SetBranchAddress("PFJets_.P4_.fCoordinates.fT", PFJets__P4__fCoordinates_fT, &b_PFJets__P4__fCoordinates_fT);
292293
/*
293-
// Index or four-vector??
294+
// MC : Index or four-vector??
294295
fChain_ak4->SetBranchAddress("PFJets_.genP4_.fCoordinates.fX", PFJets__genP4__fCoordinates_fX, &b_PFJets__genP4__fCoordinates_fX);
295296
fChain_ak4->SetBranchAddress("PFJets_.genP4_.fCoordinates.fY", PFJets__genP4__fCoordinates_fY, &b_PFJets__genP4__fCoordinates_fY);
296297
fChain_ak4->SetBranchAddress("PFJets_.genP4_.fCoordinates.fZ", PFJets__genP4__fCoordinates_fZ, &b_PFJets__genP4__fCoordinates_fZ);

0 commit comments

Comments
 (0)