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.13 by tschum, Wed Dec 9 13:02:16 2009 UTC vs.
Revision 1.15 by thomsen, Wed Dec 16 16:33:28 2009 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;
24          verbose = true;
25  
26          globalCuts="";
27  
28 +        recreateTree = false; //force recreation of friend tree
29 +
30   }
31  
32   //------------------------------------------------------------------
# Line 134 | Line 141 | int PlotTool::init(string fileName, stri
141  
142    }
143  
144 <  if( addEventInfo || addTrackJets) {
144 >  if( addEventInfo || addTrackJets || addTower || addTrackJets || addHitDetInfo || diTrackMass || addTrigger) {
145  
146 <    if(verbose)   cout<<"calculating additional variables..."<<endl;
146 >    if(verbose)   cout<<"add friend tree with additional variables..."<<endl;
147  
148      //make file for tree friends (adding additional, computed branches)
149      string friendFileName("/scratch/hh/current/cms/user/");
150      friendFileName += gSystem->GetUserInfo()->fUser;
151 <    friendFileName += "/temp/",
152 <      friendFileName += fileName;
151 >    friendFileName += "/temp/";
152 >    friendFileName += fileLabel;
153      friendFileName += ".root";
154 <    TFile *f = new TFile(friendFileName.c_str(),"recreate");
154 >    string fileOpt = "update";
155 >    if( recreateTree )    fileOpt = "recreate";
156 >
157 >    TFile *f = new TFile(friendFileName.c_str(),fileOpt.c_str());
158  
159      if( f->IsZombie() ) return -1;
160  
# Line 152 | Line 162 | int PlotTool::init(string fileName, stri
162      //char number = currChain;
163      //friendTreeName += number;
164      //TTree *friendTree = new TTree("friendTree","friendTree");
155    TTree *friendTree = new TTree(friendTreeName.c_str(),friendTreeName.c_str());
156    fwlite::ChainEvent ev(fileNames);
157     int _event, _run, _lumi;
158     int nJetsKT;
159     TrackJetKT = new float [100];
165  
166 <    if( addEventInfo ) {
167 <
166 >    if(! f->FindKey(friendTreeName.c_str())) {
167 >      if(verbose)   cout<<"calculating additional variables..."<<endl;
168  
164      friendTree->Branch("event", &_event, "event/I");
165      friendTree->Branch("run", &_run, "run/I");
166      friendTree->Branch("lumi", &_lumi, "lumi/I");
169  
170 <    }
170 >      TTree *friendTree = new TTree(friendTreeName.c_str(),friendTreeName.c_str());
171 >      fwlite::ChainEvent ev(fileNames);
172 >      int _event, _run, _lumi;
173 >
174 >      //tower data
175 >      const int kMAX = 10000;
176 >      int NobjTowCal;
177 >      towet  = new float [ kMAX ];
178 >      toweta = new float [ kMAX ];
179 >      towphi = new float [ kMAX ];
180 >      towen  = new float [ kMAX ];
181 >      towem  = new float [ kMAX ];
182 >      towhd  = new float [ kMAX ];
183 >      towoe  = new float [ kMAX ];
184 >      towid_phi = new int[ kMAX ];
185 >      towid_eta = new int[ kMAX ];
186 >      towid     = new int[ kMAX ];
187 >      
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  
202 <    if( addTrackJets ) {
202 >        friendTree->Branch("event", &_event, "event/I");
203 >        friendTree->Branch("run", &_run, "run/I");
204 >        friendTree->Branch("lumi", &_lumi, "lumi/I");
205  
206 +      }
207  
208 <      friendTree->Branch("nJetsKT", &nJetsKT, "nJetsKT/I");
174 <      friendTree->Branch("TrackJetKT", TrackJetKT, "TrackJetKT[nJetsKT]/F");
175 <    }
208 >      if( addTrackJets ) {
209  
210  
211 <    int tenth = ev.size() / 10;
212 <    int eventNum =0;
213 <    for (ev.toBegin(); !ev.atEnd(); ++ev, ++eventNum) {
211 >        friendTree->Branch("nJetsKT", &nJetsKT, "nJetsKT/I");
212 >        friendTree->Branch("TrackJetKT", TrackJetKT, "TrackJetKT[nJetsKT]/F");
213 >      }
214  
215 +      if( addTower) {
216  
217 <      if( addEventInfo ) {
217 >        // CaloTower branches
218 >        friendTree->Branch( "NobjTowCal",&NobjTowCal,"NobjTowCal/I"            );
219 >        friendTree->Branch( "TowId",     towid,      "TowId[NobjTowCal]/I"     );
220 >        friendTree->Branch( "TowId_phi", towid_phi,  "TowId_phi[NobjTowCal]/I" );
221 >        friendTree->Branch( "TowId_eta", towid_eta,  "TowId_eta[NobjTowCal]/I" );
222 >        friendTree->Branch( "TowEt",     towet,      "TowEt[NobjTowCal]/F"     );
223 >        friendTree->Branch( "TowEta",    toweta,     "TowEta[NobjTowCal]/F"    );
224 >        friendTree->Branch( "TowPhi",    towphi,     "TowPhi[NobjTowCal]/F"    );
225 >        friendTree->Branch( "TowE",      towen,      "TowE[NobjTowCal]/F"      );
226 >        friendTree->Branch( "TowEm",     towem,      "TowEm[NobjTowCal]/F"     );
227 >        friendTree->Branch( "TowHad",    towhd,      "TowHad[NobjTowCal]/F"    );
228 >        friendTree ->Branch( "TowOE",     towoe,      "TowOE[NobjTowCal]/F"     );
229  
185        _event = ev.id().event();
186        _run   = ev.id().run();
187        _lumi = ev.luminosityBlock();
230  
231        }
232  
233 <      if( addTrackJets ) {
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;
251 >      for (ev.toBegin(); !ev.atEnd(); ++ev, ++eventNum) {
252 >
253 >
254 >        if( addEventInfo ) {
255 >
256  
257 <        fwlite::Handle<reco::CaloJetCollection> jets;
258 <        jets.getByLabel(ev, "antikt5CaloJets");
257 >          if(eventNum==0) {
258 >            //    fwlite::Handle<edm::TriggerResults> hltHandle;
259 >            //    hltHandle.getByLabel(ev, "TriggerResults");
260  
261 <        fwlite::Handle<reco::TrackCollection> tracks;
197 <        tracks.getByLabel(ev, "generalTracks");
261 >            //    fwlite::Handle<edm::TriggerResults> hTriggerResults;
262  
263 <        if (!jets.isValid())
264 <          continue;
265 <        if (!tracks.isValid())
266 <          continue;
267 <        double trackSum;
268 <        nJetsKT = 0;
269 <        for (reco::CaloJetCollection::const_iterator jet = jets->begin(); jet
270 <               !=jets->end(); jet++) {
207 <          trackSum = 0;
208 <          for (reco::TrackCollection::const_iterator track = tracks->begin(); track
209 <                 !=tracks->end(); track++) {
210 <            if (deltaR(jet->eta(), jet->phi(), track->eta(), track->phi())
211 <                < 0.5)
212 <              trackSum += track->pt();
263 >            //    hTriggerResults.getByLabel(ev, "TriggerResults","","TEST");
264 >            //    fwlite::TriggerNames const&  triggerNames = ev.triggerNames(*hTriggerResults);
265 >
266 >
267 >            //    //      std::vector<std::string> const& names = triggerNames.triggerNames();
268 >            //    for (unsigned i = 0; i < triggerNames.size(); ++i) {
269 >            //    std::cout << i << "  " << triggerNames.triggerName(i) << std::endl;
270 >            //    }
271            }
272 <          TrackJetKT[nJetsKT] = trackSum;
273 <          nJetsKT++;
272 >
273 >          _event = ev.id().event();
274 >          _run   = ev.id().run();
275 >          _lumi = ev.luminosityBlock();
276 >
277          }
217      }
218      friendTree->Fill();
278  
279 <      if( eventNum != 0 && eventNum%tenth == 0) cout<<"Processed "<<eventNum <<" of "<<ev.size()<<" events. "<<endl;
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 >              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 >            }
355 >          }
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 +          
421 +          int jtow = 0;
422 +          NobjTowCal=towers->size();
423 +          for(CaloTowerCollection::const_iterator tow = towers->begin();
424 +              tow != towers->end(); ++tow, ++jtow){
425 +            towet [jtow] = tow->et();
426 +            toweta[jtow] = tow->eta();
427 +            towphi[jtow] = tow->phi();
428 +            towen [jtow] = tow->energy();
429 +            towem [jtow] = tow->emEnergy();
430 +            towhd [jtow] = tow->hadEnergy();
431 +            towoe [jtow] = tow->outerEnergy();
432 +            towid_phi[jtow] = tow->id().iphi();
433 +            towid_eta[jtow] = tow->id().ieta();
434 +            towid [jtow] = tow->id().rawId();
435 +          }
436 +        }
437 +        friendTree->Fill();
438 +        
439 +        if( eventNum != 0 && eventNum%tenth == 0) cout<<"Processed "<<eventNum <<" of "<<ev.size()<<" events. "<<endl;
440 +        
441 +      }
442 +      f->cd();
443 +      friendTree->Write();
444      }
223    f->cd();
224    friendTree->Write();
445      f->Close();
446      ((TChain*) this->At(currChain))->AddFriend(friendTreeName.c_str(),
447                                                 friendFileName.c_str());
448 <
229 <
230 <
448 >    
449    }
450  
451  
# Line 428 | Line 646 | int PlotTool::loop(string histName, vect
646   int PlotTool::updatePads() {
647  
648          for (map< string, TCanvas* >::iterator it=pads_.begin() ; it != pads_.end(); ++it) {
649 <                if (gROOT->GetListOfCanvases()->FindObject((*it).first.c_str() ) ) {
650 <                        (*it).second->Draw();
651 <                        setCanvas((*it).second);
652 <                } else
653 <                        pads_.erase(it);
649 >                if ( ! gROOT->GetListOfCanvases()->FindObject((*it).first.c_str() ) ) {
650 >                  pads_.erase(it);
651 >                  continue;
652 >                }
653 >                if( (*it).second->GetListOfPrimitives()->GetEntries() == 0 ) {
654 >                  (*it).second->Close();
655 >                  pads_.erase(it);
656 >                  continue;
657 >                }
658 >                (*it).second->Draw();
659 >                setCanvas((*it).second);
660 >
661          }
662  
663          return pads_.size();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines