00001
00002
00003
00004
00005
00006
00007
00008
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
00050 cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
00051
00052
00053 verbose_ = ps.getUntrackedParameter<bool>("verbose", true);
00054
00055
00056 debug_ = ps.getUntrackedParameter<bool>("debug", false);
00057
00058
00059 prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00060
00061
00062 enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00063
00064
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
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
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
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
00638
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
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
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
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
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 }
00847
00848
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
00857 if ( meg02_[ism-1] ) meg02_[ism-1]->setBinContent( ie, ip, 6. );
00858
00859
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
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
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 }
00925
00926 }
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