ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/grimes/L1Menu/src/L1UpgradeNtuple.C
Revision: 1.1
Committed: Thu Jun 6 15:05:04 2013 UTC (11 years, 11 months ago) by grimes
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Log Message:
Improved memory performance. Had to copy L1UpgradeNtuple.C into this package to fix some leaks.

File Contents

# User Rev Content
1 grimes 1.1 #include "L1UpgradeNtuple.h"
2    
3     #include <vector>
4     #include <string>
5     #include <iostream>
6     #include <fstream>
7    
8     #include <TROOT.h>
9     #include <TChain.h>
10     #include <TFile.h>
11     #include <TTree.h>
12     #include <TFriendElement.h>
13     #include <TList.h>
14     #include <TMatrix.h>
15     #include <TH1D.h>
16     #include <TH1F.h>
17     #include <TH2D.h>
18     #include <TH2F.h>
19     #include <TCanvas.h>
20    
21    
22     #include "UserCode/L1TriggerDPG/interface/L1AnalysisEventDataFormat.h"
23     #include "UserCode/L1TriggerDPG/interface/L1AnalysisGCTDataFormat.h"
24     #include "UserCode/L1TriggerDPG/interface/L1AnalysisGTDataFormat.h"
25     #include "UserCode/L1TriggerDPG/interface/L1AnalysisGMTDataFormat.h"
26     #include "UserCode/L1TriggerDPG/interface/L1AnalysisGTDataFormat.h"
27     #include "UserCode/L1TriggerDPG/interface/L1AnalysisRCTDataFormat.h"
28     #include "UserCode/L1TriggerDPG/interface/L1AnalysisDTTFDataFormat.h"
29     #include "UserCode/L1TriggerDPG/interface/L1AnalysisCSCTFDataFormat.h"
30     #include "UserCode/L1TriggerDPG/interface/L1AnalysisRecoMetDataFormat.h"
31     #include "UserCode/L1TriggerDPG/interface/L1AnalysisRecoJetDataFormat.h"
32     #include "UserCode/L1TriggerDPG/interface/L1AnalysisRecoClusterDataFormat.h"
33     #include "UserCode/L1TriggerDPG/interface/L1AnalysisRecoMuonDataFormat.h"
34     #include "UserCode/L1TriggerDPG/interface/L1AnalysisL1ExtraDataFormat.h"
35     #include "UserCode/L1TriggerDPG/interface/L1AnalysisRecoVertexDataFormat.h"
36     #include "UserCode/L1TriggerDPG/interface/L1AnalysisRecoTrackDataFormat.h"
37     #include "UserCode/L1TriggerDPG/interface/L1AnalysisL1MenuDataFormat.h"
38     #include "UserCode/L1TriggerUpgrade/interface/L1AnalysisL1ExtraUpgradeDataFormat.h"
39     #include "UserCode/L1TriggerDPG/interface/L1AnalysisSimulationDataFormat.h"
40     #include "UserCode/L1TriggerDPG/interface/L1AnalysisGeneratorDataFormat.h"
41     #include "UserCode/L1TriggerDPG/interface/L1AnalysisCaloTPDataFormat.h"
42    
43     using namespace std;
44    
45     Long64_t L1UpgradeNtuple::GetEntries()
46     {
47     return nentries_;
48     }
49    
50     L1UpgradeNtuple::L1UpgradeNtuple()
51     : fChain(NULL), ftreeEmu(NULL), ftreemuon(NULL), ftreereco(NULL), ftreeExtra(NULL), ftreeMenu(NULL),
52     ftreeEmuExtra(NULL), ftreeUpgrade(NULL), event_(NULL), gct_(NULL), gmt_(NULL), gt_(NULL),
53     rct_(NULL), dttf_(NULL), csctf_(NULL), calo_(NULL), eventEmu_(NULL), gctEmu_(NULL), gmtEmu_(NULL),
54     gtEmu_(NULL), rctEmu_(NULL), dttfEmu_(NULL), csctfEmu_(NULL), caloEmu_(NULL), recoMet_(NULL),
55     recoMuon_(NULL), recoJet_(NULL), recoBasicCluster_(NULL), recoSuperCluster_(NULL), recoVertex_(NULL),
56     recoTrack_(NULL), l1extra_(NULL), l1emuextra_(NULL), l1menu_(NULL), l1upgrade_(NULL), sim_(NULL), gen_(NULL)
57     {
58     dol1emu=true; doreco=true; domuonreco=true; dol1extra=true; dol1emuextra=true; dol1menu=true; dol1upgrade=true;
59     }
60    
61     L1UpgradeNtuple::L1UpgradeNtuple(const std::string & fname)
62     : fChain(NULL), ftreeEmu(NULL), ftreemuon(NULL), ftreereco(NULL), ftreeExtra(NULL), ftreeMenu(NULL),
63     ftreeEmuExtra(NULL), ftreeUpgrade(NULL), event_(NULL), gct_(NULL), gmt_(NULL), gt_(NULL),
64     rct_(NULL), dttf_(NULL), csctf_(NULL), calo_(NULL), eventEmu_(NULL), gctEmu_(NULL), gmtEmu_(NULL),
65     gtEmu_(NULL), rctEmu_(NULL), dttfEmu_(NULL), csctfEmu_(NULL), caloEmu_(NULL), recoMet_(NULL),
66     recoMuon_(NULL), recoJet_(NULL), recoBasicCluster_(NULL), recoSuperCluster_(NULL), recoVertex_(NULL),
67     recoTrack_(NULL), l1extra_(NULL), l1emuextra_(NULL), l1menu_(NULL), l1upgrade_(NULL), sim_(NULL), gen_(NULL)
68     {
69     dol1emu=true; doreco=true; domuonreco=true; dol1extra=true; dol1emuextra=true; dol1menu=true; dol1upgrade=true;
70     Open(fname);
71     }
72    
73     bool L1UpgradeNtuple::OpenWithList(const std::string & fname)
74     {
75     if (!OpenNtupleList(fname)) exit(0);
76     if (!CheckFirstFile()) exit(0);
77     if (!OpenWithoutInit()) exit(0);
78    
79     std::cout.flush();cout<<"Going to init the available trees..."<<std::endl;std::cout.flush();
80     Init();
81    
82     return true;
83     }
84    
85     bool L1UpgradeNtuple::Open(const std::string & fname)
86     {
87     listNtuples.push_back(fname);
88    
89     if (!CheckFirstFile()) exit(0);
90     if (!OpenWithoutInit()) exit(0);
91    
92     std::cout.flush();cout<<"Going to init the available trees..."<<std::endl;std::cout.flush();
93     Init();
94    
95     return true;
96     }
97    
98     bool L1UpgradeNtuple::OpenNtupleList(const std::string & fname)
99     {
100     std::ifstream flist(fname.c_str());
101     if (!flist)
102     {
103     std::cout << "File "<<fname<<" is not found !"<<std::endl;
104     return false;
105     }
106    
107     while(!flist.eof())
108     {
109     std::string str;
110     getline(flist,str);
111     if (!flist.fail())
112     {
113     if (str!="") listNtuples.push_back(str);
114     }
115     }
116    
117     return true;
118     }
119    
120     bool L1UpgradeNtuple::CheckFirstFile()
121     {
122     if (listNtuples.size()==0) return false;
123    
124     rf = TFile::Open(listNtuples[0].c_str());
125    
126     if (rf==0) return false;
127     if (rf->IsOpen()==0) return false;
128    
129     TTree * myChain = (TTree*) rf->Get("l1NtupleProducer/L1Tree");
130     TTree * mytreeEmu = (TTree*) rf->Get("l1EmulatorTree/L1Tree");
131     TTree * mytreemuon = (TTree*) rf->Get("l1MuonRecoTreeProducer/MuonRecoTree");
132     TTree * mytreejets = (TTree*) rf->Get("l1RecoTreeProducer/RecoTree");
133     TTree * mytreeExtra = (TTree*) rf->Get("l1ExtraTreeProducer/L1ExtraTree");
134     TTree * mytreeEmuExtra = (TTree*) rf->Get("l1EmulatorExtraTree/L1ExtraTree");
135     TTree * mytreeMenu = (TTree*) rf->Get("l1MenuTreeProducer/L1MenuTree");
136     TTree * mytreeUpgrade = (TTree*) rf->Get("l1ExtraUpgradeTreeProducer/L1ExtraUpgradeTree");
137    
138     if (!myChain) {
139     std::cout<<"L1Tree not found .... "<<std::endl;
140     return false;
141     } else {
142     std::cout<<"Main tree is found .."<<std::endl;
143     }
144    
145     if (!mytreeEmu) {
146     std::cout<<"L1TreeEmu not found, it will be skipped..."<<std::endl;
147     dol1emu=false;
148     } else
149     {
150     std::cout << "L1TreeEmu is found ..."<<std::endl;
151     }
152    
153     if (!mytreejets) {
154     std::cout<<"RecoTree not found, it will be skipped..."<<std::endl;
155     doreco=false;
156     } else
157     {
158     std::cout << "RecoTree is found ..."<<std::endl;
159     }
160    
161     if (!mytreemuon) {
162     std::cout<<"MuonRecoTree not found, it will be skipped..."<<std::endl;
163     domuonreco=false;
164     }
165     else
166     {
167     std::cout << "MuonRecoTree is found ..."<<std::endl;
168     }
169    
170     if (!mytreeExtra) {
171     std::cout<<"L1ExtraTree not found, it will be skipped..."<<std::endl;
172     dol1extra=false;
173     }
174     else
175     {
176     std::cout << "L1ExtraTree is found ..."<<std::endl;
177     }
178     if(!mytreeEmuExtra){
179     std::cout<<"L1EmuExtraTree not found, it will be skipped..."<<std::endl;
180     dol1emuextra=false;
181     }
182     else{
183     std::cout << "L1EmuExtraTree is found ..."<<std::endl;
184     }
185    
186     if (!mytreeMenu) {
187     std::cout<<"L1MenuTree not found, it will be skipped..."<<std::endl;
188     dol1menu=false;
189     }
190     else
191     {
192     std::cout << "L1MenuTree is found ..."<<std::endl;
193     }
194    
195     if (!mytreeUpgrade) {
196     std::cout<<"L1ExtraUpgradeProducer/L1ExtraUpgradeTree not found, it will be skipped..."<<std::endl;
197     dol1upgrade=false;
198     }
199     else{
200     std::cout << "L1UpgradeProducer/L1ExtraTree is found ..."<<std::endl;
201     }
202    
203     return true;
204     }
205    
206    
207     bool L1UpgradeNtuple::OpenWithoutInit()
208     {
209     fChain = new TChain("l1NtupleProducer/L1Tree");
210     ftreeEmu = new TChain("l1EmulatorTree/L1Tree");
211     ftreemuon = new TChain("l1MuonRecoTreeProducer/MuonRecoTree");
212     ftreereco = new TChain("l1RecoTreeProducer/RecoTree");
213     ftreeExtra = new TChain("l1ExtraTreeProducer/L1ExtraTree");
214     ftreeEmuExtra = new TChain("l1EmulatorExtraTree/L1ExtraTree");
215     ftreeMenu = new TChain("l1MenuTreeProducer/L1MenuTree");
216     ftreeUpgrade = new TChain("l1ExtraUpgradeTreeProducer/L1ExtraUpgradeTree");
217    
218     for (unsigned int i=0;i<listNtuples.size();i++)
219     {
220     std::cout << " -- Adding " << listNtuples[i] << std::endl;
221     fChain->Add(listNtuples[i].c_str());
222    
223     if (dol1emu) ftreeEmu -> Add(listNtuples[i].c_str());
224     if (doreco) ftreereco -> Add(listNtuples[i].c_str());
225     if (domuonreco) ftreemuon -> Add(listNtuples[i].c_str());
226     if (dol1extra) ftreeExtra -> Add(listNtuples[i].c_str());
227     if (dol1emuextra) ftreeEmuExtra ->Add(listNtuples[i].c_str());
228     if (dol1menu) ftreeMenu -> Add(listNtuples[i].c_str());
229     if (dol1upgrade) ftreeUpgrade -> Add(listNtuples[i].c_str());
230    
231     }
232    
233     if (dol1emu) fChain->AddFriend(ftreeEmu);
234     if (doreco) fChain->AddFriend(ftreereco);
235     if (domuonreco) fChain->AddFriend(ftreemuon);
236     if (dol1extra) fChain->AddFriend(ftreeExtra);
237     if (dol1emuextra) fChain->AddFriend(ftreeEmuExtra);
238     if (dol1menu) fChain->AddFriend(ftreeMenu);
239     if (dol1upgrade) fChain->AddFriend(ftreeUpgrade);
240    
241     return true;
242     }
243    
244     L1UpgradeNtuple::~L1UpgradeNtuple()
245     {
246     // if (ftreemuon) delete ftreemuon;
247     // if (ftreereco) delete ftreereco;
248     // if (ftreeExtra) delete ftreeExtra;
249     // if (ftreeEmuExtra) delete ftreeEmuExtra;
250     // if (ftreeMenu) delete ftreeMenu;
251     // if (ftreeUpgrade) delete ftreeUpgrade;
252     // if (ftreeEmu) delete ftreeEmu;
253     // if (fChain) delete fChain;
254     // if (rf) delete rf;
255     delete fChain;
256     delete ftreeEmu;
257     delete ftreemuon;
258     delete ftreereco;
259     delete ftreeExtra;
260     delete ftreeEmuExtra;
261     delete ftreeMenu;
262     delete ftreeUpgrade;
263     delete event_;
264     delete gct_;
265     delete gmt_;
266     delete gt_;
267     delete rct_;
268     delete dttf_;
269     delete csctf_;
270     delete sim_;
271     delete gen_;
272     delete calo_;
273     delete eventEmu_;
274     delete gctEmu_;
275     delete gmtEmu_;
276     delete gtEmu_;
277     delete rctEmu_;
278     delete dttfEmu_;
279     delete csctfEmu_;
280     delete caloEmu_;
281     delete recoMet_;
282     delete recoJet_;
283     delete recoBasicCluster_;
284     delete recoSuperCluster_;
285     delete recoVertex_;
286     delete recoTrack_;
287     delete recoMuon_;
288     delete l1extra_;
289     delete l1emuextra_;
290     delete l1menu_;
291     delete l1upgrade_;
292     }
293    
294    
295    
296     Int_t L1UpgradeNtuple::GetEntry(Long64_t entry)
297     {
298     // Read contents of entry.
299     if (!fChain) return 0;
300     return fChain->GetEntry(entry);
301     }
302    
303     Long64_t L1UpgradeNtuple::LoadTree(Long64_t entry)
304     {
305     // Set the environment to read one entry
306     if (!fChain) return -5;
307     Long64_t centry = fChain->LoadTree(entry);
308    
309     if (centry < 0) return centry;
310     if (!fChain->InheritsFrom(TChain::Class())) return centry;
311     TChain *chain = (TChain*)fChain;
312     if (chain->GetTreeNumber() != fCurrent) {
313     fCurrent = chain->GetTreeNumber();
314     }
315     return centry;
316     }
317    
318     void L1UpgradeNtuple::Init()
319     {
320     if (!fChain) return;
321     fCurrent = -1;
322     /*
323     fChain->SetMakeClass(1);
324     ftreemuon->SetMakeClass(1);
325     ftreereco->SetMakeClass(1);
326     ftreeExtra->SetMakeClass(1); */
327    
328     std::cout << "Estimate the number of entries ..."<<std::endl;
329     nentries_=fChain->GetEntries();
330     std::cout << nentries_ << std::endl;
331     event_ = new L1Analysis::L1AnalysisEventDataFormat();
332     gct_ = new L1Analysis::L1AnalysisGCTDataFormat();
333     gmt_ = new L1Analysis::L1AnalysisGMTDataFormat();
334     gt_ = new L1Analysis::L1AnalysisGTDataFormat();
335     rct_ = new L1Analysis::L1AnalysisRCTDataFormat();
336     dttf_ = new L1Analysis::L1AnalysisDTTFDataFormat();
337     csctf_ = new L1Analysis::L1AnalysisCSCTFDataFormat();
338     sim_ = new L1Analysis::L1AnalysisSimulationDataFormat();
339     gen_ = new L1Analysis::L1AnalysisGeneratorDataFormat();
340     calo_ = new L1Analysis::L1AnalysisCaloTPDataFormat();
341    
342     std::cout<<"Setting branch addresses for L1Tree... "<<std::flush;
343    
344     fChain->SetBranchAddress("Event", &event_ );
345     fChain->SetBranchAddress("GCT", &gct_ );
346     fChain->SetBranchAddress("GMT", &gmt_ );
347     fChain->SetBranchAddress("GT", &gt_ );
348     fChain->SetBranchAddress("RCT", &rct_ );
349     fChain->SetBranchAddress("CSCTF", &csctf_ );
350     fChain->SetBranchAddress("DTTF", &dttf_ );
351     fChain->SetBranchAddress("Simulation", &sim_ );
352     fChain->SetBranchAddress("Generator", &gen_ );
353     fChain->SetBranchAddress("Calo", &calo_ );
354    
355    
356     if (dol1emu)
357     {
358     std::cout<<"Setting branch addresses for L1TreeEmu..."<<std::endl;
359    
360     eventEmu_ = new L1Analysis::L1AnalysisEventDataFormat();
361     gctEmu_ = new L1Analysis::L1AnalysisGCTDataFormat();
362     gmtEmu_ = new L1Analysis::L1AnalysisGMTDataFormat();
363     gtEmu_ = new L1Analysis::L1AnalysisGTDataFormat();
364     rctEmu_ = new L1Analysis::L1AnalysisRCTDataFormat();
365     dttfEmu_ = new L1Analysis::L1AnalysisDTTFDataFormat();
366     csctfEmu_ = new L1Analysis::L1AnalysisCSCTFDataFormat();
367     caloEmu_ = new L1Analysis::L1AnalysisCaloTPDataFormat();
368    
369     std::cout<<"Setting branch addresses for L1Tree... "<<std::flush;
370    
371     ftreeEmu->SetBranchAddress("Event", &eventEmu_ );
372     ftreeEmu->SetBranchAddress("GCT", &gctEmu_ );
373     ftreeEmu->SetBranchAddress("GMT", &gmtEmu_ );
374     ftreeEmu->SetBranchAddress("GT", &gtEmu_ );
375     ftreeEmu->SetBranchAddress("RCT", &rctEmu_ );
376     ftreeEmu->SetBranchAddress("CSCTF", &csctfEmu_ );
377     ftreeEmu->SetBranchAddress("DTTF", &dttf_ );
378     ftreeEmu->SetBranchAddress("Calo", &caloEmu_ );
379    
380     fChain->AddFriend(ftreeEmu);
381     std::cout << "L1TreeEmu " << ftreeEmu->GetEntries() << endl;
382     }
383    
384     if (doreco)
385     {
386     std::cout<<"Setting branch addresses for reco..."<<std::endl;
387    
388     recoMet_ = new L1Analysis::L1AnalysisRecoMetDataFormat();
389     recoJet_ = new L1Analysis::L1AnalysisRecoJetDataFormat();
390     recoBasicCluster_ = new L1Analysis::L1AnalysisRecoClusterDataFormat();
391     recoSuperCluster_ = new L1Analysis::L1AnalysisRecoClusterDataFormat();
392     recoVertex_ = new L1Analysis::L1AnalysisRecoVertexDataFormat();
393     recoTrack_ = new L1Analysis::L1AnalysisRecoTrackDataFormat();
394    
395     ftreereco->SetBranchAddress("Jet", &recoJet_);
396     ftreereco->SetBranchAddress("BasicClusters", &recoBasicCluster_);
397     ftreereco->SetBranchAddress("SuperClusters", &recoSuperCluster_);
398     ftreereco->SetBranchAddress("Met", &recoMet_);
399     ftreereco->SetBranchAddress("Tracks", &recoTrack_);
400     ftreereco->SetBranchAddress("Vertices", &recoVertex_);
401     fChain->AddFriend(ftreereco);
402     std::cout << "RecoTree " << ftreereco->GetEntries() << endl;
403     }
404    
405     if (domuonreco)
406     {
407     std::cout<<"Setting branch addresses for muons... "<<std::endl;
408     recoMuon_ = new L1Analysis::L1AnalysisRecoMuonDataFormat() ;
409     ftreemuon->SetBranchAddress("Muon",&recoMuon_);
410     }
411    
412     if (dol1extra)
413     {
414     std::cout<<"Setting branch addresses for L1Extra... "<<std::endl;
415     l1extra_ = new L1Analysis::L1AnalysisL1ExtraDataFormat();
416     ftreeExtra->SetBranchAddress("L1Extra",&l1extra_);
417     fChain->AddFriend(ftreeExtra);
418     std::cout << "L1ExtraTree: "<< ftreeExtra->GetEntries() << std::endl;
419     }
420     if ( dol1emuextra){
421     std::cout<<"Setting branch addresses for L1EmuExtra... "<<std::endl;
422     l1emuextra_ = new L1Analysis::L1AnalysisL1ExtraDataFormat();
423     ftreeEmuExtra->SetBranchAddress("L1Extra",&l1emuextra_);
424     fChain->AddFriend(ftreeEmuExtra);
425     std::cout << "L1EmuExtraTree: "<< ftreeEmuExtra->GetEntries() << std::endl;
426     }
427    
428     if (dol1menu)
429     {
430     std::cout<<"Setting branch addresses for L1Menu... "<<std::endl;
431     l1menu_ = new L1Analysis::L1AnalysisL1MenuDataFormat();
432     ftreeMenu->SetBranchAddress("L1Menu",&l1menu_);
433     }
434     if (dol1upgrade)
435     {
436     std::cout<<"Setting branch addresses for L1Upgrade... "<<std::endl;
437     l1upgrade_ = new L1Analysis::L1AnalysisL1ExtraUpgradeDataFormat();
438     ftreeUpgrade->SetBranchAddress("L1ExtraUpgrade",&l1upgrade_);
439     fChain->AddFriend(ftreeUpgrade);
440     std::cout << "L1ExtraUpgradeTree: "<< ftreeUpgrade->GetEntries() << std::endl;
441     }
442    
443     }