CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch12/src/DQM/RPCMonitorClient/src/RPCMultiplicityTest.cc

Go to the documentation of this file.
00001 /*
00002  *  \author Anna Cimmino
00003  */
00004 #include "DQM/RPCMonitorDigi/interface/utils.h"
00005 #include <DQM/RPCMonitorClient/interface/RPCMultiplicityTest.h>
00006 
00007 // Framework
00008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00009 //DQMServices
00010 # include "DQMServices/Core/interface/DQMNet.h"
00011 // Geometry
00012 #include "Geometry/RPCGeometry/interface/RPCGeomServ.h"
00013 
00014 #include <sstream>
00015 
00016 RPCMultiplicityTest::RPCMultiplicityTest(const edm::ParameterSet& ps ){
00017   edm::LogVerbatim ("multiplicity") << "[RPCMultiplicityTest]: Constructor";
00018 
00019   globalFolder_ = ps.getUntrackedParameter<std::string>("RPCGlobalFolder", "RPC/RecHits/SummaryHistograms");
00020   prescaleFactor_ = ps.getUntrackedParameter<int>("DiagnosticPrescale", 1);
00021   numberOfDisks_ = ps.getUntrackedParameter<int>("NumberOfEndcapDisks", 3);
00022   numberOfRings_ = ps.getUntrackedParameter<int>("NumberOfEndcapRings", 2);
00023 }
00024 
00025 RPCMultiplicityTest::~RPCMultiplicityTest(){
00026   dbe_ = 0;
00027 }
00028 
00029 
00030 void RPCMultiplicityTest::beginJob(DQMStore *  dbe ){
00031  edm::LogVerbatim ("multiplicity") << "[RPCMultiplicityTest]: Begin job";
00032  dbe_=dbe;
00033 }
00034 
00035 
00036 void RPCMultiplicityTest::endRun(const edm::Run& r, const edm::EventSetup& iSetup,std::vector<MonitorElement *> meVector, std::vector<RPCDetId> detIdVector){
00037 
00038   edm::LogVerbatim ("multiplicity") << "[RPCMultiplicityTest]: End run";
00039   
00040   MonitorElement* me=NULL;
00041   dbe_->setCurrentFolder(globalFolder_);
00042   
00043   std::stringstream histoName;
00044   
00045   rpcdqm::utils rpcUtils;
00046   
00047   int limit = numberOfDisks_;
00048   if(numberOfDisks_ < 2) limit = 2;
00049   
00050   for (int i = -1 * limit; i<=limit;i++ ){//loop on wheels and disks
00051   
00052     if (i>-3 && i<3){//wheels  
00053       histoName.str("");
00054       histoName<<"NumberOfDigi_Mean_Roll_vs_Sector_Wheel"<<i;
00055       me = 0;
00056       me = dbe_->get(globalFolder_ +"/"+ histoName.str());
00057       if ( 0!=me) {
00058         dbe_->removeElement(me->getName());
00059       }
00060       
00061       MULTWheel[i+2] = dbe_->book2D(histoName.str().c_str(), histoName.str().c_str(), 12, 0.5, 12.5, 21, 0.5, 21.5);
00062       
00063       rpcUtils.labelXAxisSector( MULTWheel[i+2]);
00064       rpcUtils.labelYAxisRoll( MULTWheel[i+2], 0, i);
00065       
00066       histoName.str("");
00067       histoName<<"NumberOfDigi_Mean_Distribution_Wheel"<<i;
00068       me = 0;
00069       me = dbe_->get(globalFolder_ +"/"+ histoName.str());
00070       if ( 0!=me) {
00071         dbe_->removeElement(me->getName());
00072       }
00073       
00074       MULTDWheel[i+2] = dbe_->book1D(histoName.str().c_str(), histoName.str().c_str(), 100, 0.5, 50.5);
00075     }//end wheels
00076     
00077     if (i == 0 || i< (-1 * numberOfDisks_) || i > numberOfDisks_)continue;
00078 
00079     int offset = numberOfDisks_;
00080     if (i>0) offset --; //used to skip case equale to zero
00081   
00082     histoName.str("");
00083     histoName<<"NumberOfDigi_Mean_Ring_vs_Segment_Disk"<<i;
00084     me = 0;
00085     me = dbe_->get(globalFolder_ +"/"+ histoName.str());
00086     if ( 0!=me) {
00087       dbe_->removeElement(me->getName());
00088     }
00089     MULTDisk[i+offset]   = dbe_->book2D(histoName.str().c_str(), histoName.str().c_str(),36, 0.5, 36.5, 3*numberOfRings_, 0.5,3*numberOfRings_+ 0.5);
00090     rpcUtils.labelXAxisSegment(MULTDisk[i+offset]);
00091     rpcUtils.labelYAxisRing(MULTDisk[i+offset], numberOfRings_);
00092 
00093     histoName.str("");
00094     histoName<<"NumberOfDigi_Mean_Distribution_Disk"<<i;
00095     me = 0;
00096     me = dbe_->get(globalFolder_ +"/"+ histoName.str());
00097     if ( 0!=me) {
00098       dbe_->removeElement(me->getName());
00099     }
00100     
00101     MULTDDisk[i+offset] = dbe_->book1D(histoName.str().c_str(), histoName.str().c_str(), 100, 0.5, 50.5);
00102   }//end loop on wheels and disks
00103 
00104 
00105   //Get NumberOfDigi ME for each roll
00106   for (unsigned int i = 0 ; i<meVector.size(); i++){
00107     
00108     bool flag= false;
00109     
00110     DQMNet::TagList tagList;
00111     tagList = meVector[i]->getTags();
00112     DQMNet::TagList::iterator tagItr = tagList.begin();
00113     
00114     while (tagItr != tagList.end() && !flag ) {
00115       if((*tagItr) ==  rpcdqm::MULTIPLICITY)
00116         flag= true;
00117       
00118       tagItr++;
00119     }
00120     
00121     if(flag){
00122       myNumDigiMe_.push_back(meVector[i]);
00123       myDetIds_.push_back(detIdVector[i]);
00124     }
00125   }
00126 }
00127 
00128 
00129 void RPCMultiplicityTest::beginLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& context) {}
00130 
00131 void RPCMultiplicityTest::analyze(const edm::Event& iEvent, const edm::EventSetup& c){}
00132 
00133 void RPCMultiplicityTest::endLuminosityBlock(edm::LuminosityBlock const& lumiSeg, edm::EventSetup const& iSetup) {}
00134 
00135 void RPCMultiplicityTest::clientOperation(edm::EventSetup const& iSetup) {
00136 
00137   edm::LogVerbatim ("multiplicity") <<"[RPCMultiplicityTest]: Client Operation";
00138 
00139   //Clear Distributions
00140   int limit = numberOfDisks_ * 2;
00141   if(numberOfDisks_<2) limit = 5;
00142 
00143   for(int i =0 ; i<limit; i++){
00144 
00145     if(i < numberOfDisks_ * 2)
00146       MULTDDisk[i]->Reset();
00147     if(i<5)
00148       MULTDWheel[i]->Reset();
00149   }
00150  
00151   //Loop on MEs
00152   for (unsigned int  i = 0 ; i<myNumDigiMe_.size();i++){
00153     this->fillGlobalME(myDetIds_[i],myNumDigiMe_[i]);
00154   }//End loop on MEs
00155 }
00156  
00157 void RPCMultiplicityTest::beginRun(const edm::Run& r, const edm::EventSetup& c){}
00158 
00159  void RPCMultiplicityTest::endJob(){}
00160 
00161 void  RPCMultiplicityTest::fillGlobalME(RPCDetId & detId, MonitorElement * myMe){
00162 
00163   MonitorElement * MULT =NULL;
00164   MonitorElement * MULTD = NULL;
00165 
00166   if (detId.region()==0) {
00167     MULT = MULTWheel[detId.ring()+2];
00168     MULTD = MULTDWheel[detId.ring()+2];
00169   }else{
00170     if(-detId.station() + numberOfDisks_ >= 0 ){
00171     
00172       if(detId.region()<0){
00173       MULT = MULTDisk[-detId.station() + numberOfDisks_];
00174       MULTD = MULTDDisk[-detId.station()+ numberOfDisks_];
00175       }else{
00176         MULT = MULTDisk[detId.station()+ numberOfDisks_ -1];
00177         MULTD = MULTDDisk[detId.station()+ numberOfDisks_-1];
00178       }
00179     }
00180   }
00181 
00182   if ( MULT && MULTD ){
00183     
00184     int xBin,yBin;
00185     if(detId.region()==0){//Barrel
00186       xBin= detId.sector();
00187       rpcdqm::utils rollNumber;
00188       yBin = rollNumber.detId2RollNr(detId);
00189     }else{//Endcap
00190       //get segment number
00191       RPCGeomServ RPCServ(detId);
00192       xBin = RPCServ.segment();
00193       (numberOfRings_ == 3 ? yBin= detId.ring()*3-detId.roll()+1 : yBin= (detId.ring()-1)*3-detId.roll()+1);
00194     }
00195     
00196     float mean = myMe->getMean();
00197     
00198     MULT->setBinContent(xBin,yBin, mean );
00199     MULTD->Fill(mean);
00200   }
00201   
00202   
00203 }