CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_1_8_patch9/src/DQM/RPCMonitorDigi/src/RPCBookDetUnitME.cc

Go to the documentation of this file.
00001 #include <DQM/RPCMonitorDigi/interface/RPCMonitorDigi.h>
00002 #include <DQM/RPCMonitorDigi/interface/RPCBookFolderStructure.h>
00003 #include "Geometry/Records/interface/MuonGeometryRecord.h"
00004 #include <Geometry/RPCGeometry/interface/RPCGeomServ.h>
00005 #include <Geometry/RPCGeometry/interface/RPCGeometry.h>
00006 #include <DQM/RPCMonitorDigi/interface/utils.h>
00007 
00009 std::map<std::string, MonitorElement*> RPCMonitorDigi::bookDetUnitME(RPCDetId & detId, const edm::EventSetup & iSetup) {
00010   std::map<std::string, MonitorElement*> meMap;  
00011 
00012   std::string ringType;
00013   int ring;
00014   if(detId.region() == 0) {
00015     ringType = "Wheel";  
00016     ring = detId.ring();
00017   }else if (detId.region() == -1){  
00018     ringType =  "Disk";
00019     ring = detId.region()*detId.station();
00020   }else {
00021     ringType =  "Disk";
00022     ring = detId.station();
00023   }
00024 
00025   RPCBookFolderStructure *  folderStr = new RPCBookFolderStructure();
00026   std::string folder = "RPC/RecHits/" +  folderStr->folderStructure(detId);
00027 
00028   dbe->setCurrentFolder(folder);
00029   
00030   //get number of strips in current roll
00031   int nstrips = this->stripsInRoll(detId, iSetup);
00032   if (nstrips == 0 ) nstrips = 1;
00033 
00035   RPCGeomServ RPCname(detId);
00036   std::string nameRoll = RPCname.name();
00037 
00038   
00039 
00040   
00041   std::stringstream os;
00042   os.str("");
00043   os<<"Occupancy_"<<nameRoll;
00044   meMap[os.str()] = dbe->book1D(os.str(), os.str(), nstrips, 0.5, nstrips+0.5);
00045   dbe->tag( meMap[os.str()],  rpcdqm::OCCUPANCY);
00046 
00047   //cout<<meMap[os.str()]->flags()<<endl;
00048 
00049 
00050   if (dqmexpert) {    
00051     os.str("");
00052     os<<"BXN_"<<nameRoll;
00053     meMap[os.str()] = dbe->book1D(os.str(), os.str(), 21, -10.5, 10.5);
00054 
00055     os.str("");
00056     os<<"ClusterSize_"<<nameRoll;
00057     meMap[os.str()] = dbe->book1D(os.str(), os.str(), 20, 0.5, 20.5);
00058    dbe->tag( meMap[os.str()],  rpcdqm::CLUSTERSIZE);
00059    //os.str("");
00060 //     os<<"NumberOfClusters_"<<nameRoll;
00061 //     meMap[os.str()] = dbe->book1D(os.str(), os.str(), 10, 0.5, 10.5);
00062 
00063     os.str("");
00064     os<<"Multiplicity_"<<nameRoll;
00065     meMap[os.str()] = dbe->book1D(os.str(), os.str(), 50, 0.5, 50.5);
00066     dbe->tag( meMap[os.str()],  rpcdqm::MULTIPLICITY);
00067 
00068     os.str("");
00069     os<<"BXWithData_"<<nameRoll;
00070     meMap[os.str()] = dbe->book1D(os.str(), os.str(), 10, 0.5, 10.5);
00071 
00073 
00074     os.str("");
00075     os<<"NumberOfClusters_"<<nameRoll;
00076     meMap[os.str()] = dbe->book1D(os.str(), os.str(),20,0.5,20.5);
00077   }
00078   
00079   if (dqmsuperexpert) {    
00080     os.str("");
00081     os<<"BXN_vs_strip_"<<nameRoll;
00082     meMap[os.str()] = dbe->book2D(os.str(), os.str(),  nstrips , 0.5, nstrips+0.5 , 21, -10.5, 10.5);
00083      
00084     os.str("");
00085     os<<"ClusterSize_vs_Strip_"<<nameRoll;
00086     meMap[os.str()] = dbe->book2D(os.str(), os.str(),nstrips, 0.5, nstrips+0.5,11, 0.5, 11.5);
00087     
00088   }
00089 
00090   MonitorElement * myMe;
00091 
00092   os.str("");
00093   if(detId.region()==0)
00094     os<<"RPC/RecHits/Barrel/Wheel_"<<ring<<"/SummaryBySectors/";
00095   else if (detId.region()==1)
00096     os<<"RPC/RecHits/Endcap+/Disk_"<<ring<<"/SummaryBySectors/";
00097   else 
00098     os<<"RPC/RecHits/Endcap-/Disk_"<<ring<<"/SummaryBySectors/";
00099   std::string WheelSummary = os.str();
00100   dbe->setCurrentFolder(WheelSummary);
00101   
00102   os.str("");
00103   os<<"Occupancy_"<<ringType<<"_"<<ring<<"_Sector_"<<detId.sector();
00104   myMe = dbe->get(WheelSummary+"/"+os.str());
00105   
00106   rpcdqm::utils rpcUtils;
00107   //check if ME for this sector have already been booked
00108   if(myMe)  meMap[os.str()]=myMe;
00109   else {
00110     if(detId.region()==0) {
00111       if (detId.sector()==9 || detId.sector()==11)
00112         meMap[os.str()] = dbe->book2D(os.str(), os.str(), 96, 0.5,96.5, 15, 0.5, 15.5);
00113       else  if (detId.sector()==4) 
00114         meMap[os.str()] = dbe->book2D(os.str(), os.str(),  96, 0.5, 96.5, 21, 0.5, 21.5);
00115       else
00116         meMap[os.str()] = dbe->book2D(os.str(), os.str(), 96, 0.5,  96.5, 17, 0.5, 17.5);
00117 
00118       meMap[os.str()]->setAxisTitle("strip", 1);
00119       rpcUtils.labelYAxisRoll( meMap[os.str()], 0, ring);
00120 
00121     }else{//Endcap
00122       float fBin = ((detId.sector()-1)*6)+ 0.5;
00123       float lBin = fBin+12;
00124       meMap[os.str()] = dbe->book2D(os.str(), os.str(), 96, 0.5, 96.5, 12,fBin, lBin);
00125       meMap[os.str()]->setAxisTitle("strip", 1);
00126       std::stringstream yLabel;
00127       for(int r = 2; r<= 3; r ++) {
00128         int offset = 0;
00129         if (r ==3) offset =6;
00130         for (int i = 1 ; i<=6; i++) {
00131           yLabel.str("");
00132           yLabel<<"R"<<r<<"_C"<<(((detId.sector()-1)*6) +i);
00133           meMap[os.str()]->setBinLabel(i+offset, yLabel.str(), 2);
00134           
00135         }
00136       }
00137       for(int i = 1; i <= 96 ; i++) {
00138         if (i ==1) meMap[os.str()]->setBinLabel(i, "1", 1);
00139         else if (i==16) meMap[os.str()]->setBinLabel(i, "RollA", 1);
00140         else if (i==32) meMap[os.str()]->setBinLabel(i, "32", 1);
00141         else if (i==33) meMap[os.str()]->setBinLabel(i, "1", 1);
00142         else if (i==48) meMap[os.str()]->setBinLabel(i, "RollB", 1);
00143         else if (i==64) meMap[os.str()]->setBinLabel(i, "32", 1);
00144         else if (i==65) meMap[os.str()]->setBinLabel(i, "1", 1);
00145         else if (i==80) meMap[os.str()]->setBinLabel(i, "RollC", 1);
00146         else if (i==96) meMap[os.str()]->setBinLabel(i, "32", 1);
00147         else  meMap[os.str()]->setBinLabel(i, "", 1);
00148       }
00149     } 
00150   }
00151   
00152   os.str("");
00153   os<<"BxDistribution_"<<ringType<<"_"<<ring<<"_Sector_"<<detId.sector();
00154   myMe = dbe->get(WheelSummary+"/"+os.str());
00155   if(myMe)  meMap[os.str()]=myMe;
00156   else meMap[os.str()] = dbe->book1D(os.str(), os.str(), 11, -5.5, 5.5);
00157 
00158   os.str("");
00159   os<<"BXWithData_"<<ringType<<"_"<<ring<<"_Sector_"<<detId.sector();
00160   myMe = dbe->get(WheelSummary+"/"+os.str());
00161   if(myMe)  meMap[os.str()]=myMe;
00162   else  meMap[os.str()] = dbe->book1D(os.str(), os.str(), 10, 0.5, 10.5);
00163 
00164   return meMap;
00165 }
00166 
00167 
00168 
00169 std::map<std::string, MonitorElement*> RPCMonitorDigi::bookRegionRing(int region, int ring) {  
00170   std::map<std::string, MonitorElement*> meMap;  
00171   std::string ringType = (region ==  0)?"Wheel":"Disk";
00172 
00173   dbe->setCurrentFolder(globalFolder_);
00174   std::stringstream os, label;
00175 
00176   rpcdqm::utils rpcUtils;
00177 
00178   // os<<"OccupancyXY_"<<ringType<<"_"<<ring;
00179   //   //  meMap[os.str()] = dbe->book2D(os.str(), os.str(),63, -800, 800, 63, -800, 800);
00180   //     meMap[os.str()] = dbe->book2D(os.str(), os.str(),1000, -800, 800, 1000, -800, 800);
00181   
00182   os.str("");
00183   os<<"ClusterSize_"<<ringType<<"_"<<ring;
00184   meMap[os.str()] = dbe->book1D(os.str(), os.str(),20, 0.5, 20.5);
00185 
00186   os.str("");
00187   os<<"1DOccupancy_"<<ringType<<"_"<<ring;
00188   if (region!=0)  meMap[os.str()] = dbe->book1D(os.str(), os.str(), 6, 0.5, 6.5);
00189   else meMap[os.str()] = dbe->book1D(os.str(), os.str(), 12, 0.5, 12.5);
00190   int sect=7;
00191   if(region==0) sect=13;
00192   for(int i=1; i<sect; i++) {
00193     label.str("");
00194     label<<"Sec"<<i;
00195     //cout<<label.str()<<endl;
00196     meMap[os.str()] ->setBinLabel(i, label.str(), 1); // to be corrected !!!!
00197   }
00198   
00199   if(region==0) {
00200     
00201     os.str("");
00202     os<<"Occupancy_Roll_vs_Sector_"<<ringType<<"_"<<ring;                                   
00203     meMap[os.str()] = dbe->book2D(os.str(), os.str(), 12, 0.5,12.5, 21, 0.5, 21.5);
00204     rpcUtils.labelXAxisSector(meMap[os.str()]);
00205     rpcUtils.labelYAxisRoll( meMap[os.str()], 0, ring);
00206 
00207 
00208   }else{
00209     
00210     os.str("");
00211     os<<"Occupancy_Ring_vs_Segment_"<<ringType<<"_"<<ring;                                  
00212     meMap[os.str()] = dbe->book2D(os.str(), os.str(), 36, 0.5,36.5, 6, 0.5, 6.5);
00213  
00214     rpcUtils.labelXAxisSegment(meMap[os.str()]);
00215     rpcUtils.labelYAxisRing(meMap[os.str()], 2);
00216 
00217   }
00218     
00219     os.str("");
00220     os<<"BxDistribution_"<<ringType<<"_"<<ring;
00221     meMap[os.str()] = dbe->book1D(os.str(), os.str(), 11, -5.5, 5.5);
00222     
00223   
00224   return meMap; 
00225 }
00226 
00227 //returns the number of strips in each roll
00228 int  RPCMonitorDigi::stripsInRoll(RPCDetId & id, const edm::EventSetup & iSetup) {
00229   edm::ESHandle<RPCGeometry> rpcgeo;
00230   iSetup.get<MuonGeometryRecord>().get(rpcgeo);
00231 
00232   const RPCRoll * rpcRoll = rpcgeo->roll(id);
00233 
00234   if (rpcRoll)
00235     return  rpcRoll->nstrips();
00236   else 
00237     return 1;
00238 }