CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_0/src/DQM/EcalBarrelMonitorClient/src/EcalBarrelMonitorClient.cc

Go to the documentation of this file.
00001 /*
00002  * \file EcalBarrelMonitorClient.cc
00003  *
00004  * $Date: 2012/03/16 14:46:37 $
00005  * $Revision: 1.504.2.4 $
00006  * \author G. Della Ricca
00007  * \author F. Cossutti
00008  *
00009 */
00010 
00011 #include <memory>
00012 #include <iostream>
00013 #include <iomanip>
00014 #include <fstream>
00015 #include <algorithm>
00016 #include <unistd.h>
00017 
00018 #include "FWCore/Framework/interface/Run.h"
00019 #include "FWCore/Framework/interface/LuminosityBlock.h"
00020 #include "FWCore/Framework/interface/Event.h"
00021 #include "FWCore/Framework/interface/MakerMacros.h"
00022 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00023 #include "FWCore/ParameterSet/interface/FileInPath.h"
00024 
00025 #include "FWCore/ServiceRegistry/interface/Service.h"
00026 
00027 #include "DQMServices/Core/interface/MonitorElement.h"
00028 
00029 #include "DQMServices/Core/interface/DQMStore.h"
00030 
00031 #include "DataFormats/EcalRawData/interface/EcalDCCHeaderBlock.h"
00032 
00033 #ifdef WITH_ECAL_COND_DB
00034 #include "OnlineDB/EcalCondDB/interface/EcalCondDBInterface.h"
00035 #include "OnlineDB/EcalCondDB/interface/RunTag.h"
00036 #include "OnlineDB/EcalCondDB/interface/RunDat.h"
00037 #include "OnlineDB/EcalCondDB/interface/MonRunDat.h"
00038 #include "DQM/EcalCommon/interface/LogicID.h"
00039 #endif
00040 
00041 #include "DQM/EcalCommon/interface/Masks.h"
00042 
00043 #include "DQM/EcalCommon/interface/UtilsClient.h"
00044 #include "DQM/EcalCommon/interface/Numbers.h"
00045 
00046 #include "DQM/EcalBarrelMonitorClient/interface/EcalBarrelMonitorClient.h"
00047 
00048 #include "DQM/EcalBarrelMonitorClient/interface/EBIntegrityClient.h"
00049 #include "DQM/EcalBarrelMonitorClient/interface/EBStatusFlagsClient.h"
00050 #include "DQM/EcalBarrelMonitorClient/interface/EBOccupancyClient.h"
00051 #include "DQM/EcalBarrelMonitorClient/interface/EBCosmicClient.h"
00052 #include "DQM/EcalBarrelMonitorClient/interface/EBLaserClient.h"
00053 #include "DQM/EcalBarrelMonitorClient/interface/EBPedestalClient.h"
00054 #include "DQM/EcalBarrelMonitorClient/interface/EBPedestalOnlineClient.h"
00055 #include "DQM/EcalBarrelMonitorClient/interface/EBTestPulseClient.h"
00056 #include "DQM/EcalBarrelMonitorClient/interface/EBBeamCaloClient.h"
00057 #include "DQM/EcalBarrelMonitorClient/interface/EBBeamHodoClient.h"
00058 #include "DQM/EcalBarrelMonitorClient/interface/EBTriggerTowerClient.h"
00059 #include "DQM/EcalBarrelMonitorClient/interface/EBClusterClient.h"
00060 #include "DQM/EcalBarrelMonitorClient/interface/EBTimingClient.h"
00061 
00062 EcalBarrelMonitorClient::EcalBarrelMonitorClient(const edm::ParameterSet& ps) {
00063 
00064   // verbose switch
00065 
00066   verbose_ = ps.getUntrackedParameter<bool>("verbose", true);
00067 
00068   if ( verbose_ ) {
00069     std::cout << std::endl;
00070     std::cout << " *** Ecal Barrel Generic Monitor Client ***" << std::endl;
00071     std::cout << std::endl;
00072   }
00073 
00074   // DQM ROOT input file
00075 
00076   inputFile_ = ps.getUntrackedParameter<std::string>("inputFile", "");
00077 
00078   if ( verbose_ ) {
00079     if ( inputFile_.size() != 0 ) {
00080       std::cout << " Reading DQM data from inputFile '" << inputFile_ << "'" << std::endl;
00081     }
00082   }
00083 
00084   // Ecal Cond DB
00085 
00086   dbName_ = ps.getUntrackedParameter<std::string>("dbName", "");
00087   dbHostName_ = ps.getUntrackedParameter<std::string>("dbHostName", "");
00088   dbHostPort_ = ps.getUntrackedParameter<int>("dbHostPort", 1521);
00089   dbUserName_ = ps.getUntrackedParameter<std::string>("dbUserName", "");
00090   dbPassword_ = ps.getUntrackedParameter<std::string>("dbPassword", "");
00091 
00092   dbTagName_ = ps.getUntrackedParameter<std::string>("dbTagName", "CMSSW");
00093 
00094   if ( verbose_ ) {
00095     if ( dbName_.size() != 0 ) {
00096       std::cout << " Ecal Cond DB: " << std::endl;
00097       std::cout << "   dbName = '" << dbName_ << "'" << std::endl;
00098       std::cout << "   dbUserName = '" << dbUserName_ << "'" << std::endl;
00099       if ( dbHostName_.size() != 0 ) {
00100         std::cout << "   dbHostName = '" << dbHostName_ << "'" << std::endl;
00101         std::cout << "   dbHostPort = '" << dbHostPort_ << "'" << std::endl;
00102       }
00103       std::cout << "   dbTagName = '" << dbTagName_ << "'" << std::endl;
00104 #ifndef WITH_ECAL_COND_DB
00105       std::cout << std::endl;
00106       std::cout << "WARNING: DB access is NOT available" << std::endl;
00107       std::cout << std::endl;
00108 #endif
00109     } else {
00110       std::cout << " Ecal Cond DB is OFF" << std::endl;
00111     }
00112   }
00113 
00114   // mergeRuns switch
00115 
00116   mergeRuns_ = ps.getUntrackedParameter<bool>("mergeRuns", false);
00117 
00118   if ( verbose_ ) {
00119     if ( mergeRuns_ ) {
00120       std::cout << " mergeRuns switch is ON" << std::endl;
00121     } else {
00122       std::cout << " mergeRuns switch is OFF" << std::endl;
00123     }
00124   }
00125 
00126   // resetFile
00127 
00128   resetFile_ = ps.getUntrackedParameter<std::string>("resetFile", "");
00129 
00130   if ( verbose_ ) {
00131     if ( resetFile_.size() != 0 ) {
00132       std::cout << " resetFile is '" << resetFile_ << "'" << std::endl;
00133     }
00134   }
00135 
00136   // updateTime
00137 
00138   updateTime_ = ps.getUntrackedParameter<int>("updateTime", 0);
00139 
00140   if ( verbose_ ) {
00141     std::cout << " updateTime is " << updateTime_ << " minute(s)" << std::endl;
00142   }
00143 
00144   // dbUpdateTime
00145 
00146   dbUpdateTime_  = ps.getUntrackedParameter<int>("dbUpdateTime", 0);
00147 
00148   if ( verbose_ ) {
00149     std::cout << " dbUpdateTime is " << dbUpdateTime_ << " minute(s)" << std::endl;
00150   }
00151 
00152   // location
00153 
00154   location_ =  ps.getUntrackedParameter<std::string>("location", "H4");
00155 
00156   if ( verbose_ ) {
00157     std::cout << " location is '" << location_ << "'" << std::endl;
00158   }
00159 
00160   // cloneME switch
00161 
00162   cloneME_ = ps.getUntrackedParameter<bool>("cloneME", true);
00163 
00164   if ( verbose_ ) {
00165     if ( cloneME_ ) {
00166       std::cout << " cloneME switch is ON" << std::endl;
00167     } else {
00168       std::cout << " cloneME switch is OFF" << std::endl;
00169     }
00170   }
00171 
00172   // debug switch
00173 
00174   debug_ = ps.getUntrackedParameter<bool>("debug", false);
00175 
00176   if ( verbose_ ) {
00177     if ( debug_ ) {
00178       std::cout << " debug switch is ON" << std::endl;
00179     } else {
00180       std::cout << " debug switch is OFF" << std::endl;
00181     }
00182   }
00183 
00184   // prescaleFactor
00185 
00186   prescaleFactor_ = ps.getUntrackedParameter<int>("prescaleFactor", 1);
00187 
00188   if ( verbose_ ) {
00189     std::cout << " prescaleFactor is " << prescaleFactor_ << std::endl;
00190   }
00191 
00192   // prefixME path
00193 
00194   prefixME_ = ps.getUntrackedParameter<std::string>("prefixME", "");
00195 
00196   if ( verbose_ ) {
00197     std::cout << " prefixME path is '" << prefixME_ << "'" << std::endl;
00198   }
00199 
00200   produceReports_ = ps.getUntrackedParameter<bool>("produceReports", true);
00201 
00202   // enableCleanup switch
00203 
00204   enableCleanup_ = ps.getUntrackedParameter<bool>("enableCleanup", false);
00205 
00206   if ( verbose_ ) {
00207     if ( enableCleanup_ ) {
00208       std::cout << " enableCleanup switch is ON" << std::endl;
00209     } else {
00210       std::cout << " enableCleanup switch is OFF" << std::endl;
00211     }
00212   }
00213 
00214   // vector of selected Super Modules (Defaults to all 36).
00215 
00216   superModules_.reserve(36);
00217   for ( unsigned int i = 1; i <= 36; i++ ) superModules_.push_back(i);
00218 
00219   superModules_ = ps.getUntrackedParameter<std::vector<int> >("superModules", superModules_);
00220 
00221   if ( verbose_ ) {
00222     std::cout << " Selected SMs:" << std::endl;
00223     for ( unsigned int i = 0; i < superModules_.size(); i++ ) {
00224       std::cout << " " << std::setw(2) << std::setfill('0') << superModules_[i];
00225     }
00226     std::cout << std::endl;
00227   }
00228 
00229   // vector of enabled Clients (defaults)
00230 
00231   enabledClients_.push_back("Integrity");
00232   enabledClients_.push_back("StatusFlags");
00233   enabledClients_.push_back("PedestalOnline");
00234   enabledClients_.push_back("Summary");
00235 
00236   enabledClients_ = ps.getUntrackedParameter<std::vector<std::string> >("enabledClients", enabledClients_);
00237 
00238   if ( verbose_ ) {
00239     std::cout << " Enabled Clients:" << std::endl;
00240     for ( unsigned int i = 0; i < enabledClients_.size(); i++ ) {
00241       std::cout << " " << enabledClients_[i];
00242     }
00243     std::cout << std::endl;
00244   }
00245 
00246   // set runTypes (use resize() on purpose!)
00247 
00248   runTypes_.resize(30);
00249   for ( unsigned int i = 0; i < runTypes_.size(); i++ ) runTypes_[i] =  "UNKNOWN";
00250 
00251   runTypes_[EcalDCCHeaderBlock::COSMIC]               = "COSMIC";
00252   runTypes_[EcalDCCHeaderBlock::BEAMH4]               = "BEAM";
00253   runTypes_[EcalDCCHeaderBlock::BEAMH2]               = "BEAM";
00254   runTypes_[EcalDCCHeaderBlock::MTCC]                 = "MTCC";
00255   runTypes_[EcalDCCHeaderBlock::LASER_STD]            = "LASER";
00256   runTypes_[EcalDCCHeaderBlock::LED_STD]              = "LED";
00257   runTypes_[EcalDCCHeaderBlock::TESTPULSE_MGPA]       = "TEST_PULSE";
00258   runTypes_[EcalDCCHeaderBlock::PEDESTAL_STD]         = "PEDESTAL";
00259   runTypes_[EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN] = "PEDESTAL-OFFSET";
00260 
00261   runTypes_[EcalDCCHeaderBlock::COSMICS_GLOBAL]       = "COSMIC";
00262   runTypes_[EcalDCCHeaderBlock::PHYSICS_GLOBAL]       = "PHYSICS";
00263   runTypes_[EcalDCCHeaderBlock::HALO_GLOBAL]          = "HALO";
00264   runTypes_[EcalDCCHeaderBlock::COSMICS_LOCAL]        = "COSMIC";
00265   runTypes_[EcalDCCHeaderBlock::PHYSICS_LOCAL]        = "PHYSICS";
00266   runTypes_[EcalDCCHeaderBlock::HALO_LOCAL]           = "HALO";
00267 
00268   runTypes_[EcalDCCHeaderBlock::LASER_GAP]            = "LASER";
00269   runTypes_[EcalDCCHeaderBlock::LED_GAP]              = "LED";
00270   runTypes_[EcalDCCHeaderBlock::TESTPULSE_GAP]        = "TEST_PULSE";
00271   runTypes_[EcalDCCHeaderBlock::PEDESTAL_GAP]         = "PEDESTAL";
00272 
00273   runTypes_[EcalDCCHeaderBlock::CALIB_LOCAL]          = "CALIB";
00274 
00275   // clients' constructors
00276 
00277   clients_.reserve(12);
00278   clientsNames_.reserve(12);
00279 
00280   if ( find(enabledClients_.begin(), enabledClients_.end(), "Integrity" ) != enabledClients_.end() ) {
00281 
00282     clients_.push_back( new EBIntegrityClient(ps) );
00283     clientsNames_.push_back( "Integrity" );
00284 
00285     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMIC ));
00286     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_STD ));
00287     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_STD ));
00288     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN ));
00289     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_MGPA ));
00290     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH4 ));
00291     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH2 ));
00292     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::MTCC ));
00293 
00294     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_GLOBAL ));
00295     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_GLOBAL ));
00296     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_LOCAL ));
00297     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_LOCAL ));
00298     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_GAP ));
00299     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_GAP ));
00300     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_GAP ));
00301 
00302   }
00303 
00304   if ( find(enabledClients_.begin(), enabledClients_.end(), "StatusFlags" ) != enabledClients_.end() ) {
00305 
00306     clients_.push_back( new EBStatusFlagsClient(ps) );
00307     clientsNames_.push_back( "StatusFlags" );
00308 
00309     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMIC ));
00310     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_STD ));
00311     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_STD ));
00312     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN ));
00313     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_MGPA ));
00314     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH4 ));
00315     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH2 ));
00316     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::MTCC ));
00317 
00318     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_GLOBAL ));
00319     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_GLOBAL ));
00320     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_LOCAL ));
00321     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_LOCAL ));
00322     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_GAP ));
00323     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_GAP ));
00324     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_GAP ));
00325 
00326   }
00327 
00328   if ( find(enabledClients_.begin(), enabledClients_.end(), "Occupancy" ) != enabledClients_.end() ) {
00329 
00330     clients_.push_back( new EBOccupancyClient(ps) );
00331     clientsNames_.push_back( "Occupancy" );
00332 
00333     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMIC ));
00334     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_STD ));
00335     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_STD ));
00336     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_OFFSET_SCAN ));
00337     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_MGPA ));
00338     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH4 ));
00339     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH2 ));
00340     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::MTCC ));
00341 
00342     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_GLOBAL ));
00343     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_GLOBAL ));
00344     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_LOCAL ));
00345     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_LOCAL ));
00346     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_GAP ));
00347     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_GAP ));
00348     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_GAP ));
00349 
00350   }
00351 
00352   if ( find(enabledClients_.begin(), enabledClients_.end(), "Cosmic" ) != enabledClients_.end() ) {
00353 
00354     clients_.push_back( new EBCosmicClient(ps) );
00355     clientsNames_.push_back( "Cosmic" );
00356 
00357     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMIC ));
00358     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_STD ));
00359     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_STD ));
00360     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_MGPA ));
00361     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::MTCC ));
00362 
00363     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_GLOBAL ));
00364     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_GLOBAL ));
00365     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_LOCAL ));
00366     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_LOCAL ));
00367     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_GAP ));
00368     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_GAP ));
00369     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_GAP ));
00370 
00371   }
00372 
00373   if ( find(enabledClients_.begin(), enabledClients_.end(), "Laser" ) != enabledClients_.end() ) {
00374 
00375     clients_.push_back( new EBLaserClient(ps) );
00376     clientsNames_.push_back( "Laser" );
00377 
00378     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMIC ));
00379     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_STD ));
00380     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_STD ));
00381     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_MGPA ));
00382     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH4 ));
00383     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH2 ));
00384     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::MTCC ));
00385 
00386     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_GLOBAL ));
00387     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_GLOBAL ));
00388     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_LOCAL ));
00389     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_LOCAL ));
00390     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_GAP ));
00391     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_GAP ));
00392     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_GAP ));
00393 
00394   }
00395 
00396   if ( find(enabledClients_.begin(), enabledClients_.end(), "Pedestal" ) != enabledClients_.end() ) {
00397 
00398     clients_.push_back( new EBPedestalClient(ps) );
00399     clientsNames_.push_back( "Pedestal" );
00400 
00401     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMIC ));
00402     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_STD ));
00403     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_STD ));
00404     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_MGPA ));
00405     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH4 ));
00406     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH2 ));
00407     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::MTCC ));
00408 
00409     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_GLOBAL ));
00410     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_GLOBAL ));
00411     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_LOCAL ));
00412     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_LOCAL ));
00413     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_GAP ));
00414     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_GAP ));
00415     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_GAP ));
00416 
00417   }
00418 
00419   if ( find(enabledClients_.begin(), enabledClients_.end(), "PedestalOnline" ) != enabledClients_.end() ) {
00420 
00421     clients_.push_back( new EBPedestalOnlineClient(ps) );
00422     clientsNames_.push_back( "PedestalOnline" );
00423 
00424     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMIC ));
00425     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_STD ));
00426     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_STD ));
00427     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_MGPA ));
00428     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH4 ));
00429     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH2 ));
00430     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::MTCC ));
00431 
00432     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_GLOBAL ));
00433     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_GLOBAL ));
00434     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_LOCAL ));
00435     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_LOCAL ));
00436     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_GAP ));
00437     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_GAP ));
00438     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_GAP ));
00439 
00440   }
00441 
00442   if ( find(enabledClients_.begin(), enabledClients_.end(), "TestPulse" ) != enabledClients_.end() ) {
00443 
00444     clients_.push_back( new EBTestPulseClient(ps) );
00445     clientsNames_.push_back( "TestPulse" );
00446 
00447     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMIC ));
00448     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_STD ));
00449     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_STD ));
00450     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_MGPA ));
00451     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH4 ));
00452     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH2 ));
00453     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::MTCC ));
00454 
00455     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_GLOBAL ));
00456     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_GLOBAL ));
00457     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_LOCAL ));
00458     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_LOCAL ));
00459     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_GAP ));
00460     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_GAP ));
00461     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_GAP ));
00462 
00463   }
00464 
00465   if ( find(enabledClients_.begin(), enabledClients_.end(), "BeamCalo" ) != enabledClients_.end() ) {
00466 
00467     clients_.push_back( new EBBeamCaloClient(ps) );
00468     clientsNames_.push_back( "BeamCalo" );
00469 
00470     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH4 ));
00471     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH2 ));
00472 
00473   }
00474 
00475   if ( find(enabledClients_.begin(), enabledClients_.end(), "BeamHodo" ) != enabledClients_.end() ) {
00476 
00477     clients_.push_back( new EBBeamHodoClient(ps) );
00478     clientsNames_.push_back( "BeamHodo" );
00479 
00480     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH4 ));
00481     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH2 ));
00482 
00483   }
00484 
00485   if ( find(enabledClients_.begin(), enabledClients_.end(), "TriggerTower" ) != enabledClients_.end() ) {
00486 
00487     clients_.push_back( new EBTriggerTowerClient(ps) );
00488     clientsNames_.push_back( "TriggerTower" );
00489 
00490     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMIC ));
00491     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_STD ));
00492     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_STD ));
00493     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_MGPA ));
00494     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH4 ));
00495     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH2 ));
00496     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::MTCC ));
00497 
00498     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_GLOBAL ));
00499     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_GLOBAL ));
00500     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_LOCAL ));
00501     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_LOCAL ));
00502     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_GAP ));
00503     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_GAP ));
00504     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_GAP ));
00505 
00506   }
00507 
00508   if ( find(enabledClients_.begin(), enabledClients_.end(), "Cluster" ) != enabledClients_.end() ) {
00509 
00510     clients_.push_back( new EBClusterClient(ps) );
00511     clientsNames_.push_back( "Cluster" );
00512 
00513     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMIC ));
00514     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_STD ));
00515     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_STD ));
00516     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_MGPA ));
00517     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH4 ));
00518     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH2 ));
00519     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::MTCC ));
00520 
00521     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_GLOBAL ));
00522     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_GLOBAL ));
00523     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_LOCAL ));
00524     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_LOCAL ));
00525     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_GAP ));
00526     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_GAP ));
00527     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_GAP ));
00528 
00529   }
00530 
00531   if ( find(enabledClients_.begin(), enabledClients_.end(), "Timing" ) != enabledClients_.end() ) {
00532 
00533     clients_.push_back( new EBTimingClient(ps) );
00534     clientsNames_.push_back( "Timing" );
00535 
00536     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMIC ));
00537     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_STD ));
00538     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_STD ));
00539     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_MGPA ));
00540     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH4 ));
00541     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::BEAMH2 ));
00542     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::MTCC ));
00543 
00544     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_GLOBAL ));
00545     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_GLOBAL ));
00546     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::COSMICS_LOCAL ));
00547     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PHYSICS_LOCAL ));
00548     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::LASER_GAP ));
00549     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::TESTPULSE_GAP ));
00550     clientsRuns_.insert(std::pair<EBClient*,int>( clients_.back(), EcalDCCHeaderBlock::PEDESTAL_GAP ));
00551 
00552   }
00553 
00554   // define status bits
00555 
00556   clientsStatus_.insert(std::pair<std::string,int>( "Integrity",       0 ));
00557   clientsStatus_.insert(std::pair<std::string,int>( "Cosmic",          1 ));
00558   clientsStatus_.insert(std::pair<std::string,int>( "Laser",           2 ));
00559   clientsStatus_.insert(std::pair<std::string,int>( "Pedestal",        3 ));
00560   clientsStatus_.insert(std::pair<std::string,int>( "PedestalOnline",  4 ));
00561   clientsStatus_.insert(std::pair<std::string,int>( "TestPulse",       5 ));
00562   clientsStatus_.insert(std::pair<std::string,int>( "BeamCalo",        6 ));
00563   clientsStatus_.insert(std::pair<std::string,int>( "BeamHodo",        7 ));
00564   clientsStatus_.insert(std::pair<std::string,int>( "TriggerTower",    8 ));
00565   clientsStatus_.insert(std::pair<std::string,int>( "Cluster",         9 ));
00566   clientsStatus_.insert(std::pair<std::string,int>( "Timing",         10 ));
00567   clientsStatus_.insert(std::pair<std::string,int>( "Led",            11 ));
00568   clientsStatus_.insert(std::pair<std::string,int>( "StatusFlags",    12 ));
00569   clientsStatus_.insert(std::pair<std::string,int>( "Occupancy",      13 ));
00570 
00571   if ( find(enabledClients_.begin(), enabledClients_.end(), "Summary" ) != enabledClients_.end() ) {
00572 
00573     summaryClient_ = new EBSummaryClient(ps);
00574 
00575   }
00576 
00577   if ( summaryClient_ ) summaryClient_->setFriends(clients_);
00578 
00579   if ( verbose_ ) std::cout << std::endl;
00580 
00581 }
00582 
00583 EcalBarrelMonitorClient::~EcalBarrelMonitorClient() {
00584 
00585   if ( verbose_ ) std::cout << "Exit ..." << std::endl;
00586 
00587   for ( unsigned int i=0; i<clients_.size(); i++ ) {
00588     delete clients_[i];
00589   }
00590 
00591   if ( summaryClient_ ) delete summaryClient_;
00592 
00593 }
00594 
00595 void EcalBarrelMonitorClient::beginJob(void) {
00596 
00597   begin_run_ = false;
00598   end_run_   = false;
00599 
00600   forced_status_ = false;
00601   forced_update_ = false;
00602 
00603   h_ = 0;
00604 
00605   status_  = "unknown";
00606 
00607   run_     = -1;
00608   evt_     = -1;
00609 
00610   runType_ = -1;
00611   evtType_ = -1;
00612 
00613   last_run_ = -1;
00614 
00615   subrun_  = -1;
00616 
00617   if ( debug_ ) std::cout << "EcalBarrelMonitorClient: beginJob" << std::endl;
00618 
00619   ievt_ = 0;
00620   jevt_ = 0;
00621 
00622   current_time_ = time(NULL);
00623   last_time_update_ = current_time_;
00624   last_time_reset_ = current_time_;
00625 
00626   // get hold of back-end interface
00627 
00628   dqmStore_ = edm::Service<DQMStore>().operator->();
00629 
00630   if ( inputFile_.size() != 0 ) {
00631     if ( dqmStore_ ) {
00632       dqmStore_->open(inputFile_);
00633     }
00634   }
00635 
00636   for ( unsigned int i=0; i<clients_.size(); i++ ) {
00637     clients_[i]->beginJob();
00638   }
00639 
00640   if ( summaryClient_ ) summaryClient_->beginJob();
00641 
00642 }
00643 
00644 void EcalBarrelMonitorClient::beginRun(void) {
00645 
00646   begin_run_ = true;
00647   end_run_   = false;
00648 
00649   last_run_  = run_;
00650 
00651   if ( debug_ ) std::cout << "EcalBarrelMonitorClient: beginRun" << std::endl;
00652 
00653   jevt_ = 0;
00654 
00655   current_time_ = time(NULL);
00656   last_time_update_ = current_time_;
00657   last_time_reset_ = current_time_;
00658 
00659   this->setup();
00660 
00661   this->beginRunDb();
00662 
00663   for ( int i=0; i<int(clients_.size()); i++ ) {
00664     clients_[i]->cleanup();
00665     bool done = false;
00666     for ( std::multimap<EBClient*,int>::iterator j = clientsRuns_.lower_bound(clients_[i]); j != clientsRuns_.upper_bound(clients_[i]); j++ ) {
00667       if ( runType_ != -1 && runType_ == (*j).second && !done ) {
00668         done = true;
00669         clients_[i]->beginRun();
00670       }
00671     }
00672   }
00673 
00674   if ( summaryClient_ ) summaryClient_->beginRun();
00675 
00676 }
00677 
00678 void EcalBarrelMonitorClient::beginRun(const edm::Run& r, const edm::EventSetup& c) {
00679 
00680   Numbers::initGeometry(c, verbose_);
00681 
00682   if ( verbose_ ) std::cout << std::endl;
00683 
00684   Masks::initMasking(c, verbose_);
00685 
00686   if ( verbose_ ) {
00687     std::cout << std::endl;
00688     std::cout << "Standard beginRun() for run " << r.id().run() << std::endl;
00689     std::cout << std::endl;
00690   }
00691 
00692   run_ = r.id().run();
00693   evt_ = 0;
00694 
00695   jevt_ = 0;
00696 
00697   // summary for DQM GUI
00698 
00699   if(produceReports_){
00700 
00701     MonitorElement* me;
00702 
00703     dqmStore_->setCurrentFolder( prefixME_ + "/EventInfo" );
00704 
00705     me = dqmStore_->get(prefixME_ + "/EventInfo/reportSummary");
00706     if ( me ) {
00707       dqmStore_->removeElement(me->getName());
00708     }
00709     me = dqmStore_->bookFloat("reportSummary");
00710     me->Fill(-1.0);
00711 
00712     dqmStore_->setCurrentFolder( prefixME_ + "/EventInfo/reportSummaryContents" );
00713 
00714     std::string name;
00715     for (int i = 0; i < 36; i++) {
00716       name = "EcalBarrel_" + Numbers::sEB(i+1);
00717       me = dqmStore_->get(prefixME_ + "/EventInfo/reportSummaryContents/" + name);
00718       if ( me ) {
00719         dqmStore_->removeElement(me->getName());
00720       }
00721       me = dqmStore_->bookFloat(name);
00722       me->Fill(-1.0);
00723     }
00724 
00725     dqmStore_->setCurrentFolder( prefixME_ + "/EventInfo" );
00726 
00727     me = dqmStore_->get(prefixME_ + "/EventInfo/reportSummaryMap");
00728     if ( me ) {
00729       dqmStore_->removeElement(me->getName());
00730     }
00731 
00732     me = dqmStore_->book2D("reportSummaryMap","EcalBarrel Report Summary Map", 72, 0., 72., 34, 0., 34);
00733     for ( int iettx = 0; iettx < 34; iettx++ ) {
00734       for ( int ipttx = 0; ipttx < 72; ipttx++ ) {
00735         me->setBinContent( ipttx+1, iettx+1, -1.0 );
00736       }
00737     }
00738     me->setAxisTitle("jphi", 1);
00739     me->setAxisTitle("jeta", 2);
00740 
00741   }
00742 }
00743 
00744 void EcalBarrelMonitorClient::endJob(void) {
00745 
00746   if ( ! end_run_ ) {
00747 
00748     if ( verbose_ ) {
00749       std::cout << std::endl;
00750       std::cout << "Checking last event at endJob() ... " << std::endl;
00751       std::cout << std::endl;
00752     }
00753 
00754     forced_update_ = true;
00755     this->analyze();
00756 
00757     if ( begin_run_ && ! end_run_ ) {
00758 
00759       if ( verbose_ ) {
00760         std::cout << std::endl;
00761         std::cout << "Forcing endRun() ... " << std::endl;
00762         std::cout << std::endl;
00763       }
00764 
00765       forced_status_ = true;
00766       this->analyze();
00767       this->endRun();
00768 
00769     }
00770 
00771   }
00772 
00773   if ( debug_ ) std::cout << "EcalBarrelMonitorClient: endJob, ievt = " << ievt_ << std::endl;
00774 
00775   this->cleanup();
00776 
00777   for ( unsigned int i=0; i<clients_.size(); i++ ) {
00778     clients_[i]->endJob();
00779   }
00780 
00781   if ( summaryClient_ ) summaryClient_->endJob();
00782 
00783 }
00784 
00785 void EcalBarrelMonitorClient::endRun(void) {
00786 
00787   begin_run_ = false;
00788   end_run_   = true;
00789 
00790   if ( debug_ ) std::cout << "EcalBarrelMonitorClient: endRun, jevt = " << jevt_ << std::endl;
00791 
00792   if ( subrun_ != -1 ) {
00793 
00794     this->writeDb();
00795 
00796     this->endRunDb();
00797 
00798   }
00799 
00800   if ( resetFile_.size() != 0 || dbUpdateTime_ > 0 ) {
00801 
00802     this->softReset(false);
00803 
00804     for ( int i=0; i<int(clients_.size()); i++ ) {
00805       bool done = false;
00806       for ( std::multimap<EBClient*,int>::iterator j = clientsRuns_.lower_bound(clients_[i]); j != clientsRuns_.upper_bound(clients_[i]); j++ ) {
00807         if ( runType_ != -1 && runType_ == (*j).second && !done ) {
00808           done = true;
00809           clients_[i]->analyze();
00810         }
00811       }
00812     }
00813 
00814     if ( summaryClient_ ) summaryClient_->analyze();
00815 
00816   }
00817 
00818   for ( int i=0; i<int(clients_.size()); i++ ) {
00819     bool done = false;
00820     for ( std::multimap<EBClient*,int>::iterator j = clientsRuns_.lower_bound(clients_[i]); j != clientsRuns_.upper_bound(clients_[i]); j++ ) {
00821       if ( runType_ != -1 && runType_ == (*j).second && !done ) {
00822         done = true;
00823         clients_[i]->endRun();
00824       }
00825     }
00826   }
00827 
00828   if ( summaryClient_ ) summaryClient_->endRun();
00829 
00830   this->cleanup();
00831 
00832   status_  = "unknown";
00833 
00834   run_     = -1;
00835   evt_     = -1;
00836 
00837   runType_ = -1;
00838   evtType_ = -1;
00839 
00840   subrun_ = -1;
00841 
00842 }
00843 
00844 void EcalBarrelMonitorClient::endRun(const edm::Run& r, const edm::EventSetup& c) {
00845 
00846   if ( verbose_ ) {
00847     std::cout << std::endl;
00848     std::cout << "Standard endRun() for run " << r.id().run() << std::endl;
00849     std::cout << std::endl;
00850   }
00851 
00852   this->analyze();
00853 
00854   if ( run_ != -1 && evt_ != -1 && runType_ != -1 ) {
00855 
00856     forced_update_ = true;
00857     this->analyze();
00858 
00859     if ( ! mergeRuns_ ) {
00860 
00861       if ( begin_run_ && ! end_run_ ) {
00862 
00863         forced_status_ = false;
00864         this->endRun();
00865 
00866       }
00867 
00868     }
00869 
00870   }
00871 
00872   // summary for DQM GUI
00873 
00874   if ( run_ != -1 && evt_ != -1 && runType_ == -1 )  {
00875 
00876     MonitorElement* me;
00877 
00878     me = dqmStore_->get(prefixME_ + "/EventInfo/reportSummary");
00879     if ( me ) me->Fill(-1.0);
00880 
00881     for (int i = 0; i < 36; i++) {
00882       me = dqmStore_->get(prefixME_ + "/EventInfo/reportSummaryContents/EcalBarrel_" + Numbers::sEB(i+1));
00883       if ( me ) me->Fill(-1.0);
00884     }
00885 
00886     me = dqmStore_->get(prefixME_ + "/EventInfo/reportSummaryMap");
00887     for ( int iettx = 0; iettx < 34; iettx++ ) {
00888       for ( int ipttx = 0; ipttx < 72; ipttx++ ) {
00889         if ( me ) me->setBinContent( ipttx+1, iettx+1, -1.0 );
00890       }
00891     }
00892 
00893   }
00894 
00895 }
00896 
00897 void EcalBarrelMonitorClient::beginLuminosityBlock(const edm::LuminosityBlock& l, const edm::EventSetup& c) {
00898 
00899   if ( verbose_ ) {
00900     std::cout << std::endl;
00901     std::cout << "Standard beginLuminosityBlock() for luminosity block " << l.id().luminosityBlock() << " of run " << l.id().run() << std::endl;
00902     std::cout << std::endl;
00903   }
00904 
00905 }
00906 
00907 void EcalBarrelMonitorClient::endLuminosityBlock(const edm::LuminosityBlock& l, const edm::EventSetup& c) {
00908 
00909   current_time_ = time(NULL);
00910 
00911   if ( verbose_ ) {
00912     std::cout << std::endl;
00913     std::cout << "Standard endLuminosityBlock() for luminosity block " << l.id().luminosityBlock() << " of run " << l.id().run() << std::endl;
00914     std::cout << std::endl;
00915   }
00916 
00917   if ( updateTime_ > 0 ) {
00918     if ( (current_time_ - last_time_update_) < 60 * updateTime_ ) {
00919       return;
00920     }
00921     last_time_update_ = current_time_;
00922   }
00923 
00924   if ( run_ != -1 && evt_ != -1 && runType_ != -1 ) {
00925 
00926     forced_update_ = true;
00927     this->analyze();
00928 
00929   }
00930 
00931 }
00932 
00933 void EcalBarrelMonitorClient::reset(void) {
00934 
00935 }
00936 
00937 void EcalBarrelMonitorClient::setup(void) {
00938 
00939 }
00940 
00941 void EcalBarrelMonitorClient::cleanup(void) {
00942 
00943   if ( ! enableCleanup_ ) return;
00944 
00945   if ( cloneME_ ) {
00946     if ( h_ ) delete h_;
00947   }
00948 
00949   h_ = 0;
00950 
00951 }
00952 
00953 void EcalBarrelMonitorClient::beginRunDb(void) {
00954 
00955   subrun_ = 0;
00956 
00957 #ifdef WITH_ECAL_COND_DB
00958   EcalCondDBInterface* econn;
00959 
00960   econn = 0;
00961 
00962   if ( dbName_.size() != 0 ) {
00963     try {
00964       if ( verbose_ ) std::cout << "Opening DB connection with TNS_ADMIN ..." << std::endl;
00965       econn = new EcalCondDBInterface(dbName_, dbUserName_, dbPassword_);
00966       if ( verbose_ ) std::cout << "done." << std::endl;
00967     } catch (std::runtime_error &e) {
00968       std::cerr << e.what() << std::endl;
00969       if ( dbHostName_.size() != 0 ) {
00970         try {
00971           if ( verbose_ ) std::cout << "Opening DB connection without TNS_ADMIN ..." << std::endl;
00972           econn = new EcalCondDBInterface(dbHostName_, dbName_, dbUserName_, dbPassword_, dbHostPort_);
00973           if ( verbose_ ) std::cout << "done." << std::endl;
00974         } catch (std::runtime_error &e) {
00975           std::cerr << e.what() << std::endl;
00976         }
00977       }
00978     }
00979   }
00980 
00981   // create the objects necessary to identify a dataset
00982 
00983   LocationDef locdef;
00984 
00985   locdef.setLocation(location_);
00986 
00987   RunTypeDef rundef;
00988 
00989   rundef.setRunType( this->getRunType() );
00990 
00991   RunTag runtag;
00992 
00993   runtag.setLocationDef(locdef);
00994   runtag.setRunTypeDef(rundef);
00995 
00996   runtag.setGeneralTag( this->getRunType() );
00997 
00998   // fetch the RunIOV from the DB
00999 
01000   bool foundRunIOV = false;
01001 
01002   if ( econn ) {
01003     try {
01004       if ( verbose_ ) std::cout << "Fetching RunIOV ..." << std::endl;
01005 //      runiov_ = econn->fetchRunIOV(&runtag, run_);
01006       runiov_ = econn->fetchRunIOV(location_, run_);
01007       if ( verbose_ ) std::cout << "done." << std::endl;
01008       foundRunIOV = true;
01009     } catch (std::runtime_error &e) {
01010       std::cerr << e.what() << std::endl;
01011       foundRunIOV = false;
01012     }
01013   }
01014 
01015   // begin - setup the RunIOV (on behalf of the DAQ)
01016 
01017   if ( ! foundRunIOV ) {
01018 
01019     Tm startRun;
01020 
01021     startRun.setToCurrentGMTime();
01022 
01023     runiov_.setRunNumber(run_);
01024     runiov_.setRunStart(startRun);
01025     runiov_.setRunTag(runtag);
01026 
01027     if ( econn ) {
01028       try {
01029         if ( verbose_ ) std::cout << "Inserting RunIOV ..." << std::endl;
01030         econn->insertRunIOV(&runiov_);
01031 //        runiov_ = econn->fetchRunIOV(&runtag, run_);
01032         runiov_ = econn->fetchRunIOV(location_, run_);
01033         if ( verbose_ ) std::cout << "done." << std::endl;
01034       } catch (std::runtime_error &e) {
01035         std::cerr << e.what() << std::endl;
01036         try {
01037           if ( verbose_ ) std::cout << "Fetching RunIOV (again) ..." << std::endl;
01038 //          runiov_ = econn->fetchRunIOV(&runtag, run_);
01039           runiov_ = econn->fetchRunIOV(location_, run_);
01040           if ( verbose_ ) std::cout << "done." << std::endl;
01041           foundRunIOV = true;
01042         } catch (std::runtime_error &e) {
01043           std::cerr << e.what() << std::endl;
01044           foundRunIOV = false;
01045         }
01046       }
01047     }
01048 
01049   }
01050 
01051   // end - setup the RunIOV (on behalf of the DAQ)
01052 
01053   if ( verbose_ ) {
01054     std::cout << std::endl;
01055     std::cout << "=============RunIOV:" << std::endl;
01056     std::cout << "Run Number:         " << runiov_.getRunNumber() << std::endl;
01057     std::cout << "Run Start:          " << runiov_.getRunStart().str() << std::endl;
01058     std::cout << "Run End:            " << runiov_.getRunEnd().str() << std::endl;
01059     std::cout << "====================" << std::endl;
01060     std::cout << std::endl;
01061     std::cout << "=============RunTag:" << std::endl;
01062     std::cout << "GeneralTag:         " << runiov_.getRunTag().getGeneralTag() << std::endl;
01063     std::cout << "Location:           " << runiov_.getRunTag().getLocationDef().getLocation() << std::endl;
01064     std::cout << "Run Type:           " << runiov_.getRunTag().getRunTypeDef().getRunType() << std::endl;
01065     std::cout << "====================" << std::endl;
01066     std::cout << std::endl;
01067   }
01068 
01069   std::string rt = runiov_.getRunTag().getRunTypeDef().getRunType();
01070   if ( strcmp(rt.c_str(), "UNKNOWN") == 0 ) {
01071     runType_ = -1;
01072   } else {
01073     for ( unsigned int i = 0; i < runTypes_.size(); i++ ) {
01074       if ( strcmp(rt.c_str(), runTypes_[i].c_str()) == 0 ) {
01075         if ( runType_ != int(i) ) {
01076           if ( verbose_ ) {
01077             std::cout << std::endl;
01078             std::cout << "Fixing Run Type to: " << runTypes_[i] << std::endl;
01079             std::cout << std::endl;
01080           }
01081           runType_ = i;
01082         }
01083         break;
01084       }
01085     }
01086   }
01087 
01088   if ( verbose_ ) std::cout << std::endl;
01089 
01090   if ( econn ) {
01091     try {
01092       if ( verbose_ ) std::cout << "Closing DB connection ..." << std::endl;
01093       delete econn;
01094       econn = 0;
01095       if ( verbose_ ) std::cout << "done." << std::endl;
01096     } catch (std::runtime_error &e) {
01097       std::cerr << e.what() << std::endl;
01098     }
01099   }
01100 #endif
01101 
01102   if ( verbose_ ) std::cout << std::endl;
01103 
01104 }
01105 
01106 void EcalBarrelMonitorClient::writeDb(void) {
01107 
01108   subrun_++;
01109 
01110 #ifdef WITH_ECAL_COND_DB
01111   EcalCondDBInterface* econn;
01112 
01113   econn = 0;
01114 
01115   if ( dbName_.size() != 0 ) {
01116     try {
01117       if ( verbose_ ) std::cout << "Opening DB connection with TNS_ADMIN ..." << std::endl;
01118       econn = new EcalCondDBInterface(dbName_, dbUserName_, dbPassword_);
01119       if ( verbose_ ) std::cout << "done." << std::endl;
01120     } catch (std::runtime_error &e) {
01121       std::cerr << e.what() << std::endl;
01122       if ( dbHostName_.size() != 0 ) {
01123         try {
01124           if ( verbose_ ) std::cout << "Opening DB connection without TNS_ADMIN ..." << std::endl;
01125           econn = new EcalCondDBInterface(dbHostName_, dbName_, dbUserName_, dbPassword_, dbHostPort_);
01126           if ( verbose_ ) std::cout << "done." << std::endl;
01127         } catch (std::runtime_error &e) {
01128           std::cerr << e.what() << std::endl;
01129         }
01130       }
01131     }
01132   }
01133 
01134   MonVersionDef monverdef;
01135 
01136   monverdef.setMonitoringVersion("test01");
01137 
01138   MonRunTag montag;
01139 
01140   montag.setMonVersionDef(monverdef);
01141   montag.setGeneralTag(dbTagName_);
01142 
01143   Tm startSubRun;
01144 
01145   startSubRun.setToCurrentGMTime();
01146 
01147   // fetch the MonIOV from the DB
01148 
01149   bool foundMonIOV = false;
01150 
01151   if ( econn ) {
01152     try {
01153       if ( verbose_ ) std::cout << "Fetching MonIOV ..." << std::endl;
01154       RunTag runtag = runiov_.getRunTag();
01155       moniov_ = econn->fetchMonRunIOV(&runtag, &montag, run_, subrun_);
01156       if ( verbose_ ) std::cout << "done." << std::endl;
01157       foundMonIOV = true;
01158     } catch (std::runtime_error &e) {
01159       std::cerr << e.what() << std::endl;
01160       foundMonIOV = false;
01161     }
01162   }
01163 
01164   // begin - setup the MonIOV
01165 
01166   if ( !foundMonIOV ) {
01167 
01168     moniov_.setRunIOV(runiov_);
01169     moniov_.setSubRunNumber(subrun_);
01170 
01171     if ( subrun_ > 1 ) {
01172       moniov_.setSubRunStart(startSubRun);
01173     } else {
01174       moniov_.setSubRunStart(runiov_.getRunStart());
01175     }
01176 
01177     moniov_.setMonRunTag(montag);
01178 
01179     if ( econn ) {
01180       try {
01181         if ( verbose_ ) std::cout << "Inserting MonIOV ..." << std::endl;
01182         econn->insertMonRunIOV(&moniov_);
01183         RunTag runtag = runiov_.getRunTag();
01184         moniov_ = econn->fetchMonRunIOV(&runtag, &montag, run_, subrun_);
01185         if ( verbose_ ) std::cout << "done." << std::endl;
01186       } catch (std::runtime_error &e) {
01187         std::cerr << e.what() << std::endl;
01188         try {
01189           if ( verbose_ ) std::cout << "Fetching MonIOV (again) ..." << std::endl;
01190           RunTag runtag = runiov_.getRunTag();
01191           moniov_ = econn->fetchMonRunIOV(&runtag, &montag, run_, subrun_);
01192           if ( verbose_ ) std::cout << "done." << std::endl;
01193           foundMonIOV = true;
01194         } catch (std::runtime_error &e) {
01195           std::cerr << e.what() << std::endl;
01196           foundMonIOV = false;
01197         }
01198       }
01199     }
01200 
01201   }
01202 
01203   // end - setup the MonIOV
01204 
01205   if ( verbose_ ) {
01206     std::cout << std::endl;
01207     std::cout << "==========MonRunIOV:" << std::endl;
01208     std::cout << "SubRun Number:      " << moniov_.getSubRunNumber() << std::endl;
01209     std::cout << "SubRun Start:       " << moniov_.getSubRunStart().str() << std::endl;
01210     std::cout << "SubRun End:         " << moniov_.getSubRunEnd().str() << std::endl;
01211     std::cout << "====================" << std::endl;
01212     std::cout << std::endl;
01213     std::cout << "==========MonRunTag:" << std::endl;
01214     std::cout << "GeneralTag:         " << moniov_.getMonRunTag().getGeneralTag() << std::endl;
01215     std::cout << "Monitoring Ver:     " << moniov_.getMonRunTag().getMonVersionDef().getMonitoringVersion() << std::endl;
01216     std::cout << "====================" << std::endl;
01217     std::cout << std::endl;
01218   }
01219 
01220   int taskl = 0x0;
01221   int tasko = 0x0;
01222 
01223   for ( int i=0; i<int(clients_.size()); i++ ) {
01224     bool done = false;
01225     for ( std::multimap<EBClient*,int>::iterator j = clientsRuns_.lower_bound(clients_[i]); j != clientsRuns_.upper_bound(clients_[i]); j++ ) {
01226       if ( h_ && runType_ != -1 && runType_ == (*j).second && !done ) {
01227         if ( strcmp(clientsNames_[i].c_str(), "Cosmic") == 0 && runType_ != EcalDCCHeaderBlock::COSMIC && runType_ != EcalDCCHeaderBlock::COSMICS_LOCAL && runType_ != EcalDCCHeaderBlock::COSMICS_GLOBAL && runType_ != EcalDCCHeaderBlock::PHYSICS_GLOBAL && runType_ != EcalDCCHeaderBlock::PHYSICS_LOCAL && h_->GetBinContent(2+EcalDCCHeaderBlock::COSMIC) == 0 && h_->GetBinContent(2+EcalDCCHeaderBlock::COSMICS_LOCAL) == 0 && h_->GetBinContent(2+EcalDCCHeaderBlock::COSMICS_GLOBAL) == 0 && h_->GetBinContent(2+EcalDCCHeaderBlock::PHYSICS_GLOBAL) == 0 && h_->GetBinContent(2+EcalDCCHeaderBlock::PHYSICS_LOCAL) == 0 ) continue;
01228         if ( strcmp(clientsNames_[i].c_str(), "Laser") == 0 && runType_ != EcalDCCHeaderBlock::LASER_STD && runType_ != EcalDCCHeaderBlock::LASER_GAP && h_->GetBinContent(2+EcalDCCHeaderBlock::LASER_STD) == 0 && h_->GetBinContent(2+EcalDCCHeaderBlock::LASER_GAP) == 0 ) continue;
01229         if ( strcmp(clientsNames_[i].c_str(), "Pedestal") == 0 && runType_ != EcalDCCHeaderBlock::PEDESTAL_STD && runType_ != EcalDCCHeaderBlock::PEDESTAL_GAP && h_->GetBinContent(2+EcalDCCHeaderBlock::PEDESTAL_STD) == 0 && h_->GetBinContent(2+EcalDCCHeaderBlock::PEDESTAL_GAP) == 0 ) continue;
01230         if ( strcmp(clientsNames_[i].c_str(), "TestPulse") == 0 && runType_ != EcalDCCHeaderBlock::TESTPULSE_MGPA && runType_ != EcalDCCHeaderBlock::TESTPULSE_GAP && h_->GetBinContent(2+EcalDCCHeaderBlock::TESTPULSE_MGPA) == 0 && h_->GetBinContent(2+EcalDCCHeaderBlock::TESTPULSE_GAP) == 0 ) continue;
01231         done = true;
01232         if ( verbose_ ) {
01233           if ( econn ) {
01234             std::cout << " Writing " << clientsNames_[i] << " results to DB " << std::endl;
01235             std::cout << std::endl;
01236           }
01237         }
01238         bool status;
01239         if ( clients_[i]->writeDb(econn, &runiov_, &moniov_, status) ) {
01240           taskl |= 0x1 << clientsStatus_[clientsNames_[i]];
01241           if ( status ) {
01242             tasko |= 0x1 << clientsStatus_[clientsNames_[i]];
01243           }
01244         } else {
01245           tasko |= 0x1 << clientsStatus_[clientsNames_[i]];
01246         }
01247       }
01248     }
01249     if ( ((taskl >> clientsStatus_[clientsNames_[i]]) & 0x1) ) {
01250       if ( verbose_ ) {
01251         std::cout << " Task output for " << clientsNames_[i] << " = "
01252              << ((tasko >> clientsStatus_[clientsNames_[i]]) & 0x1) << std::endl;
01253         std::cout << std::endl;
01254       }
01255     }
01256   }
01257 
01258   bool status;
01259   if ( summaryClient_ ) summaryClient_->writeDb(econn, &runiov_, &moniov_, status);
01260 
01261   EcalLogicID ecid;
01262   MonRunDat md;
01263   std::map<EcalLogicID, MonRunDat> dataset;
01264 
01265   MonRunOutcomeDef monRunOutcomeDef;
01266 
01267   monRunOutcomeDef.setShortDesc("success");
01268 
01269   float nevt = -1.;
01270 
01271   if ( h_ ) nevt = h_->GetSumOfWeights();
01272 
01273   md.setNumEvents(int(nevt));
01274   md.setMonRunOutcomeDef(monRunOutcomeDef);
01275 
01276 //  string fileName = "";
01277 //  md.setRootfileName(fileName);
01278 
01279   md.setTaskList(taskl);
01280   md.setTaskOutcome(tasko);
01281 
01282   if ( econn ) {
01283     try {
01284       ecid = LogicID::getEcalLogicID("EB");
01285       dataset[ecid] = md;
01286     } catch (std::runtime_error &e) {
01287       std::cerr << e.what() << std::endl;
01288     }
01289   }
01290 
01291   if ( econn ) {
01292     try {
01293       if ( verbose_ ) std::cout << "Inserting MonRunDat ..." << std::endl;
01294       econn->insertDataSet(&dataset, &moniov_);
01295       if ( verbose_ ) std::cout << "done." << std::endl;
01296     } catch (std::runtime_error &e) {
01297       std::cerr << e.what() << std::endl;
01298     }
01299   }
01300 
01301   if ( econn ) {
01302     try {
01303       if ( verbose_ ) std::cout << "Closing DB connection ..." << std::endl;
01304       delete econn;
01305       econn = 0;
01306       if ( verbose_ ) std::cout << "done." << std::endl;
01307     } catch (std::runtime_error &e) {
01308       std::cerr << e.what() << std::endl;
01309     }
01310   }
01311 #endif
01312 
01313   if ( verbose_ ) std::cout << std::endl;
01314 
01315 }
01316 
01317 void EcalBarrelMonitorClient::endRunDb(void) {
01318 
01319 #ifdef WITH_ECAL_COND_DB
01320   EcalCondDBInterface* econn;
01321 
01322   econn = 0;
01323 
01324   if ( dbName_.size() != 0 ) {
01325     try {
01326       if ( verbose_ ) std::cout << "Opening DB connection with TNS_ADMIN ..." << std::endl;
01327       econn = new EcalCondDBInterface(dbName_, dbUserName_, dbPassword_);
01328       if ( verbose_ ) std::cout << "done." << std::endl;
01329     } catch (std::runtime_error &e) {
01330       std::cerr << e.what() << std::endl;
01331       if ( dbHostName_.size() != 0 ) {
01332         try {
01333           if ( verbose_ ) std::cout << "Opening DB connection without TNS_ADMIN ..." << std::endl;
01334           econn = new EcalCondDBInterface(dbHostName_, dbName_, dbUserName_, dbPassword_, dbHostPort_);
01335           if ( verbose_ ) std::cout << "done." << std::endl;
01336         } catch (std::runtime_error &e) {
01337           std::cerr << e.what() << std::endl;
01338         }
01339       }
01340     }
01341   }
01342 
01343   EcalLogicID ecid;
01344   RunDat rd;
01345   std::map<EcalLogicID, RunDat> dataset;
01346 
01347   float nevt = -1.;
01348 
01349   if ( h_ ) nevt = h_->GetSumOfWeights();
01350 
01351   rd.setNumEvents(int(nevt));
01352 
01353   // fetch the RunDat from the DB
01354 
01355   bool foundRunDat = false;
01356 
01357   if ( econn ) {
01358     try {
01359       if ( verbose_ ) std::cout << "Fetching RunDat ..." << std::endl;
01360       econn->fetchDataSet(&dataset, &runiov_);
01361       if ( verbose_ ) std::cout << "done." << std::endl;
01362       foundRunDat = true;
01363     } catch (std::runtime_error &e) {
01364       std::cerr << e.what() << std::endl;
01365       foundRunDat = false;
01366     }
01367   }
01368 
01369   // begin - setup the RunDat (on behalf of the DAQ)
01370 
01371   if ( ! foundRunDat ) {
01372 
01373     if ( econn ) {
01374       try {
01375         ecid = LogicID::getEcalLogicID("EB");
01376         dataset[ecid] = rd;
01377       } catch (std::runtime_error &e) {
01378         std::cerr << e.what() << std::endl;
01379       }
01380     }
01381 
01382     if ( econn ) {
01383       try {
01384         if ( verbose_ ) std::cout << "Inserting RunDat ..." << std::endl;
01385         econn->insertDataSet(&dataset, &runiov_);
01386         if ( verbose_ ) std::cout << "done." << std::endl;
01387       } catch (std::runtime_error &e) {
01388         std::cerr << e.what() << std::endl;
01389       }
01390     }
01391 
01392   }
01393 
01394   // end - setup the RunDat (on behalf of the DAQ)
01395 
01396   if ( econn ) {
01397     try {
01398       if ( verbose_ ) std::cout << "Closing DB connection ..." << std::endl;
01399       delete econn;
01400       econn = 0;
01401       if ( verbose_ ) std::cout << "done." << std::endl;
01402     } catch (std::runtime_error &e) {
01403       std::cerr << e.what() << std::endl;
01404     }
01405   }
01406 #endif
01407 
01408 }
01409 
01410 void EcalBarrelMonitorClient::analyze(void) {
01411 
01412   current_time_ = time(NULL);
01413 
01414   ievt_++;
01415   jevt_++;
01416 
01417   if ( debug_ ) std::cout << "EcalBarrelMonitorClient: ievt/jevt = " << ievt_ << "/" << jevt_ << std::endl;
01418 
01419   MonitorElement* me;
01420   std::string s;
01421 
01422   me = dqmStore_->get(prefixME_ + "/EcalInfo/STATUS");
01423   if ( me ) {
01424     status_ = "unknown";
01425     s = me->valueString();
01426     if ( strcmp(s.c_str(), "i=0") == 0 ) status_ = "begin-of-run";
01427     if ( strcmp(s.c_str(), "i=1") == 0 ) status_ = "running";
01428     if ( strcmp(s.c_str(), "i=2") == 0 ) status_ = "end-of-run";
01429     if ( debug_ ) std::cout << "Found '" << prefixME_ << "/EcalInfo/STATUS'" << std::endl;
01430   }
01431 
01432   if ( inputFile_.size() != 0 ) {
01433     if ( ievt_ == 1 ) {
01434       if ( verbose_ ) {
01435         std::cout << std::endl;
01436         std::cout << " Reading DQM from file, forcing 'begin-of-run'" << std::endl;
01437         std::cout << std::endl;
01438       }
01439       status_ = "begin-of-run";
01440     }
01441   }
01442 
01443   int ecal_run = -1;
01444   me = dqmStore_->get(prefixME_ + "/EcalInfo/RUN");
01445   if ( me ) {
01446     s = me->valueString();
01447     sscanf(s.c_str(), "i=%d", &ecal_run);
01448     if ( debug_ ) std::cout << "Found '" << prefixME_ << "/EcalInfo/RUN'" << std::endl;
01449   }
01450 
01451   int ecal_evt = -1;
01452   me = dqmStore_->get(prefixME_ + "/EcalInfo/EVT");
01453   if ( me ) {
01454     s = me->valueString();
01455     sscanf(s.c_str(), "i=%d", &ecal_evt);
01456     if ( debug_ ) std::cout << "Found '" << prefixME_ << "/EcalInfo/EVT'" << std::endl;
01457   }
01458 
01459   me = dqmStore_->get(prefixME_ + "/EcalInfo/EVTTYPE");
01460   h_ = UtilsClient::getHisto<TH1F*>( me, cloneME_, h_ );
01461 
01462   me = dqmStore_->get(prefixME_ + "/EcalInfo/RUNTYPE");
01463   if ( me ) {
01464     s = me->valueString();
01465     sscanf(s.c_str(), "i=%d", &evtType_);
01466     if ( runType_ == -1 ) runType_ = evtType_;
01467     if ( debug_ ) std::cout << "Found '" << prefixME_ << "/EcalInfo/RUNTYPE'" << std::endl;
01468   }
01469 
01470   // if the run number from the Event is less than zero,
01471   // use the run number from the ECAL DCC header
01472   if ( run_ <= 0 ) run_ = ecal_run;
01473 
01474   if ( run_ != -1 && evt_ != -1 && runType_ != -1 ) {
01475     if ( ! mergeRuns_ && run_ != last_run_ ) forced_update_ = true;
01476   }
01477 
01478   bool update = ( forced_update_                    ) ||
01479                 ( prescaleFactor_ != 1              ) ||
01480                 ( jevt_ <   10                      ) ||
01481                 ( jevt_ <  100 && jevt_ %   10 == 0 ) ||
01482                 ( jevt_ < 1000 && jevt_ %  100 == 0 ) ||
01483                 (                 jevt_ % 1000 == 0 );
01484 
01485   if ( update || strcmp(status_.c_str(), "begin-of-run") == 0 || strcmp(status_.c_str(), "end-of-run") == 0 ) {
01486 
01487     if ( verbose_ ) {
01488       std::cout << " RUN status = \"" << status_ << "\"" << std::endl;
01489       std::cout << "   CMS run/event number = " << run_ << "/" << evt_ << std::endl;
01490       std::cout << "   EB run/event number = " << ecal_run << "/" << ecal_evt << std::endl;
01491       std::cout << "   EB location = " << location_ << std::endl;
01492       std::cout << "   EB run/event type = " << this->getRunType() << "/" << ( evtType_ == -1 ? "UNKNOWN" : runTypes_[evtType_] ) << std::flush;
01493 
01494       if ( h_ ) {
01495         if ( h_->GetSumOfWeights() != 0 ) {
01496           std::cout << " ( " << std::flush;
01497           for ( unsigned int i = 0; i < runTypes_.size(); i++ ) {
01498             if ( strcmp(runTypes_[i].c_str(), "UNKNOWN") != 0 && h_->GetBinContent(2+i) != 0 ) {
01499               std::string s = runTypes_[i];
01500               transform( s.begin(), s.end(), s.begin(), (int(*)(int))tolower );
01501               std::cout << s << " ";
01502             }
01503           }
01504           std::cout << ")" << std::flush;
01505         }
01506       }
01507       std::cout << std::endl;
01508     }
01509 
01510   }
01511 
01512   if ( strcmp(status_.c_str(), "begin-of-run") == 0 ) {
01513 
01514     if ( run_ != -1 && evt_ != -1 && runType_ != -1 ) {
01515 
01516       if ( ! begin_run_ ) {
01517 
01518         forced_status_ = false;
01519         this->beginRun();
01520 
01521       }
01522 
01523     }
01524 
01525   }
01526 
01527   if ( strcmp(status_.c_str(), "begin-of-run") == 0 || strcmp(status_.c_str(), "running") == 0 || strcmp(status_.c_str(), "end-of-run") == 0 ) {
01528 
01529     if ( begin_run_ && ! end_run_ ) {
01530 
01531       bool update = ( forced_update_                      ) ||
01532                     ( prescaleFactor_ != 1                ) ||
01533                     ( jevt_ <     3                       ) ||
01534                     ( jevt_ <  1000 && jevt_ %   100 == 0 ) ||
01535                     ( jevt_ < 10000 && jevt_ %  1000 == 0 ) ||
01536                     (                  jevt_ % 10000 == 0 );
01537 
01538       if ( update || strcmp(status_.c_str(), "begin-of-run") == 0 || strcmp(status_.c_str(), "end-of-run") == 0 ) {
01539 
01540         for ( int i=0; i<int(clients_.size()); i++ ) {
01541           bool done = false;
01542           for ( std::multimap<EBClient*,int>::iterator j = clientsRuns_.lower_bound(clients_[i]); j != clientsRuns_.upper_bound(clients_[i]); j++ ) {
01543             if ( runType_ != -1 && runType_ == (*j).second && !done ) {
01544               done = true;
01545               clients_[i]->analyze();
01546             }
01547           }
01548         }
01549 
01550         if ( summaryClient_ ) summaryClient_->analyze();
01551 
01552       }
01553 
01554       forced_update_ = false;
01555 
01556       bool reset = false;
01557 
01558       if ( resetFile_.size() != 0 ) {
01559         if ( access(resetFile_.c_str(), W_OK) == 0 ) {
01560           if ( unlink(resetFile_.c_str()) == 0 ) {
01561             reset |= true;
01562           }
01563         }
01564       }
01565 
01566       if ( dbUpdateTime_ > 0 ) {
01567         reset |= (current_time_ - last_time_reset_) > 60 * dbUpdateTime_;
01568       }
01569 
01570       if ( reset ) {
01571         if ( runType_ == EcalDCCHeaderBlock::COSMIC ||
01572              runType_ == EcalDCCHeaderBlock::COSMICS_GLOBAL ||
01573              runType_ == EcalDCCHeaderBlock::PHYSICS_GLOBAL ||
01574              runType_ == EcalDCCHeaderBlock::COSMICS_LOCAL ||
01575              runType_ == EcalDCCHeaderBlock::PHYSICS_LOCAL ||
01576              runType_ == EcalDCCHeaderBlock::BEAMH2 ||
01577              runType_ == EcalDCCHeaderBlock::BEAMH4 ) this->writeDb();
01578         this->softReset(true);
01579         last_time_reset_ = current_time_;
01580       }
01581 
01582     }
01583 
01584   }
01585 
01586   if ( strcmp(status_.c_str(), "end-of-run") == 0 ) {
01587 
01588     if ( run_ != -1 && evt_ != -1 && runType_ != -1 ) {
01589 
01590       if ( begin_run_ && ! end_run_ ) {
01591 
01592         forced_status_ = false;
01593         this->endRun();
01594 
01595       }
01596 
01597     }
01598 
01599   }
01600 
01601   // BEGIN: run-time fixes for missing state transitions
01602 
01603   // run number transition
01604 
01605   if ( strcmp(status_.c_str(), "running") == 0 ) {
01606 
01607     if ( run_ != -1 && evt_ != -1 && runType_ != -1 ) {
01608 
01609       if ( ! mergeRuns_ ) {
01610 
01611         int new_run_ = run_;
01612         int old_run_ = last_run_;
01613 
01614         if ( new_run_ != old_run_ ) {
01615 
01616           if ( begin_run_ && ! end_run_ ) {
01617 
01618             if ( verbose_ ) {
01619               std::cout << std::endl;
01620               std::cout << " Old run has finished, issuing endRun() ... " << std::endl;
01621               std::cout << std::endl;
01622             }
01623 
01624             // end old_run_
01625             run_ = old_run_;
01626 
01627             forced_status_ = false;
01628             this->endRun();
01629 
01630           }
01631 
01632           if ( ! begin_run_ ) {
01633 
01634             if ( verbose_ ) {
01635               std::cout << std::endl;
01636               std::cout << " New run has started, issuing beginRun() ... " << std::endl;
01637               std::cout << std::endl;
01638             }
01639 
01640             // start new_run_
01641             run_ = new_run_;
01642 
01643             forced_status_ = false;
01644             this->beginRun();
01645 
01646           }
01647 
01648         }
01649 
01650       }
01651 
01652     }
01653 
01654   }
01655 
01656   // 'running' state without a previous 'begin-of-run' state
01657 
01658   if ( strcmp(status_.c_str(), "running") == 0 ) {
01659 
01660     if ( run_ != -1 && evt_ != -1 && runType_ != -1 ) {
01661 
01662       if ( ! forced_status_ ) {
01663 
01664         if ( ! begin_run_ ) {
01665 
01666           if ( verbose_ ) {
01667             std::cout << std::endl;
01668             std::cout << "Forcing beginRun() ... NOW !" << std::endl;
01669             std::cout << std::endl;
01670           }
01671 
01672           forced_status_ = true;
01673           this->beginRun();
01674 
01675         }
01676 
01677       }
01678 
01679     }
01680 
01681   }
01682 
01683   // 'end-of-run' state without a previous 'begin-of-run' or 'running' state
01684 
01685   if ( strcmp(status_.c_str(), "end-of-run") == 0 ) {
01686 
01687     if ( run_ != -1 && evt_ != -1 && runType_ != -1 ) {
01688 
01689       if ( ! forced_status_ ) {
01690 
01691         if ( ! begin_run_ ) {
01692 
01693           if ( verbose_ ) {
01694             std::cout << std::endl;
01695             std::cout << "Forcing beginRun() ... NOW !" << std::endl;
01696             std::cout << std::endl;
01697           }
01698 
01699           forced_status_ = true;
01700           this->beginRun();
01701 
01702         }
01703 
01704       }
01705 
01706     }
01707 
01708   }
01709 
01710   // END: run-time fixes for missing state transitions
01711 
01712 }
01713 
01714 void EcalBarrelMonitorClient::analyze(const edm::Event& e, const edm::EventSetup& c) {
01715 
01716   run_ = e.id().run();
01717   evt_ = e.id().event();
01718 
01719   if ( prescaleFactor_ > 0 ) {
01720     if ( jevt_ % prescaleFactor_ == 0 ) this->analyze();
01721   }
01722 
01723 }
01724 
01725 void EcalBarrelMonitorClient::softReset(bool flag) {
01726 
01727   std::vector<MonitorElement*> mes = dqmStore_->getAllContents(prefixME_);
01728   std::vector<MonitorElement*>::const_iterator meitr;
01729   for ( meitr=mes.begin(); meitr!=mes.end(); meitr++ ) {
01730     if ( !strncmp((*meitr)->getName().c_str(), "EB", 2)
01731          && strncmp((*meitr)->getName().c_str(), "EBTrend", 7)
01732          && strncmp((*meitr)->getName().c_str(), "by lumi", 7) ) {
01733       if ( flag ) {
01734         dqmStore_->softReset(*meitr);
01735       } else {
01736         dqmStore_->disableSoftReset(*meitr);
01737       }
01738     }
01739   }
01740 
01741   MonitorElement* me = dqmStore_->get(prefixME_ + "/EcalInfo/EVTTYPE");
01742   if ( me ) {
01743     if ( flag ) {
01744       dqmStore_->softReset(me);
01745     } else {
01746       dqmStore_->disableSoftReset(me);
01747     }
01748   }
01749 
01750 }
01751