CMS 3D CMS Logo

HGCalSimHitsClient.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <fstream>
3 #include <unistd.h>
4 #include <vector>
5 
9 
11 
14 
24 
29 
31 private:
32  //member data
35  unsigned int layers_;
36 
37 public:
38  explicit HGCalSimHitsClient(const edm::ParameterSet &);
39  ~HGCalSimHitsClient() override {}
40 
41  void beginRun(const edm::Run &run, const edm::EventSetup &c) override;
42  void dqmEndJob(DQMStore::IBooker &ib, DQMStore::IGetter &ig) override;
43  virtual void runClient_(DQMStore::IBooker &ib, DQMStore::IGetter &ig);
44  int simHitsEndjob(const std::vector<MonitorElement *> &hcalMEs);
45 };
46 
48  : nameDetector_(iConfig.getParameter<std::string>("DetectorName")),
49  nTimes_(iConfig.getParameter<int>("TimeSlices")),
50  verbosity_(iConfig.getUntrackedParameter<int>("Verbosity", 0)) {}
51 
53  if (nameDetector_ == "HCal") {
55  iSetup.get<HcalRecNumberingRecord>().get(pHRNDC);
56  const HcalDDDRecConstants *hcons = &(*pHRNDC);
57  layers_ = hcons->getMaxDepth(1);
58  } else {
60  iSetup.get<IdealGeometryRecord>().get(nameDetector_, pHGDC);
61  const HGCalDDDConstants &hgcons = (*pHGDC);
62  layers_ = hgcons.layers(false);
63  }
64  if (verbosity_ > 0)
65  edm::LogVerbatim("HGCalValidation") << "Initialize HGCalSimHitsClient for " << nameDetector_ << " : " << layers_;
66 }
67 
69 
71  ig.setCurrentFolder("/");
72  if (verbosity_ > 0)
73  edm::LogVerbatim("HGCalValidation") << " runClient";
74  std::vector<MonitorElement *> hgcalMEs;
75  std::vector<std::string> fullDirPath = ig.getSubdirs();
76 
77  for (unsigned int i = 0; i < fullDirPath.size(); i++) {
78  if (verbosity_ > 0)
79  edm::LogVerbatim("HGCalValidation") << "fullPath: " << fullDirPath.at(i);
80  ig.setCurrentFolder(fullDirPath.at(i));
81  std::vector<std::string> fullSubDirPath = ig.getSubdirs();
82 
83  for (unsigned int j = 0; j < fullSubDirPath.size(); j++) {
84  if (verbosity_ > 0)
85  edm::LogVerbatim("HGCalValidation") << "fullSubPath: " << fullSubDirPath.at(j);
86  std::string nameDirectory = "HGCAL/HGCalSimHitsV/" + nameDetector_;
87 
88  if (strcmp(fullSubDirPath.at(j).c_str(), nameDirectory.c_str()) == 0) {
89  hgcalMEs = ig.getContents(fullSubDirPath.at(j));
90  if (verbosity_ > 0)
91  edm::LogVerbatim("HGCalValidation") << "hgcalMES size : " << hgcalMEs.size();
92  if (!simHitsEndjob(hgcalMEs))
93  edm::LogWarning("HGCalValidation") << "\nError in SimhitsEndjob!";
94  }
95  }
96  }
97 }
98 
99 int HGCalSimHitsClient::simHitsEndjob(const std::vector<MonitorElement *> &hgcalMEs) {
100  std::vector<MonitorElement *> energy_[6];
101  std::vector<MonitorElement *> EtaPhi_Plus_, EtaPhi_Minus_;
102  std::vector<MonitorElement *> HitOccupancy_Plus_, HitOccupancy_Minus_;
103  MonitorElement *MeanHitOccupancy_Plus_, *MeanHitOccupancy_Minus_;
104 
105  std::ostringstream name;
106  double nevent;
107  int nbinsx, nbinsy;
108  for (unsigned int ilayer = 0; ilayer < layers_; ilayer++) {
109  for (int itimeslice = 0; itimeslice < nTimes_; itimeslice++) {
110  //Energy
111  name.str("");
112  name << "energy_time_" << itimeslice << "_layer_" << ilayer;
113  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
114  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0) {
115  energy_[itimeslice].push_back(hgcalMEs[ih]);
116  }
117  }
118  //normalization
119  nevent = energy_[itimeslice].at(ilayer)->getEntries();
120  nbinsx = energy_[itimeslice].at(ilayer)->getNbinsX();
121  for (int i = 1; i <= nbinsx; i++) {
122  double binValue = energy_[itimeslice].at(ilayer)->getBinContent(i) / nevent;
123  energy_[itimeslice].at(ilayer)->setBinContent(i, binValue);
124  }
125  }
126 
127  //EtaPhi 2d plots
128  name.str("");
129  name << "EtaPhi_Plus_"
130  << "layer_" << ilayer;
131  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
132  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0) {
133  EtaPhi_Plus_.push_back(hgcalMEs[ih]);
134  }
135  }
136 
137  name.str("");
138  name << "EtaPhi_Minus_"
139  << "layer_" << ilayer;
140  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
141  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0) {
142  EtaPhi_Minus_.push_back(hgcalMEs[ih]);
143  }
144  }
145  //normalization EtaPhi
146  nevent = EtaPhi_Plus_.at(ilayer)->getEntries();
147  nbinsx = EtaPhi_Plus_.at(ilayer)->getNbinsX();
148  nbinsy = EtaPhi_Plus_.at(ilayer)->getNbinsY();
149  for (int i = 1; i <= nbinsx; ++i) {
150  for (int j = 1; j <= nbinsy; ++j) {
151  double binValue = EtaPhi_Plus_.at(ilayer)->getBinContent(i, j) / nevent;
152  EtaPhi_Plus_.at(ilayer)->setBinContent(i, j, binValue);
153  }
154  }
155 
156  nevent = EtaPhi_Minus_.at(ilayer)->getEntries();
157  nbinsx = EtaPhi_Minus_.at(ilayer)->getNbinsX();
158  nbinsy = EtaPhi_Plus_.at(ilayer)->getNbinsY();
159  for (int i = 1; i <= nbinsx; ++i) {
160  for (int j = 1; j <= nbinsy; ++j) {
161  double binValue = EtaPhi_Minus_.at(ilayer)->getBinContent(i, j) / nevent;
162  EtaPhi_Minus_.at(ilayer)->setBinContent(i, j, binValue);
163  }
164  }
165 
166  //HitOccupancy
167  name.str("");
168  name << "HitOccupancy_Plus_layer_" << ilayer;
169  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
170  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0) {
171  HitOccupancy_Plus_.push_back(hgcalMEs[ih]);
172  }
173  }
174  name.str("");
175  name << "HitOccupancy_Minus_layer_" << ilayer;
176  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
177  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0) {
178  HitOccupancy_Minus_.push_back(hgcalMEs[ih]);
179  }
180  }
181 
182  nevent = HitOccupancy_Plus_.at(ilayer)->getEntries();
183  nbinsx = HitOccupancy_Plus_.at(ilayer)->getNbinsX();
184  for (int i = 1; i <= nbinsx; ++i) {
185  double binValue = HitOccupancy_Plus_.at(ilayer)->getBinContent(i) / nevent;
186  HitOccupancy_Plus_.at(ilayer)->setBinContent(i, binValue);
187  }
188 
189  nevent = HitOccupancy_Minus_.at(ilayer)->getEntries();
190  nbinsx = HitOccupancy_Minus_.at(ilayer)->getNbinsX();
191  for (int i = 1; i <= nbinsx; ++i) {
192  double binValue = HitOccupancy_Minus_.at(ilayer)->getBinContent(i) / nevent;
193  HitOccupancy_Minus_.at(ilayer)->setBinContent(i, binValue);
194  }
195 
196  } //loop over layers
197 
198  name.str("");
199  name << "MeanHitOccupancy_Plus";
200  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
201  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0) {
202  MeanHitOccupancy_Plus_ = hgcalMEs[ih];
203  for (int ilayer = 0; ilayer < static_cast<int>(layers_); ++ilayer) {
204  double meanVal = HitOccupancy_Plus_.at(ilayer)->getMean();
205  MeanHitOccupancy_Plus_->setBinContent(ilayer + 1, meanVal);
206  }
207  break;
208  }
209  }
210 
211  name.str("");
212  name << "MeanHitOccupancy_Minus";
213  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
214  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0) {
215  MeanHitOccupancy_Minus_ = hgcalMEs[ih];
216  for (int ilayer = 0; ilayer < static_cast<int>(layers_); ++ilayer) {
217  double meanVal = HitOccupancy_Minus_.at(ilayer)->getMean();
218  MeanHitOccupancy_Minus_->setBinContent(ilayer + 1, meanVal);
219  }
220  break;
221  }
222  }
223 
224  return 1;
225 }
226 
228 
~HGCalSimHitsClient() override
virtual void runClient_(DQMStore::IBooker &ib, DQMStore::IGetter &ig)
std::vector< MonitorElement * > getContents(Args &&...args)
Definition: DQMStore.h:246
void dqmEndJob(DQMStore::IBooker &ib, DQMStore::IGetter &ig) override
void beginRun(const edm::Run &run, const edm::EventSetup &c) override
int nevent
Definition: AMPTWrapper.h:84
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
unsigned int layers(bool reco) const
HGCalSimHitsClient(const edm::ParameterSet &)
TString getName(TString structure, int layer, TString geometry)
Definition: DMRtrends.cc:236
virtual double getMean(int axis=1) const
get mean value of histogram along x, y or z axis (axis=1, 2, 3 respectively)
virtual void setBinContent(int binx, double content)
set content of bin (1-D)
int getMaxDepth(const int &type) const
T get() const
Definition: EventSetup.h:73
int simHitsEndjob(const std::vector< MonitorElement * > &hcalMEs)
Definition: Run.h:45
ib
Definition: cuy.py:662
void setCurrentFolder(std::string const &fullpath)
Definition: DQMStore.cc:424
std::vector< std::string > getSubdirs()
Definition: DQMStore.cc:453