00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <fstream>
00011 #include <iostream>
00012 #include <string>
00013 #include <cstring>
00014 #include <time.h>
00015 #include <unistd.h>
00016
00017 #include "FWCore/ServiceRegistry/interface/Service.h"
00018 #include "CondCore/DBOutputService/interface/PoolDBOutputService.h"
00019
00020 #include "DQM/EcalCommon/interface/Numbers.h"
00021
00022 #include "DataFormats/EcalDetId/interface/EBDetId.h"
00023 #include "DataFormats/EcalDetId/interface/EEDetId.h"
00024 #include "DataFormats/EcalDetId/interface/EcalTrigTowerDetId.h"
00025 #include "DataFormats/EcalDetId/interface/EcalScDetId.h"
00026
00027 #include "DQM/EcalCommon/interface/EcalDQMStatusDictionary.h"
00028
00029 #include "DQM/EcalCommon/interface/EcalDQMStatusWriter.h"
00030
00031 EcalDQMStatusWriter::EcalDQMStatusWriter(const edm::ParameterSet& ps) {
00032
00033 verbose_ = ps.getUntrackedParameter<bool>("verbose", false);
00034
00035 typedef std::vector<edm::ParameterSet> Parameters;
00036 Parameters toPut = ps.getParameter<Parameters>("toPut");
00037
00038 for ( Parameters::iterator itToPut=toPut.begin(); itToPut!=toPut.end(); itToPut++ ) {
00039 inpFileName_.push_back(itToPut->getUntrackedParameter<std::string>("inputFile"));
00040 objectName_.push_back(itToPut->getUntrackedParameter<std::string>("conditionType"));
00041 since_.push_back(itToPut->getUntrackedParameter<unsigned int>("since"));
00042 }
00043
00044 }
00045
00046 void EcalDQMStatusWriter::beginRun(const edm::Run& r, const edm::EventSetup& c) {
00047
00048 Numbers::initGeometry(c, verbose_);
00049
00050 edm::Service<cond::service::PoolDBOutputService> dbservice;
00051 if ( !dbservice.isAvailable() ){
00052 std::cout << "PoolDBOutputService is unavailable" << std::endl;
00053 return;
00054 }
00055
00056 for ( unsigned int i=0; i<objectName_.size(); i++ ) {
00057
00058 bool toAppend;
00059 cond::Time_t newTime;
00060
00061 if ( dbservice->isNewTagRequest( objectName_[i]+std::string("Rcd") ) ) {
00062
00063
00064
00065 toAppend = false;
00066 newTime = dbservice->beginOfTime();
00067 } else {
00068
00069
00070
00071 toAppend = true;
00072 newTime = (cond::Time_t) since_[i];
00073 }
00074
00075 std::cout << "Reading " << objectName_[i] << " from file and writing to DB with newTime " << newTime << std::endl;
00076
00077 if (objectName_[i] == "EcalDQMChannelStatus") {
00078
00079 EcalDQMChannelStatus* status = readEcalDQMChannelStatusFromFile(inpFileName_[i].c_str());
00080
00081 if ( !toAppend ) {
00082 dbservice->createNewIOV<EcalDQMChannelStatus>(status, newTime, dbservice->endOfTime(), "EcalDQMChannelStatusRcd");
00083 } else {
00084 dbservice->appendSinceTime<EcalDQMChannelStatus>(status, newTime, "EcalDQMChannelStatusRcd");
00085 }
00086
00087 } else if (objectName_[i] == "EcalDQMTowerStatus") {
00088
00089 EcalDQMTowerStatus* status = readEcalDQMTowerStatusFromFile(inpFileName_[i].c_str());
00090
00091 if ( !toAppend ) {
00092 dbservice->createNewIOV<EcalDQMTowerStatus>(status, newTime, dbservice->endOfTime(), "EcalDQMTowerStatusRcd");
00093 } else {
00094 dbservice->appendSinceTime<EcalDQMTowerStatus>(status, newTime, "EcalDQMTowerStatusRcd");
00095 }
00096
00097 } else {
00098
00099 std::cout << "Object " << objectName_[i] << " is not supported by this program." << std::endl;
00100
00101 }
00102
00103 }
00104
00105 }
00106
00107 EcalDQMChannelStatus* EcalDQMStatusWriter::readEcalDQMChannelStatusFromFile(const char* inputFile) {
00108
00109 EcalDQMChannelStatus* status = new EcalDQMChannelStatus();
00110
00111 std::vector<EcalDQMStatusDictionary::codeDef> dictionary;
00112 EcalDQMStatusDictionary::getDictionary( dictionary );
00113
00114
00115 for ( int ism=1; ism<=36; ism++ ) {
00116 int jsm = Numbers::iSM(ism, EcalBarrel);
00117 for ( int ic=1; ic<=1700; ic++ ) {
00118 EBDetId id(jsm, ic, EBDetId::SMCRYSTALMODE);
00119 status->setValue(id, 0);
00120 }
00121 }
00122
00123
00124 for ( int ix=1; ix<=100; ix++ ) {
00125 for ( int iy=1; iy<=100; iy++ ) {
00126 if ( EEDetId::validDetId(ix, iy, +1) ) {
00127 EEDetId id(ix, iy, +1);
00128 status->setValue(id, 0);
00129 }
00130 if ( EEDetId::validDetId(ix, iy, -1) ) {
00131 EEDetId id(ix, iy, -1);
00132 status->setValue(id, 0);
00133 }
00134 }
00135 }
00136
00137 std::cout << "Reading channel status from file " << inputFile << std::endl;
00138 FILE *ifile = fopen( inputFile ,"r" );
00139
00140 if ( !ifile ) throw cms::Exception ("Cannot open file") ;
00141
00142 char line[256];
00143
00144 int ii = 0;
00145 while ( fgets(line, 255, ifile) ) {
00146
00147 std::stringstream stream;
00148
00149 ii++;
00150 std::string key;
00151 stream << line;
00152 if ( verbose_ ) std::cout << line;
00153 stream >> key;
00154
00155 if ( key.size() == 0 || strcmp(key.c_str(), " ") == 0 || strncmp(key.c_str(), "#", 1) == 0 ) {
00156
00157
00158
00159 } else if ( strcmp(key.c_str(), "EB") == 0 ) {
00160
00161 int index;
00162 uint32_t code;
00163 stream >> index >> code;
00164
00165 EBDetId id = EBDetId::unhashIndex(index);
00166 code = convert(code);
00167
00168 EcalDQMChannelStatus::const_iterator it = status->find(id);
00169 if ( it != status->end() ) code |= it->getStatusCode();
00170 status->setValue(id, code);
00171
00172 } else if ( strcmp(key.c_str(), "EE") == 0 ) {
00173
00174 int ix, iy, iz;
00175 uint32_t code;
00176 stream >> ix >> iy >> iz >> code;
00177
00178 EEDetId id(ix, iy, iz);
00179 code = convert(code);
00180
00181 EcalDQMChannelStatus::const_iterator it = status->find(id);
00182 if ( it != status->end() ) code |= it->getStatusCode();
00183 status->setValue(id, code);
00184
00185 } else if ( strcmp(key.c_str(), "Crystal") == 0 ) {
00186
00187 std::string module;
00188 stream >> module;
00189
00190 if ( strncmp(module.c_str(), "EB+", 3) == 0 || strncmp(module.c_str(), "EB-", 3) == 0 ) {
00191
00192 #if 0
00193 int ie, ip;
00194 std::string token;
00195 stream >> ie >> ip >> token;
00196
00197 int sm = atoi( module.substr(2, module.size()-2).c_str() );
00198
00199 int ism = (sm>=1&&sm<=18) ? sm+18 : -sm;
00200 int jsm = Numbers::iSM(ism, EcalBarrel);
00201 int ic = 20*(ie-1)+(ip-1)+1;
00202 #else
00203 int ic;
00204 std::string token;
00205 stream >> ic >> token;
00206
00207 int sm = atoi( module.substr(2, module.size()-2).c_str() );
00208
00209 int ism = (sm>=1&&sm<=18) ? sm+18 : -sm;
00210 int jsm = Numbers::iSM(ism, EcalBarrel);
00211 #endif
00212
00213 EBDetId id(jsm, ic, EBDetId::SMCRYSTALMODE);
00214 uint32_t code = 0;
00215 for ( unsigned int i=0; i<dictionary.size(); i++ ) {
00216 if ( strcmp(token.c_str(), dictionary[i].desc) == 0 ) {
00217 code = dictionary[i].code;
00218 }
00219 }
00220 if ( code == 0 ) {
00221 std::cout << " --> not found in the dictionary: " << token << std::endl;
00222 continue;
00223 }
00224
00225 EcalDQMChannelStatus::const_iterator it = status->find(id);
00226 if ( it != status->end() ) code |= it->getStatusCode();
00227 status->setValue(id, code);
00228
00229 } else if ( strncmp(module.c_str(), "EE+", 3) == 0 || strncmp(module.c_str(), "EE-", 3) == 0 ) {
00230
00231 #if 0
00232 int jx, jy;
00233 std::string token;
00234 stream >> jx >> jy >> token;
00235 #else
00236 int index;
00237 std::string token;
00238 stream >> index >> token;
00239 int jx = index/1000;
00240 int jy = index%1000;
00241 #endif
00242
00243 int sm = atoi( module.substr(2, module.size()-2).c_str() );
00244
00245 int ism = 0;
00246 if( sm == -99 ) sm = -1;
00247 if( sm == +99 ) sm = +1;
00248 switch ( sm ) {
00249 case -7: ism = 1; break;
00250 case -8: ism = 2; break;
00251 case -9: ism = 3; break;
00252 case -1: ism = 4; break;
00253 case -2: ism = 5; break;
00254 case -3: ism = 6; break;
00255 case -4: ism = 7; break;
00256 case -5: ism = 8; break;
00257 case -6: ism = 9; break;
00258 case +7: ism = 10; break;
00259 case +8: ism = 11; break;
00260 case +9: ism = 12; break;
00261 case +1: ism = 13; break;
00262 case +2: ism = 14; break;
00263 case +3: ism = 15; break;
00264 case +4: ism = 16; break;
00265 case +5: ism = 17; break;
00266 case +6: ism = 18; break;
00267 }
00268
00269 EEDetId id(jx, jy, (ism>=1&&ism<=9)?-1:+1);
00270 uint32_t code = 0;
00271 for ( unsigned int i=0; i<dictionary.size(); i++ ) {
00272 if ( strcmp(token.c_str(), dictionary[i].desc) == 0 ) {
00273 code = dictionary[i].code;
00274 }
00275 }
00276 if ( code == 0 ) {
00277 std::cout << " --> not found in the dictionary: " << token << std::endl;
00278 continue;
00279 }
00280
00281 EcalDQMChannelStatus::const_iterator it = status->find(id);
00282 if ( it != status->end() ) code |= it->getStatusCode();
00283 status->setValue(id, code);
00284
00285 } else {
00286
00287 std:: cout << "--> unknown token at line #" << ii << " : " << line;
00288
00289 }
00290
00291 } else if ( strcmp(key.c_str(), "TT") == 0 ) {
00292
00293
00294
00295 } else if ( strcmp(key.c_str(), "PN") == 0 || strcmp(key.c_str(), "MemCh") == 0 || strcmp(key.c_str(), "MemTT") == 0 ) {
00296
00297 std::cout << "--> unsupported key at line #" << ii << " : " << line;
00298
00299 } else {
00300
00301 std:: cout << "--> skipped line #" << ii << " : " << line;
00302
00303 }
00304
00305 }
00306
00307 fclose(ifile);
00308
00309 return status;
00310
00311 }
00312
00313 EcalDQMTowerStatus* EcalDQMStatusWriter::readEcalDQMTowerStatusFromFile(const char* inputFile) {
00314
00315 EcalDQMTowerStatus* status = new EcalDQMTowerStatus();
00316
00317 std::vector<EcalDQMStatusDictionary::codeDef> dictionary;
00318 EcalDQMStatusDictionary::getDictionary( dictionary );
00319
00320
00321 for ( int ix=1; ix<=17; ix++ ) {
00322 for ( int iy=1; iy<=72; iy++ ) {
00323 if ( EcalTrigTowerDetId::validDetId(+1, EcalBarrel, ix, iy) ) {
00324 EcalTrigTowerDetId id(+1, EcalBarrel, ix, iy);
00325 status->setValue(id, 0);
00326 }
00327 if ( EcalTrigTowerDetId::validDetId(-1, EcalBarrel, ix, iy) ) {
00328 EcalTrigTowerDetId id(-1, EcalBarrel, ix, iy);
00329 status->setValue(id, 0);
00330 }
00331 }
00332 }
00333
00334
00335 for ( int ix=1; ix<=20; ix++ ) {
00336 for ( int iy=1; iy<=20; iy++ ) {
00337 if ( EcalScDetId::validDetId(ix, iy, +1) ) {
00338 EcalScDetId id(ix, iy, +1);
00339 status->setValue(id, 0);
00340 }
00341 if ( EcalScDetId::validDetId(ix, iy, -1) ) {
00342 EcalScDetId id(ix, iy, -1);
00343 status->setValue(id, 0);
00344 }
00345 }
00346 }
00347
00348 std::cout << "Reading tower status from file " << inputFile << std::endl;
00349 FILE *ifile = fopen( inputFile ,"r" );
00350
00351 if ( !ifile ) throw cms::Exception ("Cannot open file") ;
00352
00353 char line[256];
00354
00355 int ii = 0;
00356 while ( fgets(line, 255, ifile) ) {
00357
00358 std::stringstream stream;
00359
00360 ii++;
00361 std::string key;
00362 stream << line;
00363 if ( verbose_ ) std::cout << line;
00364 stream >> key;
00365
00366 if ( key.size() == 0 || strcmp(key.c_str(), " ") == 0 || strncmp(key.c_str(), "#", 1) == 0 ) {
00367
00368
00369
00370 } else if ( strcmp(key.c_str(), "EB") == 0 ) {
00371
00372
00373
00374 } else if ( strcmp(key.c_str(), "EE") == 0 ) {
00375
00376
00377
00378 } else if ( strcmp(key.c_str(), "Crystal") == 0 ) {
00379
00380
00381
00382 } else if ( strcmp(key.c_str(), "TT") == 0 ) {
00383
00384 std::string module;
00385 stream >> module;
00386
00387 if ( strncmp(module.c_str(), "EB+", 3) == 0 || strncmp(module.c_str(), "EB-", 3) == 0 ) {
00388
00389 int itt;
00390 std::string token;
00391 stream >> itt >> token;
00392
00393 if ( itt >= 1 && itt <= 68 ) {
00394
00395 int sm = atoi( module.substr(2, module.size()-2).c_str() );
00396
00397 int iet = (itt-1)/4+1;
00398 int ipt = (itt-1)%4+1;
00399
00400 if ( sm<0 ) {
00401 ipt = ipt+(std::abs(sm)-1)*4-2;
00402 if ( ipt < 1 ) ipt = ipt+72;
00403 if ( ipt > 72 ) ipt = ipt-72;
00404 } else {
00405 ipt = (5-ipt)+(std::abs(sm)-1)*4-2;
00406 if ( ipt < 1 ) ipt = ipt+72;
00407 if ( ipt > 72 ) ipt = ipt-72;
00408 }
00409
00410 EcalTrigTowerDetId id((sm<0)?-1:+1, EcalBarrel, iet, ipt);
00411 uint32_t code = 0;
00412 for ( unsigned int i=0; i<dictionary.size(); i++ ) {
00413 if ( strcmp(token.c_str(), dictionary[i].desc) == 0 ) {
00414 code = dictionary[i].code;
00415 }
00416 }
00417 if ( code == 0 ) {
00418 std::cout << " --> not found in the dictionary: " << token << std::endl;
00419 continue;
00420 }
00421
00422 EcalDQMTowerStatus::const_iterator it = status->find(id);
00423 if ( it != status->end() ) code |= it->getStatusCode();
00424 status->setValue(id, code);
00425
00426 } else {
00427
00428 std::cout << "--> unsupported configuration at line #" << ii << " : " << line;
00429
00430 }
00431
00432 } else if ( strncmp(module.c_str(), "EE+", 3) == 0 || strncmp(module.c_str(), "EE-", 3) == 0 ) {
00433
00434 int isc;
00435 std::string token;
00436 stream >> isc >> token;
00437
00438 if ( isc >= 1 && isc <= 68 ) {
00439
00440 int sm = atoi( module.substr(2, module.size()-2).c_str() );
00441
00442 int ism = 0;
00443 switch ( sm ) {
00444 case -7: ism = 1; break;
00445 case -8: ism = 2; break;
00446 case -9: ism = 3; break;
00447 case -1: ism = 4; break;
00448 case -2: ism = 5; break;
00449 case -3: ism = 6; break;
00450 case -4: ism = 7; break;
00451 case -5: ism = 8; break;
00452 case -6: ism = 9; break;
00453 case +7: ism = 10; break;
00454 case +8: ism = 11; break;
00455 case +9: ism = 12; break;
00456 case +1: ism = 13; break;
00457 case +2: ism = 14; break;
00458 case +3: ism = 15; break;
00459 case +4: ism = 16; break;
00460 case +5: ism = 17; break;
00461 case +6: ism = 18; break;
00462 }
00463
00464 int idcc = (ism>=1&&ism<=9) ? ism : ism-9+45;
00465
00466 std::vector<DetId>* crystals = Numbers::crystals(idcc, isc);
00467
00468 for ( unsigned int i=0; i<crystals->size(); i++ ) {
00469
00470 EcalScDetId id = ((EEDetId) (*crystals)[i]).sc();
00471 uint32_t code = 0;
00472 for ( unsigned int i=0; i<dictionary.size(); i++ ) {
00473 if ( strcmp(token.c_str(), dictionary[i].desc) == 0 ) {
00474 code = dictionary[i].code;
00475 }
00476 }
00477 if ( code == 0 ) {
00478 std::cout << " --> not found in the dictionary: " << token << std::endl;
00479 continue;
00480 }
00481
00482 EcalDQMTowerStatus::const_iterator it = status->find(id);
00483 if ( it != status->end() ) code |= it->getStatusCode();
00484 status->setValue(id, code);
00485
00486 }
00487
00488 } else {
00489
00490 std::cout << "--> unsupported configuration at line #" << ii << " : " << line;
00491
00492 }
00493
00494 } else {
00495
00496 std:: cout << "--> unknown token at line #" << ii << " : " << line;
00497
00498 }
00499
00500 } else if ( strcmp(key.c_str(), "PN") == 0 || strcmp(key.c_str(), "MemCh") == 0 || strcmp(key.c_str(), "MemTT") == 0 ) {
00501
00502 std::cout << "--> unsupported key at line #" << ii << " : " << line;
00503
00504 } else {
00505
00506 std:: cout << "--> skipped line #" << ii << " : " << line;
00507
00508 }
00509
00510 }
00511
00512 fclose(ifile);
00513
00514 return status;
00515
00516 }
00517
00518 uint32_t EcalDQMStatusWriter::convert(uint32_t chStatus) {
00519
00520 if ( chStatus == 1 || (chStatus >= 8 && chStatus <= 12 )) {
00521
00522 chStatus = 0;
00523 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_LOW_GAIN_MEAN_ERROR;
00524 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_MIDDLE_GAIN_MEAN_ERROR;
00525 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_HIGH_GAIN_MEAN_ERROR;
00526 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_LOW_GAIN_RMS_ERROR;
00527 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_MIDDLE_GAIN_RMS_ERROR;
00528 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_HIGH_GAIN_RMS_ERROR;
00529 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_ONLINE_HIGH_GAIN_MEAN_ERROR;
00530 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_ONLINE_HIGH_GAIN_RMS_ERROR;
00531 chStatus |= 1 << EcalDQMStatusHelper::TESTPULSE_LOW_GAIN_MEAN_ERROR;
00532 chStatus |= 1 << EcalDQMStatusHelper::TESTPULSE_MIDDLE_GAIN_MEAN_ERROR;
00533 chStatus |= 1 << EcalDQMStatusHelper::TESTPULSE_HIGH_GAIN_MEAN_ERROR;
00534 chStatus |= 1 << EcalDQMStatusHelper::TESTPULSE_LOW_GAIN_RMS_ERROR;
00535 chStatus |= 1 << EcalDQMStatusHelper::TESTPULSE_MIDDLE_GAIN_RMS_ERROR;
00536 chStatus |= 1 << EcalDQMStatusHelper::TESTPULSE_HIGH_GAIN_RMS_ERROR;
00537 chStatus |= 1 << EcalDQMStatusHelper::LASER_MEAN_ERROR;
00538 chStatus |= 1 << EcalDQMStatusHelper::LASER_RMS_ERROR;
00539 chStatus |= 1 << EcalDQMStatusHelper::LASER_TIMING_MEAN_ERROR;
00540 chStatus |= 1 << EcalDQMStatusHelper::LASER_TIMING_RMS_ERROR;
00541 chStatus |= 1 << EcalDQMStatusHelper::LED_MEAN_ERROR;
00542 chStatus |= 1 << EcalDQMStatusHelper::LED_RMS_ERROR;
00543 chStatus |= 1 << EcalDQMStatusHelper::LED_TIMING_MEAN_ERROR;
00544 chStatus |= 1 << EcalDQMStatusHelper::LED_TIMING_RMS_ERROR;
00545
00546 } else if ( chStatus == 2 ) {
00547
00548 chStatus = 0;
00549 chStatus |= 1 << EcalDQMStatusHelper::LASER_MEAN_ERROR;
00550 chStatus |= 1 << EcalDQMStatusHelper::LASER_RMS_ERROR;
00551 chStatus |= 1 << EcalDQMStatusHelper::LASER_TIMING_MEAN_ERROR;
00552 chStatus |= 1 << EcalDQMStatusHelper::LASER_TIMING_RMS_ERROR;
00553 chStatus |= 1 << EcalDQMStatusHelper::LED_MEAN_ERROR;
00554 chStatus |= 1 << EcalDQMStatusHelper::LED_RMS_ERROR;
00555 chStatus |= 1 << EcalDQMStatusHelper::LED_TIMING_MEAN_ERROR;
00556 chStatus |= 1 << EcalDQMStatusHelper::LED_TIMING_RMS_ERROR;
00557
00558 } else if ( chStatus == 3 ) {
00559
00560 chStatus = 0;
00561 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_LOW_GAIN_MEAN_ERROR;
00562 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_MIDDLE_GAIN_MEAN_ERROR;
00563 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_HIGH_GAIN_MEAN_ERROR;
00564 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_LOW_GAIN_RMS_ERROR;
00565 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_MIDDLE_GAIN_RMS_ERROR;
00566 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_HIGH_GAIN_RMS_ERROR;
00567 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_ONLINE_HIGH_GAIN_MEAN_ERROR;
00568 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_ONLINE_HIGH_GAIN_RMS_ERROR;
00569 chStatus |= 1 << EcalDQMStatusHelper::PHYSICS_BAD_CHANNEL_WARNING;
00570
00571 } else if ( chStatus == 4 ) {
00572
00573 chStatus = 0;
00574 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_LOW_GAIN_MEAN_ERROR;
00575 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_MIDDLE_GAIN_MEAN_ERROR;
00576 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_HIGH_GAIN_MEAN_ERROR;
00577 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_LOW_GAIN_RMS_ERROR;
00578 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_MIDDLE_GAIN_RMS_ERROR;
00579 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_HIGH_GAIN_RMS_ERROR;
00580 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_ONLINE_HIGH_GAIN_MEAN_ERROR;
00581 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_ONLINE_HIGH_GAIN_RMS_ERROR;
00582
00583 } else if ( chStatus == 13 || chStatus == 14 ) {
00584
00585 chStatus = 0;
00586 chStatus |= 1 << EcalDQMStatusHelper::STATUS_FLAG_ERROR;
00587
00588 } else if ( (chStatus&0x3f) == 13 || (chStatus&0x7f) == 13 ||
00589 (chStatus&0x3f) == 14 || (chStatus&0x7f) == 14 ) {
00590
00591 chStatus = 0;
00592 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_LOW_GAIN_MEAN_ERROR;
00593 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_MIDDLE_GAIN_MEAN_ERROR;
00594 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_HIGH_GAIN_MEAN_ERROR;
00595 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_LOW_GAIN_RMS_ERROR;
00596 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_MIDDLE_GAIN_RMS_ERROR;
00597 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_HIGH_GAIN_RMS_ERROR;
00598 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_ONLINE_HIGH_GAIN_MEAN_ERROR;
00599 chStatus |= 1 << EcalDQMStatusHelper::PEDESTAL_ONLINE_HIGH_GAIN_RMS_ERROR;
00600 chStatus |= 1 << EcalDQMStatusHelper::TESTPULSE_LOW_GAIN_MEAN_ERROR;
00601 chStatus |= 1 << EcalDQMStatusHelper::TESTPULSE_MIDDLE_GAIN_MEAN_ERROR;
00602 chStatus |= 1 << EcalDQMStatusHelper::TESTPULSE_HIGH_GAIN_MEAN_ERROR;
00603 chStatus |= 1 << EcalDQMStatusHelper::TESTPULSE_LOW_GAIN_RMS_ERROR;
00604 chStatus |= 1 << EcalDQMStatusHelper::TESTPULSE_MIDDLE_GAIN_RMS_ERROR;
00605 chStatus |= 1 << EcalDQMStatusHelper::TESTPULSE_HIGH_GAIN_RMS_ERROR;
00606 chStatus |= 1 << EcalDQMStatusHelper::LASER_MEAN_ERROR;
00607 chStatus |= 1 << EcalDQMStatusHelper::LASER_RMS_ERROR;
00608 chStatus |= 1 << EcalDQMStatusHelper::LASER_TIMING_MEAN_ERROR;
00609 chStatus |= 1 << EcalDQMStatusHelper::LASER_TIMING_RMS_ERROR;
00610 chStatus |= 1 << EcalDQMStatusHelper::LED_MEAN_ERROR;
00611 chStatus |= 1 << EcalDQMStatusHelper::LED_RMS_ERROR;
00612 chStatus |= 1 << EcalDQMStatusHelper::LED_TIMING_MEAN_ERROR;
00613 chStatus |= 1 << EcalDQMStatusHelper::LED_TIMING_RMS_ERROR;
00614 chStatus |= 1 << EcalDQMStatusHelper::STATUS_FLAG_ERROR;
00615
00616 }
00617
00618 return( chStatus );
00619
00620 }
00621