CMS 3D CMS Logo

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