Go to the documentation of this file.00001
00002
00003
00004 #include "DQM/RPCMonitorClient/interface/RPCDqmClient.h"
00005 #include "DQM/RPCMonitorDigi/interface/RPCBookFolderStructure.h"
00006 #include "DQM/RPCMonitorDigi/interface/utils.h"
00007
00008
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
00016 #include "Geometry/RPCGeometry/interface/RPCGeometry.h"
00017 #include "Geometry/RPCGeometry/interface/RPCGeomServ.h"
00018 #include "Geometry/Records/interface/MuonGeometryRecord.h"
00019
00020
00021 #include "FWCore/ServiceRegistry/interface/Service.h"
00022
00023 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00024
00025
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
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
00040 prescaleGlobalFactor_ = parameters_.getUntrackedParameter<int>("DiagnosticGlobalPrescale", 5);
00041
00042 prefixDir_ = parameters_.getUntrackedParameter<std::string>("RPCDirectory", "RPC/RecHits");
00043
00044
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
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
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
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
00092 for(std::vector<const RPCRoll*>::const_iterator r = roles.begin();r != roles.end(); ++r){
00093 RPCDetId detId = (*r)->id();
00094
00095
00096 RPCGeomServ RPCname(detId);
00097 RPCBookFolderStructure * folderStr = new RPCBookFolderStructure();
00098
00099
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 }
00111 }
00112 }
00113 }
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
00181 clientNames_.clear();
00182 clientHisto_.clear();
00183 clientTag_.clear();
00184 clientModules_.clear();
00185
00186 if (clientList_.size()==0) return;
00187
00188
00189
00190 clientNames.push_back("RPCMultiplicityTest");
00191 clientHisto.push_back("Multiplicity");
00192 clientTag.push_back(rpcdqm::MULTIPLICITY);
00193 clientModules.push_back( new RPCMultiplicityTest(parameters_));
00194
00195 clientNames.push_back("RPCDeadChannelTest");
00196 clientHisto.push_back("Occupancy");
00197 clientModules.push_back( new RPCDeadChannelTest(parameters_));
00198 clientTag.push_back(rpcdqm::OCCUPANCY);
00199
00200 clientNames.push_back("RPCClusterSizeTest");
00201 clientHisto.push_back("ClusterSize");
00202 clientTag.push_back(rpcdqm::CLUSTERSIZE);
00203 clientModules.push_back( new RPCClusterSizeTest(parameters_));
00204
00205 clientNames.push_back("RPCOccupancyTest");
00206 clientHisto.push_back("Occupancy");
00207 clientTag.push_back(rpcdqm::OCCUPANCY);
00208 clientModules.push_back( new RPCOccupancyTest(parameters_));
00209
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
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 }