ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/interface/TriggerReader.h
Revision: 1.2
Committed: Tue Aug 23 10:54:50 2011 UTC (13 years, 8 months ago) by arizzi
Content type: text/plain
Branch: MAIN
CVS Tags: VHBB_EDMNtupleV3
Changes since 1.1: +3 -1 lines
Log Message:
cleanup histo maker and make functions for booking

File Contents

# Content
1 #ifndef TRIGGERREADER_H
2 #define TRIGGERREADER_H
3 #include "DataFormats/FWLite/interface/Event.h"
4 #include "DataFormats/FWLite/interface/Handle.h"
5 #include "DataFormats/Common/interface/TriggerResults.h"
6 #include "FWCore/Common/interface/TriggerNames.h"
7 #include <string>
8 #include <map>
9 #include <TString.h>
10 #include <TRegexp.h>
11 #include <regex.h>
12 #include <stdio.h>
13
14 class TriggerReader {
15 public:
16 TriggerReader(bool passAllEvents=false) : cacheRun(0), passAll(passAllEvents) {}
17
18 void setEvent( fwlite::Event * e) { ev=e;}
19
20 bool accept(const std::string & triggername)
21 {
22 if(passAll) return true;
23 fwlite::Handle<edm::TriggerResults> hTriggerResults;
24 hTriggerResults.getByLabel(*ev,"TriggerResults","","HLT");
25
26
27 regex_t regex;
28 int reti;
29
30
31 reti = regcomp(&regex, triggername.c_str(), 0);
32 // reti = regcomp(&regex, "HLT_Ele32_CaloIdVT_CaloIsoT_TrkIdT_TrkIsoT_v.*", 0);
33 if( reti ){ std::cerr << "Could not compile regex" << std::endl;}
34
35
36 std::map<std::string,size_t>::iterator nit;
37 if(ev->getRun().run() != cacheRun || nameMap.find(triggername) == nameMap.end())
38 {
39 cacheRun=ev->getRun().run();
40 edm::TriggerNames const& triggerNames = ev->triggerNames(*hTriggerResults);
41 std::string oldiname="whatever";
42 nit=nameMap.find(triggername);
43 if(nit!=nameMap.end() && nit->second < triggerNames.size())
44 {
45 oldiname=triggerNames.triggerName(nit->second);
46 }
47 // std::cout << "whatever3" << std::endl;
48 // std::cout << "reg1 " << regexec(&regex, oldiname.c_str(), 0, NULL, 0) << std::endl;
49 if(nit==nameMap.end() || ( regexec(&regex, oldiname.c_str(), 0, NULL, 0) != 0 )) //; ! oldiname.Contains( TRegexp(triggername)) ) // changed, search it
50 {
51 std::cout << "searching " << triggername << std::endl;
52 for (unsigned i = 0; i < triggerNames.size(); ++i) {
53 std::string iname(triggerNames.triggerName(i));
54
55 if( regexec(&regex, iname.c_str(), 0, NULL, 0) == 0 ) //iname.Contains(TRegexp(triggername)) )
56 {
57 nameMap[triggername]= i;
58 std::cout << "FOUND: " << triggerNames.triggerName(i) << " is bit " << i << std::endl;
59 }
60 }
61
62 }
63 }
64 nit=nameMap.find(triggername);
65 if(nit==nameMap.end())
66 {
67 std::cout << "ERROR: trigger name not found" << std::endl;
68 edm::TriggerNames const& triggerNames = ev->triggerNames(*hTriggerResults);
69 for (unsigned i = 0; i < triggerNames.size(); ++i) std::cout << triggerNames.triggerName(i) << " is bit " << i << "looking for: "<< triggername << std::endl;
70
71
72 return false;
73 }
74 return hTriggerResults->accept(nit->second);
75 }
76
77 private:
78 std::map<std::string,size_t> nameMap;
79 unsigned int cacheRun;
80 fwlite::Event * ev;
81 bool passAll;
82
83 };
84
85 #endif