CMS 3D CMS Logo

DQMCorrelationClient.cc
Go to the documentation of this file.
2 
4 
5 //
6 // -------------------------------------- Constructor --------------------------------------------
7 //
9  me1onX_ ( iConfig.getParameter<bool>("me1onX") )
10  , meXpset_ ( me1onX_ ? getHistoPSet(iConfig.getParameter<edm::ParameterSet>("me1") ) : getHistoPSet(iConfig.getParameter<edm::ParameterSet>("me2") ) )
11  , meYpset_ ( me1onX_ ? getHistoPSet(iConfig.getParameter<edm::ParameterSet>("me2") ) : getHistoPSet(iConfig.getParameter<edm::ParameterSet>("me1") ) )
12  , mepset_ ( getOutputHistoPSet (iConfig.getParameter<edm::ParameterSet>("me") ) )
13 {
14  edm::LogInfo("DQMCorrelationClient") << "Constructor DQMCorrelationClient::DQMCorrelationClient " << std::endl;
15 
16  correlation_ = nullptr;
17 
18 }
19 
21 {
22  return MEPSet{
23  pset.getParameter<std::string>("name"),
24  pset.getParameter<std::string>("folder"),
25  pset.getParameter<bool>("profileX"),
26  };
27 }
28 
30 {
31  return OutputMEPSet{
32  pset.getParameter<std::string>("name"),
33  pset.getParameter<std::string>("folder"),
34  pset.getParameter<bool>("doXaxis"),
35  pset.getParameter<int>("nbinsX"),
36  pset.getParameter<double>("xminX"),
37  pset.getParameter<double>("xmaxX"),
38  pset.getParameter<bool>("doYaxis"),
39  pset.getParameter<int>("nbinsY"),
40  pset.getParameter<double>("xminY"),
41  pset.getParameter<double>("xmaxY"),
42  };
43 }
44 
45 //
46 // -------------------------------------- beginJob --------------------------------------------
47 //
49 {
50  edm::LogInfo("DQMCorrelationClient") << "DQMCorrelationClient::beginJob " << std::endl;
51 }
52 
54 
55  TH1* th1 = nullptr;
56 
58  switch(kind) {
60  th1 = ( profileX ? me->getTH2D()->ProfileX() : me->getTH2D()->ProfileY() );
61  break;
63  th1 = ( profileX ? me->getTH2F()->ProfileX() : me->getTH2F()->ProfileY() );
64  break;
66  th1 = ( profileX ? me->getTH2S()->ProfileX() : me->getTH2S()->ProfileY() );
67  break;
69  th1 = me->getTH1();
70  break;
71  default:
72  break;
73  }
74 
75  return th1;
76 }
78 {
79  if (correlation_ == nullptr) return;
80  correlation_->setAxisTitle(meX->getTH1()->GetYaxis()->GetTitle(),1);
81  correlation_->setAxisTitle(meY->getTH1()->GetYaxis()->GetTitle(),2);
82 
83  if ( !mepset_.doXaxis ) {
84  TAxis* axis = (meX->getTH1()->GetYaxis());
85  for ( int i=1; i<=axis->GetNbins(); ++i )
86  correlation_->getTH1()->GetXaxis()->SetBinLabel(i,axis->GetBinLabel(i));
87  }
88 
89  if ( !mepset_.doYaxis ) {
90  TAxis* axis = (meY->getTH1()->GetYaxis());
91  for ( int i=1; i<=axis->GetNbins(); ++i )
92  correlation_->getTH1()->GetYaxis()->SetBinLabel(i,axis->GetBinLabel(i));
93  }
94 }
95 
96 //
97 // -------------------------------------- get and book in the endJob --------------------------------------------
98 //
100 {
101  std::string hname = "";
102 
103  //get available histograms
104  hname = meXpset_.folder + "/" + meXpset_.name;
105  MonitorElement* meX = igetter_.get( hname );
106  hname = meYpset_.folder + "/" + meYpset_.name;
107  MonitorElement* meY = igetter_.get( hname );
108 
109  if (!meX || !meY) {
110  edm::LogError("DQMCorrelationClient") << "MEs not found! "
111  << ( !meX ? meXpset_.folder + "/" + meXpset_.name + " not found " : "" )
112  << ( !meY ? meYpset_.folder + "/" + meYpset_.name + " not found " : "" )
113  << std::endl;
114  return;
115  }
116 
117  // get range and binning for new MEs
118  int nbinsX = ( mepset_.doXaxis ? mepset_.nbinsX : meX->getNbinsY() );
119  double xminX = ( mepset_.doXaxis ? mepset_.xminX : meX->getTH1()->GetYaxis()->GetXmin() );
120  double xmaxX = ( mepset_.doXaxis ? mepset_.xmaxX : meX->getTH1()->GetYaxis()->GetXmax() );
121  int nbinsY = ( mepset_.doYaxis ? mepset_.nbinsY : meY->getNbinsY() );
122  double xminY = ( mepset_.doYaxis ? mepset_.xminY : meY->getTH1()->GetYaxis()->GetXmin() );
123  double xmaxY = ( mepset_.doYaxis ? mepset_.xmaxY : meY->getTH1()->GetYaxis()->GetXmax() );
124 
125  // create and cd into new folder
126  std::string currentFolder = mepset_.folder;
127  ibooker_.setCurrentFolder(currentFolder);
128 
129  //book new histogram
130  hname = mepset_.name;
131  correlation_ = ibooker_.book2D(hname,hname,nbinsX,xminX,xmaxX,nbinsY,xminY,xmaxY);
132  setAxisTitle(meX, meY);
133 
134  // handle mes
135  TH1* x = nullptr;
136  TH1* y = nullptr;
137  x = getTH1(meX,meXpset_.profileX);
138  y = getTH1(meY,meYpset_.profileX);
139 
140  size_t size = x->GetXaxis()->GetNbins();
141 
142  std::vector<double> xvalue;
143  std::vector<int> xbinvalue;
144  for ( size_t ibin=1; ibin <= size; ++ibin ) {
145  // avoid to store points w/ no info
146  if ( x->GetBinContent(ibin) == 0. ) continue;
147  xvalue.push_back ( x->GetBinContent(ibin) );
148  xbinvalue.push_back ( x->GetXaxis()->GetBinCenter(ibin) );
149  }
150 
151  for ( size_t i=0; i < xbinvalue.size(); ++i ) {
152  int ybin = y->GetXaxis()->FindBin(xbinvalue[i]);
153  double yvalue = y->GetBinContent(ybin);
154  correlation_->Fill(xvalue[i],yvalue);
155  }
156 
157 }
158 
159 //
160 // -------------------------------------- get in the endLumi if needed --------------------------------------------
161 //
163 {
164  edm::LogInfo("DQMCorrelationClient") << "DQMCorrelationClient::endLumi " << std::endl;
165 }
166 
168 {
169  pset.add<std::string>("folder","");
170  pset.add<std::string>("name","");
171  pset.add<bool>("profileX",true);
172 }
173 
175 {
176  // fillMePSetDescription(pset);
177  pset.add<std::string>("folder");
178  pset.add<std::string>("name");
179  pset.add<bool>("doXaxis", true);
180  pset.add<int>("nbinsX", 2500);
181  pset.add<double>("xminX", 0.);
182  pset.add<double>("xmaxX",2500.);
183  pset.add<bool>("doYaxis", true);
184  pset.add<int>("nbinsY", 2500);
185  pset.add<double>("xminY", 0.);
186  pset.add<double>("xmaxY",2500.);
187 }
188 
190 {
191 
193  desc.add<bool>("me1onX",true);
194 
197  desc.add<edm::ParameterSetDescription>("me", mePSet);
198 
200  fillMePSetDescription(me1PSet);
201  desc.add<edm::ParameterSetDescription>("me1", me1PSet);
202 
204  fillMePSetDescription(me2PSet);
205  desc.add<edm::ParameterSetDescription>("me2", me2PSet);
206 
207  descriptions.add("dqmCorrelationClient", desc);
208 
209 }
210 
211 // Define this as a plug-in
size
Write out results.
MonitorElement * correlation_
T getParameter(std::string const &) const
void setAxisTitle(MonitorElement *meX, MonitorElement *meY)
static OutputMEPSet getOutputHistoPSet(edm::ParameterSet pset)
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
static void fillMePSetDescription(edm::ParameterSetDescription &pset)
TH2S * getTH2S() const
void dqmEndJob(DQMStore::IBooker &, DQMStore::IGetter &) override
void dqmEndLuminosityBlock(DQMStore::IBooker &, DQMStore::IGetter &, edm::LuminosityBlock const &, edm::EventSetup const &) override
std::string folder
TH1 * getTH1() const
TH1 * getTH1(MonitorElement *me, bool profileX)
void Fill(long long x)
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:268
std::string folder
static MEPSet getHistoPSet(edm::ParameterSet pset)
TH2D * getTH2D() const
ParameterDescriptionBase * add(U const &iLabel, T const &value)
TH2F * getTH2F() const
MonitorElement * get(std::string const &path)
Definition: DQMStore.cc:303
std::string name
MonitorElement * book2D(Args &&...args)
Definition: DQMStore.h:109
DQMCorrelationClient(const edm::ParameterSet &ps)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
int getNbinsY() const
get # of bins in Y-axis
HLT enums.
static void fillOutputMePSetDescription(edm::ParameterSetDescription &pset)
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
Kind kind() const
Get the type of the monitor element.