CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 bool getCollection(const edm::Event& event,
15  std::vector<MissingCollectionInfo>& missing,
17  const edm::InputTag& name,
19  const char* description) {
20  event.getByToken(token, handle);
21  bool valid = handle.isValid();
22  if (not valid) {
23  missing.push_back(std::make_pair(description, &name));
24  handle.clear();
25  // std::cout << "not valid "<< description << " " << name << std::endl;
26  }
27  return valid;
28 }
29 
30 // Boiler-plate constructor definition of an analyzer module:
31 //HLTBitAnalyzer::HLTBitAnalyzer(edm::ParameterSet const& conf) {
32 HLTBitAnalyzer::HLTBitAnalyzer(edm::ParameterSet const& conf) : hlt_analysis_(conf, consumesCollector(), *this) {
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
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) {
123  mct_analysis_.setup(conf, HltTree);
124  }
125  vrt_analysisOffline0_.setup(conf, HltTree, "Offline0");
127 }
128 
129 // Boiler-plate "analyze" method declaration for an analyzer module.
133  /*
134  edm::Handle<l1extra::L1EmParticleCollection> l1extemi, l1extemn;
135  edm::Handle<l1extra::L1MuonParticleCollection> l1extmu;
136  edm::Handle<l1extra::L1JetParticleCollection> l1extjetc, l1extjetf, l1extjet, l1exttaujet;
137  edm::Handle<l1extra::L1EtMissParticleCollection> l1extmet,l1extmht;
138  edm::Handle<L1GlobalTriggerReadoutRecord> l1GtRR;
139  edm::Handle<L1GlobalTriggerObjectMapRecord> l1GtOMRec;
140  edm::Handle<L1GlobalTriggerObjectMap> l1GtOM;
141  edm::Handle< L1GctHFBitCountsCollection > gctBitCounts ;
142  edm::Handle< L1GctHFRingEtSumsCollection > gctRingSums ;
143  */
148  edm::Handle<reco::VertexCollection> recoVertexsOffline0;
150 
151  // extract the collections from the event, check their validity and log which are missing
152  std::vector<MissingCollectionInfo> missing;
153 
154  getCollection(iEvent, missing, hltresults, hltresults_, hltresultsToken_, kHltresults);
155  /*
156  getCollection( iEvent, missing, l1extemi, m_l1extraemi, l1extraemiToken_, kL1extemi );
157  getCollection( iEvent, missing, l1extemn, m_l1extraemn, l1extraemnToken_, kL1extemn );
158  getCollection( iEvent, missing, l1extmu, m_l1extramu, l1extramuToken_, kL1extmu );
159  getCollection( iEvent, missing, l1extjetc, m_l1extrajetc, l1extrajetcToken_, kL1extjetc );
160  getCollection( iEvent, missing, l1extjetf, m_l1extrajetf, l1extrajetfToken_, kL1extjetf );
161  getCollection( iEvent, missing, l1extjet, m_l1extrajet, l1extrajetToken_, kL1extjet );
162  getCollection( iEvent, missing, l1exttaujet, m_l1extrataujet, l1extrataujetToken_, kL1exttaujet );
163  getCollection( iEvent, missing, l1extmet, m_l1extramet, l1extrametToken_, kL1extmet );
164  getCollection( iEvent, missing, l1extmht, m_l1extramht, l1extramhtToken_, kL1extmht );
165  */
166  getCollection(iEvent, missing, l1results, l1results_, l1resultsToken_, kL1GtRR);
167  // getCollection( iEvent, missing, l1GtRR, gtReadoutRecord_, gtReadoutRecordToken_, kL1GtRR );
168  /*
169  getCollection( iEvent, missing, l1GtOMRec, gtObjectMap_, gtObjectMapToken_, kL1GtOMRec );
170  getCollection( iEvent, missing, gctBitCounts, gctBitCounts_, gctBitCountsToken_, kL1GctBitCounts );
171  getCollection( iEvent, missing, gctRingSums, gctRingSums_, gctRingSumsToken_, kL1GctRingSums );
172  */
173  getCollection(iEvent, missing, mctruth, mctruth_, mctruthToken_, kMctruth);
174  getCollection(iEvent, missing, simTracks, simhits_, simtracksToken_, kSimhit);
175  getCollection(iEvent, missing, simVertices, simhits_, simverticesToken_, kSimhit);
176  getCollection(iEvent, missing, genEventInfo, genEventInfo_, genEventInfoToken_, kGenEventInfo);
177  getCollection(iEvent, missing, pupInfo, pileupInfo_, pileupInfoToken_, kPileupInfo);
178 
180  iEvent, missing, recoVertexsOffline0, VertexTagOffline0_, VertexTagOffline0Token_, kRecoVerticesOffline0);
181 
182  if (!_isData) {
183  ptHat = -1.;
184  if (genEventInfo.isValid()) {
185  ptHat = genEventInfo->qScale();
186  }
187 
188  weight = genEventInfo->weight();
189  }
190  // print missing collections
191  if (not missing.empty() and (errCnt < errMax())) {
192  errCnt++;
193  std::stringstream out;
194  out << "OpenHLT analyser - missing collections:";
195  for (auto const& entry : missing)
196  out << "\n\t" << entry.first << ": " << entry.second->encode();
197  edm::LogPrint("OpenHLT") << out.str() << std::endl;
198  if (errCnt == errMax())
199  edm::LogWarning("OpenHLT") << "Maximum error count reached -- No more messages will be printed.";
200  }
201 
202  // run the analysis, passing required event fragments
203  hlt_analysis_.analyze(hltresults,
204  /*
205  l1extemi,
206  l1extemn,
207  l1extmu,
208  l1extjetc,
209  l1extjetf,
210  l1extjet,
211  l1exttaujet,
212  l1extmet,
213  l1extmht,
214  */
215  l1results,
216  // l1GtRR,
217  /*
218  gctBitCounts,
219  gctRingSums,
220  */
221  iSetup,
222  iEvent,
223  HltTree);
224 
225  evt_header_.analyze(iEvent, HltTree);
226 
227  if (!_isData) {
228  mct_analysis_.analyze(mctruth, ptHat, weight, simTracks, simVertices, pupInfo, HltTree);
229  }
230  vrt_analysisOffline0_.analyze(recoVertexsOffline0, HltTree);
231 
232  // std::cout << " Ending Event Analysis" << std::endl;
233  // After analysis, fill the variables tree
234  if (m_file) {
235  m_file->cd();
236  }
237 
238  HltTree->Fill();
239 }
240 
241 // ------------ method called when starting to processes a run ------------
243 
244 // "endJob" is an inherited method that you may implement to do post-EOF processing and produce final output.
246  if (!_UseTFileService) {
247  if (m_file)
248  m_file->cd();
249 
250  HltTree->Write();
251  delete HltTree;
252  HltTree = nullptr;
253 
254  if (m_file) { // if there was a tree file...
255  m_file->Write(); // write out the branches
256  delete m_file; // close and delete the file
257  m_file = nullptr; // set to zero to clean up
258  }
259  }
260 }
261 
262 // 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:84
dictionary missing
Definition: combine.py:5
void analyze(edm::Event const &iEvent, TTree *tree)
Definition: EventHeader.cc:36
T getUntrackedParameter(std::string const &, T const &) const
edm::InputTag VertexTagOffline0_
void setup(edm::ConsumesCollector &&iC, TTree *tree)
Definition: EventHeader.cc:17
const char * kHltresults
Definition: HLTMessages.cc:34
void setup(const edm::ParameterSet &pSet, TTree *tree)
Definition: HLTInfo.cc:47
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
const char * kSimhit
Definition: HLTMessages.cc:49
edm::InputTag hltresults_
void analyze(edm::Event const &e, edm::EventSetup const &iSetup) override
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
edm::InputTag l1results_
void endJob() override
RECOVertex vrt_analysisOffline0_
edm::EDGetTokenT< GlobalAlgBlkBxCollection > l1resultsToken_
edm::InputTag genEventInfo_
int iEvent
Definition: GenABIO.cc:224
void setup(const edm::ParameterSet &pSet, TTree *tree, std::string vertexType)
Definition: RECOVertex.cc:47
ConsumesCollector consumesCollector()
Use a ConsumesCollector to gather consumes information from helper functions.
EventHeader evt_header_
Default analyses.
tuple handle
Definition: patZpeak.py:25
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:86
void beginRun(const edm::Run &, const edm::EventSetup &)
Definition: HLTInfo.cc:29
bool isValid() const
Definition: HandleBase.h:70
Log< level::Warning, true > LogPrint
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
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
const char * kL1GtRR
Definition: HLTMessages.cc:44
edm::EDGetTokenT< std::vector< SimTrack > > simtracksToken_
edm::InputTag mctruth_
std::pair< const char *, const edm::InputTag * > MissingCollectionInfo
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_
list entry
Definition: mps_splice.py:68
void setup(const edm::ParameterSet &pSet, TTree *tree)
Definition: HLTMCtruth.cc:23
tuple cout
Definition: gather_cfg.py:144
edm::InputTag pileupInfo_
HLTInfo hlt_analysis_
Log< level::Warning, false > LogWarning
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: Run.h:45
const char * kPileupInfo
Definition: HLTMessages.cc:51