CMS 3D CMS Logo

/data/doxygen/doxygen-1.7.3/gen/CMSSW_4_2_8/src/DQM/RPCMonitorClient/src/RPCMon_SS_Dbx_Global.cc

Go to the documentation of this file.
00001 #include <sstream>
00002 #include <iomanip>
00003 #include <DQM/RPCMonitorClient/interface/RPCMon_SS_Dbx_Global.h>
00004 #include "DQM/RPCMonitorDigi/interface/utils.h"
00005 // Framework
00006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00007 #include "FWCore/ServiceRegistry/interface/Service.h"
00008 //DQM Services
00009 #include "DQMServices/Core/interface/MonitorElement.h"
00010 //DataFormats
00011 #include <DataFormats/MuonDetId/interface/RPCDetId.h>
00012 #include "DataFormats/RPCDigi/interface/RPCDigiCollection.h"
00013 //Geometry
00014 #include "Geometry/RPCGeometry/interface/RPCGeomServ.h"
00015 #include "Geometry/RPCGeometry/interface/RPCGeometry.h"
00016 #include "Geometry/Records/interface/MuonGeometryRecord.h"
00017 
00018 
00019 RPCMon_SS_Dbx_Global::RPCMon_SS_Dbx_Global(const edm::ParameterSet& iConfig ){
00020 
00021 
00022   edm::LogVerbatim ("rpcmonitorerror") << "[RPCMon_SS_Dbx_Global]: Constructor";
00023 
00024 
00025   globalFolder_ = iConfig.getUntrackedParameter<std::string>("GlobalHistogramsFolder","RPC/RecHits/SummaryHistograms");
00026 
00027   saveRootFile_ =  iConfig.getUntrackedParameter<bool>("SaveRootFile", false);
00028   rootFileName_ = iConfig.getUntrackedParameter<std::string>("RootFileName","out.root");
00029   digiLabel_ = iConfig.getUntrackedParameter<std::string>("DigiLabel","muonRPCDigis");
00030   numberOfRings_ = iConfig.getUntrackedParameter<int>("NumberOfEndcapRings", 2);
00031 
00032 }
00033 
00034 RPCMon_SS_Dbx_Global::~RPCMon_SS_Dbx_Global(){
00035   edm::LogVerbatim ("rpcmonitorerror") << "[RPCMon_SS_Dbx_Global]: Destructor ";
00036   dbe_=0;
00037 }
00038 
00039 void RPCMon_SS_Dbx_Global::beginJob(){
00040  edm::LogVerbatim ("rpcmonitorerror") << "[RPCMon_SS_Dbx_Global]: Begin job ";
00041  dbe_ = edm::Service<DQMStore>().operator->();
00042 }
00043 
00044 void RPCMon_SS_Dbx_Global::endJob(){}
00045 
00046 void RPCMon_SS_Dbx_Global::beginRun(const edm::Run& r, const edm::EventSetup& c){
00047   edm::LogVerbatim ("rpcmonitorerror") << "[RPCMon_SS_Dbx_Global]: Begin run";
00048 
00049   dbe_->setCurrentFolder(globalFolder_);
00050 
00051   MonitorElement* me;
00052   me =0;
00053   me = dbe_->get(globalFolder_ + "/AfterPulseBxDiff");
00054   if ( 0!=me) 
00055     dbe_->removeElement(me->getName());
00056   me = dbe_->book1D("AfterPulseBxDiff","After Pulse Bx Difference",13,-6.5,6.5);
00057 }
00058 
00059 void RPCMon_SS_Dbx_Global::analyze(const edm::Event& iEvent, const edm::EventSetup&  iSetup) {
00060 
00061  edm::Handle<RPCDigiCollection> rpcDigis;
00062   iEvent.getByType(rpcDigis);
00063 
00064  edm::ESHandle<RPCGeometry> pDD;
00065  iSetup.get<MuonGeometryRecord>().get( pDD );
00066  rpcdqm::utils rpcUtils;
00067  
00068  RPCDigiCollection::DigiRangeIterator detUnitIt;
00069  
00070  dbe_->setCurrentFolder(globalFolder_);
00071 
00072  // Loop over DetUnit's
00073  for (detUnitIt=rpcDigis->begin();detUnitIt!=rpcDigis->end();++detUnitIt){      
00074    const RPCDetId& id = (*detUnitIt).first;
00075    const RPCRoll* roll = dynamic_cast<const RPCRoll* >( pDD->roll(id));
00076    const RPCDigiCollection::Range& range = (*detUnitIt).second;
00077    //     std::cout <<" detector "<< id.region()<< std::endl;
00078    std::ostringstream tag;
00079    std::ostringstream name;     
00080    MonitorElement* me;
00081 
00082    //get roll name
00083    RPCGeomServ RPCname(id);
00084    std::string nameRoll = RPCname.name();
00085    //get roll number      
00086    RPCGeomServ RPCnumber(id);
00087    int nr = RPCnumber.chambernr();
00088    //get segment (valid only if endcap)
00089    RPCGeomServ RPCsegment(id);
00090    int seg = RPCsegment.segment();
00091    
00092    // Loop over the digis of this DetUnit 
00093    for (RPCDigiCollection::const_iterator digiIt = range.first;digiIt!=range.second;++digiIt) {
00094      if (digiIt->strip() < 1 || digiIt->strip() > roll->nstrips() )
00095        edm::LogVerbatim ("rpcmonitorerror") <<" XXXX  Problem with detector "<< id << ", strip # " << digiIt->strip();
00096      else {  //Loop on digi2
00097        for (RPCDigiCollection::const_iterator digiIt2 = digiIt; digiIt2!=range.second; ++digiIt2) {
00098          int dstrip = digiIt->strip() - digiIt2->strip();
00099          int dbx = digiIt->bx() - digiIt2->bx();
00100          if ( dstrip == 0 && abs(dbx) != 0 ) {
00101            //      std::cout <<" detector 3333 "<< id.region()<<" " << id.ring()<<std::endl;
00102            me = dbe_->get(globalFolder_ + "/AfterPulseBxDiff");
00103            if(!me) continue;
00104            me->Fill(dbx);
00105 
00106            if (id.region()!=0){//Endcap
00107              name.str("");
00108              tag.str("");
00109              tag << "AfterPulse_Ring_vs_Segment_Disk_" << id.region()*id.station();
00110              name << "Endcap, After Pulse, Diff bx, Disk # " << id.region()*id.station();
00111              me = dbe_->get(globalFolder_ + "/"+tag.str());
00112              if (!me){
00113                me = dbe_->book2D (tag.str(),name.str(),36,0.5,36.5, 3*numberOfRings_, 0.0, 3*numberOfRings_);
00114                
00115                rpcUtils.labelXAxisSegment(me);
00116                rpcUtils.labelYAxisRing(me, numberOfRings_);
00117                
00118              }
00119              int yBin;
00120              (numberOfRings_ == 3 ? yBin= id.ring()*3-id.roll()+1 : yBin= (id.ring()-1)*3-id.roll()+1);      
00121              me->Fill(seg, yBin); 
00122            } else { // Barrel ( region == 0 ).
00123              
00124              name.str("");
00125              tag.str("");
00126              tag << "AfterPulse_Roll_vs_Sector_Wheel_" << std::setw(2) << std::setfill('+') << id.ring();
00127              name << "Barrel, After Pulse, Diff. bx, Wheel # " << std::setw(2) << std::setfill('+') << id.ring();
00128              me = dbe_->get(globalFolder_ + "/"+tag.str());
00129              if (!me){
00130                me = dbe_->book2D (tag.str(),name.str(),12,0.5,12.5,21,0.5,21.5);
00131                rpcUtils.labelXAxisSector( me);
00132                rpcUtils.labelYAxisRoll(me, 0, id.ring());
00133              }
00134              me->Fill(id.sector(),nr);
00135            }//Barrel
00136          }
00137        }
00138      }
00139    }
00140  }
00141 }