ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerMetaInfos.cc
Revision: 1.44
Committed: Fri Sep 25 08:42:50 2009 UTC (15 years, 7 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_011a
Changes since 1.43: +2 -2 lines
Log Message:
Extended interface of BookDataBlock to contain event setup.

File Contents

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