CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/DQM/EcalEndcapMonitorClient/src/EEIntegrityClient.cc

Go to the documentation of this file.
00001 
00002 /*
00003  * \file EEIntegrityClient.cc
00004  *
00005  * $Date: 2011/09/02 13:55:02 $
00006  * $Revision: 1.114 $
00007  * \author G. Della Ricca
00008  * \author G. Franzoni
00009  *
00010  */
00011 
00012 #include <memory>
00013 #include <iostream>
00014 #include <fstream>
00015 #include <iomanip>
00016 
00017 #include "FWCore/ServiceRegistry/interface/Service.h"
00018 
00019 #include "DQMServices/Core/interface/DQMStore.h"
00020 #include "DQMServices/Core/interface/MonitorElement.h"
00021 
00022 #ifdef WITH_ECAL_COND_DB
00023 #include "OnlineDB/EcalCondDB/interface/RunTag.h"
00024 #include "OnlineDB/EcalCondDB/interface/RunIOV.h"
00025 #include "OnlineDB/EcalCondDB/interface/MonCrystalConsistencyDat.h"
00026 #include "OnlineDB/EcalCondDB/interface/MonTTConsistencyDat.h"
00027 #include "OnlineDB/EcalCondDB/interface/MonMemChConsistencyDat.h"
00028 #include "OnlineDB/EcalCondDB/interface/MonMemTTConsistencyDat.h"
00029 #include "OnlineDB/EcalCondDB/interface/RunCrystalErrorsDat.h"
00030 #include "OnlineDB/EcalCondDB/interface/RunTTErrorsDat.h"
00031 #include "OnlineDB/EcalCondDB/interface/RunPNErrorsDat.h"
00032 #include "OnlineDB/EcalCondDB/interface/RunMemChErrorsDat.h"
00033 #include "OnlineDB/EcalCondDB/interface/RunMemTTErrorsDat.h"
00034 #include "OnlineDB/EcalCondDB/interface/EcalCondDBInterface.h"
00035 #include "DQM/EcalCommon/interface/LogicID.h"
00036 #endif
00037 
00038 #include "DQM/EcalCommon/interface/Masks.h"
00039 
00040 #include "DQM/EcalCommon/interface/UtilsClient.h"
00041 #include "DQM/EcalCommon/interface/Numbers.h"
00042 
00043 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00044 
00045 #include "DQM/EcalEndcapMonitorClient/interface/EEIntegrityClient.h"
00046 
00047 EEIntegrityClient::EEIntegrityClient(const edm::ParameterSet& ps) {
00048 
00049   // cloneME switch
00050   cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
00051 
00052   // verbose switch
00053   verbose_ = ps.getUntrackedParameter<bool>("verbose", true);
00054 
00055   // debug switch
00056   debug_ = ps.getUntrackedParameter<bool>("debug", false);
00057 
00058   // prefixME path
00059   prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00060 
00061   // enableCleanup_ switch
00062   enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00063 
00064   // vector of selected Super Modules (Defaults to all 18).
00065   superModules_.reserve(18);
00066   for ( unsigned int i = 1; i <= 18; i++ ) superModules_.push_back(i);
00067   superModules_ = ps.getUntrackedParameter<std::vector<int> >("superModules", superModules_);
00068 
00069   h00_ = 0;
00070 
00071   for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00072 
00073     int ism = superModules_[i];
00074 
00075     h_[ism-1] = 0;
00076     hmem_[ism-1] = 0;
00077 
00078     h01_[ism-1] = 0;
00079     h02_[ism-1] = 0;
00080     h03_[ism-1] = 0;
00081     h04_[ism-1] = 0;
00082     h05_[ism-1] = 0;
00083     h06_[ism-1] = 0;
00084     h07_[ism-1] = 0;
00085     h08_[ism-1] = 0;
00086     h09_[ism-1] = 0;
00087 
00088   }
00089 
00090   for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00091 
00092     int ism = superModules_[i];
00093 
00094     // integrity summary histograms
00095     meg01_[ism-1] = 0;
00096     meg02_[ism-1] = 0;
00097 
00098   }
00099 
00100   threshCry_ = 0.01;
00101 
00102 }
00103 
00104 EEIntegrityClient::~EEIntegrityClient() {
00105 
00106 }
00107 
00108 void EEIntegrityClient::beginJob(void) {
00109 
00110   dqmStore_ = edm::Service<DQMStore>().operator->();
00111 
00112   if ( debug_ ) std::cout << "EEIntegrityClient: beginJob" << std::endl;
00113 
00114   ievt_ = 0;
00115   jevt_ = 0;
00116 
00117 }
00118 
00119 void EEIntegrityClient::beginRun(void) {
00120 
00121   if ( debug_ ) std::cout << "EEIntegrityClient: beginRun" << std::endl;
00122 
00123   jevt_ = 0;
00124 
00125   this->setup();
00126 
00127 }
00128 
00129 void EEIntegrityClient::endJob(void) {
00130 
00131   if ( debug_ ) std::cout << "EEIntegrityClient: endJob, ievt = " << ievt_ << std::endl;
00132 
00133   this->cleanup();
00134 
00135 }
00136 
00137 void EEIntegrityClient::endRun(void) {
00138 
00139   if ( debug_ ) std::cout << "EEIntegrityClient: endRun, jevt = " << jevt_ << std::endl;
00140 
00141   this->cleanup();
00142 
00143 }
00144 
00145 void EEIntegrityClient::setup(void) {
00146 
00147   std::string name;
00148 
00149   dqmStore_->setCurrentFolder( prefixME_ + "/EEIntegrityClient" );
00150 
00151   for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00152 
00153     int ism = superModules_[i];
00154 
00155     if ( meg01_[ism-1] ) dqmStore_->removeElement( meg01_[ism-1]->getName() );
00156     name = "EEIT data integrity quality " + Numbers::sEE(ism);
00157     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.);
00158     meg01_[ism-1]->setAxisTitle("ix", 1);
00159     if ( ism >= 1 && ism <= 9 ) meg01_[ism-1]->setAxisTitle("101-ix", 1);
00160     meg01_[ism-1]->setAxisTitle("iy", 2);
00161 
00162     if ( meg02_[ism-1] ) dqmStore_->removeElement( meg02_[ism-1]->getName() );
00163     name = "EEIT data integrity quality MEM " + Numbers::sEE(ism);
00164     meg02_[ism-1] = dqmStore_->book2D(name, name, 10, 0., 10., 5, 0.,5.);
00165     meg02_[ism-1]->setAxisTitle("pseudo-strip", 1);
00166     meg02_[ism-1]->setAxisTitle("channel", 2);
00167 
00168   }
00169 
00170   for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00171 
00172     int ism = superModules_[i];
00173 
00174     if ( meg01_[ism-1] ) meg01_[ism-1]->Reset();
00175     if ( meg02_[ism-1] ) meg02_[ism-1]->Reset();
00176 
00177     for ( int ix = 1; ix <= 50; ix++ ) {
00178       for ( int iy = 1; iy <= 50; iy++ ) {
00179 
00180         if ( meg01_[ism-1] ) meg01_[ism-1]->setBinContent( ix, iy, 6. );
00181 
00182         int jx = ix + Numbers::ix0EE(ism);
00183         int jy = iy + Numbers::iy0EE(ism);
00184 
00185         if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
00186 
00187         if ( Numbers::validEE(ism, jx, jy) ) {
00188           if ( meg01_[ism-1] ) meg01_[ism-1]->setBinContent( ix, iy, 2. );
00189         }
00190 
00191       }
00192     }
00193 
00194     for ( int ie = 1; ie <= 10; ie++ ) {
00195       for ( int ip = 1; ip <= 5; ip++ ) {
00196 
00197         if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ie, ip, 6. );
00198 
00199         // non-existing mem
00200         if ( (ism >=  3 && ism <=  4) || (ism >=  7 && ism <=  9) ) continue;
00201         if ( (ism >= 12 && ism <=  3) || (ism >= 16 && ism <= 18) ) continue;
00202 
00203         if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ie, ip, 2. );
00204 
00205       }
00206     }
00207 
00208   }
00209 
00210 }
00211 
00212 void EEIntegrityClient::cleanup(void) {
00213 
00214   if ( ! enableCleanup_ ) return;
00215 
00216   if ( cloneME_ ) {
00217     if ( h00_ ) delete h00_;
00218   }
00219 
00220   h00_ = 0;
00221 
00222   for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00223 
00224     int ism = superModules_[i];
00225 
00226     if ( cloneME_ ) {
00227       if ( h_[ism-1] )    delete h_[ism-1];
00228       if ( hmem_[ism-1] ) delete hmem_[ism-1];
00229 
00230       if ( h01_[ism-1] ) delete h01_[ism-1];
00231       if ( h02_[ism-1] ) delete h02_[ism-1];
00232       if ( h03_[ism-1] ) delete h03_[ism-1];
00233       if ( h04_[ism-1] ) delete h04_[ism-1];
00234       if ( h05_[ism-1] ) delete h05_[ism-1];
00235       if ( h06_[ism-1] ) delete h06_[ism-1];
00236       if ( h07_[ism-1] ) delete h07_[ism-1];
00237       if ( h08_[ism-1] ) delete h08_[ism-1];
00238       if ( h09_[ism-1] ) delete h09_[ism-1];
00239     }
00240 
00241     h_[ism-1] = 0;
00242     hmem_[ism-1] = 0;
00243 
00244     h01_[ism-1] = 0;
00245     h02_[ism-1] = 0;
00246     h03_[ism-1] = 0;
00247     h04_[ism-1] = 0;
00248     h05_[ism-1] = 0;
00249     h06_[ism-1] = 0;
00250     h07_[ism-1] = 0;
00251     h08_[ism-1] = 0;
00252     h09_[ism-1] = 0;
00253 
00254   }
00255 
00256   dqmStore_->setCurrentFolder( prefixME_ + "/EEIntegrityClient" );
00257 
00258   for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00259 
00260     int ism = superModules_[i];
00261 
00262     if ( meg01_[ism-1] ) dqmStore_->removeElement( meg01_[ism-1]->getName() );
00263     meg01_[ism-1] = 0;
00264 
00265     if ( meg02_[ism-1] ) dqmStore_->removeElement( meg02_[ism-1]->getName() );
00266     meg02_[ism-1] = 0;
00267 
00268   }
00269 
00270 }
00271 
00272 #ifdef WITH_ECAL_COND_DB
00273 bool EEIntegrityClient::writeDb(EcalCondDBInterface* econn, RunIOV* runiov, MonRunIOV* moniov, bool& status) {
00274 
00275   status = true;
00276 
00277   EcalLogicID ecid;
00278 
00279   MonCrystalConsistencyDat c1;
00280   std::map<EcalLogicID, MonCrystalConsistencyDat> dataset1;
00281   MonTTConsistencyDat c2;
00282   std::map<EcalLogicID, MonTTConsistencyDat> dataset2;
00283   MonMemChConsistencyDat c3;
00284   std::map<EcalLogicID, MonMemChConsistencyDat> dataset3;
00285   MonMemTTConsistencyDat c4;
00286   std::map<EcalLogicID, MonMemTTConsistencyDat> dataset4;
00287 
00288   for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00289 
00290     int ism = superModules_[i];
00291 
00292     if ( h00_ && h00_->GetBinContent(ism) != 0 ) {
00293       std::cerr << std::endl;
00294       std::cerr << " DCC failed " << h00_->GetBinContent(ism) << " times" << std::endl;
00295       std::cerr << std::endl;
00296     }
00297 
00298     if ( verbose_ ) {
00299       std::cout << " " << Numbers::sEE(ism) << " (ism=" << ism << ")" << std::endl;
00300       std::cout << std::endl;
00301       UtilsClient::printBadChannels(meg01_[ism-1], h01_[ism-1], true);
00302       UtilsClient::printBadChannels(meg01_[ism-1], h02_[ism-1], true);
00303       UtilsClient::printBadChannels(meg01_[ism-1], h03_[ism-1], true);
00304       UtilsClient::printBadChannels(meg01_[ism-1], h04_[ism-1], true);
00305       UtilsClient::printBadChannels(meg01_[ism-1], h05_[ism-1], true);
00306 
00307       UtilsClient::printBadChannels(meg02_[ism-1], h06_[ism-1], true);
00308       UtilsClient::printBadChannels(meg02_[ism-1], h07_[ism-1], true);
00309       UtilsClient::printBadChannels(meg02_[ism-1], h08_[ism-1], true);
00310       UtilsClient::printBadChannels(meg02_[ism-1], h09_[ism-1], true);
00311     }
00312 
00313     float num00;
00314 
00315     num00 = 0.;
00316 
00317     bool update0 = false;
00318 
00319     if ( h00_ ) {
00320       num00 = h00_->GetBinContent(ism);
00321       if ( num00 > 0 ) update0 = true;
00322     }
00323 
00324     float num01, num02, num03;
00325 
00326     for ( int ix = 1; ix <= 50; ix++ ) {
00327       for ( int iy = 1; iy <= 50; iy++ ) {
00328 
00329         int jx = ix + Numbers::ix0EE(ism);
00330         int jy = iy + Numbers::iy0EE(ism);
00331 
00332         if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
00333 
00334         if ( ! Numbers::validEE(ism, jx, jy) ) continue;
00335 
00336         num01 = num02 = num03 = 0.;
00337 
00338         bool update1 = false;
00339 
00340         float numTot = -1.;
00341 
00342         if ( h_[ism-1] ) numTot = h_[ism-1]->GetBinContent(ix, iy);
00343 
00344         if ( h01_[ism-1] ) {
00345           num01  = h01_[ism-1]->GetBinContent(ix, iy);
00346           if ( num01 > 0 ) update1 = true;
00347         }
00348 
00349         if ( h02_[ism-1] ) {
00350           num02  = h02_[ism-1]->GetBinContent(ix, iy);
00351           if ( num02 > 0 ) update1 = true;
00352         }
00353 
00354         if ( h03_[ism-1] ) {
00355           num03  = h03_[ism-1]->GetBinContent(ix, iy);
00356           if ( num03 > 0 ) update1 = true;
00357         }
00358 
00359         if ( update0 || update1 ) {
00360 
00361           if ( Numbers::icEE(ism, jx, jy) == 1 ) {
00362 
00363             if ( verbose_ ) {
00364               std::cout << "Preparing dataset for " << Numbers::sEE(ism) << " (ism=" << ism << ")" << std::endl;
00365               std::cout << "(" << Numbers::ix0EE(i+1)+ix << "," << Numbers::iy0EE(i+1)+iy << ") " << num00 << " " << num01 << " " << num02 << " " << num03 << std::endl;
00366               std::cout << std::endl;
00367             }
00368 
00369           }
00370 
00371           c1.setProcessedEvents(int(numTot));
00372           c1.setProblematicEvents(int(num01+num02+num03));
00373           c1.setProblemsGainZero(int(num01));
00374           c1.setProblemsID(int(num02));
00375           c1.setProblemsGainSwitch(int(num03));
00376 
00377           bool val;
00378 
00379           val = false;
00380           if ( numTot > 0 ) {
00381             float errorRate1 = num00 / ( numTot + num01 + num02 + num03 );
00382             if ( errorRate1 > threshCry_ )
00383               val = true;
00384             errorRate1 = ( num01 + num02 + num03 ) / ( numTot + num01 + num02 + num03 ) / 3.;
00385             if ( errorRate1 > threshCry_ )
00386               val = true;
00387           } else {
00388             if ( num00 > 0 )
00389               val = true;
00390             if ( ( num01 + num02 + num03 ) > 0 )
00391               val = true;
00392           }
00393           c1.setTaskStatus(val);
00394 
00395           int ic = Numbers::indexEE(ism, jx, jy);
00396 
00397           if ( ic == -1 ) continue;
00398 
00399           if ( econn ) {
00400             ecid = LogicID::getEcalLogicID("EE_crystal_number", Numbers::iSM(ism, EcalEndcap), ic);
00401             dataset1[ecid] = c1;
00402           }
00403 
00404           status = status && !val;
00405 
00406         }
00407 
00408       }
00409     }
00410 
00411     float num04, num05;
00412 
00413     for ( int ixt = 1; ixt <= 10; ixt++ ) {
00414       for ( int iyt = 1; iyt <= 10; iyt++ ) {
00415 
00416         int jxt = Numbers::ix0EE(ism) + 1 + 5*(ixt-1);
00417         int jyt = Numbers::iy0EE(ism) + 1 + 5*(iyt-1);
00418 
00419         if ( ism >= 1 && ism <= 9 ) jxt = 101 - jxt;
00420 
00421         num04 = num05 = 0.;
00422 
00423         bool update1 = false;
00424 
00425         float numTot = -1.;
00426 
00427         if ( h_[ism-1] ) {
00428           numTot = 0.;
00429           for ( int ix = 1 + 5*(ixt-1); ix <= 5*ixt; ix++ ) {
00430             for ( int iy = 1 + 5*(iyt-1); iy <= 5*iyt; iy++ ) {
00431               int jx = ix + Numbers::ix0EE(ism);
00432               int jy = iy + Numbers::iy0EE(ism);
00433               if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
00434               if ( ! Numbers::validEE(ism, jx, jy) ) continue;
00435               numTot += h_[ism-1]->GetBinContent(ix, iy);
00436             }
00437           }
00438         }
00439 
00440         if ( h04_[ism-1] ) {
00441           for ( int ix = 1 + 5*(ixt-1); ix <= 5*ixt; ix++ ) {
00442             for ( int iy = 1 + 5*(iyt-1); iy <= 5*iyt; iy++ ) {
00443               int jx = ix + Numbers::ix0EE(ism);
00444               int jy = iy + Numbers::iy0EE(ism);
00445               if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
00446               if ( ! Numbers::validEE(ism, jx, jy) ) continue;
00447               num04  = h04_[ism-1]->GetBinContent(ix, iy);
00448               if ( num04 > 0 ) update1 = true;
00449             }
00450           }
00451         }
00452 
00453         if ( h05_[ism-1] ) {
00454           for ( int ix = 1 + 5*(ixt-1); ix <= 5*ixt; ix++ ) {
00455             for ( int iy = 1 + 5*(iyt-1); iy <= 5*iyt; iy++ ) {
00456               int jx = ix + Numbers::ix0EE(ism);
00457               int jy = iy + Numbers::iy0EE(ism);
00458               if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
00459               if ( ! Numbers::validEE(ism, jx, jy) ) continue;
00460               num05  = h05_[ism-1]->GetBinContent(ix, iy);
00461               if ( num05 > 0 ) update1 = true;
00462             }
00463           }
00464         }
00465 
00466         if ( update0 || update1 ) {
00467 
00468           if ( Numbers::iSC(ism, EcalEndcap, jxt, jyt) == 1 ) {
00469 
00470             if ( verbose_ ) {
00471               std::cout << "Preparing dataset for " << Numbers::sEE(ism) << " (ism=" << ism << ")" << std::endl;
00472               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;
00473               std::cout << std::endl;
00474             }
00475 
00476           }
00477 
00478           c2.setProcessedEvents(int(numTot));
00479           c2.setProblematicEvents(int(num04+num05));
00480           c2.setProblemsID(int(num04));
00481           c2.setProblemsSize(int(num05));
00482           c2.setProblemsLV1(int(-1.));
00483           c2.setProblemsBunchX(int(-1.));
00484 
00485           bool val;
00486 
00487           val = false;
00488           if ( numTot > 0 ) {
00489             float errorRate2 = num00 / ( numTot + num04 + num05 );
00490             if ( errorRate2 > threshCry_ )
00491               val = true;
00492             errorRate2 = ( num04 + num05 ) / ( numTot + num04 + num05 ) / 2.;
00493             if ( errorRate2 > threshCry_ )
00494               val = true;
00495           } else {
00496             if ( num00 > 0 )
00497               val = true;
00498             if ( ( num04 + num05 ) > 0 )
00499               val = true;
00500           }
00501           c2.setTaskStatus(val);
00502 
00503           int itt = Numbers::iSC(ism, EcalEndcap, jxt, jyt);
00504 
00505           if ( itt == -1 ) continue;
00506 
00507           if ( econn ) {
00508             ecid = LogicID::getEcalLogicID("EE_readout_tower", Numbers::iSM(ism, EcalEndcap), itt);
00509             dataset2[ecid] = c2;
00510           }
00511 
00512           status = status && !val;
00513 
00514         }
00515 
00516       }
00517     }
00518 
00519     float num06, num07;
00520 
00521     for ( int ix = 1; ix <= 10; ix++ ) {
00522       for ( int iy = 1; iy <= 5; iy++ ) {
00523 
00524         num06 = num07 = 0.;
00525 
00526         bool update1 = false;
00527 
00528         float numTot = -1.;
00529 
00530         if ( hmem_[ism-1] ) numTot = hmem_[ism-1]->GetBinContent(ix, iy);
00531 
00532         if ( h06_[ism-1] ) {
00533           num06  = h06_[ism-1]->GetBinContent(ix, iy);
00534           if ( num06 > 0 ) update1 = true;
00535         }
00536 
00537         if ( h07_[ism-1] ) {
00538           num07  = h07_[ism-1]->GetBinContent(ix, iy);
00539           if ( num07 > 0 ) update1 = true;
00540         }
00541 
00542         if ( update0 || update1 ) {
00543 
00544           if ( ix ==1 && iy == 1 ) {
00545 
00546             if ( verbose_ ) {
00547               std::cout << "Preparing dataset for mem of SM=" << ism << std::endl;
00548               std::cout << "(" << ix << "," << iy << ") " << num06 << " " << num07 << std::endl;
00549               std::cout << std::endl;
00550             }
00551 
00552           }
00553 
00554           c3.setProcessedEvents( int (numTot));
00555           c3.setProblematicEvents(int (num06+num07));
00556           c3.setProblemsID(int (num06) );
00557           c3.setProblemsGainZero(int (num07));
00558           // c3.setProblemsGainSwitch(int prob);
00559 
00560           bool val;
00561 
00562           val = false;
00563           if ( numTot > 0 ) {
00564             float errorRate1 = num00 / ( numTot + num06 + num07 );
00565             if ( errorRate1 > threshCry_ )
00566               val = true;
00567             errorRate1 = ( num06 + num07 ) / ( numTot + num06 + num07 ) / 2.;
00568             if ( errorRate1 > threshCry_ )
00569               val = true;
00570           } else {
00571             if ( num00 > 0 )
00572              val = true;
00573             if ( ( num06 + num07 ) > 0 )
00574               val = true;
00575           }
00576           c3. setTaskStatus(val);
00577 
00578           int ic = EEIntegrityClient::chNum[ (ix-1)%5 ][ (iy-1) ] + (ix-1)/5 * 25;
00579 
00580           if ( econn ) {
00581             ecid = LogicID::getEcalLogicID("EE_mem_channel", Numbers::iSM(ism, EcalEndcap), ic);
00582             dataset3[ecid] = c3;
00583           }
00584 
00585           status = status && !val;
00586 
00587         }
00588 
00589       }
00590     }
00591 
00592     float num08, num09;
00593 
00594     for ( int ixt = 1; ixt <= 2; ixt++ ) {
00595 
00596       num08 = num09 = 0.;
00597 
00598       bool update1 = false;
00599 
00600       float numTot = -1.;
00601 
00602       if ( hmem_[ism-1] ) {
00603         numTot = 0.;
00604         for ( int ix = 1 + 5*(ixt-1); ix <= 5*ixt; ix++ ) {
00605           for ( int iy = 1 ; iy <= 5; iy++ ) {
00606             numTot += hmem_[ism-1]->GetBinContent(ix, iy);
00607           }
00608         }
00609       }
00610 
00611       if ( h08_[ism-1] ) {
00612         num08  = h08_[ism-1]->GetBinContent(ixt, 1);
00613         if ( num08 > 0 ) update1 = true;
00614       }
00615 
00616       if ( h09_[ism-1] ) {
00617         num09  = h09_[ism-1]->GetBinContent(ixt, 1);
00618         if ( num09 > 0 ) update1 = true;
00619       }
00620 
00621       if ( update0 || update1 ) {
00622 
00623         if ( ixt == 1 ) {
00624 
00625           if ( verbose_ ) {
00626             std::cout << "Preparing dataset for " << Numbers::sEE(ism) << " (ism=" << ism << ")" << std::endl;
00627             std::cout << "(" << ixt <<  ") " << num08 << " " << num09 << std::endl;
00628             std::cout << std::endl;
00629           }
00630 
00631         }
00632 
00633         c4.setProcessedEvents( int(numTot) );
00634         c4.setProblematicEvents( int(num08 + num09) );
00635         c4.setProblemsID( int(num08) );
00636         c4.setProblemsSize(int (num09) );
00637         // setProblemsLV1(int LV1);
00638         // setProblemsBunchX(int bunchX);
00639 
00640         bool val;
00641 
00642         val = false;
00643         if ( numTot > 0 ) {
00644           float errorRate2 = num00 / ( numTot + num08 + num09 );
00645           if ( errorRate2 > threshCry_ )
00646             val = true;
00647           errorRate2 = ( num08 + num09 ) / ( numTot/25. + num08 + num09 ) / 2.;
00648           if ( errorRate2 > threshCry_ )
00649             val = true;
00650         } else {
00651           if ( num00 > 0 )
00652             val = true;
00653           if ( ( num08 + num09 ) > 0 )
00654             val = true;
00655         }
00656         c4.setTaskStatus(val);
00657 
00658         int itt = 68 + ixt;
00659 
00660         if ( econn ) {
00661           ecid = LogicID::getEcalLogicID("EE_mem_TT", Numbers::iSM(ism, EcalEndcap), itt);
00662           dataset4[ecid] = c4;
00663         }
00664 
00665         status = status && !val;
00666 
00667       }
00668 
00669     }
00670 
00671   }
00672 
00673   if ( econn ) {
00674     try {
00675       if ( verbose_ ) std::cout << "Inserting MonConsistencyDat ..." << std::endl;
00676       if ( dataset1.size() != 0 ) econn->insertDataArraySet(&dataset1, moniov);
00677       if ( dataset2.size() != 0 ) econn->insertDataArraySet(&dataset2, moniov);
00678       if ( dataset3.size() != 0 ) econn->insertDataArraySet(&dataset3, moniov);
00679       if ( dataset4.size() != 0 ) econn->insertDataArraySet(&dataset4, moniov);
00680       if ( verbose_ ) std::cout << "done." << std::endl;
00681     } catch (std::runtime_error &e) {
00682       std::cerr << e.what() << std::endl;
00683     }
00684   }
00685 
00686   return true;
00687 
00688 }
00689 #endif
00690 
00691 void EEIntegrityClient::analyze(void) {
00692 
00693   ievt_++;
00694   jevt_++;
00695   if ( ievt_ % 10 == 0 ) {
00696     if ( debug_ ) std::cout << "EEIntegrityClient: ievt/jevt = " << ievt_ << "/" << jevt_ << std::endl;
00697   }
00698 
00699   uint32_t bits01 = 0;
00700   bits01 |= 1 << EcalDQMStatusHelper::CH_ID_ERROR;
00701   bits01 |= 1 << EcalDQMStatusHelper::CH_GAIN_ZERO_ERROR;
00702   bits01 |= 1 << EcalDQMStatusHelper::CH_GAIN_SWITCH_ERROR;
00703   bits01 |= 1 << EcalDQMStatusHelper::TT_ID_ERROR;
00704   bits01 |= 1 << EcalDQMStatusHelper::TT_SIZE_ERROR;
00705 
00706   MonitorElement* me;
00707 
00708   me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/EEIT DCC size error" );
00709   h00_ = UtilsClient::getHisto( me, cloneME_, h00_ );
00710 
00711   for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00712 
00713     int ism = superModules_[i];
00714 
00715     me = dqmStore_->get( prefixME_ + "/EEOccupancyTask/EEOT digi occupancy " + Numbers::sEE(ism) );
00716     h_[ism-1] = UtilsClient::getHisto( me, cloneME_, h_[ism-1] );
00717 
00718     me = dqmStore_->get( prefixME_ + "/EEOccupancyTask/EEOT MEM digi occupancy " + Numbers::sEE(ism) );
00719     hmem_[ism-1] = UtilsClient::getHisto( me, cloneME_, hmem_[ism-1] );
00720 
00721     me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/Gain/EEIT gain " + Numbers::sEE(ism) );
00722     h01_[ism-1] = UtilsClient::getHisto( me, cloneME_, h01_[ism-1] );
00723 
00724     me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/ChId/EEIT ChId " + Numbers::sEE(ism) );
00725     h02_[ism-1] = UtilsClient::getHisto( me, cloneME_, h02_[ism-1] );
00726 
00727     me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/GainSwitch/EEIT gain switch " + Numbers::sEE(ism) );
00728     h03_[ism-1] = UtilsClient::getHisto( me, cloneME_, h03_[ism-1] );
00729 
00730     me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/TTId/EEIT TTId " + Numbers::sEE(ism) );
00731     h04_[ism-1] = UtilsClient::getHisto( me, cloneME_, h04_[ism-1] );
00732 
00733     me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/TTBlockSize/EEIT TTBlockSize " + Numbers::sEE(ism) );
00734     h05_[ism-1] = UtilsClient::getHisto( me, cloneME_, h05_[ism-1] );
00735 
00736     me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/MemChId/EEIT MemChId " + Numbers::sEE(ism) );
00737     h06_[ism-1] = UtilsClient::getHisto( me, cloneME_, h06_[ism-1] );
00738 
00739     me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/MemGain/EEIT MemGain " + Numbers::sEE(ism) );
00740     h07_[ism-1] = UtilsClient::getHisto( me, cloneME_, h07_[ism-1] );
00741 
00742     me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/MemTTId/EEIT MemTTId " + Numbers::sEE(ism) );
00743     h08_[ism-1] = UtilsClient::getHisto( me, cloneME_, h08_[ism-1] );
00744 
00745     me = dqmStore_->get( prefixME_ + "/EEIntegrityTask/MemSize/EEIT MemSize " + Numbers::sEE(ism) );
00746     h09_[ism-1] = UtilsClient::getHisto( me, cloneME_, h09_[ism-1] );
00747 
00748     float num00;
00749 
00750     // integrity summary histograms
00751     if ( meg01_[ism-1] ) meg01_[ism-1]->Reset();
00752     if ( meg01_[ism-1] ) meg02_[ism-1]->Reset();
00753 
00754     num00 = 0.;
00755 
00756     bool update0 = false;
00757 
00758     // dcc size errors
00759     if ( h00_ ) {
00760       num00  = h00_->GetBinContent(ism);
00761       update0 = true;
00762     }
00763 
00764     float num01, num02, num03, num04, num05;
00765 
00766     for ( int ix = 1; ix <= 50; ix++ ) {
00767       for ( int iy = 1; iy <= 50; iy++ ) {
00768 
00769         num01 = num02 = num03 = num04 = num05 = 0.;
00770 
00771         if ( meg01_[ism-1] ) meg01_[ism-1]->setBinContent( ix, iy, 6. );
00772 
00773         bool update1 = false;
00774         bool update2 = false;
00775 
00776         float numTot = -1.;
00777 
00778         if ( h_[ism-1] ) numTot = h_[ism-1]->GetBinContent(ix, iy);
00779 
00780         if ( h01_[ism-1] ) {
00781           num01  = h01_[ism-1]->GetBinContent(ix, iy);
00782           update1 = true;
00783         }
00784 
00785         if ( h02_[ism-1] ) {
00786           num02  = h02_[ism-1]->GetBinContent(ix, iy);
00787           update1 = true;
00788         }
00789 
00790         if ( h03_[ism-1] ) {
00791           num03  = h03_[ism-1]->GetBinContent(ix, iy);
00792           update1 = true;
00793         }
00794 
00795         if ( h04_[ism-1] ) {
00796           num04  = h04_[ism-1]->GetBinContent(ix, iy);
00797           update2 = true;
00798         }
00799 
00800         if ( h05_[ism-1] ) {
00801           num05  = h05_[ism-1]->GetBinContent(ix, iy);
00802           update2 = true;
00803         }
00804 
00805         if ( update0 || update1 || update2 ) {
00806 
00807           float val;
00808 
00809           val = 1.;
00810           // number of events on a channel
00811           if ( numTot > 0 ) {
00812             float errorRate1 =  num00 / ( numTot + num01 + num02 + num03 );
00813             if ( errorRate1 > threshCry_ )
00814               val = 0.;
00815             errorRate1 = ( num01 + num02 + num03 ) / ( numTot + num01 + num02 + num03 ) / 3.;
00816             if ( errorRate1 > threshCry_ )
00817               val = 0.;
00818             float errorRate2 = ( num04 + num05 ) / ( numTot + num04 + num05 ) / 2.;
00819             if ( errorRate2 > threshCry_ )
00820               val = 0.;
00821           } else {
00822             val = 2.;
00823             if ( num00 > 0 )
00824               val = 0.;
00825             if ( ( num01 + num02 + num03 ) > 0 )
00826               val = 0.;
00827             if ( ( num04 + num05 ) > 0 )
00828               val = 0.;
00829           }
00830 
00831           int jx = ix + Numbers::ix0EE(ism);
00832           int jy = iy + Numbers::iy0EE(ism);
00833 
00834           if ( ism >= 1 && ism <= 9 ) jx = 101 - jx;
00835 
00836           // filling the summary for SM channels
00837           if ( Numbers::validEE(ism, jx, jy) ) {
00838             if ( meg01_[ism-1] ) meg01_[ism-1]->setBinContent( ix, iy, val );
00839           }
00840 
00841         }
00842 
00843         if ( Masks::maskChannel(ism, ix, iy, bits01, EcalEndcap) ) UtilsClient::maskBinContent( meg01_[ism-1], ix, iy );
00844 
00845       }
00846     } // end of loop on crystals to fill summary plot
00847 
00848     // summaries for mem channels
00849     float num06, num07, num08, num09;
00850 
00851     for ( int ie = 1; ie <= 10; ie++ ) {
00852       for ( int ip = 1; ip <= 5; ip++ ) {
00853 
00854         num06 = num07 = num08 = num09 = 0.;
00855 
00856         // initialize summary histo for mem
00857         if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ie, ip, 6. );
00858 
00859         // non-existing mem
00860         if ( (ism >=  3 && ism <=  4) || (ism >=  7 && ism <=  9) ) continue;
00861         if ( (ism >= 12 && ism <= 13) || (ism >= 16 && ism <= 18) ) continue;
00862 
00863         if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ie, ip, 2. );
00864 
00865         bool update1 = false;
00866         bool update2 = false;
00867 
00868         float numTotmem = -1.;
00869 
00870         if ( hmem_[ism-1] ) numTotmem = hmem_[ism-1]->GetBinContent(ie, ip);
00871 
00872         if ( h06_[ism-1] ) {
00873           num06  = h06_[ism-1]->GetBinContent(ie, ip);
00874           update1 = true;
00875         }
00876 
00877         if ( h07_[ism-1] ) {
00878           num07  = h07_[ism-1]->GetBinContent(ie, ip);
00879           update1 = true;
00880         }
00881 
00882         int iet = 1 + ((ie-1)/5);
00883         int ipt = 1;
00884 
00885         if ( h08_[ism-1] ) {
00886           num08  = h08_[ism-1]->GetBinContent(iet, ipt);
00887           update2 = true;
00888         }
00889 
00890         if ( h09_[ism-1] ) {
00891           num09  = h09_[ism-1]->GetBinContent(iet, ipt);
00892           update2 = true;
00893         }
00894 
00895         if ( update0 || update1 || update2 ) {
00896 
00897           float val;
00898 
00899           val = 1.;
00900           // number of events on a channel
00901           if ( numTotmem > 0 ) {
00902             float errorRate1 = ( num06 + num07 ) / ( numTotmem + num06 + num07 )/ 2.;
00903             if ( errorRate1 > threshCry_ )
00904               val = 0.;
00905             float errorRate2 = ( num08 + num09 ) / ( numTotmem/25. + num08 + num09 ) / 2.;
00906             if ( errorRate2 > threshCry_ )
00907               val = 0.;
00908           } else {
00909             val = 2.;
00910             if ( ( num06 + num07 ) > 0 )
00911               val = 0.;
00912             if ( ( num08 + num09 ) > 0 )
00913               val = 0.;
00914           }
00915 
00916           // filling summary for mem channels
00917           if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ie, ip, val );
00918 
00919         }
00920 
00921         if ( Masks::maskPn(ism, ie, bits01, EcalEndcap) ) UtilsClient::maskBinContent( meg02_[ism-1], ie, ip );
00922 
00923       }
00924     }  // end loop on mem channels
00925 
00926   } // end loop on supermodules
00927 
00928 }
00929 
00930 const int EEIntegrityClient::chNum[5][5] = {
00931   { 1,  2,  3,  4,  5},
00932   {10,  9,  8,  7,  6},
00933   {11, 12, 13, 14, 15},
00934   {20, 19, 18, 17, 16},
00935   {21, 22, 23, 24, 25}
00936 };
00937