CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/DQM/RPCMonitorClient/src/RPCDqmClient.cc

Go to the documentation of this file.
00001 // Package:    RPCDqmClient
00002 // Original Author:  Anna Cimmino
00003 
00004 #include "DQM/RPCMonitorClient/interface/RPCDqmClient.h"
00005 #include "DQM/RPCMonitorDigi/interface/RPCBookFolderStructure.h"
00006 #include "DQM/RPCMonitorDigi/interface/utils.h"
00007 
00008 //include client headers
00009 #include  "DQM/RPCMonitorClient/interface/RPCDeadChannelTest.h"
00010 #include "DQM/RPCMonitorClient/interface/RPCMultiplicityTest.h"
00011 #include "DQM/RPCMonitorClient/interface/RPCClusterSizeTest.h"
00012 #include "DQM/RPCMonitorClient/interface/RPCOccupancyTest.h"
00013 #include "DQM/RPCMonitorClient/interface/RPCNoisyStripTest.h"
00014 
00015 //Geometry
00016 #include "Geometry/RPCGeometry/interface/RPCGeometry.h"
00017 #include "Geometry/RPCGeometry/interface/RPCGeomServ.h"
00018 #include "Geometry/Records/interface/MuonGeometryRecord.h"
00019 
00020 //Framework
00021 #include "FWCore/ServiceRegistry/interface/Service.h"
00022 
00023 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00024 
00025 //DQMServices
00026 #include "DQMServices/Core/interface/MonitorElement.h"
00027 
00028 
00029 RPCDqmClient::RPCDqmClient(const edm::ParameterSet& iConfig){
00030 
00031   edm::LogVerbatim ("rpcdqmclient") << "[RPCDqmClient]: Constructor";
00032 
00033   parameters_ = iConfig;
00034   
00035   //check enabling
00036   enableDQMClients_ =parameters_.getUntrackedParameter<bool> ("EnableRPCDqmClients",true); 
00037   minimumEvents_= parameters_.getUntrackedParameter<int>("MinimumRPCEvents", 10000);
00038   globalFolder_= parameters_.getUntrackedParameter<std::string>("RPCGlobalFolder", "RPC/RecHits/SummaryHistograms");
00039   //get prescale factor
00040   prescaleGlobalFactor_ = parameters_.getUntrackedParameter<int>("DiagnosticGlobalPrescale", 5);
00041 
00042   prefixDir_ = parameters_.getUntrackedParameter<std::string>("RPCDirectory", "RPC/RecHits");
00043 
00044   //make default client list  
00045   clientList_.push_back("RPCMultiplicityTest");
00046   clientList_.push_back("RPCDeadChannelTest");
00047   clientList_.push_back("RPCClusterSizeTest");
00048   clientList_= parameters_.getUntrackedParameter<std::vector<std::string> >("RPCDqmClientList",clientList_);
00049 
00050   //get all the possible RPC DQM clients 
00051   this->makeClientMap();
00052 }
00053 
00054 RPCDqmClient::~RPCDqmClient(){dbe_ = 0;}
00055 
00056 void RPCDqmClient::beginJob(){
00057   edm::LogVerbatim ("rpcdqmclient") << "[RPCDqmClient]: Begin Job";
00058   if (!enableDQMClients_) return;                 ;
00059 
00060   dbe_ = edm::Service<DQMStore>().operator->();
00061   dbe_->setVerbose(0);
00062   
00063 
00064   //Do whatever the begin jobs of all client modules do
00065   for(std::vector<RPCClient*>::iterator it = clientModules_.begin(); it!=clientModules_.end(); it++ )
00066    (*it)->beginJob(dbe_);
00067   
00068 }
00069 
00070 void  RPCDqmClient::endRun(const edm::Run& r, const edm::EventSetup& c){
00071    edm::LogVerbatim ("rpcdqmclient") << "[RPCDqmClient]: End Run";
00072   if (!enableDQMClients_) return;
00073 
00074   init_ = false;
00075 
00076   std::vector<MonitorElement *>  myMeVect;
00077   std::vector<RPCDetId>   myDetIds;
00078 
00079   edm::ESHandle<RPCGeometry> rpcGeo;
00080   c.get<MuonGeometryRecord>().get(rpcGeo);
00081  
00082   dbe_->setCurrentFolder(prefixDir_);
00083 
00084  
00085   //loop on all geometry and get all histos
00086   for (TrackingGeometry::DetContainer::const_iterator it=rpcGeo->dets().begin();it<rpcGeo->dets().end();it++){
00087     if( dynamic_cast< RPCChamber* >( *it ) != 0 ){
00088       
00089       RPCChamber* ch = dynamic_cast< RPCChamber* >( *it ); 
00090       std::vector< const RPCRoll*> roles = (ch->rolls());
00091       //Loop on rolls in given chamber
00092       for(std::vector<const RPCRoll*>::const_iterator r = roles.begin();r != roles.end(); ++r){
00093         RPCDetId detId = (*r)->id();
00094         
00095         //Get Occupancy ME for roll
00096         RPCGeomServ RPCname(detId);        
00097         RPCBookFolderStructure *  folderStr = new RPCBookFolderStructure();
00098 
00099         //loop on clients
00100         for( unsigned int cl = 0; cl<clientModules_.size(); cl++ ){
00101 
00102           MonitorElement * myMe = dbe_->get(prefixDir_+"/"+ folderStr->folderStructure(detId)+"/"+clientHisto_[cl]+ "_"+RPCname.name()); 
00103 
00104           if (!myMe || find(myMeVect.begin(), myMeVect.end(), myMe)!=myMeVect.end())continue;
00105 
00106           dbe_->tag(myMe, clientTag_[cl]);
00107 
00108           myMeVect.push_back(myMe);
00109           myDetIds.push_back(detId);
00110         }//end loop on clients
00111       }//end loop on roll in given chamber
00112     }
00113   }//end loop on all geometry and get all histos  
00114   
00115   for (std::vector<RPCClient*>::iterator  it= clientModules_.begin(); it!=clientModules_.end(); it++ )
00116     (*it)->endRun(r,c,myMeVect, myDetIds);
00117 
00118   MonitorElement * RPCEvents = dbe_->get(globalFolder_ +"/RPCEvents");  
00119 
00120   float   rpcevents = minimumEvents_;
00121   if(RPCEvents) rpcevents = RPCEvents -> getEntries();
00122     
00123   if(rpcevents < minimumEvents_) return;
00124 
00125   for (std::vector<RPCClient*>::iterator it = clientModules_.begin(); it!=clientModules_.end(); it++ )
00126     (*it)->clientOperation(c);
00127 
00128 }
00129 
00130 void RPCDqmClient::beginLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& context) {
00131   if (!enableDQMClients_) return;
00132 
00133   for ( std::vector<RPCClient*>::iterator it = clientModules_.begin(); it!=clientModules_.end(); it++ )
00134     (*it)->beginLuminosityBlock(lumiSeg,context);
00135 }
00136 
00137 void RPCDqmClient::analyze(const edm::Event& iEvent, const edm::EventSetup& iSetup)
00138 {
00139 
00140  if (!enableDQMClients_) return;
00141 
00142  for ( std::vector<RPCClient*>::iterator it = clientModules_.begin(); it!=clientModules_.end(); it++ )
00143     (*it)->analyze( iEvent,iSetup);
00144 }
00145 
00146 
00147 void RPCDqmClient::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& c){
00148 
00149   edm::LogVerbatim ("rpcdqmclient") <<"[RPCDqmClient]: End of LS ";
00150  
00151   if (!enableDQMClients_ ) return;
00152     
00153   for (std::vector<RPCClient*>::iterator it = clientModules_.begin(); it!=clientModules_.end(); it++ )
00154     (*it)->endLuminosityBlock( lumiSeg, c);
00155 }
00156 
00157 
00158 void  RPCDqmClient::beginRun(const edm::Run& r, const edm::EventSetup& c){
00159 
00160  if (!enableDQMClients_) return;
00161    for ( std::vector<RPCClient*>::iterator it = clientModules_.begin(); it!=clientModules_.end(); it++ )
00162     (*it)->beginRun(r,c);
00163 }
00164 
00165 
00166 void RPCDqmClient::endJob() {
00167  if (!enableDQMClients_) return;
00168  
00169  for ( std::vector<RPCClient*>::iterator it= clientModules_.begin(); it!=clientModules_.end(); it++ )
00170     (*it)->endJob();
00171 }
00172 
00173 
00174 void RPCDqmClient::makeClientMap() {
00175   
00176   std::vector<std::string>  clientList,clientNames,clientHisto; 
00177   std::vector<RPCClient*> clientModules;
00178   std::vector<int> clientTag;
00179   
00180   //clear global vectors;
00181   clientNames_.clear();
00182   clientHisto_.clear();
00183   clientTag_.clear();
00184   clientModules_.clear();
00185 
00186   if (clientList_.size()==0) return; //if no client is selected by user, return
00187  
00188   //Fill vectors with all possible RPC DQM clients , source histos names, and tag values
00189   //RPCMultiplicityTest
00190   clientNames.push_back("RPCMultiplicityTest");
00191   clientHisto.push_back("Multiplicity");
00192   clientTag.push_back(rpcdqm::MULTIPLICITY);
00193   clientModules.push_back( new RPCMultiplicityTest(parameters_));
00194   //RPCDeadChannelTest
00195   clientNames.push_back("RPCDeadChannelTest");
00196   clientHisto.push_back("Occupancy");
00197   clientModules.push_back( new RPCDeadChannelTest(parameters_));
00198   clientTag.push_back(rpcdqm::OCCUPANCY);
00199   //RPCClusterSizeTest
00200   clientNames.push_back("RPCClusterSizeTest");
00201   clientHisto.push_back("ClusterSize");
00202   clientTag.push_back(rpcdqm::CLUSTERSIZE);
00203   clientModules.push_back( new RPCClusterSizeTest(parameters_));
00204   //RPCOccupancyTest
00205   clientNames.push_back("RPCOccupancyTest");
00206   clientHisto.push_back("Occupancy");
00207   clientTag.push_back(rpcdqm::OCCUPANCY);
00208   clientModules.push_back( new RPCOccupancyTest(parameters_));
00209  //RPCNoisyStripTest
00210   clientNames.push_back("RPCNoisyStripTest");
00211   clientHisto.push_back("Occupancy");
00212   clientTag.push_back(rpcdqm::OCCUPANCY);
00213   clientModules.push_back( new RPCNoisyStripTest(parameters_));
00214 
00215 
00216   //take only user specified clients and associate its source histograms to it
00217   for(unsigned int i = 0; i<clientNames.size(); i++){
00218 
00219     if(find(clientList_.begin(),clientList_.end(),clientNames[i])!=clientList_.end()) {
00220 
00221       clientHisto_.push_back(clientHisto[i]);
00222       clientTag_.push_back(clientTag[i]);
00223       clientNames_.push_back(clientNames[i]);
00224       clientModules_.push_back(clientModules[i]);
00225     }
00226   }
00227   
00228   return;
00229 }