ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerMetaInfos.cc
Revision: 1.36
Committed: Thu Jul 9 10:57:56 2009 UTC (15 years, 9 months ago) by loizides
Content type: text/plain
Branch: MAIN
Changes since 1.35: +53 -11 lines
Log Message:
First attempt to get some L1 info. May have to be reverted.

File Contents

# User Rev Content
1 loizides 1.36 // $Id: FillerMetaInfos.cc,v 1.35 2009/07/06 13:38:04 loizides Exp $
2 loizides 1.1
3     #include "MitProd/TreeFiller/interface/FillerMetaInfos.h"
4 loizides 1.5 #include "FWCore/Framework/interface/TriggerNames.h"
5 loizides 1.36 #include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h"
6     #include "CondFormats/L1TObjects/interface/L1GtTriggerMenuFwd.h"
7     #include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h"
8 loizides 1.1 #include "DataFormats/Common/interface/Handle.h"
9 loizides 1.36 #include "FWCore/Framework/interface/ESHandle.h"
10 loizides 1.5 #include "DataFormats/Common/interface/TriggerResults.h"
11 loizides 1.36 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerReadoutRecord.h"
12 loizides 1.14 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
13 loizides 1.1 #include "MitAna/DataTree/interface/Names.h"
14 loizides 1.5 #include "MitAna/DataTree/interface/EventHeader.h"
15     #include "MitAna/DataTree/interface/LAHeader.h"
16 loizides 1.25 #include "MitAna/DataTree/interface/TriggerMask.h"
17 loizides 1.16 #include "MitAna/DataTree/interface/TriggerName.h"
18 loizides 1.5 #include "MitAna/DataTree/interface/RunInfo.h"
19 loizides 1.34 #include "MitAna/DataTree/interface/TriggerObjectCol.h"
20     #include "MitProd/ObjectService/interface/ObjectService.h"
21 loizides 1.8 #include <TObjectTable.h>
22 loizides 1.14 #include <TIterator.h>
23 sixie 1.13
24 loizides 1.1 using namespace std;
25     using namespace edm;
26     using namespace mithep;
27    
28 loizides 1.12 bool mithep::FillerMetaInfos::instance_ = 0;
29    
30 loizides 1.8 //--------------------------------------------------------------------------------------------------
31 loizides 1.26 FillerMetaInfos::FillerMetaInfos(const ParameterSet &cfg, const char *name, bool active) :
32     BaseFiller(cfg,name,(instance_==0||active?1:0)),
33 loizides 1.30 evtName_(Conf().getUntrackedParameter<string>("evtMitName",Names::gkEvtHeaderBrn)),
34     runName_(Conf().getUntrackedParameter<string>("runMitName",Names::gkRunInfoBrn)),
35     lahName_(Conf().getUntrackedParameter<string>("lahMitName",Names::gkLAHeaderBrn)),
36 loizides 1.16 l1Active_(Conf().getUntrackedParameter<bool>("l1Active",true)),
37 loizides 1.30 l1TableName_(Conf().getUntrackedParameter<string>("l1MitTableName",Names::gkL1TableBrn)),
38     l1BitsName_(Conf().getUntrackedParameter<string>("l1MitBitsName",Names::gkL1BitBrn)),
39     l1ObjsName_(Conf().getUntrackedParameter<string>("l1MitObjsName",Names::gkL1ObjBrn)),
40 loizides 1.16 hltActive_(Conf().getUntrackedParameter<bool>("hltActive",true)),
41 loizides 1.33 hltResName_(Conf().getUntrackedParameter<string>("hltResEdmName","TriggerResults")),
42     hltEvtName_(Conf().getUntrackedParameter<string>("hltEvtEdmName","hltTriggerSummaryAOD")),
43 loizides 1.30 hltTableName_(Conf().getUntrackedParameter<string>("hltTableMitName",Names::gkHltTableBrn)),
44     hltLabelName_(Conf().getUntrackedParameter<string>("hltLabelMitName",Names::gkHltLabelBrn)),
45     hltBitsName_(Conf().getUntrackedParameter<string>("hltBitsMitName",Names::gkHltBitBrn)),
46     hltObjsName_(Conf().getUntrackedParameter<string>("hltObjsMitName",Names::gkHltObjBrn)),
47 loizides 1.5 tws_(0),
48 loizides 1.2 eventHeader_(new EventHeader()),
49 loizides 1.3 evtLAHeader_(new LAHeader()),
50 loizides 1.2 runInfo_(new RunInfo()),
51     runTree_(0),
52 loizides 1.3 laTree_(0),
53     runEntries_(0),
54 loizides 1.16 l1Entries_(0),
55     l1Table_(0),
56     l1Tree_(0),
57 loizides 1.25 hltBits_(new TriggerMask),
58 loizides 1.22 hltTable_(new vector<string>),
59 loizides 1.16 hltTabMap_(0),
60 loizides 1.22 hltLabels_(new vector<string>),
61 loizides 1.16 hltLabMap_(0),
62     hltObjs_(new TriggerObjectBaseArr),
63     hltRels_(new TriggerObjectRelArr),
64     hltTree_(0),
65     hltEntries_(0),
66 loizides 1.3 fileNum_(0)
67 loizides 1.1 {
68 loizides 1.3 // Constructor.
69 loizides 1.12
70     instance_=1;
71 loizides 1.33
72     if (Conf().exists("hltProcNames"))
73     hltProcNames_ = Conf().getUntrackedParameter<vector<string> >("hltProcNames");
74     if (hltProcNames_.size()==0)
75     hltProcNames_.push_back("HLT");
76 loizides 1.1 }
77    
78 loizides 1.8 //--------------------------------------------------------------------------------------------------
79 loizides 1.1 FillerMetaInfos::~FillerMetaInfos()
80     {
81 loizides 1.3 // Destructor.
82    
83 loizides 1.2 delete eventHeader_;
84 loizides 1.8 delete evtLAHeader_;
85 loizides 1.2 delete runInfo_;
86 loizides 1.16 delete l1Table_;
87     delete hltTable_;
88     delete hltLabels_;
89     delete hltObjs_;
90     delete hltRels_;
91 loizides 1.3 eventHeader_ = 0;
92 loizides 1.8 evtLAHeader_ = 0;
93 loizides 1.3 runInfo_ = 0;
94 loizides 1.16 l1Table_ = 0;
95     hltTable_ = 0;
96     hltLabels_ = 0;
97     hltObjs_ = 0;
98     hltRels_ = 0;
99 loizides 1.3 runTree_ = 0;
100     laTree_ = 0;
101 loizides 1.16 hltTree_ = 0;
102     l1Tree_ = 0;
103 loizides 1.1 }
104    
105 loizides 1.8 //--------------------------------------------------------------------------------------------------
106 loizides 1.2 void FillerMetaInfos::BookDataBlock(TreeWriter &tws)
107 loizides 1.1 {
108 loizides 1.30 // Create run info tree and book our branches.
109 loizides 1.3
110     // add branches to main tree
111 loizides 1.27 tws.AddBranch(evtName_,&eventHeader_);
112     OS()->add<mithep::EventHeader>(eventHeader_,evtName_);
113     tws.AddBranch(hltBitsName_,&hltBits_);
114     tws.AddBranch(hltObjsName_,&hltObjs_);
115 loizides 1.16 tws.AddBranch(Form("%sRelation",hltObjsName_.c_str()),&hltRels_);
116 loizides 1.20 tws.GetTree()->BranchRef();
117 loizides 1.3
118     // add branches to run info tree
119 loizides 1.27 tws.AddBranchToTree(Names::gkRunTreeName,runName_,
120 loizides 1.25 TClass::GetClass(typeid(*runInfo_))->GetName(),&runInfo_);
121 loizides 1.2 tws.SetAutoFill(Names::gkRunTreeName,0);
122     runTree_=tws.GetTree(Names::gkRunTreeName);
123 loizides 1.3
124     // add branches to lookahead tree
125 loizides 1.24 tws.AddBranchToTree(Names::gkLATreeName,Names::gkLAHeaderBrn,
126 loizides 1.25 TClass::GetClass(typeid(*evtLAHeader_))->GetName(),&runInfo_);
127 loizides 1.3 tws.SetAutoFill(Names::gkLATreeName,0);
128     laTree_=tws.GetTree(Names::gkLATreeName);
129    
130 loizides 1.16 // add branches to L1 trigger info tree
131    
132     // add branches to HLT trigger info tree
133 loizides 1.27 tws.AddBranchToTree(Names::gkHltTreeName,hltTableName_,
134 loizides 1.29 TClass::GetClass(typeid(*hltTable_))->GetName(),&hltTable_,32*1024,0);
135 loizides 1.27 tws.AddBranchToTree(Names::gkHltTreeName,hltLabelName_,
136 loizides 1.29 TClass::GetClass(typeid(*hltLabels_))->GetName(),&hltLabels_,32*1024,0);
137 loizides 1.16 tws.SetAutoFill(Names::gkHltTreeName,0);
138     hltTree_=tws.GetTree(Names::gkHltTreeName);
139    
140 loizides 1.3 // store pointer to tree writer
141     tws_ = &tws;
142 loizides 1.1 }
143    
144 loizides 1.8 //--------------------------------------------------------------------------------------------------
145 loizides 1.36 void FillerMetaInfos::FillDataBlock(const edm::Event &event, const edm::EventSetup &setup)
146 loizides 1.1 {
147 loizides 1.3 // Fill our data structures.
148    
149     // clear map if a new file was opened
150     if (tws_->GetFileNumber()!=fileNum_) {
151     runmap_.clear();
152     fileNum_ = tws_->GetFileNumber();
153     runEntries_ = 0;
154 loizides 1.16 l1Entries_ = -1;
155     hltEntries_ = -1;
156 loizides 1.3 }
157    
158     UInt_t runnum = event.id().run();
159    
160     // store look ahead information
161     if (runEntries_>0) {
162     evtLAHeader_->SetRunNum(runnum);
163     laTree_->Fill();
164 loizides 1.21 if(0) { // check for memory leak in usage of ROOT objects
165 loizides 1.14 if(laTree_->GetEntries() % 100==0)
166     gObjectTable->Print();
167     }
168 loizides 1.3 }
169    
170 loizides 1.2 // fill event header
171     eventHeader_->SetEvtNum(event.id().event());
172     eventHeader_->SetLumiSec(event.luminosityBlock());
173     eventHeader_->SetRunNum(runnum);
174 loizides 1.27 eventHeader_->SetIsMC(!event.isRealData());
175 loizides 1.35 eventHeader_->SetBunchCrossing(event.bunchCrossing());
176     eventHeader_->SetExpType(event.experimentType());
177     eventHeader_->SetOrbitNumber(event.orbitNumber());
178     eventHeader_->SetStoreNumber(event.bunchCrossing());
179     eventHeader_->SetTimeStamp(event.time().value());
180 loizides 1.2
181 loizides 1.3 // look-up if entry is in map
182 loizides 1.2 map<UInt_t,Int_t>::iterator riter = runmap_.find(runnum);
183     if (riter != runmap_.end()) {
184     Int_t runentry = riter->second;
185     eventHeader_->SetRunEntry(runentry);
186 loizides 1.16 FillHltTrig(event,setup);
187 loizides 1.2 return;
188     }
189 loizides 1.1
190 loizides 1.2 // fill new run info
191     Int_t runentry = runEntries_;
192 loizides 1.16 ++runEntries_;
193 loizides 1.2 eventHeader_->SetRunEntry(runentry);
194     runmap_.insert(pair<UInt_t,Int_t>(runnum,runentry));
195 loizides 1.16 runInfo_->SetRunNum(runnum);
196    
197     Int_t l1entry = l1Entries_;
198 loizides 1.36 FillL1Info(event,setup);
199     FillL1Trig(event,setup);
200 loizides 1.21 if (l1entry < l1Entries_) {
201     l1Tree_->Fill();
202     runInfo_->SetL1Entry(l1entry);
203     } else {
204     runInfo_->SetL1Entry(l1entry-1);
205     }
206 loizides 1.2
207 loizides 1.16 Int_t hltentry = hltEntries_;
208 loizides 1.14 FillHltInfo(event,setup);
209 loizides 1.16 FillHltTrig(event,setup);
210 loizides 1.21 if (hltentry < hltEntries_) {
211     runInfo_->SetHltEntry(hltentry);
212 loizides 1.16 hltTree_->Fill();
213 loizides 1.21 } else {
214     runInfo_->SetHltEntry(hltentry-1);
215     }
216 loizides 1.14
217 loizides 1.2 runTree_->Fill();
218 loizides 1.1 }
219 loizides 1.5
220 loizides 1.8 //--------------------------------------------------------------------------------------------------
221 loizides 1.36 void FillerMetaInfos::FillHltInfo(const edm::Event &event, const edm::EventSetup &setup)
222 loizides 1.5 {
223 loizides 1.16 // Fill HLT trigger table if it changed.
224 loizides 1.5
225 loizides 1.36 if (!hltActive_)
226     return;
227 loizides 1.14
228 loizides 1.21 // check if we can access the hlt config information
229 loizides 1.33 if (hltProcName_.empty()) {
230     string teststr;
231     for(unsigned int i=0; i<hltProcNames_.size(); ++i) {
232     if (i>0)
233     teststr += ", ";
234     teststr += hltProcNames_.at(i);
235     edm::LogInfo("FillerMetaInfos") << "Trying to access hlt config using "
236     << hltProcNames_.at(i) << std::endl;
237    
238     if (hltConfig_.init(hltProcNames_.at(i))) {
239     hltProcName_ = hltProcNames_.at(i);
240     if (hltResName_.find(':')==string::npos)
241     hltResName_ += "::";
242     else
243     hltResName_ += ":";
244     hltResName_ += hltProcName_;
245     if (hltEvtName_.find(':')==string::npos)
246     hltEvtName_ += "::";
247     else
248     hltEvtName_ += ":";
249     hltEvtName_ += hltProcName_;
250     break;
251     }
252     }
253     if (hltProcName_.empty()) {
254     edm::LogError("FillerMetaInfos") << "Cannot access hlt config using "
255     << teststr << std::endl;
256     throw edm::Exception(edm::errors::Configuration, "FillerMetaInfos::FillHltInfo()\n")
257     << "Cannot access hlt config using " << teststr << std::endl;
258     return;
259     }
260     } else {
261     if (!hltConfig_.init(hltProcName_)) {
262     edm::LogError("FillerMetaInfos") << "Cannot access hlt config using "
263     << hltProcName_ << std::endl;
264     throw edm::Exception(edm::errors::Configuration, "FillerMetaInfos::FillHltInfo()\n")
265     << "Cannot access hlt config using " << hltProcName_ << std::endl;
266     return;
267     }
268 loizides 1.16 }
269 loizides 1.14
270 loizides 1.21 // check size of menu... < 256
271 loizides 1.16 if (hltConfig_.size()>hltBits_->Size()) {
272 loizides 1.21 edm::LogError("FillerMetaInfos") << "HLT config contains too many paths "
273 loizides 1.25 << hltConfig_.size() << " > "
274     << hltBits_->Size() << std::endl;
275 loizides 1.16 return;
276     }
277 loizides 1.14
278 loizides 1.22 vector<string> *trigtable = new vector<string>;
279 loizides 1.16 map<string,Short_t> *tabmap = new map<string,Short_t>;
280 loizides 1.22 vector<string> *labels = new vector<string>;
281 loizides 1.16 map<string,Short_t> *labmap = new map<string,Short_t>;
282    
283 loizides 1.28 if (0) {
284     if (!hltConfig_.tableName().empty())
285     trigtable->push_back(hltConfig_.tableName());
286     else
287     trigtable->push_back("unknown_hlt_config");
288     }
289    
290 loizides 1.21 // loop over hlt paths
291 loizides 1.16 for(UInt_t i=0;i<hltConfig_.size();++i) {
292    
293     tabmap->insert(pair<string,Short_t>(hltConfig_.triggerName(i),i));
294 loizides 1.22 trigtable->push_back(hltConfig_.triggerName(i));
295 loizides 1.16 const vector<string> &mLabels(hltConfig_.moduleLabels(i));
296     for (UInt_t j=0; j<mLabels.size(); ++j) {
297 loizides 1.19
298 loizides 1.16 const string& label(mLabels[j]);
299    
300 loizides 1.19 // remove characters which do not work: negation is included as !ModuleName
301     // (this might require a change in the underlying CMSSW HLT fwk, so watch out).
302     const char *lptr = &label[0];
303     if (label[0] == '!')
304     ++lptr;
305    
306     map<string,Short_t>::iterator riter = labmap->find(lptr);
307 loizides 1.16 if (riter == labmap->end()) {
308 loizides 1.22 labmap->insert(pair<string,Short_t>(lptr,labels->size()));
309     labels->push_back(lptr);
310 loizides 1.16 }
311 loizides 1.19
312     const string type(hltConfig_.moduleType(lptr));
313 loizides 1.16 riter = labmap->find(type);
314     if (riter == labmap->end()) {
315 loizides 1.22 labmap->insert(pair<string,Short_t>(type,labels->size()));
316     labels->push_back(type);
317 loizides 1.14 }
318     }
319     }
320    
321 loizides 1.22 if (hltTable_->size()>=0) {
322 loizides 1.32 // check if existing table is equal to new table:
323     // if so keep it, otherwise store the new one
324 loizides 1.21
325 loizides 1.32 if ((hltTable_->size()==trigtable->size()) &&
326     (hltLabels_->size()==labels->size())) {
327 loizides 1.21
328     bool newEntryFound = false;
329 loizides 1.22 for (UInt_t i=0; i<trigtable->size(); ++i) {
330 loizides 1.32 if (trigtable->at(i) != hltTable_->at(i)) {
331 loizides 1.21 newEntryFound = true;
332     break;
333     }
334     }
335     if (!newEntryFound) {
336 loizides 1.22 for (UInt_t i=0; i<labels->size(); ++i) {
337 loizides 1.32 if (labels->at(i) != hltLabels_->at(i)) {
338 loizides 1.21 newEntryFound = true;
339     break;
340     }
341     }
342     }
343    
344     if (!newEntryFound) {
345     if (verbose_>1)
346     cout << "FillHltInfo: Kept previous HLT information" << endl;
347    
348     delete trigtable;
349     delete labels;
350     delete labmap;
351     delete tabmap;
352     return;
353     }
354 loizides 1.16 }
355 loizides 1.20 }
356 loizides 1.16
357 loizides 1.21 // new hlt entry
358 loizides 1.16 delete hltTable_;
359     delete hltLabels_;
360     delete hltTabMap_;
361     delete hltLabMap_;
362     hltTable_ = trigtable;
363     hltLabels_ = labels;
364     hltTabMap_ = tabmap;
365     hltLabMap_ = labmap;
366     hltEntries_++;
367     }
368    
369     //--------------------------------------------------------------------------------------------------
370 loizides 1.36 void FillerMetaInfos::FillHltTrig(const edm::Event &event, const edm::EventSetup &setup)
371 loizides 1.16 {
372     // Fill HLT trigger objects along triggered paths.
373    
374 loizides 1.36 if (!hltActive_)
375     return;
376 loizides 1.16
377     // reset trigger objects
378     hltObjs_->Reset();
379     hltRels_->Reset();
380 loizides 1.14
381 loizides 1.16 // get HLT trigger information
382 loizides 1.14 Handle<TriggerResults> triggerResultsHLT;
383 loizides 1.16 GetProduct(hltResName_, triggerResultsHLT, event);
384 loizides 1.5
385 loizides 1.16 // get HLT trigger object information
386     Handle<trigger::TriggerEvent> triggerEventHLT;
387     GetProduct(hltEvtName_, triggerEventHLT, event);
388    
389     if (verify_)
390     assert(triggerResultsHLT->size()==hltConfig_.size());
391    
392 loizides 1.25 // new bitmask
393     BitMask256 mask;
394 loizides 1.16
395 loizides 1.29 //map between EDM and our trigger object indices
396 loizides 1.16 std::map<Int_t,Int_t> objmap;
397    
398     // loop over trigger paths
399     const UInt_t N = hltConfig_.size();
400     for(UInt_t i=0;i<N;++i) {
401    
402     const string &name(hltConfig_.triggerName(i));
403     const UInt_t tind(hltConfig_.triggerIndex(name.c_str()));
404     if (verify_)
405     assert(tind==i);
406    
407     if (verbose_>0)
408     cout << "Trigger: path " << name << " [" << i << "]" << endl;
409    
410     if (!triggerResultsHLT->accept(tind))
411     continue;
412    
413     // get our trigger bit
414     map<string,Short_t>::iterator riter = hltTabMap_->find(name);
415     if (riter == hltTabMap_->end()) {
416     PrintErrorAndExit(Form("Trigger %s not found\n", name.c_str()));
417     }
418    
419     UInt_t mytind = riter->second;
420     if (verify_) {
421     if (mytind!=tind)
422     PrintErrorAndExit(Form("Trigger for %s index does not match: %ud %ud\n",
423     name.c_str(), mytind, tind));
424     }
425    
426     // set trigger bit
427 loizides 1.25 mask.SetBit(mytind);
428 sixie 1.13
429 loizides 1.16 // modules on this trigger path
430     const UInt_t M(hltConfig_.size(tind));
431     const UInt_t mind(triggerResultsHLT->index(tind));
432     assert (mind<M);
433    
434     const vector<string> &mLabels(hltConfig_.moduleLabels(tind));
435    
436     if (verbose_>1)
437     cout << " Last active module - label/type: "
438     << mLabels[mind] << "/" << hltConfig_.moduleType(mLabels[mind])
439     << " [" << mind << " out of 0-" << (M-1) << " on this path]" << endl;
440    
441     // loop over modules on path
442     for (UInt_t j=0; j<=mind; ++j) {
443     const string &mLabel(mLabels[j]);
444    
445     // check whether the module is packed up in TriggerEvent product
446     const UInt_t find(triggerEventHLT->filterIndex(InputTag(mLabel,"",hltProcName_)));
447     if (find>=triggerEventHLT->sizeFilters())
448     continue;
449    
450     const string mType(hltConfig_.moduleType(mLabel));
451     if (verbose_>1)
452     cout << " 'L3' filter in slot " << j << " - label/type "
453     << mLabel << "/" << mType << endl;
454    
455     // find index for module label/type name
456     Short_t modind = -1;
457     map<string,Short_t>::iterator riter = hltLabMap_->find(mLabel);
458     if (riter != hltLabMap_->end()) {
459     modind = riter->second;
460     }
461 loizides 1.17 assert(modind!=-1);
462    
463     Short_t filind = -1;
464 loizides 1.16 riter = hltLabMap_->find(mType);
465     if (riter != hltLabMap_->end()) {
466 loizides 1.17 filind = riter->second;
467 loizides 1.16 }
468 loizides 1.17 assert(filind!=-1);
469 loizides 1.14
470 loizides 1.16 // find trigger objects
471     const trigger::Vids &vids(triggerEventHLT->filterIds(find));
472     const trigger::Keys &keys(triggerEventHLT->filterKeys(find));
473     const trigger::size_type nVids(vids.size());
474     const trigger::size_type nKeys(keys.size());
475     assert(nVids==nKeys);
476    
477     if (verbose_>2)
478     cout << " " << nVids << " accepted 'L3' objects found: " << endl;
479    
480     // loop over trigger objects
481     const trigger::TriggerObjectCollection &toc(triggerEventHLT->getObjects());
482     for (trigger::size_type k=0; k<nVids; ++k) {
483     Int_t tocind = keys[k];
484    
485     // get trigger object
486     const trigger::TriggerObject &tobj(toc[tocind]);
487     if (verbose_>2)
488     cout << " " << k << " " << vids[k] << "/" << keys[k] << ": "
489     << tobj.id() << " " << tobj.pt() << " " << tobj.eta()
490     << " " << tobj.phi() << " " << tobj.mass() << endl;
491    
492     // look-up if entry is in map
493     Int_t objind = -1;
494     map<Int_t,Int_t>::iterator riter = objmap.find(tocind);
495     if (riter == objmap.end()) { // add new trigger object
496     objind = hltObjs_->Entries();
497     objmap.insert(pair<Int_t,Int_t>(tocind,objind));
498     TriggerObjectBase *trigObj = hltObjs_->Allocate();
499 loizides 1.17 new (trigObj) TriggerObjectBase(tobj.id(),tobj.pt(),tobj.eta(),tobj.phi(),tobj.mass());
500 loizides 1.16 } else { // use existing trigger object
501     objind = riter->second;
502     }
503 loizides 1.14
504 loizides 1.16 TriggerObjectRel *trigRel = hltRels_->Allocate();
505 loizides 1.17 new (trigRel) TriggerObjectRel(mytind,vids[k],objind,modind,filind);
506 loizides 1.16 }
507     }
508     }
509 loizides 1.25
510     hltBits_->SetBits(mask);
511 loizides 1.16 hltObjs_->Trim();
512     hltRels_->Trim();
513 loizides 1.5 }
514 loizides 1.36
515     //--------------------------------------------------------------------------------------------------
516     void FillerMetaInfos::FillL1Info(const edm::Event &event, const edm::EventSetup &setup)
517     {
518     //
519    
520     }
521    
522     //--------------------------------------------------------------------------------------------------
523     void FillerMetaInfos::FillL1Trig(const edm::Event &event, const edm::EventSetup &setup)
524     {
525     //
526    
527     edm::ESHandle<L1GtTriggerMenu> l1GtMenu;
528     setup.get<L1GtTriggerMenuRcd>().get(l1GtMenu);
529     const AlgorithmMap &algorithmMap = l1GtMenu->gtAlgorithmMap();
530    
531     for (CItAlgo itAlgo = algorithmMap.begin(); itAlgo != algorithmMap.end(); itAlgo++) {
532     int bitNumber = (itAlgo->second).algoBitNumber();
533     string algoName = (itAlgo->second).algoName();
534     //algoBitToAlgo[bitNumber] = &(itAlgo->second);
535     cout << " " << bitNumber << algoName << endl;
536     }
537    
538     edm::Handle<L1GlobalTriggerReadoutRecord> l1Handle;
539     GetProduct("gtDigis", l1Handle, event);
540     //l1Handle->print(cout);
541     l1Handle->printL1Objects(cout);
542    
543     const DecisionWord dWord = l1Handle->decisionWord();
544     for(int i = 0;i!=128;i++){
545     //std::string trig(algorithmMap[i]);
546     bool r=dWord.at(i);
547     //std::cout << trig << " " << r << std::endl;
548     }
549    
550    
551     }