CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EBPedestalOnlineClient.cc
Go to the documentation of this file.
1 /*
2  * \file EBPedestalOnlineClient.cc
3  *
4  * \author G. Della Ricca
5  * \author F. Cossutti
6  *
7 */
8 
9 #include <memory>
10 #include <iostream>
11 #include <fstream>
12 #include <iomanip>
13 #include <math.h>
14 
16 
19 
20 #ifdef WITH_ECAL_COND_DB
26 #endif
27 
29 
32 
34 
36 
37  // cloneME switch
38  cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
39 
40  // verbose switch
41  verbose_ = ps.getUntrackedParameter<bool>("verbose", true);
42 
43  // debug switch
44  debug_ = ps.getUntrackedParameter<bool>("debug", false);
45 
46  // prefixME path
47  prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
48 
49  subfolder_ = ps.getUntrackedParameter<std::string>("subfolder", "");
50 
51  // enableCleanup_ switch
52  enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
53 
54  // vector of selected Super Modules (Defaults to all 36).
55  superModules_.reserve(36);
56  for ( unsigned int i = 1; i <= 36; i++ ) superModules_.push_back(i);
57  superModules_ = ps.getUntrackedParameter<std::vector<int> >("superModules", superModules_);
58 
59  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
60 
61  int ism = superModules_[i];
62 
63  h03_[ism-1] = 0;
64 
65  }
66 
67  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
68 
69  int ism = superModules_[i];
70 
71  meg03_[ism-1] = 0;
72 
73  mep03_[ism-1] = 0;
74 
75  mer03_[ism-1] = 0;
76 
77  }
78 
79  expectedMean_ = 200.0;
80  discrepancyMean_ = 25.0;
81  RMSThreshold_ = 3.0;
83 
84 }
85 
87 
88 }
89 
91 
93 
94  if ( debug_ ) std::cout << "EBPedestalOnlineClient: beginJob" << std::endl;
95 
96  ievt_ = 0;
97  jevt_ = 0;
98 
99 }
100 
102 
103  if ( debug_ ) std::cout << "EBPedestalOnlineClient: beginRun" << std::endl;
104 
105  jevt_ = 0;
106 
107  this->setup();
108 
109 }
110 
112 
113  if ( debug_ ) std::cout << "EBPedestalOnlineClient: endJob, ievt = " << ievt_ << std::endl;
114 
115  this->cleanup();
116 
117 }
118 
120 
121  if ( debug_ ) std::cout << "EBPedestalOnlineClient: endRun, jevt = " << jevt_ << std::endl;
122 
123  this->cleanup();
124 
125 }
126 
128 
130 
131  dqmStore_->setCurrentFolder( prefixME_ + "/EBPedestalOnlineClient" );
132 
133  if(subfolder_.size())
134  dqmStore_->setCurrentFolder( prefixME_ + "/EBPedestalOnlineClient/" + subfolder_);
135 
136  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
137 
138  int ism = superModules_[i];
139 
140  if ( meg03_[ism-1] ) dqmStore_->removeElement( meg03_[ism-1]->getName() );
141  name = "EBPOT pedestal quality G12 " + Numbers::sEB(ism);
142  meg03_[ism-1] = dqmStore_->book2D(name, name, 85, 0., 85., 20, 0., 20.);
143  meg03_[ism-1]->setAxisTitle("ieta", 1);
144  meg03_[ism-1]->setAxisTitle("iphi", 2);
145 
146  if ( mep03_[ism-1] ) dqmStore_->removeElement( mep03_[ism-1]->getName() );
147  name = "EBPOT pedestal mean G12 " + Numbers::sEB(ism);
148  mep03_[ism-1] = dqmStore_->book1D(name, name, 100, 150., 250.);
149  mep03_[ism-1]->setAxisTitle("mean", 1);
150 
151  if ( mer03_[ism-1] ) dqmStore_->removeElement( mer03_[ism-1]->getName() );
152  name = "EBPOT pedestal rms G12 " + Numbers::sEB(ism);
153  mer03_[ism-1] = dqmStore_->book1D(name, name, 100, 0., 10.);
154  mer03_[ism-1]->setAxisTitle("rms", 1);
155 
156  }
157 
158  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
159 
160  int ism = superModules_[i];
161 
162  if ( meg03_[ism-1] ) meg03_[ism-1]->Reset();
163 
164  for ( int ie = 1; ie <= 85; ie++ ) {
165  for ( int ip = 1; ip <= 20; ip++ ) {
166 
167  meg03_[ism-1]->setBinContent( ie, ip, 2. );
168 
169  }
170  }
171 
172  if ( mep03_[ism-1] ) mep03_[ism-1]->Reset();
173  if ( mer03_[ism-1] ) mer03_[ism-1]->Reset();
174 
175  }
176 
177 }
178 
180 
181  if ( ! enableCleanup_ ) return;
182 
183  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
184 
185  int ism = superModules_[i];
186 
187  if ( cloneME_ ) {
188  if ( h03_[ism-1] ) delete h03_[ism-1];
189  }
190 
191  h03_[ism-1] = 0;
192 
193  }
194 
195  dqmStore_->setCurrentFolder( prefixME_ + "/EBPedestalOnlineClient" );
196 
197  if(subfolder_.size())
198  dqmStore_->setCurrentFolder( prefixME_ + "/EBPedestalOnlineClient/" + subfolder_);
199 
200  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
201 
202  int ism = superModules_[i];
203 
204  if ( meg03_[ism-1] ) dqmStore_->removeElement( meg03_[ism-1]->getName() );
205  meg03_[ism-1] = 0;
206 
207  if ( mep03_[ism-1] ) dqmStore_->removeElement( mep03_[ism-1]->getName() );
208  mep03_[ism-1] = 0;
209 
210  if ( mer03_[ism-1] ) dqmStore_->removeElement( mer03_[ism-1]->getName() );
211  mer03_[ism-1] = 0;
212 
213  }
214 
215 }
216 
217 #ifdef WITH_ECAL_COND_DB
218 bool EBPedestalOnlineClient::writeDb(EcalCondDBInterface* econn, RunIOV* runiov, MonRunIOV* moniov, bool& status) {
219 
220  status = true;
221 
222  EcalLogicID ecid;
223 
225  std::map<EcalLogicID, MonPedestalsOnlineDat> dataset;
226 
227  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
228 
229  int ism = superModules_[i];
230 
231  if ( verbose_ ) {
232  std::cout << " " << Numbers::sEB(ism) << " (ism=" << ism << ")" << std::endl;
233  std::cout << std::endl;
234  UtilsClient::printBadChannels(meg03_[ism-1], h03_[ism-1]);
235  }
236 
237  float num03;
238  float mean03;
239  float rms03;
240 
241  for ( int ie = 1; ie <= 85; ie++ ) {
242  for ( int ip = 1; ip <= 20; ip++ ) {
243 
244  bool update03;
245 
246  update03 = UtilsClient::getBinStatistics(h03_[ism-1], ie, ip, num03, mean03, rms03);
247 
248  if ( update03 ) {
249 
250  if ( Numbers::icEB(ism, ie, ip) == 1 ) {
251 
252  if ( verbose_ ) {
253  std::cout << "Preparing dataset for " << Numbers::sEB(ism) << " (ism=" << ism << ")" << std::endl;
254  std::cout << "G12 (" << ie << "," << ip << ") " << num03 << " " << mean03 << " " << rms03 << std::endl;
255  std::cout << std::endl;
256  }
257 
258  }
259 
260  p.setADCMeanG12(mean03);
261  p.setADCRMSG12(rms03);
262 
263  if ( UtilsClient::getBinStatus(meg03_[ism-1], ie, ip) ) {
264  p.setTaskStatus(true);
265  } else {
266  p.setTaskStatus(false);
267  }
268 
269  status = status && UtilsClient::getBinQuality(meg03_[ism-1], ie, ip);
270 
271  int ic = Numbers::indexEB(ism, ie, ip);
272 
273  if ( econn ) {
274  ecid = LogicID::getEcalLogicID("EB_crystal_number", Numbers::iSM(ism, EcalBarrel), ic);
275  dataset[ecid] = p;
276  }
277 
278  }
279 
280  }
281  }
282 
283  }
284 
285  if ( econn ) {
286  try {
287  if ( verbose_ ) std::cout << "Inserting MonPedestalsOnlineDat ..." << std::endl;
288  if ( dataset.size() != 0 ) econn->insertDataArraySet(&dataset, moniov);
289  if ( verbose_ ) std::cout << "done." << std::endl;
290  } catch (std::runtime_error &e) {
291  std::cerr << e.what() << std::endl;
292  }
293  }
294 
295  return true;
296 
297 }
298 #endif
299 
301 
302  ievt_++;
303  jevt_++;
304  if ( ievt_ % 10 == 0 ) {
305  if ( debug_ ) std::cout << "EBPedestalOnlineClient: ievt/jevt = " << ievt_ << "/" << jevt_ << std::endl;
306  }
307 
308  uint32_t bits03 = 0;
311 
312  std::string subdir(subfolder_.size() ? subfolder_ + "/" : "");
313 
314  MonitorElement* me;
315 
316  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
317 
318  int ism = superModules_[i];
319 
320  me = dqmStore_->get( prefixME_ + "/EBPedestalOnlineTask/" + subdir + "Gain12/EBPOT pedestal " + Numbers::sEB(ism) + " G12" );
321  h03_[ism-1] = UtilsClient::getHisto<TProfile2D*>( me, cloneME_, h03_[ism-1] );
322  if ( meg03_[ism-1] ) meg03_[ism-1]->Reset();
323  if ( mep03_[ism-1] ) mep03_[ism-1]->Reset();
324  if ( mer03_[ism-1] ) mer03_[ism-1]->Reset();
325 
326  for ( int ie = 1; ie <= 85; ie++ ) {
327  for ( int ip = 1; ip <= 20; ip++ ) {
328 
329  if ( meg03_[ism-1] ) meg03_[ism-1]->setBinContent(ie, ip, 2.);
330 
331  bool update03;
332 
333  float num03;
334  float mean03;
335  float rms03;
336 
337  update03 = UtilsClient::getBinStatistics(h03_[ism-1], ie, ip, num03, mean03, rms03);
338 
339  if ( update03 ) {
340 
341  float val;
342 
343  val = 1.;
344  if ( std::abs(mean03 - expectedMean_) > discrepancyMean_ )
345  val = 0.;
346  if ( (ie<=40 && rms03 > RMSThreshold_) || (ie>40 && rms03 > RMSThresholdHighEta_) )
347  val = 0.;
348  if ( meg03_[ism-1] ) meg03_[ism-1]->setBinContent(ie, ip, val);
349 
350  if ( mep03_[ism-1] ) mep03_[ism-1]->Fill(mean03);
351  if ( mer03_[ism-1] ) mer03_[ism-1]->Fill(rms03);
352 
353  }
354 
355  if ( Masks::maskChannel(ism, ie, ip, bits03, EcalBarrel) ) UtilsClient::maskBinContent( meg03_[ism-1], ie, ip );
356 
357  }
358  }
359 
360  }
361 
362 }
363 
Cache logicID vector from database.
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
void setBinContent(int binx, double content)
set content of bin (1-D)
static bool maskChannel(int ism, int i1, int i2, uint32_t bits, const EcalSubdetector subdet)
Definition: Masks.cc:57
EBPedestalOnlineClient(const edm::ParameterSet &ps)
Constructor.
MonitorElement * mer03_[36]
MonitorElement * book1D(const char *name, const char *title, int nchX, double lowX, double highX)
Book 1D histogram.
Definition: DQMStore.cc:873
Some &quot;id&quot; conversions.
static std::string sEB(const unsigned ism)
Definition: Numbers.cc:91
static bool getBinQuality(const MonitorElement *me, const int ix, const int iy)
Returns true if the bin quality is good or masked.
Definition: UtilsClient.cc:201
static const int PEDESTAL_ONLINE_HIGH_GAIN_RMS_ERROR
static unsigned icEB(const unsigned ism, const unsigned ix, const unsigned iy)
Definition: Numbers.cc:726
static void maskBinContent(const MonitorElement *me, const int ix, const int iy)
Mask the bin content.
Definition: UtilsClient.cc:231
std::vector< int > superModules_
void beginRun(void)
BeginRun.
void Fill(long long x)
static bool getBinStatus(const MonitorElement *me, const int ix, const int iy)
Returns true if the bin status is red/dark red.
Definition: UtilsClient.cc:216
virtual ~EBPedestalOnlineClient()
Destructor.
void setTaskStatus(bool status)
void removeElement(const std::string &name)
Definition: DQMStore.cc:2773
channel masking
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
static unsigned indexEB(const unsigned ism, const unsigned ie, const unsigned ip)
Definition: Numbers.cc:695
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1624
void setADCMeanG12(float mean)
void beginJob(void)
BeginJob.
Ecal Monitor Utils for Client.
static bool getBinStatistics(TH1 *histo, const int ix, const int iy, float &num, float &mean, float &rms, float minEntries=1.)
Returns true if the bin contains good statistical data.
Definition: UtilsClient.cc:74
tuple dataset
Definition: dataset.py:393
static const int PEDESTAL_ONLINE_HIGH_GAIN_MEAN_ERROR
MonitorElement * meg03_[36]
MonitorElement * mep03_[36]
static unsigned iSM(const unsigned ism, const EcalSubdetector subdet)
Definition: Numbers.cc:243
void insertDataArraySet(const std::map< EcalLogicID, DATT > *data, IOVT *iov)
tuple cout
Definition: gather_cfg.py:121
tuple status
Definition: ntuplemaker.py:245
MonitorElement * book2D(const char *name, const char *title, int nchX, double lowX, double highX, int nchY, double lowY, double highY)
Book 2D histogram.
Definition: DQMStore.cc:1001
static EcalLogicID getEcalLogicID(const char *name, const int id1=EcalLogicID::NULLID, const int id2=EcalLogicID::NULLID, const int id3=EcalLogicID::NULLID)
Definition: LogicID.h:29
Definition: RunIOV.h:13
int ism(int ieta, int iphi)
Definition: EcalPyUtils.cc:56
void setAxisTitle(const std::string &title, int axis=1)
set x-, y- or z-axis title (axis=1, 2, 3 respectively)
void Reset(void)
reset ME (ie. contents, errors, etc)
static void printBadChannels(const MonitorElement *me, TH1 *hi, bool positive_only=false)
Print the bad channels.
Definition: UtilsClient.cc:14
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:585