00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <memory>
00012 #include <iostream>
00013 #include <fstream>
00014 #include <iomanip>
00015 #include <math.h>
00016
00017 #include "FWCore/ServiceRegistry/interface/Service.h"
00018
00019 #include "DQMServices/Core/interface/DQMStore.h"
00020
00021 #ifdef WITH_ECAL_COND_DB
00022 #include "OnlineDB/EcalCondDB/interface/MonPedestalsOnlineDat.h"
00023 #include "OnlineDB/EcalCondDB/interface/RunCrystalErrorsDat.h"
00024 #include "OnlineDB/EcalCondDB/interface/RunTTErrorsDat.h"
00025 #include "OnlineDB/EcalCondDB/interface/EcalCondDBInterface.h"
00026 #include "DQM/EcalCommon/interface/LogicID.h"
00027 #endif
00028
00029 #include "DQM/EcalCommon/interface/Masks.h"
00030
00031 #include "DQM/EcalCommon/interface/UtilsClient.h"
00032 #include "DQM/EcalCommon/interface/Numbers.h"
00033
00034 #include "DQM/EcalBarrelMonitorClient/interface/EBPedestalOnlineClient.h"
00035
00036 EBPedestalOnlineClient::EBPedestalOnlineClient(const edm::ParameterSet& ps) {
00037
00038
00039 cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
00040
00041
00042 verbose_ = ps.getUntrackedParameter<bool>("verbose", true);
00043
00044
00045 debug_ = ps.getUntrackedParameter<bool>("debug", false);
00046
00047
00048 prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00049
00050
00051 enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00052
00053
00054 superModules_.reserve(36);
00055 for ( unsigned int i = 1; i <= 36; i++ ) superModules_.push_back(i);
00056 superModules_ = ps.getUntrackedParameter<std::vector<int> >("superModules", superModules_);
00057
00058 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00059
00060 int ism = superModules_[i];
00061
00062 h03_[ism-1] = 0;
00063
00064 }
00065
00066 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00067
00068 int ism = superModules_[i];
00069
00070 meg03_[ism-1] = 0;
00071
00072 mep03_[ism-1] = 0;
00073
00074 mer03_[ism-1] = 0;
00075
00076 }
00077
00078 expectedMean_ = 200.0;
00079 discrepancyMean_ = 25.0;
00080 RMSThreshold_ = 3.0;
00081 RMSThresholdHighEta_ = 6.0;
00082
00083 }
00084
00085 EBPedestalOnlineClient::~EBPedestalOnlineClient() {
00086
00087 }
00088
00089 void EBPedestalOnlineClient::beginJob(void) {
00090
00091 dqmStore_ = edm::Service<DQMStore>().operator->();
00092
00093 if ( debug_ ) std::cout << "EBPedestalOnlineClient: beginJob" << std::endl;
00094
00095 ievt_ = 0;
00096 jevt_ = 0;
00097
00098 }
00099
00100 void EBPedestalOnlineClient::beginRun(void) {
00101
00102 if ( debug_ ) std::cout << "EBPedestalOnlineClient: beginRun" << std::endl;
00103
00104 jevt_ = 0;
00105
00106 this->setup();
00107
00108 }
00109
00110 void EBPedestalOnlineClient::endJob(void) {
00111
00112 if ( debug_ ) std::cout << "EBPedestalOnlineClient: endJob, ievt = " << ievt_ << std::endl;
00113
00114 this->cleanup();
00115
00116 }
00117
00118 void EBPedestalOnlineClient::endRun(void) {
00119
00120 if ( debug_ ) std::cout << "EBPedestalOnlineClient: endRun, jevt = " << jevt_ << std::endl;
00121
00122 this->cleanup();
00123
00124 }
00125
00126 void EBPedestalOnlineClient::setup(void) {
00127
00128 char histo[200];
00129
00130 dqmStore_->setCurrentFolder( prefixME_ + "/EBPedestalOnlineClient" );
00131
00132 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00133
00134 int ism = superModules_[i];
00135
00136 if ( meg03_[ism-1] ) dqmStore_->removeElement( meg03_[ism-1]->getName() );
00137 sprintf(histo, "EBPOT pedestal quality G12 %s", Numbers::sEB(ism).c_str());
00138 meg03_[ism-1] = dqmStore_->book2D(histo, histo, 85, 0., 85., 20, 0., 20.);
00139 meg03_[ism-1]->setAxisTitle("ieta", 1);
00140 meg03_[ism-1]->setAxisTitle("iphi", 2);
00141
00142 if ( mep03_[ism-1] ) dqmStore_->removeElement( mep03_[ism-1]->getName() );
00143 sprintf(histo, "EBPOT pedestal mean G12 %s", Numbers::sEB(ism).c_str());
00144 mep03_[ism-1] = dqmStore_->book1D(histo, histo, 100, 150., 250.);
00145 mep03_[ism-1]->setAxisTitle("mean", 1);
00146
00147 if ( mer03_[ism-1] ) dqmStore_->removeElement( mer03_[ism-1]->getName() );
00148 sprintf(histo, "EBPOT pedestal rms G12 %s", Numbers::sEB(ism).c_str());
00149 mer03_[ism-1] = dqmStore_->book1D(histo, histo, 100, 0., 10.);
00150 mer03_[ism-1]->setAxisTitle("rms", 1);
00151
00152 }
00153
00154 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00155
00156 int ism = superModules_[i];
00157
00158 if ( meg03_[ism-1] ) meg03_[ism-1]->Reset();
00159
00160 for ( int ie = 1; ie <= 85; ie++ ) {
00161 for ( int ip = 1; ip <= 20; ip++ ) {
00162
00163 meg03_[ism-1]->setBinContent( ie, ip, 2. );
00164
00165 }
00166 }
00167
00168 if ( mep03_[ism-1] ) mep03_[ism-1]->Reset();
00169 if ( mer03_[ism-1] ) mer03_[ism-1]->Reset();
00170
00171 }
00172
00173 }
00174
00175 void EBPedestalOnlineClient::cleanup(void) {
00176
00177 if ( ! enableCleanup_ ) return;
00178
00179 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00180
00181 int ism = superModules_[i];
00182
00183 if ( cloneME_ ) {
00184 if ( h03_[ism-1] ) delete h03_[ism-1];
00185 }
00186
00187 h03_[ism-1] = 0;
00188
00189 }
00190
00191 dqmStore_->setCurrentFolder( prefixME_ + "/EBPedestalOnlineClient" );
00192
00193 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00194
00195 int ism = superModules_[i];
00196
00197 if ( meg03_[ism-1] ) dqmStore_->removeElement( meg03_[ism-1]->getName() );
00198 meg03_[ism-1] = 0;
00199
00200 if ( mep03_[ism-1] ) dqmStore_->removeElement( mep03_[ism-1]->getName() );
00201 mep03_[ism-1] = 0;
00202
00203 if ( mer03_[ism-1] ) dqmStore_->removeElement( mer03_[ism-1]->getName() );
00204 mer03_[ism-1] = 0;
00205
00206 }
00207
00208 }
00209
00210 #ifdef WITH_ECAL_COND_DB
00211 bool EBPedestalOnlineClient::writeDb(EcalCondDBInterface* econn, RunIOV* runiov, MonRunIOV* moniov, bool& status) {
00212
00213 status = true;
00214
00215 EcalLogicID ecid;
00216
00217 MonPedestalsOnlineDat p;
00218 std::map<EcalLogicID, MonPedestalsOnlineDat> dataset;
00219
00220 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00221
00222 int ism = superModules_[i];
00223
00224 if ( verbose_ ) {
00225 std::cout << " " << Numbers::sEB(ism) << " (ism=" << ism << ")" << std::endl;
00226 std::cout << std::endl;
00227 UtilsClient::printBadChannels(meg03_[ism-1], h03_[ism-1]);
00228 }
00229
00230 float num03;
00231 float mean03;
00232 float rms03;
00233
00234 for ( int ie = 1; ie <= 85; ie++ ) {
00235 for ( int ip = 1; ip <= 20; ip++ ) {
00236
00237 bool update03;
00238
00239 update03 = UtilsClient::getBinStatistics(h03_[ism-1], ie, ip, num03, mean03, rms03);
00240
00241 if ( update03 ) {
00242
00243 if ( Numbers::icEB(ism, ie, ip) == 1 ) {
00244
00245 if ( verbose_ ) {
00246 std::cout << "Preparing dataset for " << Numbers::sEB(ism) << " (ism=" << ism << ")" << std::endl;
00247 std::cout << "G12 (" << ie << "," << ip << ") " << num03 << " " << mean03 << " " << rms03 << std::endl;
00248 std::cout << std::endl;
00249 }
00250
00251 }
00252
00253 p.setADCMeanG12(mean03);
00254 p.setADCRMSG12(rms03);
00255
00256 if ( UtilsClient::getBinStatus(meg03_[ism-1], ie, ip) ) {
00257 p.setTaskStatus(true);
00258 } else {
00259 p.setTaskStatus(false);
00260 }
00261
00262 status = status && UtilsClient::getBinQuality(meg03_[ism-1], ie, ip);
00263
00264 int ic = Numbers::indexEB(ism, ie, ip);
00265
00266 if ( econn ) {
00267 ecid = LogicID::getEcalLogicID("EB_crystal_number", Numbers::iSM(ism, EcalBarrel), ic);
00268 dataset[ecid] = p;
00269 }
00270
00271 }
00272
00273 }
00274 }
00275
00276 }
00277
00278 if ( econn ) {
00279 try {
00280 if ( verbose_ ) std::cout << "Inserting MonPedestalsOnlineDat ..." << std::endl;
00281 if ( dataset.size() != 0 ) econn->insertDataArraySet(&dataset, moniov);
00282 if ( verbose_ ) std::cout << "done." << std::endl;
00283 } catch (std::runtime_error &e) {
00284 std::cerr << e.what() << std::endl;
00285 }
00286 }
00287
00288 return true;
00289
00290 }
00291 #endif
00292
00293 void EBPedestalOnlineClient::analyze(void) {
00294
00295 ievt_++;
00296 jevt_++;
00297 if ( ievt_ % 10 == 0 ) {
00298 if ( debug_ ) std::cout << "EBPedestalOnlineClient: ievt/jevt = " << ievt_ << "/" << jevt_ << std::endl;
00299 }
00300
00301 uint32_t bits03 = 0;
00302 bits03 |= 1 << EcalDQMStatusHelper::PEDESTAL_ONLINE_HIGH_GAIN_MEAN_ERROR;
00303 bits03 |= 1 << EcalDQMStatusHelper::PEDESTAL_ONLINE_HIGH_GAIN_RMS_ERROR;
00304
00305 char histo[200];
00306
00307 MonitorElement* me;
00308
00309 for ( unsigned int i=0; i<superModules_.size(); i++ ) {
00310
00311 int ism = superModules_[i];
00312
00313 sprintf(histo, (prefixME_ + "/EBPedestalOnlineTask/Gain12/EBPOT pedestal %s G12").c_str(), Numbers::sEB(ism).c_str());
00314 me = dqmStore_->get(histo);
00315 h03_[ism-1] = UtilsClient::getHisto<TProfile2D*>( me, cloneME_, h03_[ism-1] );
00316 if ( meg03_[ism-1] ) meg03_[ism-1]->Reset();
00317 if ( mep03_[ism-1] ) mep03_[ism-1]->Reset();
00318 if ( mer03_[ism-1] ) mer03_[ism-1]->Reset();
00319
00320 for ( int ie = 1; ie <= 85; ie++ ) {
00321 for ( int ip = 1; ip <= 20; ip++ ) {
00322
00323 if ( meg03_[ism-1] ) meg03_[ism-1]->setBinContent(ie, ip, 2.);
00324
00325 bool update03;
00326
00327 float num03;
00328 float mean03;
00329 float rms03;
00330
00331 update03 = UtilsClient::getBinStatistics(h03_[ism-1], ie, ip, num03, mean03, rms03);
00332
00333 if ( update03 ) {
00334
00335 float val;
00336
00337 val = 1.;
00338 if ( std::abs(mean03 - expectedMean_) > discrepancyMean_ )
00339 val = 0.;
00340 if ( (ie<=40 && rms03 > RMSThreshold_) || (ie>40 && rms03 > RMSThresholdHighEta_) )
00341 val = 0.;
00342 if ( meg03_[ism-1] ) meg03_[ism-1]->setBinContent(ie, ip, val);
00343
00344 if ( mep03_[ism-1] ) mep03_[ism-1]->Fill(mean03);
00345 if ( mer03_[ism-1] ) mer03_[ism-1]->Fill(rms03);
00346
00347 }
00348
00349 if ( Masks::maskChannel(ism, ie, ip, bits03, EcalBarrel) ) UtilsClient::maskBinContent( meg03_[ism-1], ie, ip );
00350
00351 }
00352 }
00353
00354 }
00355
00356 }
00357