ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/MitProd/TreeFiller/src/FillerMetaInfos.cc
Revision: 1.41
Committed: Mon Jul 13 10:39:35 2009 UTC (15 years, 9 months ago) by loizides
Content type: text/plain
Branch: MAIN
CVS Tags: Mit_010
Changes since 1.40: +7 -5 lines
Log Message:
Updated for changes in trigger classes

File Contents

# User Rev Content
1 loizides 1.41 // $Id: FillerMetaInfos.cc,v 1.40 2009/07/13 08:50:42 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.12 bool mithep::FillerMetaInfos::instance_ = 0;
26    
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     runName_(Conf().getUntrackedParameter<string>("runMitName",Names::gkRunInfoBrn)),
32     lahName_(Conf().getUntrackedParameter<string>("lahMitName",Names::gkLAHeaderBrn)),
33 loizides 1.16 hltActive_(Conf().getUntrackedParameter<bool>("hltActive",true)),
34 loizides 1.33 hltResName_(Conf().getUntrackedParameter<string>("hltResEdmName","TriggerResults")),
35     hltEvtName_(Conf().getUntrackedParameter<string>("hltEvtEdmName","hltTriggerSummaryAOD")),
36 loizides 1.30 hltTableName_(Conf().getUntrackedParameter<string>("hltTableMitName",Names::gkHltTableBrn)),
37     hltLabelName_(Conf().getUntrackedParameter<string>("hltLabelMitName",Names::gkHltLabelBrn)),
38     hltBitsName_(Conf().getUntrackedParameter<string>("hltBitsMitName",Names::gkHltBitBrn)),
39     hltObjsName_(Conf().getUntrackedParameter<string>("hltObjsMitName",Names::gkHltObjBrn)),
40 loizides 1.5 tws_(0),
41 loizides 1.2 eventHeader_(new EventHeader()),
42 loizides 1.3 evtLAHeader_(new LAHeader()),
43 loizides 1.2 runInfo_(new RunInfo()),
44     runTree_(0),
45 loizides 1.3 laTree_(0),
46     runEntries_(0),
47 loizides 1.25 hltBits_(new TriggerMask),
48 loizides 1.22 hltTable_(new vector<string>),
49 loizides 1.16 hltTabMap_(0),
50 loizides 1.22 hltLabels_(new vector<string>),
51 loizides 1.16 hltLabMap_(0),
52     hltObjs_(new TriggerObjectBaseArr),
53     hltRels_(new TriggerObjectRelArr),
54     hltTree_(0),
55     hltEntries_(0),
56 loizides 1.3 fileNum_(0)
57 loizides 1.1 {
58 loizides 1.3 // Constructor.
59 loizides 1.12
60 loizides 1.38 assert(instance_ == 0);
61     ++instance_;
62 loizides 1.33
63     if (Conf().exists("hltProcNames"))
64     hltProcNames_ = Conf().getUntrackedParameter<vector<string> >("hltProcNames");
65     if (hltProcNames_.size()==0)
66     hltProcNames_.push_back("HLT");
67 loizides 1.1 }
68    
69 loizides 1.8 //--------------------------------------------------------------------------------------------------
70 loizides 1.1 FillerMetaInfos::~FillerMetaInfos()
71     {
72 loizides 1.3 // Destructor.
73    
74 loizides 1.2 delete eventHeader_;
75 loizides 1.8 delete evtLAHeader_;
76 loizides 1.2 delete runInfo_;
77 loizides 1.37 delete hltBits_;
78 loizides 1.16 delete hltTable_;
79     delete hltLabels_;
80     delete hltObjs_;
81     delete hltRels_;
82 loizides 1.3 eventHeader_ = 0;
83 loizides 1.8 evtLAHeader_ = 0;
84 loizides 1.3 runInfo_ = 0;
85 loizides 1.16 hltTable_ = 0;
86     hltLabels_ = 0;
87     hltObjs_ = 0;
88     hltRels_ = 0;
89 loizides 1.3 runTree_ = 0;
90     laTree_ = 0;
91 loizides 1.16 hltTree_ = 0;
92 loizides 1.1 }
93    
94 loizides 1.8 //--------------------------------------------------------------------------------------------------
95 loizides 1.2 void FillerMetaInfos::BookDataBlock(TreeWriter &tws)
96 loizides 1.1 {
97 loizides 1.30 // Create run info tree and book our branches.
98 loizides 1.3
99     // add branches to main tree
100 loizides 1.27 tws.AddBranch(evtName_,&eventHeader_);
101     OS()->add<mithep::EventHeader>(eventHeader_,evtName_);
102     tws.AddBranch(hltBitsName_,&hltBits_);
103     tws.AddBranch(hltObjsName_,&hltObjs_);
104 loizides 1.16 tws.AddBranch(Form("%sRelation",hltObjsName_.c_str()),&hltRels_);
105 loizides 1.20 tws.GetTree()->BranchRef();
106 loizides 1.3
107     // add branches to run info tree
108 loizides 1.27 tws.AddBranchToTree(Names::gkRunTreeName,runName_,
109 loizides 1.25 TClass::GetClass(typeid(*runInfo_))->GetName(),&runInfo_);
110 loizides 1.2 tws.SetAutoFill(Names::gkRunTreeName,0);
111     runTree_=tws.GetTree(Names::gkRunTreeName);
112 loizides 1.3
113     // add branches to lookahead tree
114 loizides 1.24 tws.AddBranchToTree(Names::gkLATreeName,Names::gkLAHeaderBrn,
115 loizides 1.25 TClass::GetClass(typeid(*evtLAHeader_))->GetName(),&runInfo_);
116 loizides 1.3 tws.SetAutoFill(Names::gkLATreeName,0);
117     laTree_=tws.GetTree(Names::gkLATreeName);
118    
119 loizides 1.16 // add branches to HLT trigger info tree
120 loizides 1.27 tws.AddBranchToTree(Names::gkHltTreeName,hltTableName_,
121 loizides 1.29 TClass::GetClass(typeid(*hltTable_))->GetName(),&hltTable_,32*1024,0);
122 loizides 1.27 tws.AddBranchToTree(Names::gkHltTreeName,hltLabelName_,
123 loizides 1.29 TClass::GetClass(typeid(*hltLabels_))->GetName(),&hltLabels_,32*1024,0);
124 loizides 1.16 tws.SetAutoFill(Names::gkHltTreeName,0);
125     hltTree_=tws.GetTree(Names::gkHltTreeName);
126    
127 loizides 1.3 // store pointer to tree writer
128     tws_ = &tws;
129 loizides 1.1 }
130    
131 loizides 1.8 //--------------------------------------------------------------------------------------------------
132 loizides 1.36 void FillerMetaInfos::FillDataBlock(const edm::Event &event, const edm::EventSetup &setup)
133 loizides 1.1 {
134 loizides 1.3 // Fill our data structures.
135    
136     // clear map if a new file was opened
137     if (tws_->GetFileNumber()!=fileNum_) {
138     runmap_.clear();
139     fileNum_ = tws_->GetFileNumber();
140     runEntries_ = 0;
141 loizides 1.16 hltEntries_ = -1;
142 loizides 1.3 }
143    
144     UInt_t runnum = event.id().run();
145    
146     // store look ahead information
147     if (runEntries_>0) {
148     evtLAHeader_->SetRunNum(runnum);
149     laTree_->Fill();
150 loizides 1.21 if(0) { // check for memory leak in usage of ROOT objects
151 loizides 1.14 if(laTree_->GetEntries() % 100==0)
152     gObjectTable->Print();
153     }
154 loizides 1.3 }
155    
156 loizides 1.2 // fill event header
157     eventHeader_->SetEvtNum(event.id().event());
158     eventHeader_->SetLumiSec(event.luminosityBlock());
159     eventHeader_->SetRunNum(runnum);
160 loizides 1.27 eventHeader_->SetIsMC(!event.isRealData());
161 loizides 1.35 eventHeader_->SetBunchCrossing(event.bunchCrossing());
162     eventHeader_->SetExpType(event.experimentType());
163     eventHeader_->SetOrbitNumber(event.orbitNumber());
164     eventHeader_->SetStoreNumber(event.bunchCrossing());
165     eventHeader_->SetTimeStamp(event.time().value());
166 loizides 1.2
167 loizides 1.3 // look-up if entry is in map
168 loizides 1.2 map<UInt_t,Int_t>::iterator riter = runmap_.find(runnum);
169     if (riter != runmap_.end()) {
170     Int_t runentry = riter->second;
171     eventHeader_->SetRunEntry(runentry);
172 loizides 1.16 FillHltTrig(event,setup);
173 loizides 1.2 return;
174     }
175 loizides 1.1
176 loizides 1.2 // fill new run info
177     Int_t runentry = runEntries_;
178 loizides 1.16 ++runEntries_;
179 loizides 1.2 eventHeader_->SetRunEntry(runentry);
180     runmap_.insert(pair<UInt_t,Int_t>(runnum,runentry));
181 loizides 1.16 runInfo_->SetRunNum(runnum);
182    
183     Int_t hltentry = hltEntries_;
184 loizides 1.14 FillHltInfo(event,setup);
185 loizides 1.16 FillHltTrig(event,setup);
186 loizides 1.21 if (hltentry < hltEntries_) {
187     runInfo_->SetHltEntry(hltentry);
188 loizides 1.16 hltTree_->Fill();
189 loizides 1.21 } else {
190     runInfo_->SetHltEntry(hltentry-1);
191     }
192 loizides 1.14
193 loizides 1.2 runTree_->Fill();
194 loizides 1.1 }
195 loizides 1.5
196 loizides 1.8 //--------------------------------------------------------------------------------------------------
197 loizides 1.36 void FillerMetaInfos::FillHltInfo(const edm::Event &event, const edm::EventSetup &setup)
198 loizides 1.5 {
199 loizides 1.16 // Fill HLT trigger table if it changed.
200 loizides 1.5
201 loizides 1.36 if (!hltActive_)
202     return;
203 loizides 1.14
204 loizides 1.21 // check if we can access the hlt config information
205 loizides 1.33 if (hltProcName_.empty()) {
206     string teststr;
207 loizides 1.39 for(UInt_t i=0; i<hltProcNames_.size(); ++i) {
208 loizides 1.33 if (i>0)
209     teststr += ", ";
210     teststr += hltProcNames_.at(i);
211     edm::LogInfo("FillerMetaInfos") << "Trying to access hlt config using "
212     << hltProcNames_.at(i) << std::endl;
213    
214     if (hltConfig_.init(hltProcNames_.at(i))) {
215     hltProcName_ = hltProcNames_.at(i);
216     if (hltResName_.find(':')==string::npos)
217     hltResName_ += "::";
218     else
219     hltResName_ += ":";
220     hltResName_ += hltProcName_;
221     if (hltEvtName_.find(':')==string::npos)
222     hltEvtName_ += "::";
223     else
224     hltEvtName_ += ":";
225     hltEvtName_ += hltProcName_;
226     break;
227     }
228     }
229     if (hltProcName_.empty()) {
230     edm::LogError("FillerMetaInfos") << "Cannot access hlt config using "
231     << teststr << std::endl;
232     throw edm::Exception(edm::errors::Configuration, "FillerMetaInfos::FillHltInfo()\n")
233     << "Cannot access hlt config using " << teststr << std::endl;
234     return;
235     }
236     } else {
237     if (!hltConfig_.init(hltProcName_)) {
238     edm::LogError("FillerMetaInfos") << "Cannot access hlt config using "
239     << hltProcName_ << std::endl;
240     throw edm::Exception(edm::errors::Configuration, "FillerMetaInfos::FillHltInfo()\n")
241     << "Cannot access hlt config using " << hltProcName_ << std::endl;
242     return;
243     }
244 loizides 1.16 }
245 loizides 1.14
246 loizides 1.21 // check size of menu... < 256
247 loizides 1.16 if (hltConfig_.size()>hltBits_->Size()) {
248 loizides 1.21 edm::LogError("FillerMetaInfos") << "HLT config contains too many paths "
249 loizides 1.25 << hltConfig_.size() << " > "
250     << hltBits_->Size() << std::endl;
251 loizides 1.16 return;
252     }
253 loizides 1.14
254 loizides 1.22 vector<string> *trigtable = new vector<string>;
255 loizides 1.16 map<string,Short_t> *tabmap = new map<string,Short_t>;
256 loizides 1.22 vector<string> *labels = new vector<string>;
257 loizides 1.16 map<string,Short_t> *labmap = new map<string,Short_t>;
258    
259 loizides 1.28 if (0) {
260     if (!hltConfig_.tableName().empty())
261     trigtable->push_back(hltConfig_.tableName());
262     else
263     trigtable->push_back("unknown_hlt_config");
264     }
265    
266 loizides 1.40 // get HLT trigger object information to be able to access the tag information
267     Handle<trigger::TriggerEvent> triggerEventHLT;
268     GetProduct(hltEvtName_, triggerEventHLT, event);
269     const std::vector<std::string> &tags(triggerEventHLT->collectionTags());
270     for(UInt_t i=0,c=0; i<tags.size(); ++i) {
271     string tag(tags.at(i));
272     if (tag.compare(0,19,"hltL1extraParticles")!=0)
273     continue;
274     if (tag == "hltL1extraParticles::HLT") {
275     if (c==0)
276     tag = "hltL1extraParticles:Muon:HLT";
277     else if (c==1)
278     tag = "hltL1extraParticles:HFRing:HLT";
279     else
280     tag = Form("hltL1extraParticles:Unknown%d:HLT", c);
281     ++c;
282     }
283     map<string,Short_t>::iterator riter = labmap->find(tag);
284     if (riter == labmap->end()) {
285     labmap->insert(pair<string,Short_t>(tag,labels->size()));
286     labels->push_back(tag);
287     }
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 loizides 1.37 BitMask256 maskhlt;
394 loizides 1.16
395 loizides 1.37 // loop over trigger objects and fill them
396     const trigger::TriggerObjectCollection &toc(triggerEventHLT->getObjects());
397 loizides 1.39 const std::vector<std::string> &tags(triggerEventHLT->collectionTags());
398 loizides 1.40 for(UInt_t i=0,iprev=0,c=0; i<tags.size(); ++i) {
399    
400 loizides 1.41 Short_t tnind = -(i+1);
401 loizides 1.40 string tag(tags.at(i));
402     if (tag.compare(0,19,"hltL1extraParticles")==0) {
403     if (tag == "hltL1extraParticles::HLT") {
404     if (c==0)
405     tag = "hltL1extraParticles:Muon:HLT";
406     else if (c==1)
407     tag = "hltL1extraParticles:HFRing:HLT";
408     else
409     tag = Form("hltL1extraParticles:Unknown%d:HLT", c-1);
410     ++c;
411     }
412     map<string,Short_t>::iterator riter = hltLabMap_->find(tag);
413     if (riter != hltLabMap_->end()) {
414 loizides 1.41 tnind = riter->second;
415 loizides 1.40 }
416     }
417    
418 loizides 1.39 UInt_t inext(triggerEventHLT->collectionKey(i));
419     if (verbose_>2)
420 loizides 1.40 cout << i << " " << tag << " with " << inext-iprev << " objects " << endl;
421 loizides 1.39 for (UInt_t k=iprev; k<inext; ++k) {
422     const trigger::TriggerObject &tobj = toc[k];
423     TriggerObjectBase *trigObj = hltObjs_->Allocate();
424     new (trigObj) TriggerObjectBase(tobj.id(),0,tobj.pt(),tobj.eta(),tobj.phi(),tobj.mass());
425 loizides 1.41 trigObj->SetTagInd(tnind);
426 loizides 1.39 if (verbose_>4)
427     cout << " " << k << " " << tobj.id() << " " << tobj.pt() << " " << tobj.eta()
428     << " " << tobj.phi() << " " << tobj.mass() << endl;
429     }
430     iprev = inext;
431 loizides 1.37 }
432 loizides 1.16
433     // loop over trigger paths
434     const UInt_t N = hltConfig_.size();
435     for(UInt_t i=0;i<N;++i) {
436    
437     const string &name(hltConfig_.triggerName(i));
438 loizides 1.40 const UInt_t tind(hltConfig_.triggerIndex(name));
439 loizides 1.16 if (verify_)
440     assert(tind==i);
441    
442     if (verbose_>0)
443     cout << "Trigger: path " << name << " [" << i << "]" << endl;
444    
445     // get our trigger bit
446     map<string,Short_t>::iterator riter = hltTabMap_->find(name);
447     if (riter == hltTabMap_->end()) {
448     PrintErrorAndExit(Form("Trigger %s not found\n", name.c_str()));
449     }
450    
451     UInt_t mytind = riter->second;
452     if (verify_) {
453     if (mytind!=tind)
454     PrintErrorAndExit(Form("Trigger for %s index does not match: %ud %ud\n",
455     name.c_str(), mytind, tind));
456     }
457    
458     // modules on this trigger path
459     const UInt_t M(hltConfig_.size(tind));
460     const UInt_t mind(triggerResultsHLT->index(tind));
461     assert (mind<M);
462    
463     const vector<string> &mLabels(hltConfig_.moduleLabels(tind));
464    
465     if (verbose_>1)
466     cout << " Last active module - label/type: "
467     << mLabels[mind] << "/" << hltConfig_.moduleType(mLabels[mind])
468     << " [" << mind << " out of 0-" << (M-1) << " on this path]" << endl;
469    
470     // loop over modules on path
471     for (UInt_t j=0; j<=mind; ++j) {
472     const string &mLabel(mLabels[j]);
473    
474     // check whether the module is packed up in TriggerEvent product
475     const UInt_t find(triggerEventHLT->filterIndex(InputTag(mLabel,"",hltProcName_)));
476     if (find>=triggerEventHLT->sizeFilters())
477     continue;
478    
479     const string mType(hltConfig_.moduleType(mLabel));
480 loizides 1.37
481     string tType = "L1";
482     if (mType != "HLTLevel1GTSeed")
483     tType = "L3";
484    
485 loizides 1.16 if (verbose_>1)
486 loizides 1.37 cout << " '" << tType << "' filter in slot " << j
487     << " - label/type " << mLabel << "/" << mType << endl;
488 loizides 1.16
489     // find index for module label/type name
490     Short_t modind = -1;
491     map<string,Short_t>::iterator riter = hltLabMap_->find(mLabel);
492     if (riter != hltLabMap_->end()) {
493     modind = riter->second;
494     }
495 loizides 1.17 assert(modind!=-1);
496    
497     Short_t filind = -1;
498 loizides 1.16 riter = hltLabMap_->find(mType);
499     if (riter != hltLabMap_->end()) {
500 loizides 1.17 filind = riter->second;
501 loizides 1.16 }
502 loizides 1.17 assert(filind!=-1);
503 loizides 1.14
504 loizides 1.16 // find trigger objects
505     const trigger::Vids &vids(triggerEventHLT->filterIds(find));
506     const trigger::Keys &keys(triggerEventHLT->filterKeys(find));
507     const trigger::size_type nVids(vids.size());
508     const trigger::size_type nKeys(keys.size());
509     assert(nVids==nKeys);
510    
511     if (verbose_>2)
512 loizides 1.37 cout << " " << nVids << " accepted '" << tType << "' objects found: " << endl;
513 loizides 1.16
514     // loop over trigger objects
515     const trigger::TriggerObjectCollection &toc(triggerEventHLT->getObjects());
516     for (trigger::size_type k=0; k<nVids; ++k) {
517     Int_t tocind = keys[k];
518    
519     const trigger::TriggerObject &tobj(toc[tocind]);
520 loizides 1.37
521 loizides 1.16 if (verbose_>2)
522     cout << " " << k << " " << vids[k] << "/" << keys[k] << ": "
523     << tobj.id() << " " << tobj.pt() << " " << tobj.eta()
524     << " " << tobj.phi() << " " << tobj.mass() << endl;
525    
526     TriggerObjectRel *trigRel = hltRels_->Allocate();
527 loizides 1.37 new (trigRel) TriggerObjectRel(mytind,vids[k],tocind,modind,filind);
528 loizides 1.39 TriggerObjectBase *trigObj = hltObjs_->At(tocind);
529     if (trigObj->Type()==0) {
530     trigObj->SetType(vids[k]);
531     } else {
532     if (trigObj->Type()!=vids[k]) {
533     if (verbose_>3)
534     cout << " -> Have already type " << trigObj->Type()
535     << " ignored new type " << vids[k] << endl;
536     }
537     }
538 loizides 1.16 }
539     }
540 loizides 1.37
541     if (triggerResultsHLT->accept(tind))
542     maskhlt.SetBit(mytind);
543 loizides 1.16 }
544 loizides 1.25
545 loizides 1.37 hltBits_->SetBits(maskhlt);
546 loizides 1.16 hltObjs_->Trim();
547     hltRels_->Trim();
548 loizides 1.5 }