CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HLTHiggsPlotter.cc
Go to the documentation of this file.
1 
12 
14 
18 
19 #include "TPRegexp.h"
20 
21 
22 #include<set>
23 #include<cctype>
24 
26  const std::string & hltPath,
27  const std::vector<unsigned int> & objectsType) :
28  _hltPath(hltPath),
29  _hltProcessName(pset.getParameter<std::string>("hltProcessName")),
30  _objectsType(std::set<unsigned int>(objectsType.begin(),objectsType.end())),
31  _nObjects(objectsType.size()),
32  _parametersEta(pset.getParameter<std::vector<double> >("parametersEta")),
33  _parametersPhi(pset.getParameter<std::vector<double> >("parametersPhi")),
34  _parametersTurnOn(pset.getParameter<std::vector<double> >("parametersTurnOn"))
35 {
36  for(std::set<unsigned int>::iterator it = _objectsType.begin();
37  it != _objectsType.end(); ++it)
38  {
39  // Some parameters extracted from the .py
41  _cutMinPt[*it] = pset.getParameter<double>( std::string(objStr+"_cutMinPt").c_str() );
42  _cutMaxEta[*it] = pset.getParameter<double>( std::string(objStr+"_cutMaxEta").c_str() );
43  }
44 }
45 
47 {
48 }
49 
50 
52 {
53 }
54 
55 
56 
58  const edm::EventSetup & iSetup)
59 {
60 
61 }
62 
64 {
65  for (std::set<unsigned int>::iterator it = _objectsType.begin();
66  it != _objectsType.end(); ++it)
67  {
68  std::vector<std::string> sources(2);
69  sources[0] = "gen";
70  sources[1] = "rec";
71 
72  const std::string objTypeStr = EVTColContainer::getTypeString(*it);
73 
74  for (size_t i = 0; i < sources.size(); i++)
75  {
76  std::string source = sources[i];
77  bookHist(source, objTypeStr, "Eta", ibooker);
78  bookHist(source, objTypeStr, "Phi", ibooker);
79  bookHist(source, objTypeStr, "MaxPt1", ibooker);
80  bookHist(source, objTypeStr, "MaxPt2", ibooker);
81  }
82  }
83 
84 }
85 
86 void HLTHiggsPlotter::analyze(const bool & isPassTrigger,
87  const std::string & source,
88  const std::vector<MatchStruct> & matches)
89 {
90  if ( !isPassTrigger )
91  {
92  return;
93  }
94  std::map<unsigned int,int> countobjects;
95  // Initializing the count of the used object
96  for(std::set<unsigned int>::iterator co = _objectsType.begin();
97  co != _objectsType.end(); ++co)
98  {
99  countobjects[*co] = 0;
100  }
101 
102  int counttotal = 0;
103  const int totalobjectssize2 = 2*countobjects.size();
104  // Fill the histos if pass the trigger (just the two with higher pt)
105  for (size_t j = 0; j < matches.size(); ++j)
106  {
107  // Is this object owned by this trigger? If not we are not interested...
108  if ( _objectsType.find( matches[j].objType) == _objectsType.end() )
109  {
110  continue;
111  }
112 
113  const unsigned int objType = matches[j].objType;
114  const std::string objTypeStr = EVTColContainer::getTypeString(matches[j].objType);
115 
116  float pt = matches[j].pt;
117  float eta = matches[j].eta;
118  float phi = matches[j].phi;
119  this->fillHist(isPassTrigger,source,objTypeStr,"Eta",eta);
120  this->fillHist(isPassTrigger,source,objTypeStr,"Phi",phi);
121  if ( countobjects[objType] == 0 )
122  {
123  this->fillHist(isPassTrigger,source,objTypeStr,"MaxPt1",pt);
124  // Filled the high pt ...
125  ++(countobjects[objType]);
126  ++counttotal;
127  }
128  else if ( countobjects[objType] == 1 )
129  {
130  this->fillHist(isPassTrigger,source,objTypeStr,"MaxPt2",pt);
131  // Filled the second high pt ...
132  ++(countobjects[objType]);
133  ++counttotal;
134  }
135  else
136  {
137  if ( counttotal == totalobjectssize2 )
138  {
139  break;
140  }
141  }
142  }
143 }
144 
145 
147  const std::string & objType,
148  const std::string & variable,
149  DQMStore::IBooker & ibooker)
150 {
151  std::string sourceUpper = source;
152  sourceUpper[0] = std::toupper(sourceUpper[0]);
153  std::string name = source + objType + variable + "_" + _hltPath;
154  TH1F * h = 0;
155 
156  if (variable.find("MaxPt") != std::string::npos)
157  {
158  std::string desc = (variable == "MaxPt1") ? "Leading" : "Next-to-Leading";
159  std::string title = "pT of " + desc + " " + sourceUpper + " " + objType + " "
160  "where event pass the "+ _hltPath;
161  const size_t nBins = _parametersTurnOn.size() - 1;
162  float * edges = new float[nBins + 1];
163  for(size_t i = 0; i < nBins + 1; i++)
164  {
165  edges[i] = _parametersTurnOn[i];
166  }
167  h = new TH1F(name.c_str(), title.c_str(), nBins, edges);
168  delete [] edges;
169  }
170  else
171  {
172  std::string symbol = (variable == "Eta") ? "#eta" : "#phi";
173  std::string title = symbol + " of " + sourceUpper + " " + objType + " "+
174  "where event pass the "+ _hltPath;
175  std::vector<double> params = (variable == "Eta") ? _parametersEta : _parametersPhi;
176 
177  int nBins = (int)params[0];
178  double min = params[1];
179  double max = params[2];
180  h = new TH1F(name.c_str(), title.c_str(), nBins, min, max);
181  }
182  h->Sumw2();
183  _elements[name] = ibooker.book1D(name.c_str(), h);
184  delete h;
185 }
186 
187 void HLTHiggsPlotter::fillHist(const bool & passTrigger,
188  const std::string & source,
189  const std::string & objType,
190  const std::string & variable,
191  const float & value )
192 {
193  std::string sourceUpper = source;
194  sourceUpper[0] = toupper(sourceUpper[0]);
195  std::string name = source + objType + variable + "_" + _hltPath;
196 
197  _elements[name]->Fill(value);
198 }
199 
200 
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
void bookHistograms(DQMStore::IBooker &)
HLTHiggsPlotter(const edm::ParameterSet &pset, const std::string &hltPath, const std::vector< unsigned int > &objectsType)
std::vector< double > _parametersPhi
T eta() const
dictionary edges
std::set< unsigned int > _objectsType
std::map< std::string, MonitorElement * > _elements
std::string _hltPath
const T & max(const T &a, const T &b)
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:113
std::map< unsigned int, double > _cutMinPt
int j
Definition: DBlmapReader.cc:9
std::vector< double > _parametersTurnOn
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
#define end
Definition: vmac.h:37
void fillHist(const bool &passTrigger, const std::string &source, const std::string &objType, const std::string &var, const float &value)
void bookHist(const std::string &source, const std::string &objType, const std::string &variable, DQMStore::IBooker &)
std::vector< double > _parametersEta
void beginRun(const edm::Run &, const edm::EventSetup &)
void analyze(const bool &isPassTrigger, const std::string &source, const std::vector< MatchStruct > &matches)
#define begin
Definition: vmac.h:30
std::map< unsigned int, double > _cutMaxEta
static const std::string getTypeString(const unsigned int &objtype)
Tranform types into strings.
static std::string const source
Definition: EdmProvDump.cc:43
tuple size
Write out results.
Definition: Run.h:41
Definition: DDAxes.h:10