15 |
|
public: |
16 |
|
TriggerReader(bool passAllEvents=false) : passAll(passAllEvents) {} |
17 |
|
|
18 |
< |
void setEvent( fwlite::Event * e) { ev=e;} |
18 |
> |
void setEvent( fwlite::Event * e,const char * process ="HLT") { |
19 |
> |
ev=e; |
20 |
> |
if(!passAll) { |
21 |
> |
hTriggerResults.getByLabel(*ev,"TriggerResults","",process); |
22 |
> |
run = ev->eventAuxiliary().id().run(); |
23 |
> |
} |
24 |
> |
} |
25 |
|
|
26 |
|
bool accept(const std::string & triggername) |
27 |
|
{ |
28 |
|
if(passAll) return true; |
23 |
– |
fwlite::Handle<edm::TriggerResults> hTriggerResults; |
24 |
– |
hTriggerResults.getByLabel(*ev,"TriggerResults","","HLT"); |
29 |
|
|
30 |
|
|
31 |
|
regex_t regex; |
32 |
|
int reti; |
33 |
|
|
34 |
|
|
31 |
– |
reti = regcomp(®ex, triggername.c_str(), 0); |
32 |
– |
// reti = regcomp(®ex, "HLT_Ele32_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v.*", 0); |
33 |
– |
if( reti ){ std::cerr << "Could not compile regex" << std::endl;} |
35 |
|
|
36 |
|
|
37 |
|
std::map<std::string,size_t>::iterator nit; |
38 |
< |
if(ev->getRun().run() != cacheRun[triggername] || nameMap.find(triggername) == nameMap.end()) |
38 |
> |
if(run != cacheRun[triggername] || nameMap.find(triggername) == nameMap.end()) |
39 |
|
{ |
40 |
< |
std::cout << "new run" << ev->getRun().run() << std::endl; |
41 |
< |
cacheRun[triggername]=ev->getRun().run(); |
40 |
> |
|
41 |
> |
reti = regcomp(®ex, triggername.c_str(), 0); |
42 |
> |
// reti = regcomp(®ex, "HLT_Ele32_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v.*", 0); |
43 |
> |
if( reti ){ std::cerr << "Could not compile regex" << std::endl;} |
44 |
> |
|
45 |
> |
std::cout << "new run" << run << std::endl; |
46 |
> |
// cacheRun[triggername]=ev->getRun().run(); |
47 |
> |
cacheRun[triggername]=run; |
48 |
|
edm::TriggerNames const& triggerNames = ev->triggerNames(*hTriggerResults); |
49 |
|
std::string oldiname="whatever"; |
50 |
|
nit=nameMap.find(triggername); |
57 |
|
if(nit==nameMap.end() || ( regexec(®ex, oldiname.c_str(), 0, NULL, 0) != 0 )) //; ! oldiname.Contains( TRegexp(triggername)) ) // changed, search it |
58 |
|
{ |
59 |
|
std::cout << "searching " << triggername << std::endl; |
60 |
+ |
nameMap[triggername]=100000000; |
61 |
|
for (unsigned i = 0; i < triggerNames.size(); ++i) { |
62 |
|
std::string iname(triggerNames.triggerName(i)); |
63 |
|
|
69 |
|
} |
70 |
|
|
71 |
|
} |
64 |
– |
} |
72 |
|
regfree(®ex); |
73 |
+ |
} |
74 |
|
nit=nameMap.find(triggername); |
75 |
|
if(nit==nameMap.end()) |
76 |
|
{ |
77 |
|
std::cout << "ERROR: trigger name not found" << std::endl; |
78 |
< |
edm::TriggerNames const& triggerNames = ev->triggerNames(*hTriggerResults); |
78 |
> |
// edm::TriggerNames const& triggerNames = ev->triggerNames(*hTriggerResults); |
79 |
|
// for (unsigned i = 0; i < triggerNames.size(); ++i) std::cout << triggerNames.triggerName(i) << " is bit " << i << "looking for: "<< triggername << std::endl; |
80 |
|
nameMap[triggername]=100000000; // meaning not found in this run |
81 |
|
|
86 |
|
} |
87 |
|
|
88 |
|
private: |
89 |
+ |
fwlite::Handle<edm::TriggerResults> hTriggerResults; |
90 |
|
std::map<std::string,size_t> nameMap; |
91 |
|
std::map<std::string,size_t> cacheRun; |
92 |
|
// unsigned int cacheRun; |
93 |
|
fwlite::Event * ev; |
94 |
|
bool passAll; |
95 |
+ |
unsigned int run; |
96 |
|
|
97 |
|
}; |
98 |
|
|