DESY Hbb Analysis Framework
Ntuplizer.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: Analysis/Ntuplizer
4 // Class: Ntuplizer
5 //
13 //
14 // Original Author: Roberval Walsh
15 // Created: Mon, 20 Oct 2014 11:54:54 GMT
16 //
17 //
18 
19 
20 // system include files
21 #include <memory>
22 #include <boost/algorithm/string.hpp>
23 #include <type_traits>
24 
25 // user include files
26 #include "DataFormats/Provenance/interface/Provenance.h"
27 
28 #include "FWCore/Framework/interface/Frameworkfwd.h"
29 #include "FWCore/Framework/interface/EDAnalyzer.h"
30 
31 #include "FWCore/Framework/interface/Event.h"
32 #include "FWCore/Framework/interface/MakerMacros.h"
33 
34 #include "FWCore/ParameterSet/interface/ParameterSet.h"
35 
36 #include "FWCore/ServiceRegistry/interface/Service.h"
37 #include "CommonTools/UtilAlgos/interface/TFileService.h"
38 
39 #include "DataFormats/L1Trigger/interface/L1JetParticle.h"
40 #include "DataFormats/L1Trigger/interface/L1JetParticleFwd.h"
41 
42 #include "DataFormats/L1Trigger/interface/L1MuonParticle.h"
43 #include "DataFormats/L1Trigger/interface/L1MuonParticleFwd.h"
44 
45 #include "DataFormats/RecoCandidate/interface/RecoChargedCandidate.h"
46 #include "DataFormats/RecoCandidate/interface/RecoChargedCandidateFwd.h"
47 
48 
49 #include "DataFormats/JetReco/interface/CaloJet.h"
50 #include "DataFormats/JetReco/interface/CaloJetCollection.h"
51 
52 #include "DataFormats/JetReco/interface/PFJet.h"
53 #include "DataFormats/JetReco/interface/PFJetCollection.h"
54 
55 #include "DataFormats/MuonReco/interface/Muon.h"
56 #include "DataFormats/MuonReco/interface/MuonFwd.h"
57 
58 #include "DataFormats/TrackReco/interface/Track.h"
59 #include "DataFormats/TrackReco/interface/TrackFwd.h"
60 
61 
62 #include "DataFormats/PatCandidates/interface/Jet.h"
63 #include "DataFormats/PatCandidates/interface/Muon.h"
64 #include "DataFormats/PatCandidates/interface/MET.h"
65 
66 #include "DataFormats/L1Trigger/interface/Jet.h"
67 #include "DataFormats/L1Trigger/interface/Muon.h"
68 
69 #include "DataFormats/PatCandidates/interface/TriggerObject.h"
70 
71 #include "DataFormats/JetReco/interface/GenJet.h"
72 
73 #include "DataFormats/HepMCCandidate/interface/GenParticle.h"
74 #include "DataFormats/HepMCCandidate/interface/GenParticleFwd.h"
75 
79 #include "SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h"
84 //#include "Analysis/Ntuplizer/interface/TriggerInfo.h"
86 
87 #include "SimDataFormats/GeneratorProducts/interface/GenFilterInfo.h"
88 #include "DataFormats/Common/interface/MergeableCounter.h"
89 
90 #include "DataFormats/Common/interface/OwnVector.h"
91 #include "DataFormats/Common/interface/TriggerResults.h"
92 #include "DataFormats/HLTReco/interface/TriggerEvent.h"
93 
94 #include "SimDataFormats/PileupSummaryInfo/interface/PileupSummaryInfo.h"
95 #include "SimDataFormats/GeneratorProducts/interface/GenEventInfoProduct.h"
96 #include "DataFormats/Scalers/interface/LumiScalers.h"
97 
100 
101 #include <TH1.h>
102 #include <TFile.h>
103 #include <TTree.h>
104 
105 #include "HLTrigger/HLTcore/interface/HLTPrescaleProvider.h"
106 
107 using namespace boost;
108 using namespace boost::algorithm;
109 
112 
113 typedef std::vector<edm::InputTag> InputTags;
114 typedef std::vector<std::string> strings;
115 
116 // Alias to the collections classes of candidates for the ntuple
136 //typedef analysis::ntuple::TriggerInfo TriggerInfo;
141 
142 
143 // Alias to the pointers to the above classes
144 typedef std::unique_ptr<EventInfo> pEventInfo;
145 typedef std::unique_ptr<Metadata> pMetadata;
146 typedef std::unique_ptr<Definitions> pDefinitions;
147 typedef std::unique_ptr<PileupInfo> pPileupInfo;
148 typedef std::unique_ptr<L1JetCandidates> pL1JetCandidates;
149 typedef std::unique_ptr<L1MuonCandidates> pL1MuonCandidates;
150 typedef std::unique_ptr<CaloJetCandidates> pCaloJetCandidates;
151 typedef std::unique_ptr<PFJetCandidates> pPFJetCandidates;
152 typedef std::unique_ptr<RecoMuonCandidates> pRecoMuonCandidates;
153 typedef std::unique_ptr<RecoTrackCandidates> pRecoTrackCandidates;
154 typedef std::unique_ptr<PatJetCandidates> pPatJetCandidates;
155 typedef std::unique_ptr<PatMETCandidates> pPatMETCandidates;
156 typedef std::unique_ptr<PatMuonCandidates> pPatMuonCandidates;
157 typedef std::unique_ptr<GenJetCandidates> pGenJetCandidates;
158 typedef std::unique_ptr<GenParticleCandidates> pGenParticleCandidates;
159 typedef std::unique_ptr<TriggerObjectCandidates> pTriggerObjectCandidates;
160 typedef std::unique_ptr<TriggerObjectRecoCandidates> pTriggerObjectRecoCandidates;
161 typedef std::unique_ptr<JetsTags> pJetsTags;
162 typedef std::unique_ptr<TriggerAccepts> pTriggerAccepts;
163 //typedef std::unique_ptr<TriggerInfo> pTriggerInfo;
164 typedef std::unique_ptr<PrimaryVertices> pPrimaryVertices;
165 typedef std::unique_ptr<L1TJetCandidates> pL1TJetCandidates;
166 typedef std::unique_ptr<L1TMuonCandidates> pL1TMuonCandidates;
167 typedef std::unique_ptr<ChargedCandidates> pChargedCandidates;
168 
169 //
170 // class declaration
171 //
172 
173 class Ntuplizer : public edm::EDAnalyzer {
174  public:
175  explicit Ntuplizer(const edm::ParameterSet&);
176  ~Ntuplizer();
177 
179 
181  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
182 
183 
184  private:
185  virtual void beginJob() override;
186  virtual void analyze(const edm::Event&, const edm::EventSetup&) override;
187  virtual void endJob() override;
188 
189  virtual void beginRun(edm::Run const&, edm::EventSetup const&) override;
190  virtual void endRun(edm::Run const&, edm::EventSetup const&) override;
191  virtual void beginLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override;
192  virtual void endLuminosityBlock(edm::LuminosityBlock const&, edm::EventSetup const&) override;
193 
194  // ----------member data ---------------------------
195  edm::ParameterSet config_;
196 
197  bool is_mc_;
214 // bool do_triggerinfo_;
224 
226 
227  bool testmode_;
228 
229  std::vector< std::string > inputTagsVec_;
230  std::vector< std::string > inputTags_;
231  std::vector< std::string > btagAlgos_;
232  std::vector< std::string > btagAlgosAlias_;
233  std::vector< std::string > triggerObjectLabels_;
234  std::vector< std::string > triggerObjectSplits_;
235  std::vector< std::string > triggerObjectSplitsTypes_;
236  std::vector< TitleAlias > btagVars_;
237  std::vector< std::string > jecRecords_;
238  std::vector< std::string > jerRecords_;
239 
240  std::map<std::string, edm::EDGetTokenT<l1extra::L1JetParticleCollection> > l1JetTokens_;
241  std::map<std::string, edm::EDGetTokenT<l1extra::L1MuonParticleCollection> > l1MuonTokens_;
242  std::map<std::string, edm::EDGetTokenT<reco::CaloJetCollection> > caloJetTokens_;
243  std::map<std::string, edm::EDGetTokenT<reco::PFJetCollection> > pfJetTokens_;
244  std::map<std::string, edm::EDGetTokenT<reco::MuonCollection> > recoMuonTokens_;
245  std::map<std::string, edm::EDGetTokenT<reco::TrackCollection> > recoTrackTokens_;
246  std::map<std::string, edm::EDGetTokenT<pat::JetCollection> > patJetTokens_;
247  std::map<std::string, edm::EDGetTokenT<pat::METCollection> > patMETTokens_;
248  std::map<std::string, edm::EDGetTokenT<pat::MuonCollection> > patMuonTokens_;
249  std::map<std::string, edm::EDGetTokenT<reco::GenJetCollection> > genJetTokens_;
250  std::map<std::string, edm::EDGetTokenT<reco::GenParticleCollection> > genPartTokens_;
251  std::map<std::string, edm::EDGetTokenT<pat::TriggerObjectStandAloneCollection> > triggerObjTokens_;
252  std::map<std::string, edm::EDGetTokenT<trigger::TriggerEvent> > triggerEventTokens_;
253  std::map<std::string, edm::EDGetTokenT<edm::TriggerResults> > triggerResultsTokens_;
254  std::map<std::string, edm::EDGetTokenT<reco::VertexCollection> > primaryVertexTokens_;
255  std::map<std::string, edm::EDGetTokenT<reco::JetTagCollection> > jetTagTokens_;
256  std::map<std::string, edm::EDGetTokenT<l1t::JetBxCollection> > l1tJetTokens_;
257  std::map<std::string, edm::EDGetTokenT<l1t::MuonBxCollection> > l1tMuonTokens_;
258  std::map<std::string, edm::EDGetTokenT<reco::RecoChargedCandidateCollection> > chargedCandTokens_;
259 
260  std::shared_ptr<HLTPrescaleProvider> hltPrescaleProvider_;
261 
262  edm::InputTag genFilterInfo_;
263  edm::InputTag totalEvents_;
264  edm::InputTag filteredEvents_;
265  edm::InputTag filteredMHatEvents_;
266  edm::InputTag genRunInfo_;
267 
268  edm::InputTag pileupInfo_;
269  edm::InputTag genEventInfo_;
270  edm::InputTag lumiScalers_;
271 
272  edm::InputTag fixedGridRhoAll_;
273 
274  edm::EDGetTokenT<GenFilterInfo> genFilterInfoToken_;
275  edm::EDGetTokenT<edm::MergeableCounter> totalEventsToken_;
276  edm::EDGetTokenT<edm::MergeableCounter> filteredEventsToken_;
277  edm::EDGetTokenT<edm::MergeableCounter> filteredMHatEventsToken_;
278  edm::EDGetTokenT<GenRunInfoProduct> genRunInfoToken_;
279 
280  edm::EDGetTokenT<std::vector<PileupSummaryInfo> > pileupInfoToken_;
281  edm::EDGetTokenT<GenEventInfoProduct> genEventInfoToken_;
282  edm::EDGetTokenT<LumiScalersCollection> lumiScalersToken_;
283 
284  edm::EDGetTokenT<double> fixedGridRhoAllToken_;
285 
286 
289 
290  std::map<std::string, TTree*> tree_; // using pointers instead of smart pointers, could not Fill() with smart pointer???
291 
292  // Ntuple stuff
296 
297  // Collections for the ntuples (vector)
298  std::vector<pL1JetCandidates> l1jets_collections_;
299  std::vector<pL1MuonCandidates> l1muons_collections_;
300  std::vector<pCaloJetCandidates> calojets_collections_;
301  std::vector<pPFJetCandidates> pfjets_collections_;
302  std::vector<pRecoMuonCandidates> recomuons_collections_;
303  std::vector<pRecoTrackCandidates> recotracks_collections_;
304  std::vector<pPatJetCandidates> patjets_collections_;
305  std::vector<pPatMETCandidates> patmets_collections_;
306  std::vector<pPatMuonCandidates> patmuons_collections_;
307  std::vector<pGenJetCandidates> genjets_collections_;
308  std::vector<pGenParticleCandidates> genparticles_collections_;
309  std::vector<pJetsTags> jetstags_collections_;
310  std::vector<pPrimaryVertices> primaryvertices_collections_;
311  std::vector<pTriggerAccepts> triggeraccepts_collections_;
312 // std::vector<pTriggerInfo> triggerinfo_collections_;
313  std::vector<pTriggerObjectCandidates> triggerobjects_collections_;
314  std::vector<pTriggerObjectRecoCandidates> triggerobjectsreco_collections_;
315  std::vector<pL1TJetCandidates> l1tjets_collections_;
316  std::vector<pL1TMuonCandidates> l1tmuons_collections_;
317  std::vector<pChargedCandidates> chargedcands_collections_;
318 
319 
320 
321  // Collections for the ntuples (single)
322 
323  // metadata
324  double xsection_;
325 
328 
329 };
330 
331 //
332 // constants, enums and typedefs
333 //
334 
335 //
336 // static data member definitions
337 //
338 
339 //
340 // constructors and destructor
341 //
342 Ntuplizer::Ntuplizer(const edm::ParameterSet& config) //: // initialization of ntuple classes
343 {
344 
345  //now do what ever initialization is needed
346  is_mc_ = config.getParameter<bool> ("MonteCarlo");
347  readprescale_ = true;
348  if ( config.exists("ReadPrescale") )
349  {
350  readprescale_ = config.getParameter<bool> ("ReadPrescale");
351  }
352  use_full_name_ = false;
353  testmode_ = false;
354  inputTagsVec_ = config.getParameterNamesForType<InputTags>();
355  inputTags_ = config.getParameterNamesForType<edm::InputTag>();
356 
357  config_ = config;
358  for ( auto & inputTags : inputTagsVec_ )
359  {
360  InputTags collections = config_.getParameter<InputTags>(inputTags);
361  for ( auto & collection : collections )
362  {
363  std::string label = collection.label();
364  std::string inst = collection.instance();
365  std::string proc = collection.process();
366  std::string collection_name = label+"_"+inst+"_"+proc;
367  if ( inputTags == "L1ExtraJets" ) l1JetTokens_[collection_name] = consumes<l1extra::L1JetParticleCollection>(collection);
368  if ( inputTags == "L1ExtraMuons" ) l1MuonTokens_[collection_name] = consumes<l1extra::L1MuonParticleCollection>(collection);
369  if ( inputTags == "CaloJets" ) caloJetTokens_[collection_name] = consumes<reco::CaloJetCollection>(collection);
370  if ( inputTags == "PFJets" ) pfJetTokens_[collection_name] = consumes<reco::PFJetCollection>(collection);
371  if ( inputTags == "RecoMuons" ) recoMuonTokens_[collection_name] = consumes<reco::MuonCollection>(collection);
372  if ( inputTags == "RecoTracks" ) recoTrackTokens_[collection_name] = consumes<reco::TrackCollection>(collection);
373  if ( inputTags == "PatJets" ) patJetTokens_[collection_name] = consumes<pat::JetCollection>(collection);
374  if ( inputTags == "PatMETs" ) patMETTokens_[collection_name] = consumes<pat::METCollection>(collection);
375  if ( inputTags == "PatMuons" ) patMuonTokens_[collection_name] = consumes<pat::MuonCollection>(collection);
376  if ( inputTags == "GenJets" ) genJetTokens_[collection_name] = consumes<reco::GenJetCollection>(collection);
377  if ( inputTags == "GenParticles" ) genPartTokens_[collection_name] = consumes<reco::GenParticleCollection>(collection);
378  if ( inputTags == "TriggerObjectStandAlone" ) triggerObjTokens_[collection_name] = consumes<pat::TriggerObjectStandAloneCollection>(collection);
379  if ( inputTags == "TriggerEvent" ) triggerEventTokens_[collection_name] = consumes<trigger::TriggerEvent>(collection);
380  if ( inputTags == "PrimaryVertices" ) primaryVertexTokens_[collection_name] = consumes<reco::VertexCollection>(collection);
381  if ( inputTags == "TriggerResults" ) triggerResultsTokens_[collection_name] = consumes<edm::TriggerResults>(collection);
382  if ( inputTags == "JetsTags" ) jetTagTokens_[collection_name] = consumes<reco::JetTagCollection>(collection);
383  if ( inputTags == "L1TJets" ) l1tJetTokens_[collection_name] = consumes<l1t::JetBxCollection>(collection);
384  if ( inputTags == "L1TMuons" ) l1tMuonTokens_[collection_name] = consumes<l1t::MuonBxCollection>(collection);
385  if ( inputTags == "ChargedCandidates" ) chargedCandTokens_[collection_name] = consumes<reco::RecoChargedCandidateCollection>(collection);
386  }
387  }
388 
389  hltPrescaleProvider_ = std::shared_ptr<HLTPrescaleProvider>(new HLTPrescaleProvider(config, consumesCollector(), *this));;
390 
391  // Single InputTag
392  for ( auto & inputTag : inputTags_ )
393  {
394  edm::InputTag collection = config_.getParameter<edm::InputTag>(inputTag);
395  // Lumi products
396  if ( inputTag == "GenFilterInfo" ) { genFilterInfoToken_ = consumes<GenFilterInfo,edm::InLumi>(collection); genFilterInfo_ = collection;}
397  if ( inputTag == "TotalEvents" ) { totalEventsToken_ = consumes<edm::MergeableCounter,edm::InLumi>(collection); totalEvents_ = collection;}
398  if ( inputTag == "FilteredEvents" ) { filteredEventsToken_ = consumes<edm::MergeableCounter,edm::InLumi>(collection); filteredEvents_ = collection;}
399  if ( inputTag == "FilteredMHatEvents" ) { filteredMHatEventsToken_ = consumes<edm::MergeableCounter,edm::InLumi>(collection); filteredMHatEvents_ = collection;}
400  if ( inputTag == "GenRunInfo" ) { genRunInfoToken_ = consumes<GenRunInfoProduct,edm::InRun>(collection); genRunInfo_ = collection;}
401 
402  if ( inputTag == "PileupInfo" ) { pileupInfoToken_ = consumes<std::vector<PileupSummaryInfo> >(collection); pileupInfo_ = collection;}
403  if ( inputTag == "GenEventInfo" ) { genEventInfoToken_ = consumes<GenEventInfoProduct>(collection); genEventInfo_ = collection;}
404  if ( inputTag == "LumiScalers" ) { lumiScalersToken_ = consumes<LumiScalersCollection>(collection); lumiScalers_ = collection;}
405  if ( inputTag == "FixedGridRhoAll" ){ fixedGridRhoAllToken_ = consumes<double>(collection); fixedGridRhoAll_ = collection;}
406 
407  }
408 
409 
410 }
411 
412 
414 {
415 
416  // do anything here that needs to be done at desctruction time
417  // (e.g. close files, deallocate resources etc.)
418 
419 }
420 
421 
422 //
423 // member functions
424 //
425 
426 // ------------ method called for each event ------------
427 void Ntuplizer::analyze(const edm::Event& event, const edm::EventSetup& setup)
428 {
429  using namespace edm;
430 
431 // typedef std::vector<Provenance const*> Provenances;
432 // Provenances provenances;
433 // event.getAllProvenance(provenances);
434 //
435 // for(Provenances::iterator itProv = provenances.begin(), itProvEnd = provenances.end();
436 // itProv != itProvEnd;
437 // ++itProv) {
438 // std::cout << (*itProv)->moduleLabel() << std::endl;
439 // }
440 //
441  // Event info
442  eventinfo_ -> Fill(event);
443 
444 // if ( do_pileupinfo_ )
445 // pileupinfo_ -> Fill(event);
446 
447  if ( is_mc_ )
448  {
449  // MC only stuff
450  }
451 
452  // L1 jets
453  for ( auto & collection : l1jets_collections_ )
454  collection -> Fill(event);
455 
456  // L1 muons
457  for ( auto & collection : l1muons_collections_ )
458  collection -> Fill(event);
459 
460  // Calo jets (reco)
461  for ( auto & collection : calojets_collections_ )
462  collection -> Fill(event);
463 
464  // PF jets (reco)
465  for ( auto & collection : pfjets_collections_ )
466  collection -> Fill(event);
467 
468  // Reco muon (reco)
469  for ( auto & collection : recomuons_collections_ )
470  collection -> Fill(event);
471 
472  // Reco track (reco)
473  for ( auto & collection : recotracks_collections_ )
474  collection -> Fill(event);
475 
476  // Pat jets (pat)
477  for ( auto & collection : patjets_collections_ )
478  collection -> Fill(event, setup);
479 
480  // Pat mets (pat)
481  for ( auto & collection : patmets_collections_ )
482  collection -> Fill(event);
483 
484  // Pat muon (pat)
485  for ( auto & collection : patmuons_collections_ )
486  collection -> Fill(event);
487 
488  // Gen jets (reco)
489  for ( auto & collection : genjets_collections_ )
490  collection -> Fill(event);
491 
492  // Gen particles (reco)
493  for ( auto & collection : genparticles_collections_ )
494  collection -> Fill(event);
495 
496  // jets tags
497  for ( auto & collection : jetstags_collections_ )
498  collection -> Fill(event);
499 
500 
501  // trigger accepts
502  for ( auto & collection : triggeraccepts_collections_ )
503  collection -> Fill(event, setup);
504 
505 // // trigger info
506 // for ( auto & collection : triggerinfo_collections_ )
507 // collection -> Fill(event, setup);
508 
509  // primary vertices
510  for ( auto & collection : primaryvertices_collections_ )
511  collection -> Fill(event);
512 
513  // trigger objects
514  for ( auto & collection : triggerobjects_collections_ )
515  collection -> Fill(event);
516 
517  for ( auto & collection : triggerobjectsreco_collections_ )
518  collection -> Fill(event);
519 
520  // L1T jets
521  for ( auto & collection : l1tjets_collections_ )
522  collection -> Fill(event);
523  // L1T muons
524  for ( auto & collection : l1tmuons_collections_ )
525  collection -> Fill(event);
526 
527  // charged candidates (reco)
528  for ( auto & collection : chargedcands_collections_ )
529  collection -> Fill(event);
530 
531 
532 }
533 
534 
535 // ------------ method called once each job just before starting event loop ------------
536 void
538 {
539  do_pileupinfo_ = config_.exists("PileupInfo") && is_mc_;
540  do_geneventinfo_ = config_.exists("GenEventInfo") && is_mc_;
541  do_lumiscalers_ = config_.exists("LumiScalers");
542  do_l1jets_ = config_.exists("L1ExtraJets");
543  do_l1muons_ = config_.exists("L1ExtraMuons");
544  do_calojets_ = config_.exists("CaloJets");
545  do_pfjets_ = config_.exists("PFJets");
546  do_recomuons_ = config_.exists("RecoMuons");
547  do_recotracks_ = config_.exists("RecoTracks");
548  do_patjets_ = config_.exists("PatJets");
549  do_patmets_ = config_.exists("PatMETs");
550  do_patmuons_ = config_.exists("PatMuons");
551  do_genjets_ = config_.exists("GenJets");
552  do_genparticles_ = config_.exists("GenParticles");
553  do_jetstags_ = config_.exists("JetsTags");
554 // do_triggeraccepts_ = config_.exists("TriggerResults") && config_.exists("TriggerPaths");
555  do_triggeraccepts_ = config_.exists("TriggerResults");
556 // do_triggerinfo_ = config_.exists("TriggerResults");
557  do_primaryvertices_ = config_.exists("PrimaryVertices");
558 // do_eventfilter_ = config_.exists("EventFilter");
559  do_eventfilter_ = config_.exists("TotalEvents") && config_.exists("FilteredEvents");
560  do_genfilter_ = config_.exists("GenFilterInfo");
561  do_triggerobjects_ = ( config_.exists("TriggerObjectStandAlone") || config_.exists("TriggerEvent") ) && config_.exists("TriggerObjectLabels");
562  do_genruninfo_ = config_.exists("GenRunInfo") && is_mc_ ;
563  do_l1tjets_ = config_.exists("L1TJets");
564  do_l1tmuons_ = config_.exists("L1TMuons");
565  do_chargedcands_ = config_.exists("ChargedCandidates");
566 
567  if ( config_.exists("TestMode") ) // This is DANGEROUS! but can be useful. So BE CAREFUL!!!!
568  testmode_ = config_.getParameter<bool> ("TestMode");
569 
570  if ( config_.exists("UseFullName") )
571  use_full_name_ = config_.getParameter<bool> ("UseFullName");
572 
573 
574  edm::Service<TFileService> fs;
575 
576  TFileDirectory eventsDir = fs -> mkdir("Events");
577 
578  std::string name;
579  std::string fullname;
580 
581  genFilterResults_ = {};
582  eventFilterResults_ = {};
583 
584  // Btagging algorithms
585  // Will set one default
586  btagAlgos_.clear();
587  btagAlgosAlias_.clear();
588  btagAlgos_.push_back("pfCombinedInclusiveSecondaryVertexV2BJetTags");
589  btagAlgosAlias_.push_back("btag_csvivf");
590  if ( config_.exists("BTagAlgorithmsAlias") )
591  {
592  btagAlgosAlias_.clear();
593  btagAlgosAlias_ = config_.getParameter< std::vector<std::string> >("BTagAlgorithmsAlias");
594  }
595  if ( config_.exists("BTagAlgorithms") )
596  {
597  btagAlgos_.clear();
598  btagAlgos_ = config_.getParameter< std::vector<std::string> >("BTagAlgorithms");
599  }
600  if ( btagAlgos_.size() != btagAlgosAlias_.size() )
601  {
602  // if user put the wrong number of alias, then use the algo name as alias
603  btagAlgosAlias_.clear();
604  for ( auto& it : btagAlgos_ )
605  btagAlgosAlias_.push_back(it);
606  }
607 
608  btagVars_.clear();
609  for ( size_t it = 0 ; it < btagAlgos_.size() ; ++it )
610  {
611  btagVars_.push_back({btagAlgos_[it],btagAlgosAlias_[it]});
612 // btagVars_[btagAlgosAlias_[it]] = {btagAlgos_[it],(unsigned int)it};
613  }
614 
615  // JEC Record (from TXT files)
616  std::vector<std::string > jec_files;
617  // JEC Record (from CondDB)
618  jecRecords_.clear();
619  if ( do_patjets_ && config_.exists("JECRecords") )
620  {
621  jecRecords_ = config_.getParameter< std::vector<std::string> >("JECRecords");
622  if(config_.exists("JECUncertaintyFiles"))
623  {
624  jec_files = config_.getParameter< std::vector<std::string > >("JECUncertaintyFiles");
625  }
626  }
627  // JER Record (from TXT files)
628  std::vector<std::string > jer_files;
629  std::vector<std::string > jersf_files;
630  // JER Record (from CondDB)
631  jerRecords_.clear();
632  if ( do_patjets_ && config_.exists("JERRecords") )
633  {
634  jerRecords_ = config_.getParameter< std::vector<std::string> >("JERRecords");
635  if(config_.exists("JERResFiles"))
636  {
637  jer_files = config_.getParameter< std::vector<std::string > >("JERResFiles");
638  }
639  if(config_.exists("JERSfFiles"))
640  {
641  jersf_files = config_.getParameter< std::vector<std::string > >("JERSfFiles");
642  }
643 
644  }
645  //
646  size_t nPatJets = 0;
647  if ( do_patjets_ )
648  nPatJets = config_.getParameter<InputTags>("PatJets").size();
649 
650  if ( nPatJets > jecRecords_.size() && jecRecords_.size() != 0 )
651  {
652  std::cout << "*** ERROR *** Ntuplizer: Number of JEC Records less than the number of PatJet collections." << std::endl;;
653  exit(-1);
654  }
655  if ( nPatJets > jerRecords_.size() && jerRecords_.size() != 0 )
656  {
657  std::cout << "*** ERROR *** Ntuplizer: Number of JER Records less than the number of PatJet collections." << std::endl;;
658  exit(-1);
659  }
660  if ( jerRecords_.size() != 0 && jer_files.size() != 0 && jersf_files.size()!=0 &&(jerRecords_.size() != jer_files.size() || jerRecords_.size() != jersf_files.size()) )
661  {
662  std::cerr << "*** ERROR *** Ntuplizer: Number of JER Records are not the same as number of provided input files. " <<std::endl;
663  exit(-1);
664  }
665 
666 
667  // Event info tree
668  eventinfo_ = pEventInfo (new EventInfo(eventsDir));
669  if ( config_.exists("FixedGridRhoAll") )
670  {
671  eventinfo_ -> FixedGridRhoInfo(config_.getParameter<edm::InputTag>("FixedGridRhoAll"));
672  }
673  if ( do_pileupinfo_ )
674  eventinfo_ -> PileupInfo(config_.getParameter<edm::InputTag>("PileupInfo"));
675  if ( do_geneventinfo_ )
676  eventinfo_ -> GenEventInfo(config_.getParameter<edm::InputTag>("GenEventInfo"));
677  if ( do_lumiscalers_ )
678  eventinfo_ -> LumiScalersInfo(config_.getParameter<edm::InputTag>("LumiScalers"));
679 
680  // Metadata
681  metadata_ = pMetadata (new Metadata(fs,is_mc_));
682  metadata_ -> AddDefinitions(btagVars_,"btagging");
683  // My cross section value for the metadata
684  xsection_ = -1.0;
685  if ( config_.exists("CrossSection") )
686  xsection_ = config_.getParameter<double>("CrossSection");
687 
688  edm::InputTag trgRes;
689  if ( do_triggeraccepts_ )
690  {
691  InputTags trs = config_.getParameter<InputTags>("TriggerResults");
692  trgRes = trs[0];
693  }
694 
695  // split trigger objects
696  bool splitTriggerObject = config_.exists("TriggerObjectSplits");
697  if ( do_triggerobjects_ && triggerObjectSplits_.empty() && splitTriggerObject )
698  {
699  triggerObjectSplits_ = config_.getParameter< std::vector<std::string> >("TriggerObjectSplits");
700  if ( ! triggerObjectSplits_.empty() && triggerObjectSplitsTypes_.empty() && config_.exists("TriggerObjectSplitsTypes") )
701  {
702  triggerObjectSplitsTypes_ = config_.getParameter< std::vector<std::string> >("TriggerObjectSplitsTypes");
703  for ( auto & tot : triggerObjectSplitsTypes_ ) std::transform(tot.begin(), tot.end(), tot.begin(), ::tolower);
704  splitTriggerObject = !triggerObjectSplitsTypes_.empty();
705  }
706  }
707 
708  if ( triggerObjectSplits_.size() != triggerObjectSplitsTypes_.size() )
709  {
710  std::cout << "-w- Ntuplizer: Size of trigger splits and splits types do not match!" << std::endl;
711  std::cout << " No splitting will be done" << std::endl;
712  splitTriggerObject = false;
713  }
714 
715 // if ( splitTriggerObject )
716 // {
717 // std::cout << "oioioi " << splitTriggerObject << std::endl;
718 // for ( size_t ito = 0 ; ito < triggerObjectSplits_.size() ; ++ito )
719 // std::cout << triggerObjectSplits_[ito] << " " << triggerObjectSplitsTypes_[ito] << std::endl;
720 // }
721 //
722 //
723 
724  // Input tags (vector)
725  for ( auto & inputTags : inputTagsVec_ )
726  {
727  InputTags collections = config_.getParameter<InputTags>(inputTags);
728  int patJetCounter = 0;
729  for ( auto & collection : collections )
730  {
731  // Names for the trees, from inputs
732  std::string label = collection.label();
733  std::string inst = collection.instance();
734  std::string proc = collection.process();
735  name = label;
736  if ( find_first(inputTags,"L1Extra") )
737  {
738  // renaming tree for L1 jest as there is no explicit indication those are L1 jets objects
739  std::string l1obj = inputTags;
740  erase_first(l1obj,"L1Extra");
741  name += l1obj;
742  }
743  fullname = name + "_" + inst + "_" + proc;
744  name += inputTags == "L1ExtraJets" && ! use_full_name_ ? "_" + inst : "";
745  if ( collection.instance() != "" && collections.size() > 1 )
746  name += "_" + inst;
747  if ( use_full_name_ ) name = fullname;
748  if ( inputTags == "L1TJets" && l1tjets_collections_.size() == 0 ) name = "l1tJets";
749  if ( inputTags == "L1TMuons" && l1tmuons_collections_.size() == 0 ) name = "l1tMuons";
750 
751  // Initialise trees
752  if ( inputTags != "TriggerObjectStandAlone" && inputTags != "TriggerEvent" )
753  tree_[name] = eventsDir.make<TTree>(name.c_str(),fullname.c_str());
754 
755  // L1 Jets
756  if ( inputTags == "L1ExtraJets" )
757  {
758  l1jets_collections_.push_back( pL1JetCandidates( new L1JetCandidates(collection, tree_[name], is_mc_ ) ));
759  l1jets_collections_.back() -> Init();
760  }
761 
762  // L1 Muons
763  if ( inputTags == "L1ExtraMuons" )
764  {
765  l1muons_collections_.push_back( pL1MuonCandidates( new L1MuonCandidates(collection, tree_[name], is_mc_ ) ));
766  l1muons_collections_.back() -> Init();
767  }
768 
769  // Calo Jets
770  if ( inputTags == "CaloJets" )
771  {
772  calojets_collections_.push_back( pCaloJetCandidates( new CaloJetCandidates(collection, tree_[name], is_mc_ ) ));
773  calojets_collections_.back() -> Init();
774  }
775  // PF Jets
776  if ( inputTags == "PFJets" )
777  {
778  pfjets_collections_.push_back( pPFJetCandidates( new PFJetCandidates(collection, tree_[name], is_mc_ ) ));
779  pfjets_collections_.back() -> Init();
780  }
781  // Reco Muons
782  if ( inputTags == "RecoMuons" )
783  {
784  recomuons_collections_.push_back( pRecoMuonCandidates( new RecoMuonCandidates(collection, tree_[name], is_mc_ ) ));
785  recomuons_collections_.back() -> Init();
786  }
787  // Reco Tracks
788  if ( inputTags == "RecoTracks" )
789  {
790  recotracks_collections_.push_back( pRecoTrackCandidates( new RecoTrackCandidates(collection, tree_[name], is_mc_ ) ));
791  recotracks_collections_.back() -> Init();
792  }
793 
794  // Pat Jets
795  if ( inputTags == "PatJets" )
796  {
797  patjets_collections_.push_back( pPatJetCandidates( new PatJetCandidates(collection, tree_[name], is_mc_ ) ));
798  patjets_collections_.back() -> Init(btagVars_);
799  patjets_collections_.back() -> QGTaggerInstance("QGTagger");
800  patjets_collections_.back() -> PileupJetIdInstance("pileupJetId");
801 
802  if ( patJetCounter == 0 && jecRecords_.size() > 0 ) std::cout << "*** Jet Energy Corrections Records - PatJets ***" << std::endl;
803  if ( jecRecords_.size() > 0 )
804  {
805  if ( jec_files.size() > 0 && jec_files[patJetCounter] != "" )
806  patjets_collections_.back() -> AddJecInfo(jecRecords_[patJetCounter],jec_files[patJetCounter]); // use txt file
807  else
808  patjets_collections_.back() -> AddJecInfo(jecRecords_[patJetCounter]); // use confdb
809 
810  }
811 
812  if ( patJetCounter == 0 && jerRecords_.size() > 0 ) std::cout << "*** Jet Energy Resolutions Records - PatJets ***" << std::endl;
813  if ( jerRecords_.size() > 0 && is_mc_ )
814  {
815  if ( jer_files.size() > 0 && jer_files[patJetCounter] != "" )
816  patjets_collections_.back() -> AddJerInfo(jerRecords_[patJetCounter],jer_files[patJetCounter], jersf_files[patJetCounter],fixedGridRhoAll_); // use txt file
817  else
818  patjets_collections_.back() -> AddJerInfo(jerRecords_[patJetCounter],fixedGridRhoAll_); // use txt file
819 
820  }
821 
822 // if ( jecRecords_.size() > 0 && jerRecords_.size() > 0 )
823 // {
824 // if (jer_files.size() != 0 && jer_files[patJetCounter] != "" && jersf_files[patJetCounter] != "")
825 // {
826 // patjets_collections_.back() -> Init(btagVars_,jecRecords_[patJetCounter],jerRecords_[patJetCounter],jer_files[patJetCounter],jersf_files[patJetCounter],fixedGridRhoAll_);
827 // }
828 // else
829 // {
830 // patjets_collections_.back() -> Init(btagVars_,jecRecords_[patJetCounter],jerRecords_[patJetCounter],fixedGridRhoAll_);
831 // }
832 // if ( jecRecords_[patJetCounter] != "" ) std::cout << name << " => " << jecRecords_[patJetCounter] << std::endl;
833 // }
834 // else
835 // {
836 // patjets_collections_.back() -> Init(btagVars_);
837 // }
838  ++patJetCounter;
839  }
840  // Pat METs
841  if ( inputTags == "PatMETs" )
842  {
843  patmets_collections_.push_back( pPatMETCandidates( new PatMETCandidates(collection, tree_[name], is_mc_) ));
844  patmets_collections_.back() -> Init();
845  }
846  // Pat Muons
847  if ( inputTags == "PatMuons" )
848  {
849  patmuons_collections_.push_back( pPatMuonCandidates( new PatMuonCandidates(collection, tree_[name], is_mc_ ) ));
850  patmuons_collections_.back() -> Init();
851  }
852  // Gen Jets
853  if ( inputTags == "GenJets" )
854  {
855  genjets_collections_.push_back( pGenJetCandidates( new GenJetCandidates(collection, tree_[name], is_mc_ ) ));
856  genjets_collections_.back() -> Init();
857  }
858  // Gen Particles
859  if ( inputTags == "GenParticles" )
860  {
861  genparticles_collections_.push_back( pGenParticleCandidates( new GenParticleCandidates(collection, tree_[name], is_mc_ ) ));
862  genparticles_collections_.back() -> Init();
863  }
864  // Jets Tags
865  if ( inputTags == "JetsTags" )
866  {
867  jetstags_collections_.push_back( pJetsTags( new JetsTags(collection, tree_[name]) ));
868  jetstags_collections_.back() -> Branches();
869  }
870 
871  // L1T Jets
872  if ( inputTags == "L1TJets" )
873  {
874  if ( l1tjets_collections_.size() == 0 )
875  {
876  l1tjets_collections_.push_back( pL1TJetCandidates( new L1TJetCandidates(collection, tree_[name], is_mc_ ) ));
877  l1tjets_collections_.back() -> Init();
878  }
879  else
880  {
881  std::cout << "Ntuplizer: # l1 jet collections > 1. Skipping." << std::endl;
882  }
883  }
884 
885  // L1T Muon
886  if ( inputTags == "L1TMuons" )
887  {
888  if ( l1tmuons_collections_.size() == 0 )
889  {
890  l1tmuons_collections_.push_back( pL1TMuonCandidates( new L1TMuonCandidates(collection, tree_[name], is_mc_ ) ));
891  l1tmuons_collections_.back() -> Init();
892  }
893  else
894  {
895  std::cout << "Ntuplizer: # l1 muon collections > 1. Skipping." << std::endl;
896  }
897  }
898  // Charged candidates
899  if ( inputTags == "ChargedCandidates" )
900  {
901  chargedcands_collections_.push_back( pChargedCandidates( new ChargedCandidates(collection, tree_[name], is_mc_ ) ));
902  chargedcands_collections_.back() -> Init();
903  }
904 
905  // Trigger Objects
906  if ( do_triggeraccepts_ && do_triggerobjects_ && inputTags == "TriggerObjectStandAlone" )
907  {
908  if ( triggerObjectLabels_.empty() )
909  triggerObjectLabels_ = config_.getParameter< std::vector<std::string> >("TriggerObjectLabels");
910  sort( triggerObjectLabels_.begin(), triggerObjectLabels_.end() );
911  triggerObjectLabels_.erase( unique( triggerObjectLabels_.begin(), triggerObjectLabels_.end() ), triggerObjectLabels_.end() );
912  std::string dir = name;
913  TFileDirectory triggerObjectsDir = eventsDir.mkdir(dir);
914 
915  for ( auto & triggerObjectLabel : triggerObjectLabels_ )
916  {
917  name = triggerObjectLabel;
918  if ( use_full_name_ ) name += "_" + dir;
919  tree_[name] = triggerObjectsDir.make<TTree>(name.c_str(),name.c_str());
920  triggerobjects_collections_.push_back(pTriggerObjectCandidates( new TriggerObjectCandidates(collection, tree_[name], is_mc_ ) ));
921  triggerobjects_collections_.back() -> Init();
922  triggerobjects_collections_.back() -> UseTriggerResults(trgRes);
923  if ( splitTriggerObject )
924  {
925  std::vector<std::string> types;
926  for ( size_t tos = 0; tos < triggerObjectSplits_.size() ; ++tos )
927  {
928  if ( triggerObjectSplits_.at(tos) == name )
929  {
930  boost::split(types,triggerObjectSplitsTypes_.at(tos),boost::is_any_of(":"));
931  break;
932  }
933  }
934  sort( types.begin(), types.end() );
935  types.erase( unique( types.begin(), types.end() ), types.end() );
936  for ( auto & tot : types )
937  {
938  std::string namesplit = name + "_" + tot;
939  tree_[namesplit] = triggerObjectsDir.make<TTree>(namesplit.c_str(),namesplit.c_str());
940  triggerobjects_collections_.push_back(pTriggerObjectCandidates( new TriggerObjectCandidates(collection, tree_[namesplit], is_mc_ ) ));
941  triggerobjects_collections_.back() -> Init();
942  triggerobjects_collections_.back() -> UseTriggerResults(trgRes);
943  triggerobjects_collections_.back() -> TriggerObjectType(tot);
944  }
945 
946  }
947 
948  }
949  }
950 
951  if ( do_triggerobjects_ && inputTags == "TriggerEvent" )
952  {
953  if ( triggerObjectLabels_.empty() )
954  triggerObjectLabels_ = config_.getParameter< std::vector<std::string> >("TriggerObjectLabels");
955  sort( triggerObjectLabels_.begin(), triggerObjectLabels_.end() );
956  triggerObjectLabels_.erase( unique( triggerObjectLabels_.begin(), triggerObjectLabels_.end() ), triggerObjectLabels_.end() );
957  std::string dir = name;
958  TFileDirectory triggerObjectsDir = eventsDir.mkdir(dir);
959 
960  for ( auto & triggerObjectLabel : triggerObjectLabels_ )
961  {
962  name = triggerObjectLabel;
963  if ( use_full_name_ ) name += "_" + dir;
964  tree_[name] = triggerObjectsDir.make<TTree>(name.c_str(),name.c_str());
965  triggerobjectsreco_collections_.push_back(pTriggerObjectRecoCandidates( new TriggerObjectRecoCandidates(collection, tree_[name], is_mc_ ) ));
966  triggerobjectsreco_collections_.back() -> Init();
967  }
968  }
969 
970  // Trigger Accepts
971  if ( do_triggeraccepts_ && inputTags == "TriggerResults" )
972  {
973  // TriggerResults collections names differ by the process, so add it to the name
974  std::vector< std::string> triggerpaths;
975  triggerpaths.clear();
976  std::vector< std::string> l1seeds;
977  l1seeds.clear();
978 
979  if ( config_.exists("TriggerPaths") ) triggerpaths = config_.getParameter< std::vector< std::string> >("TriggerPaths");
980  if ( config_.exists("L1Seeds") ) l1seeds = config_.getParameter< std::vector< std::string> >("L1Seeds");
981 
982  triggeraccepts_collections_.push_back( pTriggerAccepts( new TriggerAccepts(collection, tree_[name], triggerpaths, l1seeds, hltPrescaleProvider_) ));
983  triggeraccepts_collections_.back() -> Init();
984  triggeraccepts_collections_.back() -> ReadPrescaleInfo(readprescale_); // sometimes an error occurs as if the collection was not consumed!??? See TriggerAccepts
985  }
986 
987 // // TriggerInfo
988 // if ( do_triggerinfo_ && inputTags == "TriggerResults" )
989 // {
990 // // TriggerResults collections names differ by the process, so add it to the name
991 // std::vector< std::string> triggerpaths;
992 // triggerpaths.clear();
993 // if ( config_.exists("TriggerPaths") ) triggerpaths = config_.getParameter< std::vector< std::string> >("TriggerPaths");
994 // TFileDirectory triggerResultsDir = eventsDir.mkdir("TriggerResults");
995 //
996 // for ( auto & path : triggerpaths )
997 // {
998 // name = path;
999 // tree_[name] = triggerResultsDir.make<TTree>(name.c_str(),name.c_str());
1000 // triggerinfo_collections_.push_back( pTriggerInfo( new TriggerInfo(collection, tree_[name], path, hltPrescaleProvider_, testmode_) ));
1001 // triggerinfo_collections_.back() -> ReadPrescaleInfo(readprescale_); // sometimes an error occurs as if the collection was not consumed!??? See TriggerAccepts
1002 // }
1003 // }
1004 
1005  // Primary Vertices
1006  if ( inputTags == "PrimaryVertices" )
1007  {
1008  primaryvertices_collections_.push_back( pPrimaryVertices( new PrimaryVertices(collection, tree_[name]) ));
1009  }
1010 
1011  }
1012  }
1013 
1014 
1015  // InputTag (single, i.e. not vector)
1016 
1017  int nCounters = 0;
1018  int nMHatCounters = 0;
1019  for ( auto & inputTag : inputTags_ )
1020  {
1021  edm::InputTag collection = config_.getParameter<edm::InputTag>(inputTag);
1022 
1023  // Names for the trees, from inputs
1024  std::string label = collection.label();
1025  std::string inst = collection.instance();
1026  std::string proc = collection.process();
1027  name = label;
1028  fullname = name + "_" + inst + "_" + proc;
1029  if ( use_full_name_ ) name = fullname;
1030 
1031  // Generator filter
1032  if ( do_genfilter_ && inputTag == "GenFilterInfo" && is_mc_ )
1033  {
1034  metadata_ -> SetGeneratorFilter(config_.getParameter<edm::InputTag> ("GenFilterInfo"));
1035  }
1036  // Event filter
1037  if ( do_eventfilter_ )
1038  {
1039  eventCounters_.resize(2);
1040  mHatEventCounters_.resize(2);
1041  if ( inputTag == "TotalEvents" ) { eventCounters_[0] = totalEvents_; mHatEventCounters_[0] = totalEvents_; ++nCounters; ++nMHatCounters; }
1042  if ( inputTag == "FilteredEvents" ) { eventCounters_[1] = filteredEvents_; ++nCounters; }
1043  if ( inputTag == "FilteredMHatEvents" ) { mHatEventCounters_[1] = filteredMHatEvents_; ++nMHatCounters; }
1044 
1045  if ( nCounters == 2 ) metadata_ -> SetEventFilter(eventCounters_);
1046  if ( nMHatCounters == 2) metadata_ -> SetMHatEventFilter(mHatEventCounters_);
1047 // std::cout<<nMHatCounters<<std::endl;
1048  }
1049  // Pileup Info
1050 // if ( inputTag == "PileupInfo" && is_mc_ )
1051 // {
1052 // tree_[name] = eventsDir.make<TTree>(name.c_str(),fullname.c_str());
1053 // pileupinfo_ = pPileupInfo( new PileupInfo(collection, tree_[name]) );
1054 // pileupinfo_ -> Branches();
1055 //
1056 // }
1057 
1058 
1059 
1060 
1061  }
1062 
1063 }
1064 
1065 // ------------ method called once each job just after ending the event loop ------------
1066 void
1068 {
1069  metadata_ -> Fill();
1070 }
1071 
1072 // ------------ method called when starting to processes a run ------------
1073 void Ntuplizer::beginRun(edm::Run const& run, edm::EventSetup const& setup)
1074 {
1075  // Initialize HLTConfig every lumi block
1076  if ( do_triggeraccepts_ )
1077  {
1078  for ( size_t i = 0; i < triggeraccepts_collections_.size() ; ++i )
1079  {
1080  triggeraccepts_collections_[i] -> Run(run,setup);
1081  }
1082  }
1083 
1084 }
1085 
1086 
1087 // ------------ method called when ending the processing of a run ------------
1088 
1089 void
1090 Ntuplizer::endRun(edm::Run const& run, edm::EventSetup const& setup)
1091 {
1092  if ( do_genruninfo_ )
1093  {
1094  metadata_ -> SetCrossSections(run,genRunInfo_,xsection_);
1095  }
1096 }
1097 
1098 // ------------ method called when starting to processes a luminosity block ------------
1099 
1100 void Ntuplizer::beginLuminosityBlock(edm::LuminosityBlock const& lumi, edm::EventSetup const& setup)
1101 {
1102 // // Initialize HLTConfig every lumi block
1103 // if ( do_triggeraccepts_ )
1104 // {
1105 // for ( size_t i = 0; i < triggeraccepts_collections_.size() ; ++i )
1106 // {
1107 // triggeraccepts_collections_[i] -> LumiBlock(lumi,setup);
1108 // }
1109 // }
1110 }
1111 
1112 
1113 // ------------ method called when ending the processing of a luminosity block ------------
1114 
1115 void
1116 Ntuplizer::endLuminosityBlock(edm::LuminosityBlock const& lumi, edm::EventSetup const& setup)
1117 {
1118  metadata_ -> IncrementEventFilters(lumi);
1119 }
1120 
1121 
1122 // ------------ method fills 'descriptions' with the allowed parameters for the module ------------
1123 void
1124 Ntuplizer::fillDescriptions(edm::ConfigurationDescriptions& descriptions) {
1125  //The following says we do not know what parameters are allowed so do no validation
1126  // Please change this to state exactly what you do use, even if it is no parameters
1127  edm::ParameterSetDescription desc;
1128  desc.setUnknown();
1129  descriptions.addDefault(desc);
1130 }
1131 
1132 //define this as a plug-in
bool do_calojets_
Definition: Ntuplizer.cc:201
std::unique_ptr< Metadata > pMetadata
Definition: Ntuplizer.cc:145
std::vector< pL1TJetCandidates > l1tjets_collections_
Definition: Ntuplizer.cc:315
bool do_genparticles_
Definition: Ntuplizer.cc:209
std::unique_ptr< EventInfo > pEventInfo
Definition: Ntuplizer.cc:144
std::map< std::string, edm::EDGetTokenT< reco::GenParticleCollection > > genPartTokens_
Definition: Ntuplizer.cc:250
virtual void beginRun(edm::Run const &, edm::EventSetup const &) override
Definition: Ntuplizer.cc:1073
std::vector< std::string > inputTags_
Definition: Ntuplizer.cc:230
analysis::ntuple::PileupInfo PileupInfo
Definition: Ntuplizer.cc:120
std::vector< pTriggerObjectCandidates > triggerobjects_collections_
Definition: Ntuplizer.cc:313
std::vector< std::string > triggerObjectLabels_
Definition: Ntuplizer.cc:233
std::unique_ptr< L1JetCandidates > pL1JetCandidates
Definition: Ntuplizer.cc:148
analysis::ntuple::Metadata Metadata
Definition: Ntuplizer.cc:118
std::unique_ptr< ChargedCandidates > pChargedCandidates
Definition: Ntuplizer.cc:167
std::vector< pL1JetCandidates > l1jets_collections_
Definition: Ntuplizer.cc:298
analysis::ntuple::Candidates< trigger::TriggerObject > TriggerObjectRecoCandidates
Definition: Ntuplizer.cc:133
std::unique_ptr< PatJetCandidates > pPatJetCandidates
Definition: Ntuplizer.cc:154
edm::EDGetTokenT< edm::MergeableCounter > filteredEventsToken_
Definition: Ntuplizer.cc:276
analysis::ntuple::FilterResults genFilterResults_
Definition: Ntuplizer.cc:327
std::vector< pL1MuonCandidates > l1muons_collections_
Definition: Ntuplizer.cc:299
edm::InputTag genRunInfo_
Definition: Ntuplizer.cc:266
std::unique_ptr< Definitions > pDefinitions
Definition: Ntuplizer.cc:146
bool do_l1tjets_
Definition: Ntuplizer.cc:221
std::unique_ptr< PatMETCandidates > pPatMETCandidates
Definition: Ntuplizer.cc:155
pPileupInfo pileupinfo_
Definition: Ntuplizer.cc:295
std::vector< pPFJetCandidates > pfjets_collections_
Definition: Ntuplizer.cc:301
analysis::ntuple::JetsTags JetsTags
Definition: Ntuplizer.cc:134
bool do_genfilter_
Definition: Ntuplizer.cc:217
virtual void beginJob() override
Definition: Ntuplizer.cc:537
std::unique_ptr< GenParticleCandidates > pGenParticleCandidates
Definition: Ntuplizer.cc:158
std::vector< TitleAlias > btagVars_
Definition: Ntuplizer.cc:236
std::shared_ptr< HLTPrescaleProvider > hltPrescaleProvider_
Definition: Ntuplizer.cc:260
bool do_l1tmuons_
Definition: Ntuplizer.cc:222
std::unique_ptr< JetsTags > pJetsTags
Definition: Ntuplizer.cc:161
double xsection_
Definition: Ntuplizer.cc:324
analysis::ntuple::Candidates< l1extra::L1MuonParticle > L1MuonCandidates
Definition: Ntuplizer.cc:122
pEventInfo eventinfo_
Definition: Ntuplizer.cc:293
std::unique_ptr< L1TJetCandidates > pL1TJetCandidates
Definition: Ntuplizer.cc:165
std::vector< std::string > triggerObjectSplitsTypes_
Definition: Ntuplizer.cc:235
std::vector< std::string > triggerObjectSplits_
Definition: Ntuplizer.cc:234
analysis::ntuple::Definitions Definitions
Definition: Ntuplizer.cc:119
std::vector< std::string > btagAlgos_
Definition: Ntuplizer.cc:231
std::map< std::string, edm::EDGetTokenT< pat::TriggerObjectStandAloneCollection > > triggerObjTokens_
Definition: Ntuplizer.cc:251
bool do_pfjets_
Definition: Ntuplizer.cc:202
bool do_chargedcands_
Definition: Ntuplizer.cc:223
std::map< std::string, edm::EDGetTokenT< edm::TriggerResults > > triggerResultsTokens_
Definition: Ntuplizer.cc:253
std::vector< pPatJetCandidates > patjets_collections_
Definition: Ntuplizer.cc:304
edm::EDGetTokenT< LumiScalersCollection > lumiScalersToken_
Definition: Ntuplizer.cc:282
std::map< std::string, edm::EDGetTokenT< reco::PFJetCollection > > pfJetTokens_
Definition: Ntuplizer.cc:243
std::map< std::string, edm::EDGetTokenT< reco::CaloJetCollection > > caloJetTokens_
Definition: Ntuplizer.cc:242
analysis::ntuple::TitleAlias TitleAlias
Definition: Ntuplizer.cc:111
std::vector< pPatMETCandidates > patmets_collections_
Definition: Ntuplizer.cc:305
InputTags eventCounters_
Definition: Ntuplizer.cc:287
bool do_patmuons_
Definition: Ntuplizer.cc:207
std::map< std::string, edm::EDGetTokenT< pat::METCollection > > patMETTokens_
Definition: Ntuplizer.cc:247
edm::InputTag genEventInfo_
Definition: Ntuplizer.cc:269
InputTags mHatEventCounters_
Definition: Ntuplizer.cc:288
bool use_full_name_
Definition: Ntuplizer.cc:198
std::unique_ptr< TriggerObjectCandidates > pTriggerObjectCandidates
Definition: Ntuplizer.cc:159
bool do_triggeraccepts_
Definition: Ntuplizer.cc:213
pMetadata metadata_
Definition: Ntuplizer.cc:294
std::vector< std::string > jecRecords_
Definition: Ntuplizer.cc:237
std::map< std::string, edm::EDGetTokenT< l1extra::L1JetParticleCollection > > l1JetTokens_
Definition: Ntuplizer.cc:240
bool do_recomuons_
Definition: Ntuplizer.cc:203
std::vector< std::string > strings
Definition: Ntuplizer.cc:114
edm::EDGetTokenT< edm::MergeableCounter > totalEventsToken_
Definition: Ntuplizer.cc:275
std::map< std::string, edm::EDGetTokenT< l1t::JetBxCollection > > l1tJetTokens_
Definition: Ntuplizer.cc:256
virtual void endRun(edm::Run const &, edm::EventSetup const &) override
Definition: Ntuplizer.cc:1090
analysis::ntuple::TriggerAccepts TriggerAccepts
Definition: Ntuplizer.cc:135
std::map< std::string, edm::EDGetTokenT< reco::RecoChargedCandidateCollection > > chargedCandTokens_
Definition: Ntuplizer.cc:258
std::unique_ptr< RecoTrackCandidates > pRecoTrackCandidates
Definition: Ntuplizer.cc:153
std::vector< std::string > jerRecords_
Definition: Ntuplizer.cc:238
virtual void endLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
Definition: Ntuplizer.cc:1116
bool do_pileupinfo_
Definition: Ntuplizer.cc:211
bool do_l1jets_
Definition: Ntuplizer.cc:199
std::unique_ptr< RecoMuonCandidates > pRecoMuonCandidates
Definition: Ntuplizer.cc:152
edm::InputTag genFilterInfo_
Definition: Ntuplizer.cc:262
std::vector< std::string > btagAlgosAlias_
Definition: Ntuplizer.cc:232
virtual void analyze(const edm::Event &, const edm::EventSetup &) override
Definition: Ntuplizer.cc:427
edm::EDGetTokenT< std::vector< PileupSummaryInfo > > pileupInfoToken_
Definition: Ntuplizer.cc:280
std::vector< pCaloJetCandidates > calojets_collections_
Definition: Ntuplizer.cc:300
analysis::ntuple::Candidates< pat::Jet > PatJetCandidates
Definition: Ntuplizer.cc:127
bool is_mc_
Definition: Ntuplizer.cc:197
analysis::ntuple::Candidates< reco::GenParticle > GenParticleCandidates
Definition: Ntuplizer.cc:131
std::unique_ptr< L1TMuonCandidates > pL1TMuonCandidates
Definition: Ntuplizer.cc:166
edm::EDGetTokenT< edm::MergeableCounter > filteredMHatEventsToken_
Definition: Ntuplizer.cc:277
edm::InputTag totalEvents_
Definition: Ntuplizer.cc:263
analysis::ntuple::Candidates< reco::Muon > RecoMuonCandidates
Definition: Ntuplizer.cc:125
analysis::ntuple::Candidates< reco::PFJet > PFJetCandidates
Definition: Ntuplizer.cc:124
analysis::ntuple::FilterResults eventFilterResults_
Definition: Ntuplizer.cc:326
std::vector< pTriggerObjectRecoCandidates > triggerobjectsreco_collections_
Definition: Ntuplizer.cc:314
bool do_l1muons_
Definition: Ntuplizer.cc:200
bool do_genruninfo_
Definition: Ntuplizer.cc:219
analysis::ntuple::Candidates< l1t::Muon > L1TMuonCandidates
Definition: Ntuplizer.cc:139
Ntuplizer(const edm::ParameterSet &)
Definition: Ntuplizer.cc:342
bool do_eventfilter_
Definition: Ntuplizer.cc:216
std::unique_ptr< PrimaryVertices > pPrimaryVertices
Definition: Ntuplizer.cc:164
analysis::ntuple::Candidates< l1extra::L1JetParticle > L1JetCandidates
Definition: Ntuplizer.cc:121
bool readprescale_
Definition: Ntuplizer.cc:225
std::unique_ptr< GenJetCandidates > pGenJetCandidates
Definition: Ntuplizer.cc:157
bool do_genjets_
Definition: Ntuplizer.cc:208
bool do_patmets_
Definition: Ntuplizer.cc:206
virtual void endJob() override
Definition: Ntuplizer.cc:1067
edm::InputTag lumiScalers_
Definition: Ntuplizer.cc:270
edm::EDGetTokenT< GenEventInfoProduct > genEventInfoToken_
Definition: Ntuplizer.cc:281
std::vector< pRecoTrackCandidates > recotracks_collections_
Definition: Ntuplizer.cc:303
analysis::ntuple::TitleIndex TitleIndex
Definition: Ntuplizer.cc:110
std::vector< pChargedCandidates > chargedcands_collections_
Definition: Ntuplizer.cc:317
edm::InputTag filteredEvents_
Definition: Ntuplizer.cc:264
analysis::ntuple::Candidates< l1t::Jet > L1TJetCandidates
Definition: Ntuplizer.cc:138
edm::EDGetTokenT< double > fixedGridRhoAllToken_
Definition: Ntuplizer.cc:284
edm::ParameterSet config_
Definition: Ntuplizer.cc:195
edm::InputTag fixedGridRhoAll_
Definition: Ntuplizer.cc:272
edm::InputTag pileupInfo_
Definition: Ntuplizer.cc:268
analysis::ntuple::Candidates< reco::CaloJet > CaloJetCandidates
Definition: Ntuplizer.cc:123
std::vector< pL1TMuonCandidates > l1tmuons_collections_
Definition: Ntuplizer.cc:316
std::map< std::string, TTree * > tree_
Definition: Ntuplizer.cc:290
std::unique_ptr< CaloJetCandidates > pCaloJetCandidates
Definition: Ntuplizer.cc:150
bool testmode_
Definition: Ntuplizer.cc:227
bool do_recotracks_
Definition: Ntuplizer.cc:204
std::vector< std::string > inputTagsVec_
Definition: Ntuplizer.cc:229
analysis::ntuple::Candidates< reco::RecoChargedCandidate > ChargedCandidates
Definition: Ntuplizer.cc:140
virtual void beginLuminosityBlock(edm::LuminosityBlock const &, edm::EventSetup const &) override
Definition: Ntuplizer.cc:1100
std::map< std::string, edm::EDGetTokenT< reco::TrackCollection > > recoTrackTokens_
Definition: Ntuplizer.cc:245
std::unique_ptr< PFJetCandidates > pPFJetCandidates
Definition: Ntuplizer.cc:151
std::vector< pRecoMuonCandidates > recomuons_collections_
Definition: Ntuplizer.cc:302
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Member function.
Definition: Ntuplizer.cc:1124
std::map< std::string, edm::EDGetTokenT< pat::MuonCollection > > patMuonTokens_
Definition: Ntuplizer.cc:248
edm::EDGetTokenT< GenRunInfoProduct > genRunInfoToken_
Definition: Ntuplizer.cc:278
bool do_jetstags_
Definition: Ntuplizer.cc:210
std::map< std::string, edm::EDGetTokenT< trigger::TriggerEvent > > triggerEventTokens_
Definition: Ntuplizer.cc:252
std::map< std::string, edm::EDGetTokenT< l1extra::L1MuonParticleCollection > > l1MuonTokens_
Definition: Ntuplizer.cc:241
std::vector< pPatMuonCandidates > patmuons_collections_
Definition: Ntuplizer.cc:306
std::unique_ptr< PileupInfo > pPileupInfo
Definition: Ntuplizer.cc:147
std::map< std::string, edm::EDGetTokenT< l1t::MuonBxCollection > > l1tMuonTokens_
Definition: Ntuplizer.cc:257
std::map< std::string, edm::EDGetTokenT< reco::VertexCollection > > primaryVertexTokens_
Definition: Ntuplizer.cc:254
std::unique_ptr< L1MuonCandidates > pL1MuonCandidates
Definition: Ntuplizer.cc:149
edm::InputTag filteredMHatEvents_
Definition: Ntuplizer.cc:265
analysis::ntuple::Candidates< reco::Track > RecoTrackCandidates
Definition: Ntuplizer.cc:126
std::unique_ptr< TriggerAccepts > pTriggerAccepts
Definition: Ntuplizer.cc:162
std::vector< pGenJetCandidates > genjets_collections_
Definition: Ntuplizer.cc:307
bool do_triggerobjects_
Definition: Ntuplizer.cc:218
edm::EDGetTokenT< GenFilterInfo > genFilterInfoToken_
Definition: Ntuplizer.cc:274
std::vector< pTriggerAccepts > triggeraccepts_collections_
Definition: Ntuplizer.cc:311
bool do_patjets_
Definition: Ntuplizer.cc:205
std::vector< pPrimaryVertices > primaryvertices_collections_
Definition: Ntuplizer.cc:310
std::vector< edm::InputTag > InputTags
Definition: Ntuplizer.cc:113
bool do_lumiscalers_
Definition: Ntuplizer.cc:220
std::map< std::string, edm::EDGetTokenT< reco::MuonCollection > > recoMuonTokens_
Definition: Ntuplizer.cc:244
analysis::ntuple::Candidates< pat::MET > PatMETCandidates
Definition: Ntuplizer.cc:128
std::unique_ptr< PatMuonCandidates > pPatMuonCandidates
Definition: Ntuplizer.cc:156
analysis::ntuple::EventInfo EventInfo
Definition: Ntuplizer.cc:117
std::map< std::string, edm::EDGetTokenT< reco::GenJetCollection > > genJetTokens_
Definition: Ntuplizer.cc:249
double xsection_
Definition: Ntuple.h:19
analysis::ntuple::Candidates< pat::Muon > PatMuonCandidates
Definition: Ntuplizer.cc:129
std::unique_ptr< TriggerObjectRecoCandidates > pTriggerObjectRecoCandidates
Definition: Ntuplizer.cc:160
std::map< std::string, edm::EDGetTokenT< pat::JetCollection > > patJetTokens_
Definition: Ntuplizer.cc:246
analysis::ntuple::Candidates< reco::GenJet > GenJetCandidates
Definition: Ntuplizer.cc:130
std::vector< pJetsTags > jetstags_collections_
Definition: Ntuplizer.cc:309
bool do_primaryvertices_
Definition: Ntuplizer.cc:215
DEFINE_FWK_MODULE(Ntuplizer)
std::vector< pGenParticleCandidates > genparticles_collections_
Definition: Ntuplizer.cc:308
bool do_geneventinfo_
Definition: Ntuplizer.cc:212
analysis::ntuple::Vertices PrimaryVertices
Definition: Ntuplizer.cc:137
std::map< std::string, edm::EDGetTokenT< reco::JetTagCollection > > jetTagTokens_
Definition: Ntuplizer.cc:255
analysis::ntuple::Candidates< pat::TriggerObject > TriggerObjectCandidates
Definition: Ntuplizer.cc:132