ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/VHbbAnalysis/VHbbDataFormats/interface/TriggerReader.h
Revision: 1.1
Committed: Fri Jul 29 15:31:50 2011 UTC (13 years, 9 months ago) by arizzi
Content type: text/plain
Branch: MAIN
CVS Tags: AndreaAug10th
Log Message:
updates with trigger and macro update

File Contents

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