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.9 by tschum, Thu Dec 3 11:24:14 2009 UTC vs.
Revision 1.16 by thomsen, Mon Feb 8 13:22:13 2010 UTC

# Line 15 | Line 15 | PlotTool::PlotTool() {
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   //------------------------------------------------------------------
33   //Fill object PlotTool with Chains constructed from files from given source
34  
35   int PlotTool::init(string fileName, string dirPath, string treeName,
36 <                string fileLabel) {
37 <        this->New(this->GetEntries() );
38 <        int currChain = this->GetEntries() - 1;
36 >                   string fileLabel) {
37 >  this->New(this->GetEntries() );
38 >  int currChain = this->GetEntries() - 1;
39  
40 <        if (currChain < 0)
41 <                return currChain;
32 <
33 <        TStopwatch timer;
34 <        timer.Start();
40 >  if (currChain < 0)
41 >    return currChain;
42  
43 +  TStopwatch timer;
44 +  timer.Start();
45  
37        fileNames.clear();
38
39        //check if alternative label is different from default(searchString)
40        if (fileLabel=="") {
41                fileLabel=fileName;
42        }
43        ((TChain*) this->At(currChain))->SetName(fileLabel.c_str());
44        TSystemDirectory dir("sourceDir", dirPath.c_str());
45        TList *files = dir.GetListOfFiles();
46        if (files) {
47                TIter next(files);
48                TSystemFile *file;
49                TString fname;
50                string filePath;
51
52                if(verbose)     cout<<"Open"<<dirPath.c_str()<<" Search for .root files that contain: "
53                                <<fileName.c_str()<<endl;
54
55                while ((file=(TSystemFile*)next())) {
56                        fname = file->GetName();
57                        if (!fname.EndsWith(".root"))
58                                continue;
59                        if (!fname.Contains(fileName.c_str()))
60                                continue;
61
62                        filePath = dirPath;
63                        filePath += fname.Data();
64                        //fwlite::ChainEvent to lop over events, jets, etc
65                        fileNames.push_back(filePath.c_str());
66
67                        if (((TChain*) this->At(currChain))->AddFile(filePath.c_str(), -1,
68                                        treeName.c_str()) )
69                if(verbose)     cout<<"Chained "<<((TChain*) this->At(currChain))->GetNtrees()<<" file(s) with "<<((TChain*) this->At(currChain))->GetEntries()<<" events."<<endl;
70                        else
71                                return -1;
46  
47 <                }
74 <        } else
75 <                return -1;
47 >  fileNames.clear();
48  
49 <        for (int i=0; i<((TChain*) this->At(currChain))->GetListOfBranches()->GetEntries(); ++i) {
49 >  //check if alternative label is different from default(searchString)
50 >  if (fileLabel=="") {
51 >    fileLabel=fileName;
52 >  }
53 >  ((TChain*) this->At(currChain))->SetName(fileLabel.c_str());
54  
55 <                string s(((TChain*) this->At(currChain))->GetListOfBranches()->At(i)->GetName());
55 >  TList *files = new TList();
56 >  TSystemFile* sysFile = 0;
57 >  if(fileName.find(".") != string::npos) {
58 >    ifstream f(fileName.c_str());
59 >    if( ! f.is_open() ) return -1;
60 >    string line;
61 >
62 >    while (!f.eof()) {
63 >      getline(f,line);
64 >      sysFile = new TSystemFile(line.c_str(),dirPath.c_str());
65 >      files->Add(sysFile);
66 >    }
67  
81                string branch_alias = s;
82                string branch_name = s;
83                if (s.find(".", s.size()-1) != string::npos)
84                        branch_name += "obj";
85
86                size_t a = s.find("_");
87                if (a != string::npos) {
88                  size_t b = s.find("_", a+1);
89                  if (b != string::npos) {
90                    size_t c = s.find("_", b+1);
91                    if (c != string::npos) {
92                      string _prod     =s.substr(0,a);
93                      string _label    =s.substr(a+1, b-a-1);
94                      string _instance =s.substr(b+1, c-b-1);
95                      branch_alias = _label;
96                      if(_instance.length() > 0 )  {
97                        branch_alias += "_";
98                        branch_alias += _instance;
99                        ((TChain*) this->At(currChain))->SetAlias(_instance.c_str(),
100                                                                  branch_name.c_str());
101                      }
102                      string branch_alias_full = _prod + "_" + branch_alias;
103                      ((TChain*) this->At(currChain))->SetAlias(branch_alias_full.c_str(),
104                                branch_name.c_str());
105                    }
106                  }
107                }
68  
69 <                ((TChain*) this->At(currChain))->SetAlias(branch_alias.c_str(),
70 <                                branch_name.c_str());
69 >  } else {
70 >    TSystemDirectory dir("sourceDir", dirPath.c_str());
71 >    files = dir.GetListOfFiles();
72 >  }
73 >  if (files->GetEntries()>0) {
74 >    TIter next(files);
75 >    TSystemFile *file;
76 >    TString fname;
77 >    string filePath;
78 >
79 >    if(verbose && fileName.find(".") == string::npos )  cout<<"Open"<<dirPath.c_str()<<" Search for .root files that contain: "
80 >                                                            <<fileName.c_str()<<endl;
81 >    if(verbose && fileName.find(".") != string::npos )  cout<<"Open"<<dirPath.c_str()<<" Search lines with .root in: "
82 >                                                            <<fileName.c_str()<<endl;
83 >
84 >
85 >    while ((file=(TSystemFile*)next())) {
86 >      fname = file->GetName();
87 >      if (!fname.EndsWith(".root"))
88 >        continue;
89 >      if (!fname.Contains(fileName.c_str()) && fileName.find(".") == string::npos )
90 >        continue;
91 >
92 >      filePath = dirPath;
93 >      filePath += fname.Data();
94 >      //fwlite::ChainEvent to lop over events, jets, etc
95 >      fileNames.push_back(filePath.c_str());
96 >
97 >      if (((TChain*) this->At(currChain))->AddFile(filePath.c_str(), -1,
98 >                                                   treeName.c_str()) )
99 >        if(verbose)     cout<<"Chained "<<((TChain*) this->At(currChain))->GetNtrees()<<" file(s) with "<<((TChain*) this->At(currChain))->GetEntries()<<" events."<<endl;
100 >        else
101 >          return -1;
102  
103 +    }
104 +  } else
105 +    return -1;
106 +
107 +  for (int i=0; i<((TChain*) this->At(currChain))->GetListOfBranches()->GetEntries(); ++i) {
108 +
109 +    string s(((TChain*) this->At(currChain))->GetListOfBranches()->At(i)->GetName());
110 +
111 +    string branch_alias = s;
112 +    string branch_name = s;
113 +    if (s.find(".", s.size()-1) != string::npos)
114 +      branch_name += "obj";
115 +
116 +    size_t a = s.find("_");
117 +    if (a != string::npos) {
118 +      size_t b = s.find("_", a+1);
119 +      if (b != string::npos) {
120 +        size_t c = s.find("_", b+1);
121 +        if (c != string::npos) {
122 +          string _prod     =s.substr(0,a);
123 +          string _label    =s.substr(a+1, b-a-1);
124 +          string _instance =s.substr(b+1, c-b-1);
125 +          branch_alias = _label;
126 +          if(_instance.length() > 0 )  {
127 +            branch_alias += "_";
128 +            branch_alias += _instance;
129 +            ((TChain*) this->At(currChain))->SetAlias(_instance.c_str(),
130 +                                                      branch_name.c_str());
131 +          }
132 +          string branch_alias_full = _prod + "_" + branch_alias;
133 +          ((TChain*) this->At(currChain))->SetAlias(branch_alias_full.c_str(),
134 +                                                    branch_name.c_str());
135          }
136 +      }
137 +    }
138  
139 <        // add branch with track  Jets
140 <
116 <        if( addTrackJets ) {
117 <
118 <          //make file for tree friends (adding additional, computed branches)
119 <          string friendFileName("/scratch/hh/current/cms/user/");
120 <          friendFileName += gSystem->GetUserInfo()->fUser;
121 <          friendFileName += "/temp/",
122 <          friendFileName += fileName;
123 <          friendFileName += ".root";
124 <          TFile *f = new TFile(friendFileName.c_str(),"recreate");
125 <
126 <          if( f->IsZombie() ) return -1;
139 >    ((TChain*) this->At(currChain))->SetAlias(branch_alias.c_str(),
140 >                                              branch_name.c_str());
141  
142 <          string friendTreeName("friendTree");
129 <          //char number = currChain;
130 <          //friendTreeName += number;
131 <          //TTree *friendTree = new TTree("friendTree","friendTree");
132 <          TTree *friendTree = new TTree(friendTreeName.c_str(),friendTreeName.c_str());
142 >  }
143  
144 <          int nJetsKT;
135 <          TrackJetKT = new float [100];
136 <          fwlite::ChainEvent ev(fileNames);
144 >  if( addEventInfo || addTrackJets || addTower || addTrackJets || addHitDetInfo || diTrackMass || addTrigger) {
145  
146 <          friendTree->Branch("nJetsKT", &nJetsKT, "nJetsKT/I");
147 <          friendTree->Branch("TrackJetKT", TrackJetKT, "TrackJetKT[nJetsKT]/F");
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 += fileLabel;
153 >    friendFileName += ".root";
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 >    
161 >    string friendTreeName("friendTree");
162 >    //char number = currChain;
163 >    //friendTreeName += number;
164 >    //TTree *friendTree = new TTree("friendTree","friendTree");
165 >
166 >    if(! f->FindKey(friendTreeName.c_str())) {
167 >      if(verbose)   cout<<"calculating additional variables..."<<endl;
168 >
169 >      TTree *friendTree = new TTree(friendTreeName.c_str(),friendTreeName.c_str());
170 >      fwlite::ChainEvent ev(fileNames);
171 >      int _event, _run, _lumi;
172 >
173 >      //tower data
174 >      const int kMAX = 10000;
175 >      int NobjTowCal;
176 >      towet  = new float [ kMAX ];
177 >      toweta = new float [ kMAX ];
178 >      towphi = new float [ kMAX ];
179 >      towen  = new float [ kMAX ];
180 >      towem  = new float [ kMAX ];
181 >      towhd  = new float [ kMAX ];
182 >      towoe  = new float [ kMAX ];
183 >      towid_phi = new int[ kMAX ];
184 >      towid_eta = new int[ kMAX ];
185 >      towid     = new int[ kMAX ];
186 >      
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  
201 <          if(verbose)   cout<<"calculating additional variables..."<<endl;
202 <          
203 <          
201 >        friendTree->Branch("event", &_event, "event/I");
202 >        friendTree->Branch("run", &_run, "run/I");
203 >        friendTree->Branch("lumi", &_lumi, "lumi/I");
204 >
205 >      }
206 >
207 >      if( addTrackJets ) {
208 >
209 >
210 >        friendTree->Branch("nJetsKT", &nJetsKT, "nJetsKT/I");
211 >        friendTree->Branch("TrackJetKT", TrackJetKT, "TrackJetKT[nJetsKT]/F");
212 >      }
213 >
214 >      if( addTower) {
215 >
216 >        // CaloTower branches
217 >        friendTree->Branch( "NobjTowCal",&NobjTowCal,"NobjTowCal/I"            );
218 >        friendTree->Branch( "TowId",     towid,      "TowId[NobjTowCal]/I"     );
219 >        friendTree->Branch( "TowId_phi", towid_phi,  "TowId_phi[NobjTowCal]/I" );
220 >        friendTree->Branch( "TowId_eta", towid_eta,  "TowId_eta[NobjTowCal]/I" );
221 >        friendTree->Branch( "TowEt",     towet,      "TowEt[NobjTowCal]/F"     );
222 >        friendTree->Branch( "TowEta",    toweta,     "TowEta[NobjTowCal]/F"    );
223 >        friendTree->Branch( "TowPhi",    towphi,     "TowPhi[NobjTowCal]/F"    );
224 >        friendTree->Branch( "TowE",      towen,      "TowE[NobjTowCal]/F"      );
225 >        friendTree->Branch( "TowEm",     towem,      "TowEm[NobjTowCal]/F"     );
226 >        friendTree->Branch( "TowHad",    towhd,      "TowHad[NobjTowCal]/F"    );
227 >        friendTree ->Branch( "TowOE",     towoe,      "TowOE[NobjTowCal]/F"     );
228 >
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;
250 >
251 >      for (ev.toBegin(); !ev.atEnd(); ++ev, ++eventNum) {
252 >
253 >        if( addEventInfo ) {
254 >
255 >
256 >          if(eventNum==0) {
257 >            //    fwlite::Handle<edm::TriggerResults> hltHandle;
258 >            //    hltHandle.getByLabel(ev, "TriggerResults");
259 >
260 >            //    fwlite::Handle<edm::TriggerResults> hTriggerResults;
261 >
262 >            //    hTriggerResults.getByLabel(ev, "TriggerResults","","TEST");
263 >            //    fwlite::TriggerNames const&  triggerNames = ev.triggerNames(*hTriggerResults);
264 >
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 >          }
270 >          _event = ev.id().event();
271 >          _run   = ev.id().run();
272 >          _lumi = ev.luminosityBlock();
273  
274 <          int tenth = ev.size() / 10;
146 <          int eventNum =0;
147 <          for (ev.toBegin(); !ev.atEnd(); ++ev, ++eventNum) {
274 >        }
275  
276 +        if( addTrackJets)
277 +          {
278              fwlite::Handle<reco::CaloJetCollection> jets;
279 <            jets.getByLabel(ev, "antikt5CaloJets");
280 <
279 >            jets.getByLabel(ev, "ak5CaloJets");
280 >            
281              fwlite::Handle<reco::TrackCollection> tracks;
282              tracks.getByLabel(ev, "generalTracks");
283 +            
284  
285 <            if (!jets.isValid())
286 <              continue;
287 <            if (!tracks.isValid())
288 <              continue;
289 <            double trackSum;
290 <            nJetsKT = 0;
291 <            for (reco::CaloJetCollection::const_iterator jet = jets->begin(); jet
292 <                   !=jets->end(); jet++) {
293 <              trackSum = 0;
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(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 (deltaR(jet->eta(), jet->phi(), track->eta(), track->phi())
366 <                    < 0.5)
367 <                  trackSum += track->pt();
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                }
170              TrackJetKT[nJetsKT] = trackSum;
171              nJetsKT++;
379              }
380 <            friendTree->Fill();
381 <
382 <            if( eventNum != 0 && eventNum%tenth == 0) cout<<"Processed "<<eventNum <<" of "<<ev.size()<<" events. "<<endl;
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 >            }
413 >          }
414  
415 +        if( addTower) {
416 +          fwlite::Handle<CaloTowerCollection> towers;
417 +          towers.getByLabel(ev, "towerMaker");
418 +          
419 +          int jtow = 0;
420 +          NobjTowCal=towers->size();
421 +          for(CaloTowerCollection::const_iterator tow = towers->begin();
422 +              tow != towers->end(); ++tow, ++jtow){
423 +            towet [jtow] = tow->et();
424 +            toweta[jtow] = tow->eta();
425 +            towphi[jtow] = tow->phi();
426 +            towen [jtow] = tow->energy();
427 +            towem [jtow] = tow->emEnergy();
428 +            towhd [jtow] = tow->hadEnergy();
429 +            towoe [jtow] = tow->outerEnergy();
430 +            towid_phi[jtow] = tow->id().iphi();
431 +            towid_eta[jtow] = tow->id().ieta();
432 +            towid [jtow] = tow->id().rawId();
433            }
178          f->cd();
179          friendTree->Write();
180          f->Close();
181          ((TChain*) this->At(currChain))->AddFriend(friendTreeName.c_str(),
182                                                     friendFileName.c_str());
434          }
435 +        friendTree->Fill();
436 +        
437 +        if( eventNum != 0 && eventNum%tenth == 0) cout<<"Processed "<<eventNum <<" of "<<ev.size()<<" events. "<<endl;
438 +        
439 +      }
440 +      f->cd();
441 +      friendTree->Write();
442 +    }
443 +    f->Close();
444 +    ((TChain*) this->At(currChain))->AddFriend(friendTreeName.c_str(),
445 +                                               friendFileName.c_str());
446 +    
447 +  }
448 +
449  
450 <        timer.Stop();
451 <        if(verbose) timer.Print();
450 >  timer.Stop();
451 >  if(verbose) timer.Print();
452        
453 <        return this->GetEntries();
453 >  return this->GetEntries();
454  
455   }
456   //------------------------------------------------------------------
# Line 197 | Line 462 | int PlotTool::plot(int chainIndex, strin
462                  return -1;
463  
464          TStopwatch timer;
465 <        timer.Start();
465 >        if(verbose) {
466 >          cout<<"Plot: "<<histName<<" "<<cutName<<" from chain "<<this->At(chainIndex)->GetName()<<endl;
467 >          timer.Start();
468 >        }
469  
470          int currN = nEntries;
471          if (nEntries < 0)
# Line 258 | Line 526 | int PlotTool::plot(int chainIndex, strin
526  
527  
528          //Draw histogram:
529 <        int draw_err = ((TChain*) this->At(chainIndex))->Draw(histName.c_str(), cutName.c_str(),
529 >        string cutNameWithGlobal = cutName;
530 >        if(cutName!="" && globalCuts!="")    cutNameWithGlobal += "&&";
531 >        if(globalCuts!="")                   cutNameWithGlobal += globalCuts;
532 >
533 >        int draw_err = ((TChain*) this->At(chainIndex))->Draw(histName.c_str(), cutNameWithGlobal.c_str(),
534                          currOpt.c_str(), currN);
535          if (draw_err < 0)
536                  return draw_err;
# Line 285 | Line 557 | int PlotTool::plot(int chainIndex, strin
557                          setCanvas( pads_[currPadName.str()] );
558          }
559  
560 <        timer.Stop();
561 <        if(verbose) {
562 <          cout<<"Done: "<<currN<<" events in "<<histName<<" "<<cutName<<" from chain "<<this->At(chainIndex)->GetName()<<endl;
560 >
561 >        if(verbose && draw_err > 0) {
562 >          timer.Stop();
563 >          cout<<"Done: Selected "<<draw_err<<" objects in "<< currN <<" processed events."<<endl;
564            timer.Print();
565          }
566          return draw_err;
# Line 371 | Line 644 | int PlotTool::loop(string histName, vect
644   int PlotTool::updatePads() {
645  
646          for (map< string, TCanvas* >::iterator it=pads_.begin() ; it != pads_.end(); ++it) {
647 <                if (gROOT->GetListOfCanvases()->FindObject((*it).first.c_str() ) ) {
648 <                        (*it).second->Draw();
649 <                        setCanvas((*it).second);
650 <                } else
651 <                        pads_.erase(it);
647 >                if ( ! gROOT->GetListOfCanvases()->FindObject((*it).first.c_str() ) ) {
648 >                  pads_.erase(it);
649 >                  continue;
650 >                }
651 >                if( (*it).second->GetListOfPrimitives()->GetEntries() == 0 ) {
652 >                  (*it).second->Close();
653 >                  pads_.erase(it);
654 >                  continue;
655 >                }
656 >                (*it).second->Draw();
657 >                setCanvas((*it).second);
658 >
659          }
660  
661          return pads_.size();
# Line 520 | Line 800 | void PlotTool::setMathLabels(TH1* thisHi
800          string x = thisHist->GetXaxis()->GetTitle();
801          string y = thisHist->GetYaxis()->GetTitle();
802  
803 <        if (t.find(".phi()") != string::npos)
804 <                t.replace(t.find(".phi()"), 6, " #phi");
803 > //      if (x.find("__") != string::npos)
804 > //        x = x.substr(0,x.find("__"));
805 > //      if (y.find("__") != string::npos)
806 > //        y = y.substr(0,y.find("__"));
807 >
808          if (x.find(".phi()") != string::npos)
809                  x.replace(x.find(".phi()"), 6, " #phi");
810          if (y.find(".phi()") != string::npos)
811                  y.replace(y.find(".phi()"), 6, " #phi");
812  
530        if (t.find(".eta()") != string::npos)
531                t.replace(t.find(".eta()"), 6, " #eta");
813          if (x.find(".eta()") != string::npos)
814                  x.replace(x.find(".eta()"), 6, " #eta");
815          if (y.find(".eta()") != string::npos)
816                  y.replace(y.find(".eta()"), 6, " #eta");
817  
818 <        if (t.find(".pt()") != string::npos)
819 <                t.replace(t.find(".pt()"), 5, " p_{T}");
818 >        if (x.find(".theta()") != string::npos)
819 >                x.replace(x.find(".theta()"), 6, " #theta");
820 >        if (y.find(".theta()") != string::npos)
821 >                y.replace(y.find(".theta()"), 6, " #theta");
822 >
823 >        if (x.find(".chi2()") != string::npos)
824 >                x.replace(x.find(".chi2()"), 7, " #chi^{2}");
825 >        if (y.find(".chi2()") != string::npos)
826 >                y.replace(y.find(".chi2()"), 7, " #chi^{2}");
827 >
828          if (x.find(".pt()") != string::npos)
829 <                x.replace(x.find(".pt()"), 5, " p_{T}");
829 >                x.replace(x.find(".pt()"), 5, " p_{T} [GeV]");
830          if (y.find(".pt()") != string::npos)
831 <                y.replace(y.find(".pt()"), 5, " p_{T}");
831 >                y.replace(y.find(".pt()"), 5, " p_{T} [GeV]");
832 >
833 >        if (x.find(".et()") != string::npos)
834 >                x.replace(x.find(".et()"), 5, " E_{T} [GeV]");
835 >        if (y.find(".et()") != string::npos)
836 >                y.replace(y.find(".et()"), 5, " E_{T} [GeV]");
837 >
838 >        //splitlines for many cuts
839 >        string test1= "{" + globalCuts + "}";
840 >        string test2= "&&" + globalCuts;
841 >
842 >        if(t.find(test1) != string::npos) t.replace(t.find(test1),test1.length(),"");
843 >        if(t.find(test2) != string::npos) t.replace(t.find(test2),test2.length(),"");
844 >
845 >        if (t.find("{") != string::npos && t.find("#splitline") == string::npos) {
846 >          t.replace(t.find_last_of("{"), 1, "}{");
847 >          string t_old = t;
848 >          t = "#splitline{";
849 >          t +=  t_old;
850 >        }
851  
852          thisHist ->SetTitle(t.c_str());
853          thisHist->GetXaxis()->SetTitle(x.c_str());
# Line 674 | Line 982 | int PlotTool::saveCanvases(string name,
982  
983          int savedCanvs =0;
984  
677        TPostScript ps(namePs.c_str(),112);
678        TFile rt(nameRt.c_str(),"recreate");
985  
986          TIter next(gROOT->GetListOfCanvases());
987          TCanvas* canv;
988          while ((canv=(TCanvas*)next())) {
989 +          string modName = (*canv).GetName();
990 +          if(modName.find("{") != string::npos) modName = modName.substr(0,modName.find("{"));
991 +          (*canv).SetTitle( modName.c_str() );
992 +
993 +        }
994 +
995 +
996 +        TPostScript ps(namePs.c_str(),112);
997 +        TFile rt(nameRt.c_str(),"recreate");
998 +
999 +        next.Reset();
1000 +        while ((canv=(TCanvas*)next())) {
1001            ps.NewPage();
1002 +
1003 +
1004 +          (*canv).Write();
1005            (*canv).Draw();
1006            (*canv).Update();
1007 <          (*canv).Write();
1007 >
1008 >
1009            ++savedCanvs;
1010  
1011          }
# Line 691 | Line 1013 | int PlotTool::saveCanvases(string name,
1013          ps.Close();
1014          rt.Close();
1015  
1016 +
1017 +        if(verbose && savedCanvs) {
1018 +          cout<<"Saved file "<<rt.GetName()<<" with "<<savedCanvs<<" canvases."<<endl;
1019 +          cout<<"Saved file "<<ps.GetName()<<" with "<<savedCanvs<<" pages."<<endl;
1020 + }
1021          return savedCanvs;
1022  
1023   }
1024   //------------------------------------------------------------------
698 void PlotTool::showChainInfo()
699 {
700
1025  
1026 <  cout<<endl;
1027 <  cout<<"****** Show Chain Information:"<<endl;
1026 > int PlotTool::clearCanvases()
1027 > {
1028  
1029 +  while(gROOT->GetListOfCanvases()->GetEntries()) ((TCanvas*) gROOT->GetListOfCanvases()->At(0))->Close();
1030 +  pads_.clear();
1031 +  autoVars.clear();
1032 +  return pads_.size() + gROOT->GetListOfCanvases()->GetEntries();
1033  
1034 <  this->ls();
1034 > }
1035 > //------------------------------------------------------------------
1036 > int PlotTool::setVariables(string label)
1037 > {
1038  
708  cout<<endl;
709  cout<<"We have "<<this->GetEntries()<<" TChains with following aliases set:"<<endl;
1039          for (int i=0; i< this->GetEntries(); ++i) {
1040 <          cout<<endl;
1040 >          cout<<"--------------------------------"<<endl;
1041            cout<<((TChain*) this->At(i))->GetName()<<endl;
1042 <          ((TChain*) this->At(i))->GetListOfAliases()->ls();
1042 >          cout<<"------------"<<endl;
1043  
1044 <        }
1044 >          TList* leaves = (TList*) ((TChain*) this->At(i))->GetListOfLeaves();
1045 >          for (int j=0; j< leaves->GetEntries(); ++j) {
1046 >            TString leafName ( leaves->At(j)->GetName() );
1047 >            if(! leafName.EndsWith(".") ) continue;
1048 >            if(! leafName.Contains(label.c_str() ) ) continue;
1049 >
1050 >            TClass cl( ( (TLeafElement*) leaves->At(j) )->GetTypeName() );
1051 >            cout<<"++++++"<<endl;
1052 >            cout<< leafName.Data() <<endl;
1053 >            for(int k=0;k<cl.GetListOfAllPublicMethods()->GetEntries();++k) {
1054 >              string typeName ( ((TMethod*) cl.GetListOfAllPublicMethods()->At(k))->GetReturnTypeName() );
1055 >              string methName ( cl.GetListOfAllPublicMethods()->At(k)->GetName() );
1056 >              if( methName != "product") continue;
1057 >                cout<< typeName <<endl;
1058 >                string _type;
1059 >                TString testString( typeName.c_str() );
1060 >                if( testString.BeginsWith("vector<") ) {
1061 >                  _type = typeName.substr(typeName.find("<")+1,typeName.find(">")-typeName.find("<")-1);
1062 >                  string _varSize = leafName.Data();
1063 >                  _varSize += "obj@.size()";
1064 >                  autoVars.push_back( _varSize );
1065 >                  }
1066 >                else _type = typeName.substr(0,typeName.find("*"));
1067 >                  TClass _cl( _type.c_str() );
1068 >                  for(int l=0;l<_cl.GetListOfAllPublicMethods()->GetEntries();++l) {
1069 >                    string _typeName ( ((TMethod*) _cl.GetListOfAllPublicMethods()->At(l))->GetReturnTypeName() );
1070 >                    string _methName ( _cl.GetListOfAllPublicMethods()->At(l)->GetName() );
1071 >                    //              if(_typeName.find("void") != string::npos ) continue;
1072 >                    //              cout<<"   "<<_typeName<<"  "<<_methName<<endl;
1073 >
1074 >                    cout<<" "<<_typeName<<"  "<<_methName<<endl;
1075 >                    if(_methName.find("operator")==string::npos&&(_typeName=="float"||_typeName=="double"||_typeName=="int"||_typeName=="unsigned int"||_typeName=="bool"||_typeName=="unsigned short"||_typeName=="unsigned long"||_typeName=="unsigned long long")) {
1076 >
1077 >                      cout<<"-->   "<<_typeName<<"  "<<_methName<<endl;
1078 >
1079 >                      string  _varName = leafName.Data();
1080 >                      _varName += "obj.";
1081 >                      _varName += _methName;
1082 >                      _varName += "()";
1083 >                      autoVars.push_back( _varName );
1084 >                    }
1085 >                  }
1086 >                  
1087 >              
1088 >            }
1089  
1090 +          }
1091 +
1092 +        }
1093  
1094 +        return autoVars.size();
1095  
1096   }
1097   //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Line 868 | 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