ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/tschum/FWlite_Analysis/PlotTool.cc
(Generate patch)

Comparing UserCode/tschum/FWlite_Analysis/PlotTool.cc (file contents):
Revision 1.14 by tschum, Thu Dec 10 18:29:27 2009 UTC vs.
Revision 1.16 by thomsen, Mon Feb 8 13:22:13 2010 UTC

# Line 14 | Line 14 | PlotTool::PlotTool() {
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;
# Line 137 | Line 141 | int PlotTool::init(string fileName, stri
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;
# Line 151 | Line 155 | int PlotTool::init(string fileName, stri
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;
# Line 162 | Line 166 | int PlotTool::init(string fileName, stri
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;
# Line 183 | Line 184 | int PlotTool::init(string fileName, stri
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  
# Line 218 | Line 229 | int PlotTool::init(string fileName, stri
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  
# Line 236 | Line 262 | int PlotTool::init(string fileName, stri
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();
# Line 296 | Line 431 | int PlotTool::init(string fileName, stri
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();
# Line 310 | Line 443 | int PlotTool::init(string fileName, stri
443      f->Close();
444      ((TChain*) this->At(currChain))->AddFriend(friendTreeName.c_str(),
445                                                 friendFileName.c_str());
446 <
314 <
315 <
446 >    
447    }
448  
449  
# Line 1114 | Line 1245 | int  PlotTool::plotEff(int chainIndex, s
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 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines