CMS 3D CMS Logo

HLTBitAnalyzer.cc
Go to the documentation of this file.
1 // File: HLTBitAnalyzer.cc
2 // Description: Example of Analysis driver originally from Jeremy Mans,
3 // Date: 13-October-2006
4 
5 #include <boost/foreach.hpp>
6 
8 #include "HLTMessages.h"
11 
12 typedef std::pair<const char *, const edm::InputTag *> MissingCollectionInfo;
13 
14 template <class T>
15 static inline
16 bool getCollection(const edm::Event & event, std::vector<MissingCollectionInfo> & missing, edm::Handle<T> & handle, const edm::InputTag & name, const edm::EDGetTokenT<T> token, const char * description)
17 {
18  event.getByToken(token, handle);
19  bool valid = handle.isValid();
20  if (not valid) {
21  missing.push_back( std::make_pair(description, & name) );
22  handle.clear();
23  // std::cout << "not valid "<< description << " " << name << std::endl;
24  }
25  return valid;
26 }
27 
28 // Boiler-plate constructor definition of an analyzer module:
29 //HLTBitAnalyzer::HLTBitAnalyzer(edm::ParameterSet const& conf) {
31  hlt_analysis_(conf, consumesCollector(), *this) {
32 
33  // If your module takes parameters, here is where you would define
34  // their names and types, and access them to initialize internal
35  // variables. Example as follows:
36  std::cout << " Beginning HLTBitAnalyzer Analysis " << std::endl;
37 
38  /*
39  l1extramu_ = conf.getParameter<std::string> ("l1extramu");
40  m_l1extramu = edm::InputTag(l1extramu_, "");
41 
42  // read the L1Extra collection name, and add the instance names as needed
43  l1extramc_ = conf.getParameter<std::string> ("l1extramc");
44  m_l1extraemi = edm::InputTag(l1extramc_, "Isolated");
45  m_l1extraemn = edm::InputTag(l1extramc_, "NonIsolated");
46  m_l1extrajetc = edm::InputTag(l1extramc_, "Central");
47  m_l1extrajetf = edm::InputTag(l1extramc_, "Forward");
48  m_l1extrajet = edm::InputTag("gctInternJetProducer","Internal","ANALYSIS");
49  m_l1extrataujet = edm::InputTag(l1extramc_, "Tau");
50  m_l1extramet = edm::InputTag(l1extramc_, "MET");
51  m_l1extramht = edm::InputTag(l1extramc_, "MHT");
52  */
53 
54  mctruth_ = conf.getParameter<edm::InputTag> ("mctruth");
55  genEventInfo_ = conf.getParameter<edm::InputTag> ("genEventInfo");
56  VertexTagOffline0_ = conf.getParameter<edm::InputTag> ("OfflinePrimaryVertices0");
57  simhits_ = conf.getParameter<edm::InputTag> ("simhits");
58 
59  hltresults_ = conf.getParameter<edm::InputTag> ("hltresults");
60  l1results_ = conf.getParameter<edm::InputTag> ("l1results");
61  // gtReadoutRecord_ = conf.getParameter<edm::InputTag> ("l1GtReadoutRecord");
62  /*
63  gtObjectMap_ = conf.getParameter<edm::InputTag> ("l1GtObjectMapRecord");
64 
65  gctBitCounts_ = edm::InputTag( conf.getParameter<edm::InputTag>("l1GctHFBitCounts").label(), "" );
66  gctRingSums_ = edm::InputTag( conf.getParameter<edm::InputTag>("l1GctHFRingSums").label(), "" );
67  */
68  pileupInfo_ = edm::InputTag("addPileupInfo");
69 
70  hltresultsToken_ = consumes<edm::TriggerResults>(hltresults_);
71  genEventInfoToken_ = consumes<GenEventInfoProduct>(genEventInfo_);
72  /*
73  l1extramuToken_ = consumes<l1extra::L1MuonParticleCollection>(m_l1extramu);
74  l1extraemiToken_ = consumes<l1extra::L1EmParticleCollection>(m_l1extraemi);
75  l1extraemnToken_ = consumes<l1extra::L1EmParticleCollection>(m_l1extraemn);
76 
77  l1extrajetcToken_ = consumes<l1extra::L1JetParticleCollection>(m_l1extrajetc);
78  l1extrajetfToken_ = consumes<l1extra::L1JetParticleCollection>(m_l1extrajetf);
79  l1extrajetToken_ = consumes<l1extra::L1JetParticleCollection>(m_l1extrajet);
80  l1extrataujetToken_ = consumes<l1extra::L1JetParticleCollection>(m_l1extrataujet);
81  l1extrametToken_ = consumes<l1extra::L1EtMissParticleCollection>(m_l1extramet);
82  l1extramhtToken_ = consumes<l1extra::L1EtMissParticleCollection>(m_l1extramht);
83  */
84 
85  l1resultsToken_ = consumes<GlobalAlgBlkBxCollection>(l1results_);
86  // gtReadoutRecordToken_ = consumes<L1GlobalTriggerReadoutRecord>(gtReadoutRecord_);
87  /*
88  gtObjectMapToken_ = consumes<L1GlobalTriggerObjectMapRecord>(gtObjectMap_);
89  gctBitCountsToken_ = consumes<L1GctHFBitCountsCollection>(gctBitCounts_);
90  gctRingSumsToken_ = consumes<L1GctHFRingEtSumsCollection>(gctRingSums_);
91  */
92 
93  mctruthToken_ = consumes<reco::CandidateView>(mctruth_);
94  VertexTagOffline0Token_ = consumes<reco::VertexCollection>(VertexTagOffline0_);
95  simtracksToken_ = consumes<std::vector<SimTrack> >(simhits_);
96  simverticesToken_ = consumes<std::vector<SimVertex> >(simhits_);
97  pileupInfoToken_ = consumes<std::vector<PileupSummaryInfo> >(pileupInfo_);
98 
99  _UseTFileService = conf.getUntrackedParameter<bool>("UseTFileService",false);
100 
101  m_file = nullptr; // set to null
102  errCnt = 0;
103 
104  // read run parameters with a default value
105  edm::ParameterSet runParameters = conf.getParameter<edm::ParameterSet>("RunParameters");
106  _HistName = runParameters.getUntrackedParameter<std::string>("HistogramFile", "test.root");
107  _isData = runParameters.getUntrackedParameter<bool>("isData",true);
108 
109  // open the tree file and initialize the tree
110  if(_UseTFileService){
112  HltTree = fs->make<TTree>("HltTree", "");
113  }else{
114  m_file = new TFile(_HistName.c_str(), "RECREATE");
115  if (m_file)
116  m_file->cd();
117  HltTree = new TTree("HltTree", "");
118  }
119 
120  // Setup the different analysis
121  hlt_analysis_.setup(conf, HltTree);
122  if (!_isData) { mct_analysis_.setup(conf, HltTree); }
123  vrt_analysisOffline0_.setup(conf, HltTree, "Offline0");
125 }
126 
127 // Boiler-plate "analyze" method declaration for an analyzer module.
129 
132  /*
133  edm::Handle<l1extra::L1EmParticleCollection> l1extemi, l1extemn;
134  edm::Handle<l1extra::L1MuonParticleCollection> l1extmu;
135  edm::Handle<l1extra::L1JetParticleCollection> l1extjetc, l1extjetf, l1extjet, l1exttaujet;
136  edm::Handle<l1extra::L1EtMissParticleCollection> l1extmet,l1extmht;
137  edm::Handle<L1GlobalTriggerReadoutRecord> l1GtRR;
138  edm::Handle<L1GlobalTriggerObjectMapRecord> l1GtOMRec;
139  edm::Handle<L1GlobalTriggerObjectMap> l1GtOM;
140  edm::Handle< L1GctHFBitCountsCollection > gctBitCounts ;
141  edm::Handle< L1GctHFRingEtSumsCollection > gctRingSums ;
142  */
147  edm::Handle<reco::VertexCollection> recoVertexsOffline0;
149 
150  // extract the collections from the event, check their validity and log which are missing
151  std::vector<MissingCollectionInfo> missing;
152 
153  getCollection( iEvent, missing, hltresults, hltresults_, hltresultsToken_, kHltresults );
154  /*
155  getCollection( iEvent, missing, l1extemi, m_l1extraemi, l1extraemiToken_, kL1extemi );
156  getCollection( iEvent, missing, l1extemn, m_l1extraemn, l1extraemnToken_, kL1extemn );
157  getCollection( iEvent, missing, l1extmu, m_l1extramu, l1extramuToken_, kL1extmu );
158  getCollection( iEvent, missing, l1extjetc, m_l1extrajetc, l1extrajetcToken_, kL1extjetc );
159  getCollection( iEvent, missing, l1extjetf, m_l1extrajetf, l1extrajetfToken_, kL1extjetf );
160  getCollection( iEvent, missing, l1extjet, m_l1extrajet, l1extrajetToken_, kL1extjet );
161  getCollection( iEvent, missing, l1exttaujet, m_l1extrataujet, l1extrataujetToken_, kL1exttaujet );
162  getCollection( iEvent, missing, l1extmet, m_l1extramet, l1extrametToken_, kL1extmet );
163  getCollection( iEvent, missing, l1extmht, m_l1extramht, l1extramhtToken_, kL1extmht );
164  */
165  getCollection( iEvent, missing, l1results, l1results_, l1resultsToken_, kL1GtRR) ;
166  // getCollection( iEvent, missing, l1GtRR, gtReadoutRecord_, gtReadoutRecordToken_, kL1GtRR );
167  /*
168  getCollection( iEvent, missing, l1GtOMRec, gtObjectMap_, gtObjectMapToken_, kL1GtOMRec );
169  getCollection( iEvent, missing, gctBitCounts, gctBitCounts_, gctBitCountsToken_, kL1GctBitCounts );
170  getCollection( iEvent, missing, gctRingSums, gctRingSums_, gctRingSumsToken_, kL1GctRingSums );
171  */
172  getCollection( iEvent, missing, mctruth, mctruth_, mctruthToken_, kMctruth );
173  getCollection( iEvent, missing, simTracks, simhits_, simtracksToken_, kSimhit );
174  getCollection( iEvent, missing, simVertices, simhits_, simverticesToken_, kSimhit );
175  getCollection( iEvent, missing, genEventInfo, genEventInfo_, genEventInfoToken_, kGenEventInfo );
176  getCollection( iEvent, missing, pupInfo, pileupInfo_, pileupInfoToken_, kPileupInfo );
177 
178  getCollection( iEvent, missing, recoVertexsOffline0, VertexTagOffline0_, VertexTagOffline0Token_, kRecoVerticesOffline0 );
179 
180  if (!_isData) {
181  ptHat=-1.;
182  if (genEventInfo.isValid()) {ptHat=genEventInfo->qScale();}
183 
184  weight = genEventInfo->weight();
185  }
186  // print missing collections
187  if (not missing.empty() and (errCnt < errMax())) {
188  errCnt++;
189  std::stringstream out;
190  out << "OpenHLT analyser - missing collections:";
191  BOOST_FOREACH(const MissingCollectionInfo & entry, missing)
192  out << "\n\t" << entry.first << ": " << entry.second->encode();
193  edm::LogPrint("OpenHLT") << out.str() << std::endl;
194  if (errCnt == errMax())
195  edm::LogWarning("OpenHLT") << "Maximum error count reached -- No more messages will be printed.";
196  }
197 
198  // run the analysis, passing required event fragments
200  hltresults,
201  /*
202  l1extemi,
203  l1extemn,
204  l1extmu,
205  l1extjetc,
206  l1extjetf,
207  l1extjet,
208  l1exttaujet,
209  l1extmet,
210  l1extmht,
211  */
212  l1results,
213  // l1GtRR,
214  /*
215  gctBitCounts,
216  gctRingSums,
217  */
218  iSetup,
219  iEvent,
220  HltTree);
221 
222  evt_header_.analyze(iEvent, HltTree);
223 
224  if (!_isData) {
226  mctruth,
227  ptHat,
228  weight,
229  simTracks,
230  simVertices,
231  pupInfo,
232  HltTree);
233  }
235  recoVertexsOffline0,
236  HltTree);
237 
238  // std::cout << " Ending Event Analysis" << std::endl;
239  // After analysis, fill the variables tree
240  if (m_file) { m_file->cd(); }
241 
242  HltTree->Fill();
243 }
244 
245 // ------------ method called when starting to processes a run ------------
246 void
248 {
249  hlt_analysis_.beginRun(run, es);
250 }
251 
252 // "endJob" is an inherited method that you may implement to do post-EOF processing and produce final output.
254 
255  if(!_UseTFileService){
256  if (m_file)
257  m_file->cd();
258 
259  HltTree->Write();
260  delete HltTree;
261  HltTree = nullptr;
262 
263  if (m_file) { // if there was a tree file...
264  m_file->Write(); // write out the branches
265  delete m_file; // close and delete the file
266  m_file = nullptr; // set to zero to clean up
267  }
268  }
269 }
void analyze(const edm::Handle< edm::TriggerResults > &hltresults, const edm::Handle< GlobalAlgBlkBxCollection > &l1results, edm::EventSetup const &eventSetup, edm::Event const &iEvent, TTree *tree)
Definition: HLTInfo.cc:92
T getParameter(std::string const &) const
void analyze(edm::Event const &iEvent, TTree *tree)
Definition: EventHeader.cc:44
T getUntrackedParameter(std::string const &, T const &) const
edm::InputTag VertexTagOffline0_
void setup(edm::ConsumesCollector &&iC, TTree *tree)
Definition: EventHeader.cc:24
const char * kHltresults
Definition: HLTMessages.cc:34
void setup(const edm::ParameterSet &pSet, TTree *tree)
Definition: HLTInfo.cc:53
virtual void endJob()
const char * kSimhit
Definition: HLTMessages.cc:49
edm::InputTag hltresults_
Definition: weight.py:1
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
double weight() const
edm::InputTag l1results_
RECOVertex vrt_analysisOffline0_
edm::EDGetTokenT< GlobalAlgBlkBxCollection > l1resultsToken_
edm::InputTag genEventInfo_
int iEvent
Definition: GenABIO.cc:230
void setup(const edm::ParameterSet &pSet, TTree *tree, std::string vertexType)
Definition: RECOVertex.cc:49
double qScale() const
std::pair< const char *, const edm::InputTag * > MissingCollectionInfo
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
EventHeader evt_header_
Default analyses.
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > pileupInfoToken_
const char * kMctruth
Definition: HLTMessages.cc:48
static int errMax()
void analyze(edm::Handle< reco::VertexCollection > recoVertexs, TTree *tree)
Definition: RECOVertex.cc:91
void beginRun(const edm::Run &, const edm::EventSetup &)
Definition: HLTInfo.cc:30
bool isValid() const
Definition: HandleBase.h:74
edm::EDGetTokenT< GenEventInfoProduct > genEventInfoToken_
static bool getCollection(const edm::Event &event, std::vector< MissingCollectionInfo > &missing, edm::Handle< T > &handle, const edm::InputTag &name, const edm::EDGetTokenT< T > token, const char *description)
std::string _HistName
virtual void beginRun(edm::Run const &, edm::EventSetup const &)
virtual void analyze(edm::Event const &e, edm::EventSetup const &iSetup)
HLTMCtruth mct_analysis_
void analyze(const edm::Handle< reco::CandidateView > &mctruth, const double &pthat, const double &weight, const edm::Handle< std::vector< SimTrack > > &simTracks, const edm::Handle< std::vector< SimVertex > > &simVertices, const edm::Handle< std::vector< PileupSummaryInfo > > &PupInfo, TTree *tree)
Definition: HLTMCtruth.cc:74
const char * kL1GtRR
Definition: HLTMessages.cc:44
edm::EDGetTokenT< std::vector< SimTrack > > simtracksToken_
edm::InputTag mctruth_
const char * kRecoVerticesOffline0
Definition: HLTMessages.cc:128
const char * kGenEventInfo
Definition: HLTMessages.cc:50
edm::EDGetTokenT< reco::VertexCollection > VertexTagOffline0Token_
edm::InputTag simhits_
edm::EDGetTokenT< edm::TriggerResults > hltresultsToken_
void setup(const edm::ParameterSet &pSet, TTree *tree)
Definition: HLTMCtruth.cc:24
edm::InputTag pileupInfo_
HLTInfo hlt_analysis_
edm::EDGetTokenT< reco::CandidateView > mctruthToken_
HLTBitAnalyzer(edm::ParameterSet const &conf)
edm::EDGetTokenT< std::vector< SimVertex > > simverticesToken_
Definition: event.py:1
Definition: Run.h:42
const char * kPileupInfo
Definition: HLTMessages.cc:51