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