CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DQM/EcalBarrelMonitorClient/src/EBPedestalOnlineClient.cc

Go to the documentation of this file.
00001 /*
00002  * \file EBPedestalOnlineClient.cc
00003  *
00004  * $Date: 2011/05/23 12:10:04 $
00005  * $Revision: 1.161.4.1 $
00006  * \author G. Della Ricca
00007  * \author F. Cossutti
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   // cloneME switch
00039   cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
00040 
00041   // verbose switch
00042   verbose_ = ps.getUntrackedParameter<bool>("verbose", true);
00043 
00044   // debug switch
00045   debug_ = ps.getUntrackedParameter<bool>("debug", false);
00046 
00047   // prefixME path
00048   prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00049 
00050   // enableCleanup_ switch
00051   enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00052 
00053   // vector of selected Super Modules (Defaults to all 36).
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