Go to the documentation of this file.00001
00002
00003
00004 #include "DQM/RPCMonitorDigi/interface/utils.h"
00005 #include <DQM/RPCMonitorClient/interface/RPCMultiplicityTest.h>
00006
00007
00008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00009
00010 # include "DQMServices/Core/interface/DQMNet.h"
00011
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++ ){
00051
00052 if (i>-3 && i<3){
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 }
00076
00077 if (i == 0 || i< (-1 * numberOfDisks_) || i > numberOfDisks_)continue;
00078
00079 int offset = numberOfDisks_;
00080 if (i>0) offset --;
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 }
00103
00104
00105
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
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
00152 for (unsigned int i = 0 ; i<myNumDigiMe_.size();i++){
00153 this->fillGlobalME(myDetIds_[i],myNumDigiMe_[i]);
00154 }
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){
00186 xBin= detId.sector();
00187 rpcdqm::utils rollNumber;
00188 yBin = rollNumber.detId2RollNr(detId);
00189 }else{
00190
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 }