CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EEIntegrityClient.cc
Go to the documentation of this file.
1 
2 /*
3  * \file EEIntegrityClient.cc
4  *
5  * $Date: 2011/08/30 09:29:44 $
6  * $Revision: 1.113 $
7  * \author G. Della Ricca
8  * \author G. Franzoni
9  *
10  */
11 
12 #include <memory>
13 #include <iostream>
14 #include <fstream>
15 #include <iomanip>
16 
18 
21 
22 #ifdef WITH_ECAL_COND_DB
36 #endif
37 
39 
42 
44 
46 
48 
49  // cloneME switch
50  cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
51 
52  // verbose switch
53  verbose_ = ps.getUntrackedParameter<bool>("verbose", true);
54 
55  // debug switch
56  debug_ = ps.getUntrackedParameter<bool>("debug", false);
57 
58  // prefixME path
59  prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
60 
61  // enableCleanup_ switch
62  enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
63 
64  // vector of selected Super Modules (Defaults to all 18).
65  superModules_.reserve(18);
66  for ( unsigned int i = 1; i <= 18; i++ ) superModules_.push_back(i);
67  superModules_ = ps.getUntrackedParameter<std::vector<int> >("superModules", superModules_);
68 
69  h00_ = 0;
70 
71  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
72 
73  int ism = superModules_[i];
74 
75  h_[ism-1] = 0;
76  hmem_[ism-1] = 0;
77 
78  h01_[ism-1] = 0;
79  h02_[ism-1] = 0;
80  h03_[ism-1] = 0;
81  h04_[ism-1] = 0;
82  h05_[ism-1] = 0;
83  h06_[ism-1] = 0;
84  h07_[ism-1] = 0;
85  h08_[ism-1] = 0;
86  h09_[ism-1] = 0;
87 
88  }
89 
90  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
91 
92  int ism = superModules_[i];
93 
94  // integrity summary histograms
95  meg01_[ism-1] = 0;
96  meg02_[ism-1] = 0;
97 
98  }
99 
100  threshCry_ = 0.01;
101 
102 }
103 
105 
106 }
107 
109 
111 
112  if ( debug_ ) std::cout << "EEIntegrityClient: beginJob" << std::endl;
113 
114  ievt_ = 0;
115  jevt_ = 0;
116 
117 }
118 
120 
121  if ( debug_ ) std::cout << "EEIntegrityClient: beginRun" << std::endl;
122 
123  jevt_ = 0;
124 
125  this->setup();
126 
127 }
128 
130 
131  if ( debug_ ) std::cout << "EEIntegrityClient: endJob, ievt = " << ievt_ << std::endl;
132 
133  this->cleanup();
134 
135 }
136 
138 
139  if ( debug_ ) std::cout << "EEIntegrityClient: endRun, jevt = " << jevt_ << std::endl;
140 
141  this->cleanup();
142 
143 }
144 
146 
147  std::string name;
148 
149  dqmStore_->setCurrentFolder( prefixME_ + "/EEIntegrityClient" );
150 
151  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
152 
153  int ism = superModules_[i];
154 
155  if ( meg01_[ism-1] ) dqmStore_->removeElement( meg01_[ism-1]->getName() );
156  name = "EEIT data integrity quality " + Numbers::sEE(ism);
157  meg01_[ism-1] = dqmStore_->book2D(name, name, 50, Numbers::ix0EE(ism)+0., Numbers::ix0EE(ism)+50., 50, Numbers::iy0EE(ism)+0., Numbers::iy0EE(ism)+50.);
158  meg01_[ism-1]->setAxisTitle("ix", 1);
159  if ( ism >= 1 && ism <= 9 ) meg01_[ism-1]->setAxisTitle("101-ix", 1);
160  meg01_[ism-1]->setAxisTitle("iy", 2);
161 
162  if ( meg02_[ism-1] ) dqmStore_->removeElement( meg02_[ism-1]->getName() );
163  name = "EEIT data integrity quality MEM " + Numbers::sEE(ism);
164  meg02_[ism-1] = dqmStore_->book2D(name, name, 10, 0., 10., 5, 0.,5.);
165  meg02_[ism-1]->setAxisTitle("pseudo-strip", 1);
166  meg02_[ism-1]->setAxisTitle("channel", 2);
167 
168  }
169 
170  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
171 
172  int ism = superModules_[i];
173 
174  if ( meg01_[ism-1] ) meg01_[ism-1]->Reset();
175  if ( meg02_[ism-1] ) meg02_[ism-1]->Reset();
176 
177  for ( int ix = 1; ix <= 50; ix++ ) {
178  for ( int iy = 1; iy <= 50; iy++ ) {
179 
180  if ( meg01_[ism-1] ) meg01_[ism-1]->setBinContent( ix, iy, 6. );
181 
182  int jx = ix + Numbers::ix0EE(ism);
183  int jy = iy + Numbers::iy0EE(ism);
184 
185  if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
186 
187  if ( Numbers::validEE(ism, jx, jy) ) {
188  if ( meg01_[ism-1] ) meg01_[ism-1]->setBinContent( ix, iy, 2. );
189  }
190 
191  }
192  }
193 
194  for ( int ie = 1; ie <= 10; ie++ ) {
195  for ( int ip = 1; ip <= 5; ip++ ) {
196 
197  if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ie, ip, 6. );
198 
199  // non-existing mem
200  if ( (ism >= 3 && ism <= 4) || (ism >= 7 && ism <= 9) ) continue;
201  if ( (ism >= 12 && ism <= 3) || (ism >= 16 && ism <= 18) ) continue;
202 
203  if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ie, ip, 2. );
204 
205  }
206  }
207 
208  }
209 
210 }
211 
213 
214  if ( ! enableCleanup_ ) return;
215 
216  if ( cloneME_ ) {
217  if ( h00_ ) delete h00_;
218  }
219 
220  h00_ = 0;
221 
222  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
223 
224  int ism = superModules_[i];
225 
226  if ( cloneME_ ) {
227  if ( h_[ism-1] ) delete h_[ism-1];
228  if ( hmem_[ism-1] ) delete hmem_[ism-1];
229 
230  if ( h01_[ism-1] ) delete h01_[ism-1];
231  if ( h02_[ism-1] ) delete h02_[ism-1];
232  if ( h03_[ism-1] ) delete h03_[ism-1];
233  if ( h04_[ism-1] ) delete h04_[ism-1];
234  if ( h05_[ism-1] ) delete h05_[ism-1];
235  if ( h06_[ism-1] ) delete h06_[ism-1];
236  if ( h07_[ism-1] ) delete h07_[ism-1];
237  if ( h08_[ism-1] ) delete h08_[ism-1];
238  if ( h09_[ism-1] ) delete h09_[ism-1];
239  }
240 
241  h_[ism-1] = 0;
242  hmem_[ism-1] = 0;
243 
244  h01_[ism-1] = 0;
245  h02_[ism-1] = 0;
246  h03_[ism-1] = 0;
247  h04_[ism-1] = 0;
248  h05_[ism-1] = 0;
249  h06_[ism-1] = 0;
250  h07_[ism-1] = 0;
251  h08_[ism-1] = 0;
252  h09_[ism-1] = 0;
253 
254  }
255 
256  dqmStore_->setCurrentFolder( prefixME_ + "/EEIntegrityClient" );
257 
258  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
259 
260  int ism = superModules_[i];
261 
262  if ( meg01_[ism-1] ) dqmStore_->removeElement( meg01_[ism-1]->getName() );
263  meg01_[ism-1] = 0;
264 
265  if ( meg02_[ism-1] ) dqmStore_->removeElement( meg02_[ism-1]->getName() );
266  meg02_[ism-1] = 0;
267 
268  }
269 
270 }
271 
272 #ifdef WITH_ECAL_COND_DB
273 bool EEIntegrityClient::writeDb(EcalCondDBInterface* econn, RunIOV* runiov, MonRunIOV* moniov, bool& status) {
274 
275  status = true;
276 
277  EcalLogicID ecid;
278 
280  std::map<EcalLogicID, MonCrystalConsistencyDat> dataset1;
282  std::map<EcalLogicID, MonTTConsistencyDat> dataset2;
284  std::map<EcalLogicID, MonMemChConsistencyDat> dataset3;
286  std::map<EcalLogicID, MonMemTTConsistencyDat> dataset4;
287 
288  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
289 
290  int ism = superModules_[i];
291 
292  if ( h00_ && h00_->GetBinContent(ism) != 0 ) {
293  std::cerr << std::endl;
294  std::cerr << " DCC failed " << h00_->GetBinContent(ism) << " times" << std::endl;
295  std::cerr << std::endl;
296  }
297 
298  if ( verbose_ ) {
299  std::cout << " " << Numbers::sEE(ism) << " (ism=" << ism << ")" << std::endl;
300  std::cout << std::endl;
301  UtilsClient::printBadChannels(meg01_[ism-1], h01_[ism-1], true);
302  UtilsClient::printBadChannels(meg01_[ism-1], h02_[ism-1], true);
303  UtilsClient::printBadChannels(meg01_[ism-1], h03_[ism-1], true);
304  UtilsClient::printBadChannels(meg01_[ism-1], h04_[ism-1], true);
305  UtilsClient::printBadChannels(meg01_[ism-1], h05_[ism-1], true);
306 
307  UtilsClient::printBadChannels(meg02_[ism-1], h06_[ism-1], true);
308  UtilsClient::printBadChannels(meg02_[ism-1], h07_[ism-1], true);
309  UtilsClient::printBadChannels(meg02_[ism-1], h08_[ism-1], true);
310  UtilsClient::printBadChannels(meg02_[ism-1], h09_[ism-1], true);
311  }
312 
313  float num00;
314 
315  num00 = 0.;
316 
317  bool update0 = false;
318 
319  if ( h00_ ) {
320  num00 = h00_->GetBinContent(ism);
321  if ( num00 > 0 ) update0 = true;
322  }
323 
324  float num01, num02, num03;
325 
326  for ( int ix = 1; ix <= 50; ix++ ) {
327  for ( int iy = 1; iy <= 50; iy++ ) {
328 
329  int jx = ix + Numbers::ix0EE(ism);
330  int jy = iy + Numbers::iy0EE(ism);
331 
332  if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
333 
334  if ( ! Numbers::validEE(ism, jx, jy) ) continue;
335 
336  num01 = num02 = num03 = 0.;
337 
338  bool update1 = false;
339 
340  float numTot = -1.;
341 
342  if ( h_[ism-1] ) numTot = h_[ism-1]->GetBinContent(ix, iy);
343 
344  if ( h01_[ism-1] ) {
345  num01 = h01_[ism-1]->GetBinContent(ix, iy);
346  if ( num01 > 0 ) update1 = true;
347  }
348 
349  if ( h02_[ism-1] ) {
350  num02 = h02_[ism-1]->GetBinContent(ix, iy);
351  if ( num02 > 0 ) update1 = true;
352  }
353 
354  if ( h03_[ism-1] ) {
355  num03 = h03_[ism-1]->GetBinContent(ix, iy);
356  if ( num03 > 0 ) update1 = true;
357  }
358 
359  if ( update0 || update1 ) {
360 
361  if ( Numbers::icEE(ism, jx, jy) == 1 ) {
362 
363  if ( verbose_ ) {
364  std::cout << "Preparing dataset for " << Numbers::sEE(ism) << " (ism=" << ism << ")" << std::endl;
365  std::cout << "(" << Numbers::ix0EE(i+1)+ix << "," << Numbers::iy0EE(i+1)+iy << ") " << num00 << " " << num01 << " " << num02 << " " << num03 << std::endl;
366  std::cout << std::endl;
367  }
368 
369  }
370 
371  c1.setProcessedEvents(int(numTot));
372  c1.setProblematicEvents(int(num01+num02+num03));
373  c1.setProblemsGainZero(int(num01));
374  c1.setProblemsID(int(num02));
375  c1.setProblemsGainSwitch(int(num03));
376 
377  bool val;
378 
379  val = false;
380  if ( numTot > 0 ) {
381  float errorRate1 = num00 / ( numTot + num01 + num02 + num03 );
382  if ( errorRate1 > threshCry_ )
383  val = true;
384  errorRate1 = ( num01 + num02 + num03 ) / ( numTot + num01 + num02 + num03 ) / 3.;
385  if ( errorRate1 > threshCry_ )
386  val = true;
387  } else {
388  if ( num00 > 0 )
389  val = true;
390  if ( ( num01 + num02 + num03 ) > 0 )
391  val = true;
392  }
393  c1.setTaskStatus(val);
394 
395  int ic = Numbers::indexEE(ism, jx, jy);
396 
397  if ( ic == -1 ) continue;
398 
399  if ( econn ) {
400  ecid = LogicID::getEcalLogicID("EE_crystal_number", Numbers::iSM(ism, EcalEndcap), ic);
401  dataset1[ecid] = c1;
402  }
403 
404  status = status && !val;
405 
406  }
407 
408  }
409  }
410 
411  float num04, num05;
412 
413  for ( int ixt = 1; ixt <= 10; ixt++ ) {
414  for ( int iyt = 1; iyt <= 10; iyt++ ) {
415 
416  int jxt = Numbers::ix0EE(ism) + 1 + 5*(ixt-1);
417  int jyt = Numbers::iy0EE(ism) + 1 + 5*(iyt-1);
418 
419  if ( ism >= 1 && ism <= 9 ) jxt = 101 - jxt;
420 
421  num04 = num05 = 0.;
422 
423  bool update1 = false;
424 
425  float numTot = -1.;
426 
427  if ( h_[ism-1] ) {
428  numTot = 0.;
429  for ( int ix = 1 + 5*(ixt-1); ix <= 5*ixt; ix++ ) {
430  for ( int iy = 1 + 5*(iyt-1); iy <= 5*iyt; iy++ ) {
431  int jx = ix + Numbers::ix0EE(ism);
432  int jy = iy + Numbers::iy0EE(ism);
433  if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
434  if ( ! Numbers::validEE(ism, jx, jy) ) continue;
435  numTot += h_[ism-1]->GetBinContent(ix, iy);
436  }
437  }
438  }
439 
440  if ( h04_[ism-1] ) {
441  for ( int ix = 1 + 5*(ixt-1); ix <= 5*ixt; ix++ ) {
442  for ( int iy = 1 + 5*(iyt-1); iy <= 5*iyt; iy++ ) {
443  int jx = ix + Numbers::ix0EE(ism);
444  int jy = iy + Numbers::iy0EE(ism);
445  if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
446  if ( ! Numbers::validEE(ism, jx, jy) ) continue;
447  num04 = h04_[ism-1]->GetBinContent(ix, iy);
448  if ( num04 > 0 ) update1 = true;
449  }
450  }
451  }
452 
453  if ( h05_[ism-1] ) {
454  for ( int ix = 1 + 5*(ixt-1); ix <= 5*ixt; ix++ ) {
455  for ( int iy = 1 + 5*(iyt-1); iy <= 5*iyt; iy++ ) {
456  int jx = ix + Numbers::ix0EE(ism);
457  int jy = iy + Numbers::iy0EE(ism);
458  if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
459  if ( ! Numbers::validEE(ism, jx, jy) ) continue;
460  num05 = h05_[ism-1]->GetBinContent(ix, iy);
461  if ( num05 > 0 ) update1 = true;
462  }
463  }
464  }
465 
466  if ( update0 || update1 ) {
467 
468  if ( Numbers::iSC(ism, EcalEndcap, jxt, jyt) == 1 ) {
469 
470  if ( verbose_ ) {
471  std::cout << "Preparing dataset for " << Numbers::sEE(ism) << " (ism=" << ism << ")" << std::endl;
472  std::cout << "(" << 1+(Numbers::ix0EE(ism)+1+5*(ixt-1))/5 << "," << 1+(Numbers::iy0EE(ism)+1+5*(iyt-1))/5 << ") " << num00 << " " << num04 << " " << num05 << std::endl;
473  std::cout << std::endl;
474  }
475 
476  }
477 
478  c2.setProcessedEvents(int(numTot));
479  c2.setProblematicEvents(int(num04+num05));
480  c2.setProblemsID(int(num04));
481  c2.setProblemsSize(int(num05));
482  c2.setProblemsLV1(int(-1.));
483  c2.setProblemsBunchX(int(-1.));
484 
485  bool val;
486 
487  val = false;
488  if ( numTot > 0 ) {
489  float errorRate2 = num00 / ( numTot + num04 + num05 );
490  if ( errorRate2 > threshCry_ )
491  val = true;
492  errorRate2 = ( num04 + num05 ) / ( numTot + num04 + num05 ) / 2.;
493  if ( errorRate2 > threshCry_ )
494  val = true;
495  } else {
496  if ( num00 > 0 )
497  val = true;
498  if ( ( num04 + num05 ) > 0 )
499  val = true;
500  }
501  c2.setTaskStatus(val);
502 
503  int itt = Numbers::iSC(ism, EcalEndcap, jxt, jyt);
504 
505  if ( itt == -1 ) continue;
506 
507  if ( econn ) {
508  ecid = LogicID::getEcalLogicID("EE_readout_tower", Numbers::iSM(ism, EcalEndcap), itt);
509  dataset2[ecid] = c2;
510  }
511 
512  status = status && !val;
513 
514  }
515 
516  }
517  }
518 
519  float num06, num07;
520 
521  for ( int ix = 1; ix <= 10; ix++ ) {
522  for ( int iy = 1; iy <= 5; iy++ ) {
523 
524  num06 = num07 = 0.;
525 
526  bool update1 = false;
527 
528  float numTot = -1.;
529 
530  if ( hmem_[ism-1] ) numTot = hmem_[ism-1]->GetBinContent(ix, iy);
531 
532  if ( h06_[ism-1] ) {
533  num06 = h06_[ism-1]->GetBinContent(ix, iy);
534  if ( num06 > 0 ) update1 = true;
535  }
536 
537  if ( h07_[ism-1] ) {
538  num07 = h07_[ism-1]->GetBinContent(ix, iy);
539  if ( num07 > 0 ) update1 = true;
540  }
541 
542  if ( update0 || update1 ) {
543 
544  if ( ix ==1 && iy == 1 ) {
545 
546  if ( verbose_ ) {
547  std::cout << "Preparing dataset for mem of SM=" << ism << std::endl;
548  std::cout << "(" << ix << "," << iy << ") " << num06 << " " << num07 << std::endl;
549  std::cout << std::endl;
550  }
551 
552  }
553 
554  c3.setProcessedEvents( int (numTot));
555  c3.setProblematicEvents(int (num06+num07));
556  c3.setProblemsID(int (num06) );
557  c3.setProblemsGainZero(int (num07));
558  // c3.setProblemsGainSwitch(int prob);
559 
560  bool val;
561 
562  val = false;
563  if ( numTot > 0 ) {
564  float errorRate1 = num00 / ( numTot + num06 + num07 );
565  if ( errorRate1 > threshCry_ )
566  val = true;
567  errorRate1 = ( num06 + num07 ) / ( numTot + num06 + num07 ) / 2.;
568  if ( errorRate1 > threshCry_ )
569  val = true;
570  } else {
571  if ( num00 > 0 )
572  val = true;
573  if ( ( num06 + num07 ) > 0 )
574  val = true;
575  }
576  c3. setTaskStatus(val);
577 
578  int ic = EEIntegrityClient::chNum[ (ix-1)%5 ][ (iy-1) ] + (ix-1)/5 * 25;
579 
580  if ( econn ) {
581  ecid = LogicID::getEcalLogicID("EE_mem_channel", Numbers::iSM(ism, EcalEndcap), ic);
582  dataset3[ecid] = c3;
583  }
584 
585  status = status && !val;
586 
587  }
588 
589  }
590  }
591 
592  float num08, num09;
593 
594  for ( int ixt = 1; ixt <= 2; ixt++ ) {
595 
596  num08 = num09 = 0.;
597 
598  bool update1 = false;
599 
600  float numTot = -1.;
601 
602  if ( hmem_[ism-1] ) {
603  numTot = 0.;
604  for ( int ix = 1 + 5*(ixt-1); ix <= 5*ixt; ix++ ) {
605  for ( int iy = 1 ; iy <= 5; iy++ ) {
606  numTot += hmem_[ism-1]->GetBinContent(ix, iy);
607  }
608  }
609  }
610 
611  if ( h08_[ism-1] ) {
612  num08 = h08_[ism-1]->GetBinContent(ixt, 1);
613  if ( num08 > 0 ) update1 = true;
614  }
615 
616  if ( h09_[ism-1] ) {
617  num09 = h09_[ism-1]->GetBinContent(ixt, 1);
618  if ( num09 > 0 ) update1 = true;
619  }
620 
621  if ( update0 || update1 ) {
622 
623  if ( ixt == 1 ) {
624 
625  if ( verbose_ ) {
626  std::cout << "Preparing dataset for " << Numbers::sEE(ism) << " (ism=" << ism << ")" << std::endl;
627  std::cout << "(" << ixt << ") " << num08 << " " << num09 << std::endl;
628  std::cout << std::endl;
629  }
630 
631  }
632 
633  c4.setProcessedEvents( int(numTot) );
634  c4.setProblematicEvents( int(num08 + num09) );
635  c4.setProblemsID( int(num08) );
636  c4.setProblemsSize(int (num09) );
637  // setProblemsLV1(int LV1);
638  // setProblemsBunchX(int bunchX);
639 
640  bool val;
641 
642  val = false;
643  if ( numTot > 0 ) {
644  float errorRate2 = num00 / ( numTot + num08 + num09 );
645  if ( errorRate2 > threshCry_ )
646  val = true;
647  errorRate2 = ( num08 + num09 ) / ( numTot/25. + num08 + num09 ) / 2.;
648  if ( errorRate2 > threshCry_ )
649  val = true;
650  } else {
651  if ( num00 > 0 )
652  val = true;
653  if ( ( num08 + num09 ) > 0 )
654  val = true;
655  }
656  c4.setTaskStatus(val);
657 
658  int itt = 68 + ixt;
659 
660  if ( econn ) {
661  ecid = LogicID::getEcalLogicID("EE_mem_TT", Numbers::iSM(ism, EcalEndcap), itt);
662  dataset4[ecid] = c4;
663  }
664 
665  status = status && !val;
666 
667  }
668 
669  }
670 
671  }
672 
673  if ( econn ) {
674  try {
675  if ( verbose_ ) std::cout << "Inserting MonConsistencyDat ..." << std::endl;
676  if ( dataset1.size() != 0 ) econn->insertDataArraySet(&dataset1, moniov);
677  if ( dataset2.size() != 0 ) econn->insertDataArraySet(&dataset2, moniov);
678  if ( dataset3.size() != 0 ) econn->insertDataArraySet(&dataset3, moniov);
679  if ( dataset4.size() != 0 ) econn->insertDataArraySet(&dataset4, moniov);
680  if ( verbose_ ) std::cout << "done." << std::endl;
681  } catch (std::runtime_error &e) {
682  std::cerr << e.what() << std::endl;
683  }
684  }
685 
686  return true;
687 
688 }
689 #endif
690 
692 
693  ievt_++;
694  jevt_++;
695  if ( ievt_ % 10 == 0 ) {
696  if ( debug_ ) std::cout << "EEIntegrityClient: ievt/jevt = " << ievt_ << "/" << jevt_ << std::endl;
697  }
698 
699  uint32_t bits01 = 0;
700  bits01 |= 1 << EcalDQMStatusHelper::CH_ID_ERROR;
703  bits01 |= 1 << EcalDQMStatusHelper::TT_ID_ERROR;
704  bits01 |= 1 << EcalDQMStatusHelper::TT_SIZE_ERROR;
705 
706  MonitorElement* me;
707 
708  me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/EEIT DCC size error" );
710 
711  for ( unsigned int i=0; i<superModules_.size(); i++ ) {
712 
713  int ism = superModules_[i];
714 
715  me = dqmStore_->get( prefixME_ + "/EEOccupancyTask/EEOT digi occupancy " + Numbers::sEE(ism) );
716  h_[ism-1] = UtilsClient::getHisto( me, cloneME_, h_[ism-1] );
717 
718  me = dqmStore_->get( prefixME_ + "/EEOccupancyTask/EEOT MEM digi occupancy " + Numbers::sEE(ism) );
719  hmem_[ism-1] = UtilsClient::getHisto( me, cloneME_, hmem_[ism-1] );
720 
721  me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/Gain/EEIT gain " + Numbers::sEE(ism) );
722  h01_[ism-1] = UtilsClient::getHisto( me, cloneME_, h01_[ism-1] );
723 
724  me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/ChId/EEIT ChId " + Numbers::sEE(ism) );
725  h02_[ism-1] = UtilsClient::getHisto( me, cloneME_, h02_[ism-1] );
726 
727  me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/GainSwitch/EEIT gain switch " + Numbers::sEE(ism) );
728  h03_[ism-1] = UtilsClient::getHisto( me, cloneME_, h03_[ism-1] );
729 
730  me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/TTId/EEIT TTId " + Numbers::sEE(ism) );
731  h04_[ism-1] = UtilsClient::getHisto( me, cloneME_, h04_[ism-1] );
732 
733  me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/TTBlockSize/EEIT TTBlockSize " + Numbers::sEE(ism) );
734  h05_[ism-1] = UtilsClient::getHisto( me, cloneME_, h05_[ism-1] );
735 
736  me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/MemChId/EEIT MemChId " + Numbers::sEE(ism) );
737  h06_[ism-1] = UtilsClient::getHisto( me, cloneME_, h06_[ism-1] );
738 
739  me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/MemGain/EEIT MemGain " + Numbers::sEE(ism) );
740  h07_[ism-1] = UtilsClient::getHisto( me, cloneME_, h07_[ism-1] );
741 
742  me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/MemTTId/EEIT MemTTId " + Numbers::sEE(ism) );
743  h08_[ism-1] = UtilsClient::getHisto( me, cloneME_, h08_[ism-1] );
744 
745  me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/MemSize/EEIT MemSize " + Numbers::sEE(ism) );
746  h09_[ism-1] = UtilsClient::getHisto( me, cloneME_, h09_[ism-1] );
747 
748  float num00;
749 
750  // integrity summary histograms
751  if ( meg01_[ism-1] ) meg01_[ism-1]->Reset();
752  if ( meg01_[ism-1] ) meg02_[ism-1]->Reset();
753 
754  num00 = 0.;
755 
756  bool update0 = false;
757 
758  // dcc size errors
759  if ( h00_ ) {
760  num00 = h00_->GetBinContent(ism);
761  update0 = true;
762  }
763 
764  float num01, num02, num03, num04, num05;
765 
766  for ( int ix = 1; ix <= 50; ix++ ) {
767  for ( int iy = 1; iy <= 50; iy++ ) {
768 
769  num01 = num02 = num03 = num04 = num05 = 0.;
770 
771  if ( meg01_[ism-1] ) meg01_[ism-1]->setBinContent( ix, iy, 6. );
772 
773  bool update1 = false;
774  bool update2 = false;
775 
776  float numTot = -1.;
777 
778  if ( h_[ism-1] ) numTot = h_[ism-1]->GetBinContent(ix, iy);
779 
780  if ( h01_[ism-1] ) {
781  num01 = h01_[ism-1]->GetBinContent(ix, iy);
782  update1 = true;
783  }
784 
785  if ( h02_[ism-1] ) {
786  num02 = h02_[ism-1]->GetBinContent(ix, iy);
787  update1 = true;
788  }
789 
790  if ( h03_[ism-1] ) {
791  num03 = h03_[ism-1]->GetBinContent(ix, iy);
792  update1 = true;
793  }
794 
795  if ( h04_[ism-1] ) {
796  num04 = h04_[ism-1]->GetBinContent(ix, iy);
797  update2 = true;
798  }
799 
800  if ( h05_[ism-1] ) {
801  num05 = h05_[ism-1]->GetBinContent(ix, iy);
802  update2 = true;
803  }
804 
805  if ( update0 || update1 || update2 ) {
806 
807  float val;
808 
809  val = 1.;
810  // number of events on a channel
811  if ( numTot > 0 ) {
812  float errorRate1 = num00 / ( numTot + num01 + num02 + num03 );
813  if ( errorRate1 > threshCry_ )
814  val = 0.;
815  errorRate1 = ( num01 + num02 + num03 ) / ( numTot + num01 + num02 + num03 ) / 3.;
816  if ( errorRate1 > threshCry_ )
817  val = 0.;
818  float errorRate2 = ( num04 + num05 ) / ( numTot + num04 + num05 ) / 2.;
819  if ( errorRate2 > threshCry_ )
820  val = 0.;
821  } else {
822  val = 2.;
823  if ( num00 > 0 )
824  val = 0.;
825  if ( ( num01 + num02 + num03 ) > 0 )
826  val = 0.;
827  if ( ( num04 + num05 ) > 0 )
828  val = 0.;
829  }
830 
831  int jx = ix + Numbers::ix0EE(ism);
832  int jy = iy + Numbers::iy0EE(ism);
833 
834  if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
835 
836  // filling the summary for SM channels
837  if ( Numbers::validEE(ism, jx, jy) ) {
838  if ( meg01_[ism-1] ) meg01_[ism-1]->setBinContent( ix, iy, val );
839  }
840 
841  }
842 
843  if ( Masks::maskChannel(ism, ix, iy, bits01, EcalEndcap) ) UtilsClient::maskBinContent( meg01_[ism-1], ix, iy );
844 
845  }
846  } // end of loop on crystals to fill summary plot
847 
848  // summaries for mem channels
849  float num06, num07, num08, num09;
850 
851  for ( int ie = 1; ie <= 10; ie++ ) {
852  for ( int ip = 1; ip <= 5; ip++ ) {
853 
854  num06 = num07 = num08 = num09 = 0.;
855 
856  // initialize summary histo for mem
857  if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ie, ip, 6. );
858 
859  // non-existing mem
860  if ( (ism >= 3 && ism <= 4) || (ism >= 7 && ism <= 9) ) continue;
861  if ( (ism >= 12 && ism <= 13) || (ism >= 16 && ism <= 18) ) continue;
862 
863  if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ie, ip, 2. );
864 
865  bool update1 = false;
866  bool update2 = false;
867 
868  float numTotmem = -1.;
869 
870  if ( hmem_[ism-1] ) numTotmem = hmem_[ism-1]->GetBinContent(ie, ip);
871 
872  if ( h06_[ism-1] ) {
873  num06 = h06_[ism-1]->GetBinContent(ie, ip);
874  update1 = true;
875  }
876 
877  if ( h07_[ism-1] ) {
878  num07 = h07_[ism-1]->GetBinContent(ie, ip);
879  update1 = true;
880  }
881 
882  int iet = 1 + ((ie-1)/5);
883  int ipt = 1;
884 
885  if ( h08_[ism-1] ) {
886  num08 = h08_[ism-1]->GetBinContent(iet, ipt);
887  update2 = true;
888  }
889 
890  if ( h09_[ism-1] ) {
891  num09 = h09_[ism-1]->GetBinContent(iet, ipt);
892  update2 = true;
893  }
894 
895  if ( update0 || update1 || update2 ) {
896 
897  float val;
898 
899  val = 1.;
900  // number of events on a channel
901  if ( numTotmem > 0 ) {
902  float errorRate1 = ( num06 + num07 ) / ( numTotmem + num06 + num07 )/ 2.;
903  if ( errorRate1 > threshCry_ )
904  val = 0.;
905  float errorRate2 = ( num08 + num09 ) / ( numTotmem/25. + num08 + num09 ) / 2.;
906  if ( errorRate2 > threshCry_ )
907  val = 0.;
908  } else {
909  val = 2.;
910  if ( ( num06 + num07 ) > 0 )
911  val = 0.;
912  if ( ( num08 + num09 ) > 0 )
913  val = 0.;
914  }
915 
916  // filling summary for mem channels
917  if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ie, ip, val );
918 
919  }
920 
921  if ( Masks::maskPn(ism, ie, bits01, EcalEndcap) ) UtilsClient::maskBinContent( meg02_[ism-1], ie, ip );
922 
923  }
924  } // end loop on mem channels
925 
926  } // end loop on supermodules
927 
928 }
929 
930 const int EEIntegrityClient::chNum[5][5] = {
931  { 1, 2, 3, 4, 5},
932  {10, 9, 8, 7, 6},
933  {11, 12, 13, 14, 15},
934  {20, 19, 18, 17, 16},
935  {21, 22, 23, 24, 25}
936 };
937 
Cache logicID vector from database.
T getUntrackedParameter(std::string const &, T const &) const
int i
Definition: DBlmapReader.cc:9
void setup(void)
Setup.
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:60
static int iSC(const EcalScDetId &id)
Definition: Numbers.cc:462
void setProblematicEvents(int prob)
static int iy0EE(const int ism)
Definition: Numbers.cc:987
static T getHisto(const MonitorElement *me, bool clone=false, T ret=0)
Returns the histogram contained by the Monitor Element.
Definition: UtilsClient.h:91
void endJob(void)
EndJob.
Some &quot;id&quot; conversions.
static std::string sEE(const int ism)
Definition: Numbers.cc:205
void endRun(void)
EndRun.
void setProblemsLV1(int LV1)
static const int TT_SIZE_ERROR
static const int CH_GAIN_SWITCH_ERROR
void setProblemsSize(int size)
static void maskBinContent(const MonitorElement *me, const int ix, const int iy)
Mask the bin content.
Definition: UtilsClient.cc:231
static int indexEE(const int ism, const int ix, const int iy)
Definition: Numbers.cc:877
void cleanup(void)
Cleanup.
static bool maskPn(int ism, int i1, uint32_t bits, const EcalSubdetector subdet)
Definition: Masks.cc:112
MonitorElement * meg02_[18]
void setProcessedEvents(int proc)
std::vector< int > superModules_
virtual ~EEIntegrityClient()
Destructor.
static int iSM(const int ism, const EcalSubdetector subdet)
Definition: Numbers.cc:222
static int icEE(const int ism, const int ix, const int iy)
Definition: Numbers.cc:906
void removeElement(const std::string &name)
Definition: DQMStore.cc:2353
channel masking
std::string getName(Reflex::Type &cc)
Definition: ClassFiller.cc:18
void setProblemsBunchX(int bunchX)
MonitorElement * get(const std::string &path) const
get ME from full pathname (e.g. &quot;my/long/dir/my_histo&quot;)
Definition: DQMStore.cc:1265
Ecal Monitor Utils for Client.
void beginRun(void)
BeginRun.
static const int CH_GAIN_ZERO_ERROR
void analyze(void)
Analyze.
void beginJob(void)
BeginJob.
void setTaskStatus(bool status)
void setTaskStatus(bool status)
static int ix0EE(const int ism)
Definition: Numbers.cc:952
static const int chNum[5][5]
static const int TT_ID_ERROR
void insertDataArraySet(const std::map< EcalLogicID, DATT > *data, IOVT *iov)
tuple cout
Definition: gather_cfg.py:41
EEIntegrityClient(const edm::ParameterSet &ps)
Constructor.
MonitorElement * meg01_[18]
tuple status
Definition: ntuplemaker.py:245
static bool validEE(const int ism, const int ix, const int iy)
Definition: Numbers.cc:1005
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:642
static EcalLogicID getEcalLogicID(const char *name, const int id1=EcalLogicID::NULLID, const int id2=EcalLogicID::NULLID, const int id3=EcalLogicID::NULLID)
Definition: LogicID.h:31
Definition: RunIOV.h:13
static const int CH_ID_ERROR
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:232