ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/UserCode/Betchart/TopRefTuple/interface/Tuple_Triggers.h
Revision: 1.2
Committed: Fri Nov 9 22:05:46 2012 UTC (12 years, 5 months ago) by bbetchar
Content type: text/plain
Branch: MAIN
CVS Tags: V00-03-02, V00-03-01, V00-02-02, V00-02-01, V00-02-00, V00-01-05, V00-01-04, V00-01-03, V00-01-02, V00-01-01, V00-01-00, HEAD
Changes since 1.1: +10 -93 lines
Log Message:
modernize trigger storage

File Contents

# User Rev Content
1 bbetchar 1.1 #ifndef TUPLE_TRIGGERS
2     #define TUPLE_TRIGGERS
3    
4     #include <algorithm>
5    
6     #include "FWCore/Framework/interface/EDProducer.h"
7     #include "FWCore/Framework/interface/Frameworkfwd.h"
8     #include "FWCore/Framework/interface/Event.h"
9     #include "DataFormats/HLTReco/interface/TriggerEvent.h"
10     #include "DataFormats/Common/interface/TriggerResults.h"
11     #include "FWCore/Common/interface/TriggerNames.h"
12     #include "HLTrigger/HLTcore/interface/HLTConfigProvider.h"
13     #include "FWCore/Utilities/interface/InputTag.h"
14    
15     class Tuple_Triggers : public edm::EDProducer
16     {
17     public:
18     explicit Tuple_Triggers(const edm::ParameterSet& conf)
19     : inputTag (conf.getParameter<edm::InputTag>("InputTag"))
20     , tag_( conf.getParameter<edm::InputTag>("TriggerEventInputTag"))
21     , run_(-1)
22     {
23     produces <bool> ( "hltHandleValid");
24     produces <std::string> ( "hltKey");
25     produces <std::map<std::string,int> > ("prescaled");
26     }
27    
28     private:
29     edm::InputTag inputTag;
30     HLTConfigProvider hltConfig;
31 bbetchar 1.2 const edm::InputTag tag_;
32 bbetchar 1.1 int run_;
33    
34     void produce( edm::Event& event, const edm::EventSetup& setup) {
35    
36     if ( int(event.getRun().run()) != run_ ) {
37     // Set process name using method here: https://hypernews.cern.ch/HyperNews/CMS/get/physTools/1791/1/1/1/1/1/2.html
38     if ( inputTag.process().empty() ) {
39 bbetchar 1.2 edm::Handle<trigger::TriggerEvent> tmp;
40     event.getByLabel( tag_, tmp );
41     if( tmp.isValid() ) { inputTag = edm::InputTag( inputTag.label(), inputTag.instance(), tmp.provenance()->processName() ); }
42 bbetchar 1.1 else { edm::LogError( "Tuple_Triggers" ) << "[SusyCAF::produce] Cannot retrieve TriggerEvent product for " << tag_; }
43     }
44     // Initialise HLTConfigProvider
45     bool hltChanged = false;
46     if (!hltConfig.init(event.getRun(), setup, inputTag.process(), hltChanged) ) {
47     edm::LogError( "Tuple_Triggers" ) << "HLT config initialization error with process name \"" << inputTag.process() << "\".";
48     } else if ( hltConfig.size() < 1 ) {
49     edm::LogError( "Tuple_Triggers" ) << "HLT config has zero size.";
50     }
51     }
52 bbetchar 1.2 //run_ = event.getRun().run() // Can this save time, and is it safe?
53 bbetchar 1.1
54     edm::Handle<edm::TriggerResults> results;
55     event.getByLabel( inputTag, results );
56    
57     std::auto_ptr<std::map<std::string,int> > prescaled(new std::map<std::string,int>());
58    
59     if(results.isValid()) {
60     const edm::TriggerNames& names = event.triggerNames(*results);
61 bbetchar 1.2 for(unsigned i=0; i < results->size(); i++)
62     if (results->accept(i))
63     (*prescaled)[names.triggerName(i)] = hltConfig.prescaleValue(event,setup,names.triggerName(i));
64     }
65    
66 bbetchar 1.1 event.put( std::auto_ptr<bool>(new bool(results.isValid())), "hltHandleValid");
67     event.put( std::auto_ptr<std::string>(new std::string(hltConfig.tableName())), "hltKey");
68     event.put( prescaled,"prescaled");
69     }
70    
71     };
72    
73     #endif