ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerMetaInfos.cc
Revision: 1.14
Committed: Wed Sep 10 03:31:02 2008 UTC (16 years, 7 months ago) by loizides
Content type: text/plain
Branch: MAIN
Changes since 1.13: +117 -21 lines
Log Message:
Cleanup

File Contents

# User Rev Content
1 loizides 1.14 // $Id: FillerMetaInfos.cc,v 1.13 2008/08/18 11:16:13 sixie Exp $
2 loizides 1.1
3     #include "MitProd/TreeFiller/interface/FillerMetaInfos.h"
4     #include "FWCore/MessageLogger/interface/MessageLogger.h"
5 loizides 1.5 #include "FWCore/Framework/interface/TriggerNames.h"
6 loizides 1.1 #include "DataFormats/Common/interface/Handle.h"
7 loizides 1.5 #include "DataFormats/Common/interface/TriggerResults.h"
8 loizides 1.14 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
9 loizides 1.1 #include "MitAna/DataTree/interface/Names.h"
10 loizides 1.5 #include "MitAna/DataTree/interface/EventHeader.h"
11     #include "MitAna/DataTree/interface/LAHeader.h"
12 loizides 1.14 #include "MitAna/DataTree/interface/TriggerName.h"
13 loizides 1.5 #include "MitAna/DataTree/interface/RunInfo.h"
14 loizides 1.8 #include <TObjectTable.h>
15 loizides 1.14 #include <THashTable.h>
16     #include <TIterator.h>
17 sixie 1.13
18 loizides 1.1 using namespace std;
19     using namespace edm;
20     using namespace mithep;
21    
22 loizides 1.12 bool mithep::FillerMetaInfos::instance_ = 0;
23    
24 loizides 1.8 //--------------------------------------------------------------------------------------------------
25 loizides 1.7 FillerMetaInfos::FillerMetaInfos(const ParameterSet &cfg, bool active) :
26 loizides 1.12 BaseFiller(cfg,"MetaInfos",(instance_==0||active?1:0)),
27 sixie 1.13 hltActive_(Conf().getUntrackedParameter<bool>("hltActive",true)),
28 loizides 1.14 l1Active_(Conf().getUntrackedParameter<bool>("l1Active",true)),
29 loizides 1.2 evtName_(Conf().getUntrackedParameter<string>("evtName",Names::gkEvtHeaderBrn)),
30     runName_(Conf().getUntrackedParameter<string>("runName",Names::gkRunInfoBrn)),
31 loizides 1.4 lahName_(Conf().getUntrackedParameter<string>("lahName",Names::gkLAHeaderBrn)),
32 loizides 1.5 hltName_(Conf().getUntrackedParameter<string>("hltName","TriggerResults")),
33     l1tName_(Conf().getUntrackedParameter<string>("l1tName","todo")),
34     tws_(0),
35 loizides 1.2 eventHeader_(new EventHeader()),
36 loizides 1.3 evtLAHeader_(new LAHeader()),
37 loizides 1.2 runInfo_(new RunInfo()),
38     runTree_(0),
39 loizides 1.3 laTree_(0),
40     runEntries_(0),
41     fileNum_(0)
42 loizides 1.1 {
43 loizides 1.3 // Constructor.
44 loizides 1.12
45     instance_=1;
46 loizides 1.1 }
47    
48 loizides 1.8 //--------------------------------------------------------------------------------------------------
49 loizides 1.1 FillerMetaInfos::~FillerMetaInfos()
50     {
51 loizides 1.3 // Destructor.
52    
53 loizides 1.2 delete eventHeader_;
54 loizides 1.8 delete evtLAHeader_;
55 loizides 1.2 delete runInfo_;
56 loizides 1.3 eventHeader_ = 0;
57 loizides 1.8 evtLAHeader_ = 0;
58 loizides 1.3 runInfo_ = 0;
59     runTree_ = 0;
60     laTree_ = 0;
61 loizides 1.1 }
62    
63 loizides 1.8 //--------------------------------------------------------------------------------------------------
64 loizides 1.2 void FillerMetaInfos::BookDataBlock(TreeWriter &tws)
65 loizides 1.1 {
66 loizides 1.3 // Create run info tre and book our branches.
67    
68     // add branches to main tree
69 loizides 1.2 tws.AddBranch(evtName_.c_str(),"mithep::EventHeader",&eventHeader_);
70 loizides 1.3
71     // add branches to run info tree
72     tws.AddBranchToTree(Names::gkRunTreeName,runName_.c_str(),"mithep::RunInfo",&runInfo_);
73 loizides 1.2 tws.SetAutoFill(Names::gkRunTreeName,0);
74     runTree_=tws.GetTree(Names::gkRunTreeName);
75 loizides 1.3
76     // add branches to lookahead tree
77     tws.AddBranchToTree(Names::gkLATreeName,Names::gkLAHeaderBrn,"mithep::LAHeader",&evtLAHeader_);
78     tws.SetAutoFill(Names::gkLATreeName,0);
79     laTree_=tws.GetTree(Names::gkLATreeName);
80    
81     // store pointer to tree writer
82     tws_ = &tws;
83 loizides 1.1 }
84    
85 loizides 1.8 //--------------------------------------------------------------------------------------------------
86 loizides 1.5 void FillerMetaInfos::FillDataBlock(const edm::Event &event,
87 loizides 1.1 const edm::EventSetup &setup)
88     {
89 loizides 1.3 // Fill our data structures.
90    
91     // clear map if a new file was opened
92     if (tws_->GetFileNumber()!=fileNum_) {
93     runmap_.clear();
94     fileNum_ = tws_->GetFileNumber();
95     runEntries_ = 0;
96     }
97    
98     UInt_t runnum = event.id().run();
99    
100     // store look ahead information
101     if (runEntries_>0) {
102     evtLAHeader_->SetRunNum(runnum);
103     laTree_->Fill();
104 loizides 1.14 if(0) {
105     if(laTree_->GetEntries() % 100==0)
106     gObjectTable->Print();
107     }
108 loizides 1.3 }
109    
110 loizides 1.2 // fill event header
111     eventHeader_->SetEvtNum(event.id().event());
112     eventHeader_->SetLumiSec(event.luminosityBlock());
113     eventHeader_->SetRunNum(runnum);
114    
115 loizides 1.3 // look-up if entry is in map
116 loizides 1.2 map<UInt_t,Int_t>::iterator riter = runmap_.find(runnum);
117     if (riter != runmap_.end()) {
118     Int_t runentry = riter->second;
119     eventHeader_->SetRunEntry(runentry);
120 loizides 1.14
121     // FillHltTrigger(event,setup);
122 loizides 1.2 return;
123     }
124 loizides 1.1
125 loizides 1.2 // fill new run info
126     Int_t runentry = runEntries_;
127     eventHeader_->SetRunEntry(runentry);
128     runmap_.insert(pair<UInt_t,Int_t>(runnum,runentry));
129    
130     runInfo_->SetRunNum(runnum);
131 loizides 1.14 FillHltInfo(event,setup);
132     //FillHltTrigger(event,setup);
133    
134 loizides 1.2 runTree_->Fill();
135 loizides 1.3
136 loizides 1.2 ++runEntries_;
137 loizides 1.1 }
138 loizides 1.5
139 loizides 1.8 //--------------------------------------------------------------------------------------------------
140 loizides 1.5 void FillerMetaInfos::FillHltInfo(const edm::Event &event,
141     const edm::EventSetup &setup)
142     {
143     //
144    
145 loizides 1.14 if (!hltActive_) return;
146    
147     using namespace reco;
148     using namespace trigger;
149    
150     ParameterSet ps;
151     if (!event.getProcessParameterSet("HLT",ps))
152     {
153     // todo error...
154     return;
155     }
156    
157     typedef std::vector<std::string> vstring;
158    
159 loizides 1.5 Handle<TriggerResults> triggerResultsHLT;
160 loizides 1.14 GetProduct(hltName_, triggerResultsHLT, event);
161    
162     THashTable trigtable(1000,0);
163     THashTable modtable(1000,0);
164     THashTable testtable(1000,0);
165 sixie 1.13
166 loizides 1.14 TriggerNames triggerNames(*(triggerResultsHLT.product()));
167     for(UInt_t i=0;i<triggerNames.size();++i) {
168    
169     TriggerName *trig = new TriggerName(triggerNames.triggerName(i).c_str(),i);
170     trigtable.Add(trig);
171    
172     if (!ps.exists(triggerNames.triggerName(i))) {
173     cout << "Error " << triggerNames.triggerName(i) << " not found" << endl;
174     } else {
175     vstring path(ps.getParameter<vstring>(triggerNames.triggerName(i)));
176     for(UInt_t j=0;j<path.size();++j) {
177     TriggerName *mod = new TriggerName(path.at(j).c_str(),j);
178     if(!modtable.FindObject(mod->Name()))
179     modtable.Add(mod);
180     TriggerName *mod2 = new TriggerName(path.at(j).c_str(),i);
181     testtable.Add(mod2);
182     }
183     }
184     }
185    
186     trigtable.Rehash(trigtable.GetSize());
187     modtable.Rehash(modtable.GetSize());
188     testtable.Rehash(modtable.GetSize());
189     cout << "------------- " << testtable.AverageCollisions() << endl;
190     TIterator *iter = modtable.MakeIterator();
191     while( TriggerName *t = dynamic_cast<TriggerName*>(iter->Next()) ) {
192     cout << t->Name()
193     << ": " << modtable.Collisions(t->Name())
194     << ": " << testtable.Collisions(t->Name()) << endl;
195 loizides 1.5 }
196 loizides 1.14
197     #if 0
198     Handle<TriggerEvent> handle;
199     GetProduct("hltTriggerSummaryAOD", handle, event);
200    
201     Handle<TriggerResults> triggerResultsHLT;
202     GetProduct(hltName_, triggerResultsHLT, event);
203 loizides 1.5
204 sixie 1.13 //This gives names of trigger paths and the accept bit.
205 loizides 1.5 TriggerNames triggerNames(*(triggerResultsHLT.product()));
206     for(UInt_t i=0;i<triggerNames.size();++i) {
207 loizides 1.14 // cout << i << " " << triggerNames.triggerName(i) << " " << triggerResultsHLT->accept(i) << " "
208     // << triggerResultsHLT->index(i) << endl;
209 loizides 1.5 }
210 sixie 1.13
211 loizides 1.14
212     if (1) {
213     cout << "Used Processname: " << handle->usedProcessName() << endl;
214     const size_type nC(handle->sizeCollections());
215     cout << "Number of packed Collections: " << nC << endl;
216     cout << "The Collections: #, tag, 1-past-end index" << endl;
217     for (size_type iC=0; iC!=nC; ++iC) {
218     cout << iC << " "
219     << handle->collectionTag(iC).encode() << " "
220     << handle->collectionKey(iC) << endl;
221     }
222     const size_type nO(handle->sizeObjects());
223     cout << "Number of TriggerObjects: " << nO << endl;
224     cout << "The TriggerObjects: #, id, pt, eta, phi, mass" << endl;
225     const TriggerObjectCollection& TOC(handle->getObjects());
226     for (size_type iO=0; iO!=nO; ++iO) {
227     const TriggerObject& TO(TOC[iO]);
228     cout << iO << " " << TO.id() << " " << TO.pt() << " " << TO.eta() << " " << TO.phi() << " " << TO.mass() << endl;
229     }
230     const size_type nF(handle->sizeFilters());
231     cout << "Number of TriggerFilters: " << nF << endl;
232     cout << "The Filters: #, tag, #ids/#keys, the id/key pairs" << endl;
233     for (size_type iF=0; iF!=nF; ++iF) {
234     const Vids& VIDS (handle->filterIds(iF));
235     const Keys& KEYS(handle->filterKeys(iF));
236     const size_type nI(VIDS.size());
237     const size_type nK(KEYS.size());
238     cout << iF << " " << handle->filterTag(iF).encode()
239     << " " << nI << "/" << nK
240     << " the pairs: ";
241     const size_type n(max(nI,nK));
242     for (size_type i=0; i!=n; ++i) {
243     cout << " " << VIDS[i] << "/" << KEYS[i];
244     }
245     cout << endl;
246     assert (nI==nK);
247     }
248     } else {
249     cout << "Handle invalid! Check InputTag provided." << endl;
250     }
251     cout << endl;
252    
253     #endif
254    
255    
256 loizides 1.5 }