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 |
< |
|
147 |
> |
|
148 |
|
//make file for tree friends (adding additional, computed branches) |
149 |
|
string friendFileName("/scratch/hh/current/cms/user/"); |
150 |
|
friendFileName += gSystem->GetUserInfo()->fUser; |
155 |
|
if( recreateTree ) fileOpt = "recreate"; |
156 |
|
|
157 |
|
TFile *f = new TFile(friendFileName.c_str(),fileOpt.c_str()); |
158 |
< |
|
158 |
> |
|
159 |
|
if( f->IsZombie() ) return -1; |
160 |
< |
|
160 |
> |
|
161 |
|
string friendTreeName("friendTree"); |
162 |
|
//char number = currChain; |
163 |
|
//friendTreeName += number; |
166 |
|
if(! f->FindKey(friendTreeName.c_str())) { |
167 |
|
if(verbose) cout<<"calculating additional variables..."<<endl; |
168 |
|
|
165 |
– |
|
169 |
|
TTree *friendTree = new TTree(friendTreeName.c_str(),friendTreeName.c_str()); |
170 |
|
fwlite::ChainEvent ev(fileNames); |
171 |
|
int _event, _run, _lumi; |
169 |
– |
int nJetsKT; |
170 |
– |
TrackJetKT = new float [100]; |
172 |
|
|
173 |
|
//tower data |
174 |
|
const int kMAX = 10000; |
184 |
|
towid_eta = new int[ kMAX ]; |
185 |
|
towid = new int[ kMAX ]; |
186 |
|
|
187 |
< |
|
187 |
> |
int nJetsKT; |
188 |
> |
TrackJetKT = new float [100]; |
189 |
> |
int nTracks; |
190 |
> |
TrackDetE = new float [3000]; |
191 |
> |
TrackDetEECAL = new float [3000]; |
192 |
> |
float DiTrackMass; |
193 |
> |
bool Trigger; |
194 |
> |
bool Trigger1; |
195 |
> |
|
196 |
> |
|
197 |
> |
|
198 |
|
if( addEventInfo ) { |
199 |
|
|
200 |
|
|
229 |
|
|
230 |
|
} |
231 |
|
|
232 |
+ |
if( addTrackJets){ |
233 |
+ |
friendTree->Branch("nJetsKT", &nJetsKT, "nJetsKT/I"); |
234 |
+ |
friendTree->Branch("TrackJetKT", TrackJetKT, "TrackJetKT[nJetsKT]/F"); |
235 |
+ |
} |
236 |
+ |
|
237 |
+ |
if( addHitDetInfo){ |
238 |
+ |
friendTree->Branch("nTracks", &nTracks, "nTracks/I"); |
239 |
+ |
friendTree->Branch("TrackDetE", TrackDetE, "TrackDetE[nTracks]/F"); |
240 |
+ |
friendTree->Branch("TrackDetEECAL", TrackDetEECAL, "TrackDetEECAL[nTracks]/F"); |
241 |
+ |
} |
242 |
+ |
if(diTrackMass) friendTree->Branch("DiTrackMass", &DiTrackMass, "DiTrackMass/F"); |
243 |
+ |
if(addTrigger) { |
244 |
+ |
friendTree->Branch("Trigger", &Trigger, "Trigger/O"); |
245 |
+ |
friendTree->Branch("Trigger1", &Trigger1, "Trigger1/O"); |
246 |
+ |
} |
247 |
|
|
248 |
|
int tenth = ev.size() / 10; |
249 |
|
int eventNum =0; |
224 |
– |
for (ev.toBegin(); !ev.atEnd(); ++ev, ++eventNum) { |
250 |
|
|
251 |
+ |
for (ev.toBegin(); !ev.atEnd(); ++ev, ++eventNum) { |
252 |
|
|
253 |
|
if( addEventInfo ) { |
254 |
|
|
262 |
|
// hTriggerResults.getByLabel(ev, "TriggerResults","","TEST"); |
263 |
|
// fwlite::TriggerNames const& triggerNames = ev.triggerNames(*hTriggerResults); |
264 |
|
|
239 |
– |
|
265 |
|
// // std::vector<std::string> const& names = triggerNames.triggerNames(); |
266 |
|
// for (unsigned i = 0; i < triggerNames.size(); ++i) { |
267 |
|
// std::cout << i << " " << triggerNames.triggerName(i) << std::endl; |
268 |
|
// } |
269 |
|
} |
245 |
– |
|
270 |
|
_event = ev.id().event(); |
271 |
|
_run = ev.id().run(); |
272 |
|
_lumi = ev.luminosityBlock(); |
273 |
|
|
274 |
|
} |
275 |
|
|
276 |
< |
if( addTrackJets ) { |
277 |
< |
|
278 |
< |
fwlite::Handle<reco::CaloJetCollection> jets; |
279 |
< |
jets.getByLabel(ev, "ak5CaloJets"); |
280 |
< |
|
281 |
< |
fwlite::Handle<reco::TrackCollection> tracks; |
282 |
< |
tracks.getByLabel(ev, "generalTracks"); |
276 |
> |
if( addTrackJets) |
277 |
> |
{ |
278 |
> |
fwlite::Handle<reco::CaloJetCollection> jets; |
279 |
> |
jets.getByLabel(ev, "ak5CaloJets"); |
280 |
> |
|
281 |
> |
fwlite::Handle<reco::TrackCollection> tracks; |
282 |
> |
tracks.getByLabel(ev, "generalTracks"); |
283 |
> |
|
284 |
> |
|
285 |
> |
if (jets.isValid() && tracks.isValid()){ |
286 |
> |
double trackSum; |
287 |
> |
nJetsKT = 0; |
288 |
> |
for (reco::CaloJetCollection::const_iterator jet = jets->begin(); jet |
289 |
> |
!=jets->end(); jet++) { |
290 |
> |
trackSum = 0; |
291 |
> |
for (reco::TrackCollection::const_iterator track = tracks->begin(); track |
292 |
> |
!=tracks->end(); track++) { |
293 |
> |
if (deltaR(jet->eta(), jet->phi(), track->eta(), track->phi()) |
294 |
> |
< 0.5) |
295 |
> |
trackSum += track->pt(); |
296 |
> |
} |
297 |
> |
TrackJetKT[nJetsKT] = trackSum; |
298 |
> |
nJetsKT++; |
299 |
> |
} |
300 |
> |
} |
301 |
> |
} |
302 |
> |
|
303 |
|
|
304 |
< |
if (!jets.isValid()) |
305 |
< |
continue; |
306 |
< |
if (!tracks.isValid()) |
307 |
< |
continue; |
308 |
< |
double trackSum; |
309 |
< |
nJetsKT = 0; |
310 |
< |
for (reco::CaloJetCollection::const_iterator jet = jets->begin(); jet |
311 |
< |
!=jets->end(); jet++) { |
312 |
< |
trackSum = 0; |
313 |
< |
for (reco::TrackCollection::const_iterator track = tracks->begin(); track |
314 |
< |
!=tracks->end(); track++) { |
315 |
< |
if (deltaR(jet->eta(), jet->phi(), track->eta(), track->phi()) |
316 |
< |
< 0.5) |
317 |
< |
trackSum += track->pt(); |
304 |
> |
if(addHitDetInfo) |
305 |
> |
{ |
306 |
> |
fwlite::Handle<reco::TrackCollection> tracks; |
307 |
> |
tracks.getByLabel(ev, "generalTracks"); |
308 |
> |
|
309 |
> |
nTracks = 0; |
310 |
> |
|
311 |
> |
if (tracks.isValid()){ |
312 |
> |
|
313 |
> |
for (reco::TrackCollection::const_iterator track = tracks->begin(); track |
314 |
> |
!=tracks->end(); track++) { |
315 |
> |
fwlite::Handle<vector <reco::CaloCluster> > CaloClusters; |
316 |
> |
CaloClusters.getByLabel(ev, "hybridSuperClusters","hybridBarrelBasicClusters");//::hybridBarrelBasicClusters"); //add instance |
317 |
> |
//CaloClusters.getByLabel(ev, "multi5x5BasicClusters"); |
318 |
> |
|
319 |
> |
//fwlite::Handle<vector <CaloTower> > CaloTowers; |
320 |
> |
//CaloTowers.getByLabel(ev, "towerMaker"); |
321 |
> |
|
322 |
> |
double DR = 100; |
323 |
> |
double DetE = 0; |
324 |
> |
double DetEECAL = 0; |
325 |
> |
|
326 |
> |
if (CaloClusters.isValid()){ |
327 |
> |
//if (CaloTowers.isValid()){ |
328 |
> |
for (vector<reco::CaloCluster>::const_iterator CaloCluster = CaloClusters->begin(); CaloCluster |
329 |
> |
!=CaloClusters->end(); CaloCluster++) { |
330 |
> |
// int DetectorId = track->outerDetId(); //unfortuately only the Tracker DetId... |
331 |
> |
// /DetId *dId = new DetId(DetectorId); |
332 |
> |
//cout<<dId->det()<<endl; |
333 |
> |
|
334 |
> |
|
335 |
> |
if(deltaR( CaloCluster->eta(), CaloCluster->phi(), track->outerEta(), track->phi()) < DR) |
336 |
> |
{ |
337 |
> |
DR = deltaR( CaloCluster->eta(), CaloCluster->phi(), track->outerEta(), track->phi()); |
338 |
> |
DetE = CaloCluster->energy(); |
339 |
> |
if(CaloCluster->caloID().detector(reco::CaloID::DET_ECAL_BARREL) ||CaloCluster->caloID().detector(reco::CaloID::DET_ECAL_ENDCAP)) |
340 |
> |
DetEECAL = CaloCluster->energy(); |
341 |
> |
} |
342 |
> |
} |
343 |
> |
} |
344 |
> |
|
345 |
> |
TrackDetE[nTracks] = DetE; |
346 |
> |
TrackDetEECAL[nTracks] = DetEECAL; |
347 |
> |
|
348 |
> |
nTracks++; |
349 |
> |
if(nTracks > 2990) cout<<"To many Tracks!!!!!!!!!"<<endl; |
350 |
> |
} |
351 |
> |
} |
352 |
> |
} |
353 |
> |
|
354 |
> |
if(diTrackMass) |
355 |
> |
{ |
356 |
> |
fwlite::Handle<reco::TrackCollection> tracks; |
357 |
> |
tracks.getByLabel(ev, "generalTracks"); |
358 |
> |
|
359 |
> |
DiTrackMass = 0; |
360 |
> |
|
361 |
> |
if (tracks.isValid()){ |
362 |
> |
|
363 |
> |
for (reco::TrackCollection::const_iterator track = tracks->begin(); track |
364 |
> |
!=tracks->end(); track++) { |
365 |
> |
if(!(track->d0() < 2 && track->dz() < 10 && track->numberOfValidHits() > 7)) continue; |
366 |
> |
for (reco::TrackCollection::const_iterator track1 = tracks->begin(); track1 |
367 |
> |
!=tracks->end(); track1++) { |
368 |
> |
if(!(track1->d0() < 2 && track1->dz() < 10 && track1->numberOfValidHits() > 7) || track1 == track) continue; |
369 |
> |
|
370 |
> |
TLorentzVector tr1(track->px(), track->py(), track->pz(), track->p() ); |
371 |
> |
TLorentzVector tr2(track1->px(), track1->py(), track1->pz(), track1->p() ); |
372 |
> |
|
373 |
> |
double result = (tr1 + tr2).Mag(); |
374 |
> |
|
375 |
> |
if(result > DiTrackMass) DiTrackMass = result; |
376 |
> |
|
377 |
> |
} |
378 |
> |
} |
379 |
> |
} |
380 |
> |
|
381 |
> |
} |
382 |
> |
|
383 |
> |
if(addTrigger) |
384 |
> |
{ |
385 |
> |
|
386 |
> |
Trigger = false; |
387 |
> |
Trigger1 = false; |
388 |
> |
|
389 |
> |
fwlite::Handle< L1GlobalTriggerReadoutRecord> gtReadoutRecord; |
390 |
> |
gtReadoutRecord.getByLabel(ev, "gtDigis"); |
391 |
> |
//edm::Handle< L1GlobalTriggerReadoutRecord > gtReadoutRecord; |
392 |
> |
//event.getByLabel( edm::InputTag("gtDigis"), gtReadoutRecord); |
393 |
> |
|
394 |
> |
if(gtReadoutRecord.isValid()){ |
395 |
> |
|
396 |
> |
|
397 |
> |
const TechnicalTriggerWord& technicalTriggerWordBeforeMask = gtReadoutRecord->technicalTriggerWord(); |
398 |
> |
|
399 |
> |
|
400 |
> |
//std::vector<bool>& technicalTriggerWordBeforeMask = gtReadoutRecord->technicalTriggerWord(); |
401 |
> |
|
402 |
> |
bool techTrigger0 = technicalTriggerWordBeforeMask.at(0); |
403 |
> |
bool techTrigger40 = technicalTriggerWordBeforeMask.at(40); |
404 |
> |
bool techTrigger41 = technicalTriggerWordBeforeMask.at(41); |
405 |
> |
bool techTrigger36 = technicalTriggerWordBeforeMask.at(36); |
406 |
> |
bool techTrigger37 = technicalTriggerWordBeforeMask.at(37); |
407 |
> |
bool techTrigger38 = technicalTriggerWordBeforeMask.at(38); |
408 |
> |
bool techTrigger39 = technicalTriggerWordBeforeMask.at(39); |
409 |
> |
|
410 |
> |
if(techTrigger0 && (techTrigger40 || techTrigger41)) Trigger = true; |
411 |
> |
if(Trigger && !techTrigger36 && !techTrigger37 && !techTrigger38 && !techTrigger39) Trigger1 = true; |
412 |
|
} |
275 |
– |
TrackJetKT[nJetsKT] = trackSum; |
276 |
– |
nJetsKT++; |
413 |
|
} |
278 |
– |
} |
279 |
– |
if( addTower) { |
414 |
|
|
415 |
+ |
if( addTower) { |
416 |
|
fwlite::Handle<CaloTowerCollection> towers; |
417 |
|
towers.getByLabel(ev, "towerMaker"); |
418 |
< |
|
418 |
> |
|
419 |
|
int jtow = 0; |
420 |
|
NobjTowCal=towers->size(); |
421 |
|
for(CaloTowerCollection::const_iterator tow = towers->begin(); |
431 |
|
towid_eta[jtow] = tow->id().ieta(); |
432 |
|
towid [jtow] = tow->id().rawId(); |
433 |
|
} |
299 |
– |
|
300 |
– |
|
434 |
|
} |
435 |
|
friendTree->Fill(); |
436 |
< |
|
436 |
> |
|
437 |
|
if( eventNum != 0 && eventNum%tenth == 0) cout<<"Processed "<<eventNum <<" of "<<ev.size()<<" events. "<<endl; |
438 |
< |
|
438 |
> |
|
439 |
|
} |
440 |
|
f->cd(); |
441 |
|
friendTree->Write(); |
443 |
|
f->Close(); |
444 |
|
((TChain*) this->At(currChain))->AddFriend(friendTreeName.c_str(), |
445 |
|
friendFileName.c_str()); |
446 |
< |
|
314 |
< |
|
315 |
< |
|
446 |
> |
|
447 |
|
} |
448 |
|
|
449 |
|
|
1245 |
|
|
1246 |
|
} |
1247 |
|
//------------------------------------------------------------------ |
1248 |
+ |
|
1249 |
+ |
|
1250 |
+ |
//Eta-Phi to Det-komponent matching |
1251 |
+ |
|
1252 |
+ |
int PlotTool::getEtaBin(double eta){ |
1253 |
+ |
for(int i=-41;i<42;i++){ |
1254 |
+ |
double low = getEtaFromBin(i,true); |
1255 |
+ |
double high = getEtaFromBin(i,false); |
1256 |
+ |
if(eta >= low && eta <= high) return i; |
1257 |
+ |
} |
1258 |
+ |
cout<<"eta-bin not found"<<endl; |
1259 |
+ |
return 0; |
1260 |
+ |
} |
1261 |
+ |
|
1262 |
+ |
double PlotTool::getEtaFromBin(int etaBin, bool lowerEdge){ |
1263 |
+ |
// return eta bin - eta edge mappting |
1264 |
+ |
switch(etaBin){ |
1265 |
+ |
case -41: return (lowerEdge ? -5.191 : -4.889); break; |
1266 |
+ |
case -40: return (lowerEdge ? -4.889 : -4.716); break; |
1267 |
+ |
case -39: return (lowerEdge ? -4.716 : -4.538); break; |
1268 |
+ |
case -38: return (lowerEdge ? -4.538 : -4.363); break; |
1269 |
+ |
case -37: return (lowerEdge ? -4.363 : -4.191); break; |
1270 |
+ |
case -36: return (lowerEdge ? -4.191 : -4.013); break; |
1271 |
+ |
case -35: return (lowerEdge ? -4.013 : -3.839); break; |
1272 |
+ |
case -34: return (lowerEdge ? -3.839 : -3.664); break; |
1273 |
+ |
case -33: return (lowerEdge ? -3.664 : -3.489); break; |
1274 |
+ |
case -32: return (lowerEdge ? -3.489 : -3.314); break; |
1275 |
+ |
case -31: return (lowerEdge ? -3.314 : -3.139); break; |
1276 |
+ |
case -30: return (lowerEdge ? -3.139 : -2.964); break; |
1277 |
+ |
case -29: return (lowerEdge ? -2.964 : -2.853); break; |
1278 |
+ |
case -28: return (lowerEdge ? -2.853 : -2.65); break; |
1279 |
+ |
case -27: return (lowerEdge ? -2.65 : -2.5); break; |
1280 |
+ |
case -26: return (lowerEdge ? -2.5 : -2.322); break; |
1281 |
+ |
case -25: return (lowerEdge ? -2.322 : -2.172); break; |
1282 |
+ |
case -24: return (lowerEdge ? -2.172 : -2.043); break; |
1283 |
+ |
case -23: return (lowerEdge ? -2.043 : -1.93); break; |
1284 |
+ |
case -22: return (lowerEdge ? -1.93 : -1.83); break; |
1285 |
+ |
case -21: return (lowerEdge ? -1.83 : -1.74); break; |
1286 |
+ |
case -20: return (lowerEdge ? -1.74 : -1.653); break; |
1287 |
+ |
case -19: return (lowerEdge ? -1.653 : -1.566); break; |
1288 |
+ |
case -18: return (lowerEdge ? -1.566 : -1.479); break; |
1289 |
+ |
case -17: return (lowerEdge ? -1.479 : -1.392); break; |
1290 |
+ |
case -16: return (lowerEdge ? -1.392 : -1.305); break; |
1291 |
+ |
case -15: return (lowerEdge ? -1.305 : -1.218); break; |
1292 |
+ |
case -14: return (lowerEdge ? -1.218 : -1.131); break; |
1293 |
+ |
case -13: return (lowerEdge ? -1.131 : -1.044); break; |
1294 |
+ |
case -12: return (lowerEdge ? -1.044 : -0.957); break; |
1295 |
+ |
case -11: return (lowerEdge ? -0.957 : -0.879); break; |
1296 |
+ |
case -10: return (lowerEdge ? -0.879 : -0.783); break; |
1297 |
+ |
case -9: return (lowerEdge ? -0.783 : -0.696); break; |
1298 |
+ |
case -8: return (lowerEdge ? -0.696 : -0.609); break; |
1299 |
+ |
case -7: return (lowerEdge ? -0.609 : -0.522); break; |
1300 |
+ |
case -6: return (lowerEdge ? -0.522 : -0.435); break; |
1301 |
+ |
case -5: return (lowerEdge ? -0.435 : -0.348); break; |
1302 |
+ |
case -4: return (lowerEdge ? -0.348 : -0.261); break; |
1303 |
+ |
case -3: return (lowerEdge ? -0.261 : -0.174); break; |
1304 |
+ |
case -2: return (lowerEdge ? -0.174 : -0.087); break; |
1305 |
+ |
case -1: return (lowerEdge ? -0.087 : 0); break; |
1306 |
+ |
case +1: return (lowerEdge ? 0 : 0.087); break; |
1307 |
+ |
case +2: return (lowerEdge ? 0.087 : 0.174); break; |
1308 |
+ |
case +3: return (lowerEdge ? 0.174 : 0.261); break; |
1309 |
+ |
case +4: return (lowerEdge ? 0.261 : 0.348); break; |
1310 |
+ |
case +5: return (lowerEdge ? 0.348 : 0.435); break; |
1311 |
+ |
case +6: return (lowerEdge ? 0.435 : 0.522); break; |
1312 |
+ |
case +7: return (lowerEdge ? 0.522 : 0.609); break; |
1313 |
+ |
case +8: return (lowerEdge ? 0.609 : 0.696); break; |
1314 |
+ |
case +9: return (lowerEdge ? 0.696 : 0.783); break; |
1315 |
+ |
case +10: return (lowerEdge ? 0.783 : 0.879); break; |
1316 |
+ |
case +11: return (lowerEdge ? 0.879 : 0.957); break; |
1317 |
+ |
case +12: return (lowerEdge ? 0.957 : 1.044); break; |
1318 |
+ |
case +13: return (lowerEdge ? 1.044 : 1.131); break; |
1319 |
+ |
case +14: return (lowerEdge ? 1.131 : 1.218); break; |
1320 |
+ |
case +15: return (lowerEdge ? 1.218 : 1.305); break; |
1321 |
+ |
case +16: return (lowerEdge ? 1.305 : 1.392); break; |
1322 |
+ |
case +17: return (lowerEdge ? 1.392 : 1.479); break; |
1323 |
+ |
case +18: return (lowerEdge ? 1.479 : 1.566); break; |
1324 |
+ |
case +19: return (lowerEdge ? 1.566 : 1.653); break; |
1325 |
+ |
case +20: return (lowerEdge ? 1.653 : 1.74); break; |
1326 |
+ |
case +21: return (lowerEdge ? 1.74 : 1.83); break; |
1327 |
+ |
case +22: return (lowerEdge ? 1.83 : 1.93); break; |
1328 |
+ |
case +23: return (lowerEdge ? 1.93 : 2.043); break; |
1329 |
+ |
case +24: return (lowerEdge ? 2.043 : 2.172); break; |
1330 |
+ |
case +25: return (lowerEdge ? 2.172 : 2.322); break; |
1331 |
+ |
case +26: return (lowerEdge ? 2.322 : 2.5); break; |
1332 |
+ |
case +27: return (lowerEdge ? 2.5 : 2.65); break; |
1333 |
+ |
case +28: return (lowerEdge ? 2.65 : 2.853); break; |
1334 |
+ |
case +29: return (lowerEdge ? 2.853 : 2.964); break; |
1335 |
+ |
case +30: return (lowerEdge ? 2.964 : 3.139); break; |
1336 |
+ |
case +31: return (lowerEdge ? 3.139 : 3.314); break; |
1337 |
+ |
case +32: return (lowerEdge ? 3.314 : 3.489); break; |
1338 |
+ |
case +33: return (lowerEdge ? 3.489 : 3.664); break; |
1339 |
+ |
case +34: return (lowerEdge ? 3.664 : 3.839); break; |
1340 |
+ |
case +35: return (lowerEdge ? 3.839 : 4.013); break; |
1341 |
+ |
case +36: return (lowerEdge ? 4.013 : 4.191); break; |
1342 |
+ |
case +37: return (lowerEdge ? 4.191 : 4.363); break; |
1343 |
+ |
case +38: return (lowerEdge ? 4.363 : 4.538); break; |
1344 |
+ |
case +39: return (lowerEdge ? 4.538 : 4.716); break; |
1345 |
+ |
case +40: return (lowerEdge ? 4.716 : 4.889); break; |
1346 |
+ |
case +41: return (lowerEdge ? 4.889 : 5.191); break; |
1347 |
+ |
//something went wrong; |
1348 |
+ |
default : return -1; break; |
1349 |
+ |
} |
1350 |
+ |
} |
1351 |
+ |
|
1352 |
+ |
int PlotTool::getPhiBin(double phi){ |
1353 |
+ |
|
1354 |
+ |
return 0; |
1355 |
+ |
} |
1356 |
+ |
|
1357 |
+ |
double PlotTool::getPhiFromBin(int phiBin, bool lowerEdge){ |
1358 |
+ |
|
1359 |
+ |
return 0; |
1360 |
+ |
} |