CMS 3D CMS Logo

HGCalDigiClient.cc
Go to the documentation of this file.
1 #include <iostream>
2 #include <fstream>
3 #include <vector>
4 #include <unistd.h>
5 
14 
22 
24 private:
27  int layers_;
28 
29 public:
30  explicit HGCalDigiClient(const edm::ParameterSet &);
31  ~HGCalDigiClient() override {}
32 
33  void beginRun(const edm::Run &run, const edm::EventSetup &c) override;
34  void dqmEndJob(DQMStore::IBooker &ib, DQMStore::IGetter &ig) override;
36  int digisEndjob(const std::vector<MonitorElement *> &hcalMEs);
37 };
38 
40  : nameDetector_(iConfig.getParameter<std::string>("DetectorName")),
41  verbosity_(iConfig.getUntrackedParameter<int>("Verbosity", 0)) {}
42 
44  if (nameDetector_ == "HCal") {
46  iSetup.get<HcalRecNumberingRecord>().get(pHRNDC);
47  const HcalDDDRecConstants *hcons = &(*pHRNDC);
48  layers_ = hcons->getMaxDepth(1);
49  } else {
51  iSetup.get<IdealGeometryRecord>().get(nameDetector_, pHGDC);
52  const HGCalDDDConstants &hgcons_ = (*pHGDC);
53  layers_ = hgcons_.layers(true);
54  }
55 }
56 
58 
60  ig.setCurrentFolder("/");
61  if (verbosity_)
62  edm::LogVerbatim("HGCalValidation") << "\nrunClient";
63  std::vector<MonitorElement *> hgcalMEs;
64  std::vector<std::string> fullDirPath = ig.getSubdirs();
65 
66  for (unsigned int i = 0; i < fullDirPath.size(); i++) {
67  if (verbosity_)
68  edm::LogVerbatim("HGCalValidation") << "\nfullPath: " << fullDirPath.at(i);
69  ig.setCurrentFolder(fullDirPath.at(i));
70  std::vector<std::string> fullSubDirPath = ig.getSubdirs();
71 
72  for (unsigned int j = 0; j < fullSubDirPath.size(); j++) {
73  if (verbosity_)
74  edm::LogVerbatim("HGCalValidation") << "fullSubPath: " << fullSubDirPath.at(j);
75  std::string nameDirectory = "HGCAL/HGCalDigisV/" + nameDetector_;
76  if (strcmp(fullSubDirPath.at(j).c_str(), nameDirectory.c_str()) == 0) {
77  hgcalMEs = ig.getContents(fullSubDirPath.at(j));
78  if (verbosity_)
79  edm::LogVerbatim("HGCalValidation") << "hgcalMES size : " << hgcalMEs.size();
80  if (!digisEndjob(hgcalMEs))
81  edm::LogVerbatim("HGCalValidation") << "\nError in DigisEndjob!";
82  }
83  }
84  }
85 }
86 
87 int HGCalDigiClient::digisEndjob(const std::vector<MonitorElement *> &hgcalMEs) {
88  std::vector<MonitorElement *> charge_;
89  std::vector<MonitorElement *> DigiOccupancy_XY_;
90  std::vector<MonitorElement *> ADC_;
91  std::vector<MonitorElement *> DigiOccupancy_Plus_;
92  std::vector<MonitorElement *> DigiOccupancy_Minus_;
93  std::vector<MonitorElement *> MeanDigiOccupancy_Plus_;
94  std::vector<MonitorElement *> MeanDigiOccupancy_Minus_;
95  std::ostringstream name;
96  double nevent;
97  int nbinsx, nbinsy;
98 
99  for (int ilayer = 0; ilayer < layers_; ilayer++) {
100  //charge
101  name.str("");
102  name << "charge_layer_" << ilayer;
103  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
104  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0)
105  charge_.push_back(hgcalMEs[ih]);
106  }
107  //normalization
108  nevent = charge_.at(ilayer)->getEntries();
109  nbinsx = charge_.at(ilayer)->getNbinsX();
110  for (int i = 1; i <= nbinsx; i++) {
111  double binValue = charge_.at(ilayer)->getBinContent(i) / nevent;
112  charge_.at(ilayer)->setBinContent(i, binValue);
113  }
114 
115  //XY 2d plots
116  name.str("");
117  name << "DigiOccupancy_XY_"
118  << "layer_" << ilayer;
119  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
120  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0)
121  DigiOccupancy_XY_.push_back(hgcalMEs[ih]);
122  }
123 
124  //normalization of XY 2d
125  nevent = DigiOccupancy_XY_.at(ilayer)->getEntries();
126  nbinsx = DigiOccupancy_XY_.at(ilayer)->getNbinsX();
127  nbinsy = DigiOccupancy_XY_.at(ilayer)->getNbinsY();
128  for (int i = 1; i <= nbinsx; ++i) {
129  for (int j = 1; j <= nbinsy; ++j) {
130  double binValue = DigiOccupancy_XY_.at(ilayer)->getBinContent(i, j) / nevent;
131  DigiOccupancy_XY_.at(ilayer)->setBinContent(i, j, binValue);
132  }
133  }
134 
135  //ADC
136  name.str("");
137  name << "ADC_layer_" << ilayer;
138  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
139  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0)
140  ADC_.push_back(hgcalMEs[ih]);
141  }
142 
143  //normalization of ADC Histos
144  nevent = ADC_.at(ilayer)->getEntries();
145  nbinsx = ADC_.at(ilayer)->getNbinsX();
146  for (int i = 1; i <= nbinsx; ++i) {
147  double binValue = ADC_.at(ilayer)->getBinContent(i) / nevent;
148  ADC_.at(ilayer)->setBinContent(i, binValue);
149  }
150 
151  //Digi Occupancy
152  name.str("");
153  name << "DigiOccupancy_Plus_layer_" << ilayer;
154  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
155  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0) {
156  DigiOccupancy_Plus_.push_back(hgcalMEs[ih]);
157  }
158  }
159 
160  name.str("");
161  name << "DigiOccupancy_Minus_layer_" << ilayer;
162  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
163  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0) {
164  DigiOccupancy_Minus_.push_back(hgcalMEs[ih]);
165  }
166  }
167 
168  //normalization of Digi Occupancy histos
169  nevent = DigiOccupancy_Plus_.at(ilayer)->getEntries();
170  nbinsx = DigiOccupancy_Plus_.at(ilayer)->getNbinsX();
171  for (int i = 1; i <= nbinsx; ++i) {
172  double binValue = DigiOccupancy_Plus_.at(ilayer)->getBinContent(i) / nevent;
173  DigiOccupancy_Plus_.at(ilayer)->setBinContent(i, binValue);
174  }
175 
176  nevent = DigiOccupancy_Minus_.at(ilayer)->getEntries();
177  nbinsx = DigiOccupancy_Minus_.at(ilayer)->getNbinsX();
178  for (int i = 1; i <= nbinsx; ++i) {
179  double binValue = DigiOccupancy_Minus_.at(ilayer)->getBinContent(i) / nevent;
180  DigiOccupancy_Minus_.at(ilayer)->setBinContent(i, binValue);
181  }
182 
183  } //loop over layers
184 
185  name.str("");
186  name << "SUMOfDigiOccupancy_Plus";
187  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
188  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0) {
189  MeanDigiOccupancy_Plus_.push_back(hgcalMEs[ih]);
190  unsigned indx = MeanDigiOccupancy_Plus_.size() - 1;
191  for (int ilayer = 0; ilayer < (int)layers_; ++ilayer) {
192  double meanVal = DigiOccupancy_Plus_.at(ilayer)->getMean();
193  MeanDigiOccupancy_Plus_[indx]->setBinContent(ilayer + 1, meanVal);
194  }
195  break;
196  }
197  }
198 
199  name.str("");
200  name << "SUMOfDigiOccupancy_Plus";
201  for (unsigned int ih = 0; ih < hgcalMEs.size(); ih++) {
202  if (strcmp(hgcalMEs[ih]->getName().c_str(), name.str().c_str()) == 0) {
203  MeanDigiOccupancy_Minus_.push_back(hgcalMEs[ih]);
204  unsigned indx = MeanDigiOccupancy_Minus_.size() - 1;
205  for (int ilayer = 0; ilayer < (int)layers_; ++ilayer) {
206  double meanVal = DigiOccupancy_Minus_.at(ilayer)->getMean();
207  MeanDigiOccupancy_Minus_[indx]->setBinContent(ilayer + 1, meanVal);
208  }
209  break;
210  }
211  }
212  return 1;
213 }
214 
216 
int digisEndjob(const std::vector< MonitorElement * > &hcalMEs)
std::vector< MonitorElement * > getContents(Args &&...args)
Definition: DQMStore.h:246
void dqmEndJob(DQMStore::IBooker &ib, DQMStore::IGetter &ig) override
~HGCalDigiClient() override
int nevent
Definition: AMPTWrapper.h:84
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
unsigned int layers(bool reco) const
HGCalDigiClient(const edm::ParameterSet &)
void beginRun(const edm::Run &run, const edm::EventSetup &c) override
TString getName(TString structure, int layer, TString geometry)
Definition: DMRtrends.cc:236
int getMaxDepth(const int &type) const
void runClient_(DQMStore::IBooker &ib, DQMStore::IGetter &ig)
T get() const
Definition: EventSetup.h:73
std::string nameDetector_
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