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