14 |
|
|
15 |
|
showLegend = false; |
16 |
|
logY = true; |
17 |
+ |
addTrackJets = true; |
18 |
+ |
addHitDetInfo = true; |
19 |
+ |
diTrackMass = true; |
20 |
+ |
addTrigger = true; |
21 |
|
addTrackJets = false; |
22 |
|
addEventInfo = false; |
23 |
|
addTower = false; |
141 |
|
|
142 |
|
} |
143 |
|
|
144 |
< |
if( addEventInfo || addTrackJets || addTower ) { |
144 |
> |
if( addEventInfo || addTrackJets || addTower || addTrackJets || addHitDetInfo || diTrackMass || addTrigger) { |
145 |
|
|
146 |
|
if(verbose) cout<<"add friend tree with additional variables..."<<endl; |
147 |
|
|
170 |
|
TTree *friendTree = new TTree(friendTreeName.c_str(),friendTreeName.c_str()); |
171 |
|
fwlite::ChainEvent ev(fileNames); |
172 |
|
int _event, _run, _lumi; |
169 |
– |
int nJetsKT; |
170 |
– |
TrackJetKT = new float [100]; |
173 |
|
|
174 |
|
//tower data |
175 |
|
const int kMAX = 10000; |
185 |
|
towid_eta = new int[ kMAX ]; |
186 |
|
towid = new int[ kMAX ]; |
187 |
|
|
188 |
< |
|
188 |
> |
int nJetsKT; |
189 |
> |
TrackJetKT = new float [100]; |
190 |
> |
int nTracks; |
191 |
> |
TrackDetE = new float [3000]; |
192 |
> |
TrackDetEECAL = new float [3000]; |
193 |
> |
float DiTrackMass; |
194 |
> |
bool Trigger; |
195 |
> |
bool Trigger1; |
196 |
> |
|
197 |
> |
|
198 |
> |
|
199 |
|
if( addEventInfo ) { |
200 |
|
|
201 |
|
|
230 |
|
|
231 |
|
} |
232 |
|
|
233 |
+ |
if( addTrackJets){ |
234 |
+ |
friendTree->Branch("nJetsKT", &nJetsKT, "nJetsKT/I"); |
235 |
+ |
friendTree->Branch("TrackJetKT", TrackJetKT, "TrackJetKT[nJetsKT]/F"); |
236 |
+ |
} |
237 |
+ |
|
238 |
+ |
if( addHitDetInfo){ |
239 |
+ |
friendTree->Branch("nTracks", &nTracks, "nTracks/I"); |
240 |
+ |
friendTree->Branch("TrackDetE", TrackDetE, "TrackDetE[nTracks]/F"); |
241 |
+ |
friendTree->Branch("TrackDetEECAL", TrackDetEECAL, "TrackDetEECAL[nTracks]/F"); |
242 |
+ |
} |
243 |
+ |
if(diTrackMass) friendTree->Branch("DiTrackMass", &DiTrackMass, "DiTrackMass/F"); |
244 |
+ |
if(addTrigger) { |
245 |
+ |
friendTree->Branch("Trigger", &Trigger, "Trigger/O"); |
246 |
+ |
friendTree->Branch("Trigger1", &Trigger1, "Trigger1/O"); |
247 |
+ |
} |
248 |
|
|
249 |
|
int tenth = ev.size() / 10; |
250 |
|
int eventNum =0; |
276 |
|
|
277 |
|
} |
278 |
|
|
279 |
< |
if( addTrackJets ) { |
280 |
< |
|
281 |
< |
fwlite::Handle<reco::CaloJetCollection> jets; |
282 |
< |
jets.getByLabel(ev, "ak5CaloJets"); |
283 |
< |
|
284 |
< |
fwlite::Handle<reco::TrackCollection> tracks; |
285 |
< |
tracks.getByLabel(ev, "generalTracks"); |
286 |
< |
|
287 |
< |
if (!jets.isValid()) |
288 |
< |
continue; |
289 |
< |
if (!tracks.isValid()) |
290 |
< |
continue; |
291 |
< |
double trackSum; |
292 |
< |
nJetsKT = 0; |
293 |
< |
for (reco::CaloJetCollection::const_iterator jet = jets->begin(); jet |
294 |
< |
!=jets->end(); jet++) { |
295 |
< |
trackSum = 0; |
279 |
> |
if( addTrackJets) |
280 |
> |
{ |
281 |
> |
fwlite::Handle<reco::CaloJetCollection> jets; |
282 |
> |
jets.getByLabel(ev, "antikt5CaloJets"); |
283 |
> |
|
284 |
> |
fwlite::Handle<reco::TrackCollection> tracks; |
285 |
> |
tracks.getByLabel(ev, "generalTracks"); |
286 |
> |
|
287 |
> |
if (!jets.isValid()) |
288 |
> |
continue; |
289 |
> |
if (!tracks.isValid()) |
290 |
> |
continue; |
291 |
> |
double trackSum; |
292 |
> |
nJetsKT = 0; |
293 |
> |
for (reco::CaloJetCollection::const_iterator jet = jets->begin(); jet |
294 |
> |
!=jets->end(); jet++) { |
295 |
> |
trackSum = 0; |
296 |
> |
for (reco::TrackCollection::const_iterator track = tracks->begin(); track |
297 |
> |
!=tracks->end(); track++) { |
298 |
> |
if (deltaR(jet->eta(), jet->phi(), track->eta(), track->phi()) |
299 |
> |
< 0.5) |
300 |
> |
trackSum += track->pt(); |
301 |
> |
} |
302 |
> |
TrackJetKT[nJetsKT] = trackSum; |
303 |
> |
nJetsKT++; |
304 |
> |
} |
305 |
> |
} |
306 |
> |
|
307 |
> |
if(addHitDetInfo) |
308 |
> |
{ |
309 |
> |
fwlite::Handle<reco::TrackCollection> tracks; |
310 |
> |
tracks.getByLabel(ev, "generalTracks"); |
311 |
> |
|
312 |
> |
nTracks = 0; |
313 |
> |
|
314 |
> |
if (!tracks.isValid()) |
315 |
> |
continue; |
316 |
> |
|
317 |
|
for (reco::TrackCollection::const_iterator track = tracks->begin(); track |
318 |
|
!=tracks->end(); track++) { |
319 |
< |
if (deltaR(jet->eta(), jet->phi(), track->eta(), track->phi()) |
320 |
< |
< 0.5) |
321 |
< |
trackSum += track->pt(); |
319 |
> |
fwlite::Handle<vector <reco::CaloCluster> > CaloClusters; |
320 |
> |
CaloClusters.getByLabel(ev, "hybridSuperClusters"); //add instance |
321 |
> |
//CaloClusters.getByLabel(ev, "multi5x5BasicClusters"); |
322 |
> |
|
323 |
> |
//fwlite::Handle<vector <CaloTower> > CaloTowers; |
324 |
> |
//CaloTowers.getByLabel(ev, "towerMaker"); |
325 |
> |
|
326 |
> |
double DR = 100; |
327 |
> |
double DetE = 0; |
328 |
> |
double DetEECAL = 0; |
329 |
> |
|
330 |
> |
if (CaloClusters.isValid()){ //always fails |
331 |
> |
//if (CaloTowers.isValid()){ |
332 |
> |
for (vector<reco::CaloCluster>::const_iterator CaloCluster = CaloClusters->begin(); CaloCluster |
333 |
> |
!=CaloClusters->end(); CaloCluster++) { |
334 |
> |
// int DetectorId = track->outerDetId(); //unfortuately only the Tracker DetId... |
335 |
> |
// /DetId *dId = new DetId(DetectorId); |
336 |
> |
//cout<<dId->det()<<endl; |
337 |
> |
|
338 |
> |
|
339 |
> |
if(deltaR( CaloCluster->eta(), CaloCluster->phi(), track->outerEta(), track->phi()) < DR) |
340 |
> |
{ |
341 |
> |
DetE = CaloCluster->energy(); |
342 |
> |
if(CaloCluster->caloID().detector(reco::CaloID::DET_ECAL_BARREL) ||CaloCluster->caloID().detector(reco::CaloID::DET_ECAL_ENDCAP)) |
343 |
> |
DetEECAL = CaloCluster->energy(); |
344 |
> |
} |
345 |
> |
} |
346 |
> |
} |
347 |
> |
|
348 |
> |
TrackDetE[nTracks] = DetE; |
349 |
> |
TrackDetEECAL[nTracks] = DetEECAL; |
350 |
> |
|
351 |
> |
|
352 |
> |
nTracks++; |
353 |
> |
if(nTracks > 2990) cout<<"To many Tracks!!!!!!!!!"<<endl; |
354 |
|
} |
275 |
– |
TrackJetKT[nJetsKT] = trackSum; |
276 |
– |
nJetsKT++; |
355 |
|
} |
356 |
< |
} |
357 |
< |
if( addTower) { |
356 |
> |
|
357 |
> |
if(diTrackMass) |
358 |
> |
{ |
359 |
> |
fwlite::Handle<reco::TrackCollection> tracks; |
360 |
> |
tracks.getByLabel(ev, "generalTracks"); |
361 |
> |
|
362 |
> |
DiTrackMass = 0; |
363 |
> |
|
364 |
> |
if (!tracks.isValid()) |
365 |
> |
continue; |
366 |
> |
|
367 |
> |
for (reco::TrackCollection::const_iterator track = tracks->begin(); track |
368 |
> |
!=tracks->end(); track++) { |
369 |
> |
if(!(track->d0() < 2 && track->dz() < 10 && track->numberOfValidHits() > 7)) continue; |
370 |
> |
for (reco::TrackCollection::const_iterator track1 = tracks->begin(); track1 |
371 |
> |
!=tracks->end(); track1++) { |
372 |
> |
if(!(track1->d0() < 2 && track1->dz() < 10 && track1->numberOfValidHits() > 7) || track1 == track) continue; |
373 |
> |
|
374 |
> |
TLorentzVector tr1(track->px(), track->py(), track->pz(), track->p() ); |
375 |
> |
TLorentzVector tr2(track1->px(), track1->py(), track1->pz(), track1->p() ); |
376 |
> |
|
377 |
> |
double result = (tr1 + tr2).Mag(); |
378 |
> |
|
379 |
> |
if(result > DiTrackMass) DiTrackMass = result; |
380 |
> |
|
381 |
> |
} |
382 |
> |
} |
383 |
> |
|
384 |
> |
} |
385 |
> |
|
386 |
> |
if(addTrigger) |
387 |
> |
{ |
388 |
> |
|
389 |
> |
Trigger = false; |
390 |
> |
Trigger1 = false; |
391 |
> |
|
392 |
> |
fwlite::Handle< L1GlobalTriggerReadoutRecord> gtReadoutRecord; |
393 |
> |
gtReadoutRecord.getByLabel(ev, "gtDigis"); |
394 |
> |
//edm::Handle< L1GlobalTriggerReadoutRecord > gtReadoutRecord; |
395 |
> |
//event.getByLabel( edm::InputTag("gtDigis"), gtReadoutRecord); |
396 |
> |
|
397 |
> |
if(!gtReadoutRecord.isValid()) continue; |
398 |
> |
|
399 |
> |
|
400 |
> |
const TechnicalTriggerWord& technicalTriggerWordBeforeMask = gtReadoutRecord->technicalTriggerWord(); |
401 |
> |
|
402 |
> |
|
403 |
> |
//std::vector<bool>& technicalTriggerWordBeforeMask = gtReadoutRecord->technicalTriggerWord(); |
404 |
> |
|
405 |
> |
bool techTrigger0 = technicalTriggerWordBeforeMask.at(0); |
406 |
> |
bool techTrigger40 = technicalTriggerWordBeforeMask.at(40); |
407 |
> |
bool techTrigger41 = technicalTriggerWordBeforeMask.at(41); |
408 |
> |
bool techTrigger36 = technicalTriggerWordBeforeMask.at(36); |
409 |
> |
bool techTrigger37 = technicalTriggerWordBeforeMask.at(37); |
410 |
> |
bool techTrigger38 = technicalTriggerWordBeforeMask.at(38); |
411 |
> |
bool techTrigger39 = technicalTriggerWordBeforeMask.at(39); |
412 |
> |
|
413 |
> |
if(techTrigger0 && (techTrigger40 || techTrigger41)) Trigger = true; |
414 |
> |
if(Trigger && !techTrigger36 && !techTrigger37 && !techTrigger38 && !techTrigger39) Trigger1 = true; |
415 |
> |
} |
416 |
|
|
417 |
+ |
if( addTower) { |
418 |
|
fwlite::Handle<CaloTowerCollection> towers; |
419 |
|
towers.getByLabel(ev, "towerMaker"); |
420 |
< |
|
420 |
> |
|
421 |
|
int jtow = 0; |
422 |
|
NobjTowCal=towers->size(); |
423 |
|
for(CaloTowerCollection::const_iterator tow = towers->begin(); |
433 |
|
towid_eta[jtow] = tow->id().ieta(); |
434 |
|
towid [jtow] = tow->id().rawId(); |
435 |
|
} |
299 |
– |
|
300 |
– |
|
436 |
|
} |
437 |
|
friendTree->Fill(); |
438 |
< |
|
438 |
> |
|
439 |
|
if( eventNum != 0 && eventNum%tenth == 0) cout<<"Processed "<<eventNum <<" of "<<ev.size()<<" events. "<<endl; |
440 |
< |
|
440 |
> |
|
441 |
|
} |
442 |
|
f->cd(); |
443 |
|
friendTree->Write(); |
445 |
|
f->Close(); |
446 |
|
((TChain*) this->At(currChain))->AddFriend(friendTreeName.c_str(), |
447 |
|
friendFileName.c_str()); |
448 |
< |
|
314 |
< |
|
315 |
< |
|
448 |
> |
|
449 |
|
} |
450 |
|
|
451 |
|
|