ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerMetaInfos.cc
Revision: 1.46
Committed: Thu Nov 19 15:10:33 2009 UTC (15 years, 5 months ago) by loizides
Content type: text/plain
Branch: MAIN
Changes since 1.45: +101 -7 lines
Log Message:
Added L1

File Contents

# User Rev Content
1 loizides 1.46 // $Id: FillerMetaInfos.cc,v 1.45 2009/11/04 13:11:39 loizides Exp $
2 loizides 1.1
3     #include "MitProd/TreeFiller/interface/FillerMetaInfos.h"
4 loizides 1.46 #include "CondFormats/DataRecord/interface/L1GtTriggerMenuRcd.h"
5     #include "CondFormats/L1TObjects/interface/L1GtTriggerMenu.h"
6     #include "CondFormats/L1TObjects/interface/L1GtTriggerMenuFwd.h"
7 loizides 1.1 #include "DataFormats/Common/interface/Handle.h"
8 loizides 1.5 #include "DataFormats/Common/interface/TriggerResults.h"
9 loizides 1.14 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
10 loizides 1.46 #include "DataFormats/L1GlobalTrigger/interface/L1GlobalTriggerRecord.h"
11     #include "FWCore/Framework/interface/ESHandle.h"
12     #include "FWCore/Framework/interface/TriggerNames.h"
13 loizides 1.5 #include "MitAna/DataTree/interface/EventHeader.h"
14     #include "MitAna/DataTree/interface/LAHeader.h"
15 loizides 1.46 #include "MitAna/DataTree/interface/Names.h"
16     #include "MitAna/DataTree/interface/L1TriggerMask.h"
17     #include "MitAna/DataTree/interface/RunInfo.h"
18 loizides 1.25 #include "MitAna/DataTree/interface/TriggerMask.h"
19 loizides 1.46 #include "MitAna/DataTree/interface/TriggerObjectBase.h"
20 loizides 1.41 #include "MitAna/DataTree/interface/TriggerObjectBaseCol.h"
21     #include "MitAna/DataTree/interface/TriggerObjectRelCol.h"
22 loizides 1.34 #include "MitProd/ObjectService/interface/ObjectService.h"
23 loizides 1.8 #include <TObjectTable.h>
24 loizides 1.14 #include <TIterator.h>
25 sixie 1.13
26 loizides 1.1 using namespace std;
27     using namespace edm;
28     using namespace mithep;
29    
30 loizides 1.42 Int_t mithep::FillerMetaInfos::instance_ = 0;
31 loizides 1.12
32 loizides 1.8 //--------------------------------------------------------------------------------------------------
33 loizides 1.26 FillerMetaInfos::FillerMetaInfos(const ParameterSet &cfg, const char *name, bool active) :
34     BaseFiller(cfg,name,(instance_==0||active?1:0)),
35 loizides 1.30 evtName_(Conf().getUntrackedParameter<string>("evtMitName",Names::gkEvtHeaderBrn)),
36 loizides 1.42 runTreeName_(Conf().getUntrackedParameter<string>("runTreeMitName",Names::gkRunTreeName)),
37     lahTreeName_(Conf().getUntrackedParameter<string>("lahTreeMitName",Names::gkLATreeName)),
38     hltTreeName_(Conf().getUntrackedParameter<string>("hltTreeMitName",
39     Form("%s%s",Names::gkHltTreeName,Istr()))),
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 loizides 1.42 hltBitsName_(Conf().getUntrackedParameter<string>("hltBitsMitName",
46     Form("%s%s",Names::gkHltBitBrn,Istr()))),
47     hltObjsName_(Conf().getUntrackedParameter<string>("hltObjsMitName",
48     Form("%s%s",Names::gkHltObjBrn,Istr()))),
49 loizides 1.46 l1Active_(Conf().getUntrackedParameter<bool>("l1Active",true)),
50     l1GTRecName_(Conf().getUntrackedParameter<string>("l1GtRecordEdmName","l1GtRecord")),
51     l1TBitsName_(Conf().getUntrackedParameter<string>("l1TechBitsMitName",
52     Form("%s%s",Names::gkL1TechBitsBrn,Istr()))),
53     l1ABitsName_(Conf().getUntrackedParameter<string>("l1AlgoBitsMitName",
54     Form("%s%s",Names::gkL1AlgoBitsBrn,Istr()))),
55 loizides 1.5 tws_(0),
56 loizides 1.2 eventHeader_(new EventHeader()),
57 loizides 1.3 evtLAHeader_(new LAHeader()),
58 loizides 1.2 runInfo_(new RunInfo()),
59     runTree_(0),
60 loizides 1.3 laTree_(0),
61     runEntries_(0),
62 loizides 1.25 hltBits_(new TriggerMask),
63 loizides 1.22 hltTable_(new vector<string>),
64 loizides 1.16 hltTabMap_(0),
65 loizides 1.22 hltLabels_(new vector<string>),
66 loizides 1.16 hltLabMap_(0),
67     hltObjs_(new TriggerObjectBaseArr),
68     hltRels_(new TriggerObjectRelArr),
69     hltTree_(0),
70     hltEntries_(0),
71 loizides 1.46 fileNum_(0),
72     l1TBits_(new L1TriggerMask),
73     l1ABits_(new L1TriggerMask)
74 loizides 1.1 {
75 loizides 1.3 // Constructor.
76 loizides 1.12
77 loizides 1.38 ++instance_;
78 loizides 1.33
79     if (Conf().exists("hltProcNames"))
80     hltProcNames_ = Conf().getUntrackedParameter<vector<string> >("hltProcNames");
81     if (hltProcNames_.size()==0)
82     hltProcNames_.push_back("HLT");
83 loizides 1.46
84     if (l1Active_ && !hltActive_)
85     PrintErrorAndExit("L1Active set _without_ hltActive set as well is not supported");
86 loizides 1.1 }
87    
88 loizides 1.8 //--------------------------------------------------------------------------------------------------
89 loizides 1.1 FillerMetaInfos::~FillerMetaInfos()
90     {
91 loizides 1.3 // Destructor.
92    
93 loizides 1.2 delete eventHeader_;
94 loizides 1.8 delete evtLAHeader_;
95 loizides 1.2 delete runInfo_;
96 loizides 1.37 delete hltBits_;
97 loizides 1.16 delete hltTable_;
98     delete hltLabels_;
99     delete hltObjs_;
100     delete hltRels_;
101 loizides 1.46 delete l1TBits_;
102     delete l1ABits_;
103 loizides 1.3 eventHeader_ = 0;
104 loizides 1.8 evtLAHeader_ = 0;
105 loizides 1.3 runInfo_ = 0;
106 loizides 1.16 hltTable_ = 0;
107     hltLabels_ = 0;
108     hltObjs_ = 0;
109     hltRels_ = 0;
110 loizides 1.3 runTree_ = 0;
111     laTree_ = 0;
112 loizides 1.16 hltTree_ = 0;
113 loizides 1.1 }
114    
115 loizides 1.8 //--------------------------------------------------------------------------------------------------
116 loizides 1.44 void FillerMetaInfos::BookDataBlock(TreeWriter &tws, const edm::EventSetup &es)
117 loizides 1.1 {
118 loizides 1.30 // Create run info tree and book our branches.
119 loizides 1.3
120     // add branches to main tree
121 loizides 1.42 if (OS()->get<mithep::EventHeader>(evtName_)==0) {
122     tws.AddBranch(evtName_,&eventHeader_);
123     OS()->add<mithep::EventHeader>(eventHeader_,evtName_);
124     }
125 loizides 1.3
126     // add branches to run info tree
127 loizides 1.42 runTree_=tws.GetTree(runTreeName_);
128     if (runTree_==0) {
129     tws.AddBranchToTree(runTreeName_,Names::gkRunInfoBrn,
130     TClass::GetClass(typeid(*runInfo_))->GetName(),&runInfo_);
131     tws.SetAutoFill(runTreeName_,0);
132     runTree_=tws.GetTree(runTreeName_);
133     }
134 loizides 1.3
135     // add branches to lookahead tree
136 loizides 1.42 laTree_=tws.GetTree(lahTreeName_);
137     if (laTree_==0) {
138     tws.AddBranchToTree(lahTreeName_,Names::gkLAHeaderBrn,
139     TClass::GetClass(typeid(*evtLAHeader_))->GetName(),&runInfo_);
140     tws.SetAutoFill(lahTreeName_,0);
141     laTree_=tws.GetTree(lahTreeName_);
142     }
143 loizides 1.3
144 loizides 1.45 // add HLT branches to main tree and to HLT trigger info tree
145     if (hltActive_) {
146     tws.AddBranch(hltBitsName_,&hltBits_);
147     tws.AddBranch(hltObjsName_,&hltObjs_);
148     tws.AddBranch(Form("%sRelation",hltObjsName_.c_str()),&hltRels_);
149    
150     tws.AddBranchToTree(hltTreeName_,hltTableName_,
151     TClass::GetClass(typeid(*hltTable_))->GetName(),&hltTable_,32*1024,0);
152     tws.AddBranchToTree(hltTreeName_,hltLabelName_,
153     TClass::GetClass(typeid(*hltLabels_))->GetName(),&hltLabels_,32*1024,0);
154     tws.SetAutoFill(hltTreeName_,0);
155     hltTree_=tws.GetTree(hltTreeName_);
156     }
157 loizides 1.16
158 loizides 1.46 if (l1Active_) {
159     tws.AddBranch(l1TBitsName_,&l1TBits_);
160     tws.AddBranch(l1ABitsName_,&l1ABits_);
161     }
162    
163 loizides 1.3 // store pointer to tree writer
164     tws_ = &tws;
165 loizides 1.1 }
166    
167 loizides 1.8 //--------------------------------------------------------------------------------------------------
168 loizides 1.36 void FillerMetaInfos::FillDataBlock(const edm::Event &event, const edm::EventSetup &setup)
169 loizides 1.1 {
170 loizides 1.3 // Fill our data structures.
171    
172     // clear map if a new file was opened
173     if (tws_->GetFileNumber()!=fileNum_) {
174     runmap_.clear();
175     fileNum_ = tws_->GetFileNumber();
176     runEntries_ = 0;
177 loizides 1.16 hltEntries_ = -1;
178 loizides 1.3 }
179    
180     UInt_t runnum = event.id().run();
181    
182     // store look ahead information
183     if (runEntries_>0) {
184     evtLAHeader_->SetRunNum(runnum);
185     laTree_->Fill();
186 loizides 1.21 if(0) { // check for memory leak in usage of ROOT objects
187 loizides 1.14 if(laTree_->GetEntries() % 100==0)
188     gObjectTable->Print();
189     }
190 loizides 1.3 }
191    
192 loizides 1.2 // fill event header
193     eventHeader_->SetEvtNum(event.id().event());
194     eventHeader_->SetLumiSec(event.luminosityBlock());
195     eventHeader_->SetRunNum(runnum);
196 loizides 1.27 eventHeader_->SetIsMC(!event.isRealData());
197 loizides 1.35 eventHeader_->SetBunchCrossing(event.bunchCrossing());
198     eventHeader_->SetExpType(event.experimentType());
199     eventHeader_->SetOrbitNumber(event.orbitNumber());
200     eventHeader_->SetStoreNumber(event.bunchCrossing());
201     eventHeader_->SetTimeStamp(event.time().value());
202 loizides 1.2
203 loizides 1.3 // look-up if entry is in map
204 loizides 1.2 map<UInt_t,Int_t>::iterator riter = runmap_.find(runnum);
205     if (riter != runmap_.end()) {
206     Int_t runentry = riter->second;
207     eventHeader_->SetRunEntry(runentry);
208 loizides 1.16 FillHltTrig(event,setup);
209 loizides 1.46 FillL1Trig(event,setup);
210 loizides 1.2 return;
211     }
212 loizides 1.1
213 loizides 1.2 // fill new run info
214     Int_t runentry = runEntries_;
215 loizides 1.16 ++runEntries_;
216 loizides 1.2 eventHeader_->SetRunEntry(runentry);
217     runmap_.insert(pair<UInt_t,Int_t>(runnum,runentry));
218 loizides 1.16 runInfo_->SetRunNum(runnum);
219    
220     Int_t hltentry = hltEntries_;
221 loizides 1.14 FillHltInfo(event,setup);
222 loizides 1.16 FillHltTrig(event,setup);
223 loizides 1.46 FillL1Trig(event,setup);
224 loizides 1.21 if (hltentry < hltEntries_) {
225     runInfo_->SetHltEntry(hltentry);
226 loizides 1.16 hltTree_->Fill();
227 loizides 1.21 } else {
228     runInfo_->SetHltEntry(hltentry-1);
229     }
230 loizides 1.14
231 loizides 1.2 runTree_->Fill();
232 loizides 1.1 }
233 loizides 1.5
234 loizides 1.8 //--------------------------------------------------------------------------------------------------
235 loizides 1.36 void FillerMetaInfos::FillHltInfo(const edm::Event &event, const edm::EventSetup &setup)
236 loizides 1.5 {
237 loizides 1.16 // Fill HLT trigger table if it changed.
238 loizides 1.5
239 loizides 1.36 if (!hltActive_)
240     return;
241 loizides 1.14
242 loizides 1.21 // check if we can access the hlt config information
243 loizides 1.33 if (hltProcName_.empty()) {
244     string teststr;
245 loizides 1.39 for(UInt_t i=0; i<hltProcNames_.size(); ++i) {
246 loizides 1.33 if (i>0)
247     teststr += ", ";
248     teststr += hltProcNames_.at(i);
249     edm::LogInfo("FillerMetaInfos") << "Trying to access hlt config using "
250     << hltProcNames_.at(i) << std::endl;
251    
252     if (hltConfig_.init(hltProcNames_.at(i))) {
253     hltProcName_ = hltProcNames_.at(i);
254     if (hltResName_.find(':')==string::npos)
255     hltResName_ += "::";
256     else
257     hltResName_ += ":";
258     hltResName_ += hltProcName_;
259     if (hltEvtName_.find(':')==string::npos)
260     hltEvtName_ += "::";
261     else
262     hltEvtName_ += ":";
263     hltEvtName_ += hltProcName_;
264     break;
265     }
266     }
267     if (hltProcName_.empty()) {
268     edm::LogError("FillerMetaInfos") << "Cannot access hlt config using "
269     << teststr << std::endl;
270     throw edm::Exception(edm::errors::Configuration, "FillerMetaInfos::FillHltInfo()\n")
271     << "Cannot access hlt config using " << teststr << std::endl;
272     return;
273     }
274     } else {
275     if (!hltConfig_.init(hltProcName_)) {
276     edm::LogError("FillerMetaInfos") << "Cannot access hlt config using "
277     << hltProcName_ << std::endl;
278     throw edm::Exception(edm::errors::Configuration, "FillerMetaInfos::FillHltInfo()\n")
279     << "Cannot access hlt config using " << hltProcName_ << std::endl;
280     return;
281     }
282 loizides 1.16 }
283 loizides 1.14
284 loizides 1.21 // check size of menu... < 256
285 loizides 1.16 if (hltConfig_.size()>hltBits_->Size()) {
286 loizides 1.21 edm::LogError("FillerMetaInfos") << "HLT config contains too many paths "
287 loizides 1.25 << hltConfig_.size() << " > "
288     << hltBits_->Size() << std::endl;
289 loizides 1.16 return;
290     }
291 loizides 1.14
292 loizides 1.22 vector<string> *trigtable = new vector<string>;
293 loizides 1.16 map<string,Short_t> *tabmap = new map<string,Short_t>;
294 loizides 1.22 vector<string> *labels = new vector<string>;
295 loizides 1.16 map<string,Short_t> *labmap = new map<string,Short_t>;
296    
297 loizides 1.28 if (0) {
298     if (!hltConfig_.tableName().empty())
299     trigtable->push_back(hltConfig_.tableName());
300     else
301     trigtable->push_back("unknown_hlt_config");
302     }
303    
304 loizides 1.40 // get HLT trigger object information to be able to access the tag information
305     Handle<trigger::TriggerEvent> triggerEventHLT;
306     GetProduct(hltEvtName_, triggerEventHLT, event);
307     const std::vector<std::string> &tags(triggerEventHLT->collectionTags());
308     for(UInt_t i=0,c=0; i<tags.size(); ++i) {
309     string tag(tags.at(i));
310     if (tag.compare(0,19,"hltL1extraParticles")!=0)
311     continue;
312     if (tag == "hltL1extraParticles::HLT") {
313     if (c==0)
314     tag = "hltL1extraParticles:Muon:HLT";
315     else if (c==1)
316     tag = "hltL1extraParticles:HFRing:HLT";
317     else
318     tag = Form("hltL1extraParticles:Unknown%d:HLT", c);
319     ++c;
320     }
321     map<string,Short_t>::iterator riter = labmap->find(tag);
322     if (riter == labmap->end()) {
323     labmap->insert(pair<string,Short_t>(tag,labels->size()));
324     labels->push_back(tag);
325     }
326     }
327    
328 loizides 1.21 // loop over hlt paths
329 loizides 1.16 for(UInt_t i=0;i<hltConfig_.size();++i) {
330    
331     tabmap->insert(pair<string,Short_t>(hltConfig_.triggerName(i),i));
332 loizides 1.22 trigtable->push_back(hltConfig_.triggerName(i));
333 loizides 1.16 const vector<string> &mLabels(hltConfig_.moduleLabels(i));
334     for (UInt_t j=0; j<mLabels.size(); ++j) {
335 loizides 1.19
336 loizides 1.16 const string& label(mLabels[j]);
337    
338 loizides 1.19 // remove characters which do not work: negation is included as !ModuleName
339     // (this might require a change in the underlying CMSSW HLT fwk, so watch out).
340     const char *lptr = &label[0];
341     if (label[0] == '!')
342     ++lptr;
343    
344     map<string,Short_t>::iterator riter = labmap->find(lptr);
345 loizides 1.16 if (riter == labmap->end()) {
346 loizides 1.22 labmap->insert(pair<string,Short_t>(lptr,labels->size()));
347     labels->push_back(lptr);
348 loizides 1.16 }
349 loizides 1.19
350     const string type(hltConfig_.moduleType(lptr));
351 loizides 1.16 riter = labmap->find(type);
352     if (riter == labmap->end()) {
353 loizides 1.22 labmap->insert(pair<string,Short_t>(type,labels->size()));
354     labels->push_back(type);
355 loizides 1.14 }
356     }
357     }
358    
359 loizides 1.46 if (l1Active_) {
360     edm::ESHandle<L1GtTriggerMenu> menuRcd;
361     setup.get<L1GtTriggerMenuRcd>().get(menuRcd) ;
362     const L1GtTriggerMenu* menu = menuRcd.product();
363    
364     // get l1 algo names
365     int counter = 0;
366     labels->push_back("xxx-L1AlgoNames-xxx");
367     for (CItAlgo algo = menu->gtAlgorithmMap().begin();
368     algo!=menu->gtAlgorithmMap().end(); ++algo) {
369     labels->push_back(algo->second.algoName());
370     ++counter;
371     }
372     if (counter>=l1ABits_->Size()) {
373     edm::LogError("FillerMetaInfos") << "Cannot store more than 64 l1 algo bits, but got "
374     << counter << std::endl;
375     }
376    
377     // get l1 tech names
378     counter = 0;
379     labels->push_back("xxx-l1TechNames-xxx");
380     for (CItAlgo algo = menu->gtTechnicalTriggerMap().begin();
381     algo!=menu->gtTechnicalTriggerMap().end(); ++algo) {
382     labels->push_back(algo->second.algoName());
383     ++counter;
384     }
385     if (counter>=l1TBits_->Size()) {
386     edm::LogError("FillerMetaInfos") << "Cannot store more than 64 l1 technical bits, but got "
387     << counter << std::endl;
388     }
389     }
390    
391 loizides 1.22 if (hltTable_->size()>=0) {
392 loizides 1.32 // check if existing table is equal to new table:
393     // if so keep it, otherwise store the new one
394 loizides 1.21
395 loizides 1.32 if ((hltTable_->size()==trigtable->size()) &&
396     (hltLabels_->size()==labels->size())) {
397 loizides 1.21
398     bool newEntryFound = false;
399 loizides 1.22 for (UInt_t i=0; i<trigtable->size(); ++i) {
400 loizides 1.32 if (trigtable->at(i) != hltTable_->at(i)) {
401 loizides 1.21 newEntryFound = true;
402     break;
403     }
404     }
405     if (!newEntryFound) {
406 loizides 1.22 for (UInt_t i=0; i<labels->size(); ++i) {
407 loizides 1.32 if (labels->at(i) != hltLabels_->at(i)) {
408 loizides 1.21 newEntryFound = true;
409     break;
410     }
411     }
412     }
413    
414     if (!newEntryFound) {
415     if (verbose_>1)
416     cout << "FillHltInfo: Kept previous HLT information" << endl;
417    
418     delete trigtable;
419     delete labels;
420     delete labmap;
421     delete tabmap;
422     return;
423     }
424 loizides 1.16 }
425 loizides 1.20 }
426 loizides 1.16
427 loizides 1.21 // new hlt entry
428 loizides 1.16 delete hltTable_;
429     delete hltLabels_;
430     delete hltTabMap_;
431     delete hltLabMap_;
432     hltTable_ = trigtable;
433     hltLabels_ = labels;
434     hltTabMap_ = tabmap;
435     hltLabMap_ = labmap;
436     hltEntries_++;
437     }
438    
439     //--------------------------------------------------------------------------------------------------
440 loizides 1.36 void FillerMetaInfos::FillHltTrig(const edm::Event &event, const edm::EventSetup &setup)
441 loizides 1.16 {
442     // Fill HLT trigger objects along triggered paths.
443    
444 loizides 1.36 if (!hltActive_)
445     return;
446 loizides 1.16
447     // reset trigger objects
448     hltObjs_->Reset();
449     hltRels_->Reset();
450 loizides 1.14
451 loizides 1.16 // get HLT trigger information
452 loizides 1.14 Handle<TriggerResults> triggerResultsHLT;
453 loizides 1.16 GetProduct(hltResName_, triggerResultsHLT, event);
454 loizides 1.5
455 loizides 1.16 // get HLT trigger object information
456     Handle<trigger::TriggerEvent> triggerEventHLT;
457     GetProduct(hltEvtName_, triggerEventHLT, event);
458    
459     if (verify_)
460     assert(triggerResultsHLT->size()==hltConfig_.size());
461    
462 loizides 1.25 // new bitmask
463 loizides 1.37 BitMask256 maskhlt;
464 loizides 1.16
465 loizides 1.37 // loop over trigger objects and fill them
466     const trigger::TriggerObjectCollection &toc(triggerEventHLT->getObjects());
467 loizides 1.39 const std::vector<std::string> &tags(triggerEventHLT->collectionTags());
468 loizides 1.40 for(UInt_t i=0,iprev=0,c=0; i<tags.size(); ++i) {
469    
470 loizides 1.41 Short_t tnind = -(i+1);
471 loizides 1.40 string tag(tags.at(i));
472     if (tag.compare(0,19,"hltL1extraParticles")==0) {
473     if (tag == "hltL1extraParticles::HLT") {
474     if (c==0)
475     tag = "hltL1extraParticles:Muon:HLT";
476     else if (c==1)
477     tag = "hltL1extraParticles:HFRing:HLT";
478     else
479     tag = Form("hltL1extraParticles:Unknown%d:HLT", c-1);
480     ++c;
481     }
482     map<string,Short_t>::iterator riter = hltLabMap_->find(tag);
483     if (riter != hltLabMap_->end()) {
484 loizides 1.41 tnind = riter->second;
485 loizides 1.40 }
486     }
487    
488 loizides 1.39 UInt_t inext(triggerEventHLT->collectionKey(i));
489     if (verbose_>2)
490 loizides 1.40 cout << i << " " << tag << " with " << inext-iprev << " objects " << endl;
491 loizides 1.39 for (UInt_t k=iprev; k<inext; ++k) {
492     const trigger::TriggerObject &tobj = toc[k];
493     TriggerObjectBase *trigObj = hltObjs_->Allocate();
494     new (trigObj) TriggerObjectBase(tobj.id(),0,tobj.pt(),tobj.eta(),tobj.phi(),tobj.mass());
495 loizides 1.41 trigObj->SetTagInd(tnind);
496 loizides 1.39 if (verbose_>4)
497     cout << " " << k << " " << tobj.id() << " " << tobj.pt() << " " << tobj.eta()
498     << " " << tobj.phi() << " " << tobj.mass() << endl;
499     }
500     iprev = inext;
501 loizides 1.37 }
502 loizides 1.16
503     // loop over trigger paths
504     const UInt_t N = hltConfig_.size();
505     for(UInt_t i=0;i<N;++i) {
506    
507     const string &name(hltConfig_.triggerName(i));
508 loizides 1.40 const UInt_t tind(hltConfig_.triggerIndex(name));
509 loizides 1.16 if (verify_)
510     assert(tind==i);
511    
512     if (verbose_>0)
513     cout << "Trigger: path " << name << " [" << i << "]" << endl;
514    
515     // get our trigger bit
516     map<string,Short_t>::iterator riter = hltTabMap_->find(name);
517     if (riter == hltTabMap_->end()) {
518     PrintErrorAndExit(Form("Trigger %s not found\n", name.c_str()));
519     }
520    
521     UInt_t mytind = riter->second;
522     if (verify_) {
523     if (mytind!=tind)
524     PrintErrorAndExit(Form("Trigger for %s index does not match: %ud %ud\n",
525     name.c_str(), mytind, tind));
526     }
527    
528     // modules on this trigger path
529     const UInt_t M(hltConfig_.size(tind));
530     const UInt_t mind(triggerResultsHLT->index(tind));
531     assert (mind<M);
532    
533     const vector<string> &mLabels(hltConfig_.moduleLabels(tind));
534    
535     if (verbose_>1)
536     cout << " Last active module - label/type: "
537     << mLabels[mind] << "/" << hltConfig_.moduleType(mLabels[mind])
538     << " [" << mind << " out of 0-" << (M-1) << " on this path]" << endl;
539    
540     // loop over modules on path
541     for (UInt_t j=0; j<=mind; ++j) {
542     const string &mLabel(mLabels[j]);
543    
544     // check whether the module is packed up in TriggerEvent product
545     const UInt_t find(triggerEventHLT->filterIndex(InputTag(mLabel,"",hltProcName_)));
546     if (find>=triggerEventHLT->sizeFilters())
547     continue;
548    
549     const string mType(hltConfig_.moduleType(mLabel));
550 loizides 1.37
551     string tType = "L1";
552     if (mType != "HLTLevel1GTSeed")
553     tType = "L3";
554    
555 loizides 1.16 if (verbose_>1)
556 loizides 1.37 cout << " '" << tType << "' filter in slot " << j
557     << " - label/type " << mLabel << "/" << mType << endl;
558 loizides 1.16
559     // find index for module label/type name
560     Short_t modind = -1;
561     map<string,Short_t>::iterator riter = hltLabMap_->find(mLabel);
562     if (riter != hltLabMap_->end()) {
563     modind = riter->second;
564     }
565 loizides 1.17 assert(modind!=-1);
566    
567     Short_t filind = -1;
568 loizides 1.16 riter = hltLabMap_->find(mType);
569     if (riter != hltLabMap_->end()) {
570 loizides 1.17 filind = riter->second;
571 loizides 1.16 }
572 loizides 1.17 assert(filind!=-1);
573 loizides 1.14
574 loizides 1.16 // find trigger objects
575     const trigger::Vids &vids(triggerEventHLT->filterIds(find));
576     const trigger::Keys &keys(triggerEventHLT->filterKeys(find));
577     const trigger::size_type nVids(vids.size());
578     const trigger::size_type nKeys(keys.size());
579     assert(nVids==nKeys);
580    
581     if (verbose_>2)
582 loizides 1.37 cout << " " << nVids << " accepted '" << tType << "' objects found: " << endl;
583 loizides 1.16
584     // loop over trigger objects
585     const trigger::TriggerObjectCollection &toc(triggerEventHLT->getObjects());
586     for (trigger::size_type k=0; k<nVids; ++k) {
587     Int_t tocind = keys[k];
588    
589     const trigger::TriggerObject &tobj(toc[tocind]);
590 loizides 1.37
591 loizides 1.16 if (verbose_>2)
592     cout << " " << k << " " << vids[k] << "/" << keys[k] << ": "
593     << tobj.id() << " " << tobj.pt() << " " << tobj.eta()
594     << " " << tobj.phi() << " " << tobj.mass() << endl;
595    
596     TriggerObjectRel *trigRel = hltRels_->Allocate();
597 loizides 1.37 new (trigRel) TriggerObjectRel(mytind,vids[k],tocind,modind,filind);
598 loizides 1.39 TriggerObjectBase *trigObj = hltObjs_->At(tocind);
599     if (trigObj->Type()==0) {
600     trigObj->SetType(vids[k]);
601     } else {
602     if (trigObj->Type()!=vids[k]) {
603     if (verbose_>3)
604     cout << " -> Have already type " << trigObj->Type()
605     << " ignored new type " << vids[k] << endl;
606     }
607     }
608 loizides 1.16 }
609     }
610 loizides 1.37
611     if (triggerResultsHLT->accept(tind))
612     maskhlt.SetBit(mytind);
613 loizides 1.16 }
614 loizides 1.25
615 loizides 1.37 hltBits_->SetBits(maskhlt);
616 loizides 1.16 hltObjs_->Trim();
617     hltRels_->Trim();
618 loizides 1.5 }
619 loizides 1.42
620     //--------------------------------------------------------------------------------------------------
621 loizides 1.46 void FillerMetaInfos::FillL1Trig(const edm::Event &event, const edm::EventSetup &setup)
622     {
623     // Fill l1 trigger bits after masking.
624    
625     if (!l1Active_)
626     return;
627    
628     // get L1 trigger record information
629     Handle<L1GlobalTriggerRecord> gtRecord;
630     GetProduct(l1GTRecName_, gtRecord, event);
631    
632     // deal with algo bits
633     BitMask64 l1amask;
634     DecisionWord dw = gtRecord->decisionWord();
635     size_t dws = dw.size();
636     if (dws>64)
637     dws = 64;
638     for (size_t i=0; i<dws;++i) {
639     if (dw.at(i))
640     l1amask.SetBit(i);
641     }
642     l1ABits_->SetBits(l1amask);
643    
644     // deal with tech bits
645     BitMask64 l1tmask;
646     TechnicalTriggerWord tw = gtRecord->technicalTriggerWord();
647     size_t tws = tw.size();
648     if (tws>64)
649     tws = 64;
650     for (size_t i=0; i<tws;++i) {
651     if (tw.at(i))
652     l1tmask.SetBit(i);
653     }
654     l1TBits_->SetBits(l1tmask);
655     }
656    
657     //--------------------------------------------------------------------------------------------------
658 loizides 1.42 const char *FillerMetaInfos::Istr() const
659     {
660     // Return instance if instance > 0.
661    
662     if (instance_==0)
663     return "";
664    
665     return Form("_%d",instance_);
666     }