DESY Hbb Analysis Framework
Metadata.cc
Go to the documentation of this file.
1 
8 //
9 // Original Author: Roberval Walsh Bastos Rangel
10 // Created: Mon, 20 Oct 2014 14:24:08 GMT
11 //
12 //
13 
14 // system include files
15 #include <iostream>
16 #include <exception>
17 //
18 // user include files
19 #include "FWCore/Framework/interface/Event.h"
20 #include "FWCore/ParameterSet/interface/ParameterSet.h"
21 
23 
24 #include "SimDataFormats/GeneratorProducts/interface/GenRunInfoProduct.h"
25 
26 
27 //
28 // class declaration
29 //
30 
31 using namespace analysis;
32 using namespace analysis::ntuple;
33 
34 //
35 // constructors and destructor
36 //
38 {
39  // default constructor
40 }
41 
42 Metadata::Metadata(edm::Service<TFileService> & fs, const bool & is_mc, const std::string & dir )
43 {
44  is_mc_ = is_mc;
45 
46  vdefinitions_.clear();
47  mainDir_ = fs->mkdir(dir);
48  mHatDir_ = fs->mkdir("mHatFilter");
49 
50 // fs_ = &fs;
51 
52  isGenFilter_ = false;
53  isEvtFilter_ = false;
54  isMHatEvtFilter_ = false;
55 
56  if ( is_mc_ )
57  {
58  // Cross sections tree
59  treeXS_ = mainDir_.make<TTree>("CrossSections","Cross Sections");
60  // cross section branches
61  treeXS_ -> Branch("run" , &runXS_ , "run/i");
62  treeXS_ -> Branch("myCrossSection" , &myXSec_ , "myCrossSection/D");
63  treeXS_ -> Branch("crossSection" , &XSec_ , "crossSection_generator/D");
64  treeXS_ -> Branch("internalXSec" , &internalXSec_ , "internalXSec_generator/D");
65  treeXS_ -> Branch("externalXSecLO" , &externalXSecLO_ , "externalXSecLO_generator/D");
66  treeXS_ -> Branch("externalXSecNLO", &externalXSecNLO_ , "externalXSecNLO_generator/D");
67  }
68 
69  // Dataset
70  treeDS_ = mainDir_.make<TTree>("Dataset","Dataset info");
71  treeDS_ -> Branch("isMC" , &is_mc_ , "isMC/O");
72 
73 }
74 
76 {
77  // do anything here that needs to be done at desctruction time
78  // (e.g. close files, deallocate resources etc.)
79 }
80 
81 
82 //
83 // member functions
84 //
85 
86 // ------------ method called for each event ------------
88 {
89  for ( auto & definitions : vdefinitions_ )
90  definitions -> Fill();
91 
92  if ( isGenFilter_ ) genfilter_ -> Fill();
93  if ( isEvtFilter_ ) evtfilter_ -> Fill();
95 
96  treeDS_ -> Fill();
97 
98 }
99 
100 // ------------ method called once each job just before starting event loop ------------
101 void Metadata::AddDefinitions(const std::vector<std::string> & names, const std::vector<std::string> & aliases)
102 {
103  vdefinitions_.push_back(pDefinitions ( new Definitions(mainDir_) ));
104  vdefinitions_.back() -> Add(names,aliases);
105 }
106 
107 void Metadata::AddDefinitions(const std::vector<std::string> & names, const std::vector<std::string> & aliases, const std::string & category)
108 {
109  vdefinitions_.push_back(pDefinitions ( new Definitions(mainDir_, category) ));
110  vdefinitions_.back() -> Add(names,aliases);
111 }
112 
113 void Metadata::AddDefinitions(const std::vector<TitleAlias> & tas, const std::string & category)
114 {
115  std::vector<std::string> names;
116  std::vector<std::string> aliases;
117  for ( auto & ta : tas )
118  {
119  names.push_back(ta.title);
120  aliases.push_back(ta.alias);
121  }
122  vdefinitions_.push_back(pDefinitions ( new Definitions(mainDir_, category) ));
123  vdefinitions_.back() -> Add(names,aliases);
124 }
125 
126 void Metadata::SetGeneratorFilter(const edm::InputTag & genFilterInfo )
127 {
128  genfilter_ = pGenFilter( new GenFilter(mainDir_, {genFilterInfo} ));
129  isGenFilter_ = true;
130 }
131 
132 void Metadata::SetEventFilter(const std::vector<edm::InputTag> & filterInfos )
133 {
134  evtfilter_ = pEvtFilter( new EvtFilter(mainDir_, filterInfos ));
135  isEvtFilter_ = true;
136 }
137 
138 void Metadata::SetMHatEventFilter(const std::vector<edm::InputTag> & filterInfos )
139 {
140  mHatEvtFilter_ = pEvtFilter( new EvtFilter(mHatDir_, filterInfos ));
141  isMHatEvtFilter_ = true;
142 }
143 
144 
145 void Metadata::IncrementEventFilters( edm::LuminosityBlock const& lumi )
146 {
147  if ( isGenFilter_ ) genfilter_ -> Increment(lumi);
148  if ( isEvtFilter_ ) evtfilter_ -> Increment(lumi);
149  if ( isMHatEvtFilter_) mHatEvtFilter_ -> Increment(lumi);
150 }
151 
153 {
154  // genfilter_ should not go out of scope after returning the reference, should be safe(?)
155  return *genfilter_;
156 }
158 {
159  return *evtfilter_;
160 }
161 
162 void Metadata::SetCrossSections( const edm::Run & run, const edm::InputTag & inputTag, const double & myxs )
163 {
164  if ( is_mc_ )
165  {
166  runXS_ = run.run();
167 
168  edm::Handle<GenRunInfoProduct> genRunInfo;
169  run.getByLabel( inputTag, genRunInfo );
170  myXSec_ = myxs;
171  XSec_ = genRunInfo -> crossSection();
172  internalXSec_ = genRunInfo -> internalXSec().value();
173  externalXSecLO_ = genRunInfo -> externalXSecLO().value();
174  externalXSecNLO_ = genRunInfo -> externalXSecNLO().value();
175 
176  treeXS_ -> Fill();
177  }
178 
179 }
180 
181 
std::vector< pDefinitions > vdefinitions_
Definition: Metadata.h:100
TFileDirectory mainDir_
Definition: Metadata.h:97
TFileDirectory mHatDir_
Definition: Metadata.h:98
std::unique_ptr< GenFilter > pGenFilter
Definition: Metadata.h:55
GenFilter & GetGeneratorFilter()
Definition: Metadata.cc:152
void SetCrossSections(const edm::Run &, const edm::InputTag &, const double &myxs=-1.)
Definition: Metadata.cc:162
void SetGeneratorFilter(const edm::InputTag &)
Definition: Metadata.cc:126
void AddDefinitions(const std::vector< std::string > &, const std::vector< std::string > &)
Definition: Metadata.cc:101
analysis::ntuple::EventFilter< GenFilterInfo > GenFilter
Definition: Metadata.h:52
std::unique_ptr< EvtFilter > pEvtFilter
Definition: Metadata.h:56
EvtFilter & GetEventFilter()
Definition: Metadata.cc:157
void SetMHatEventFilter(const std::vector< edm::InputTag > &)
Definition: Metadata.cc:138
std::unique_ptr< Definitions > pDefinitions
Definition: Metadata.h:50
analysis::ntuple::EventFilter< edm::MergeableCounter > EvtFilter
Definition: Metadata.h:53
void SetEventFilter(const std::vector< edm::InputTag > &)
Definition: Metadata.cc:132
void IncrementEventFilters(edm::LuminosityBlock const &)
Definition: Metadata.cc:145
analysis::ntuple::Definitions Definitions
Definition: Metadata.h:49