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
00006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00007 #include "FWCore/ServiceRegistry/interface/Service.h"
00008
00009 #include "DQMServices/Core/interface/MonitorElement.h"
00010
00011 #include <DataFormats/MuonDetId/interface/RPCDetId.h>
00012 #include "DataFormats/RPCDigi/interface/RPCDigiCollection.h"
00013
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
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
00078 std::ostringstream tag;
00079 std::ostringstream name;
00080 MonitorElement* me;
00081
00082
00083 RPCGeomServ RPCname(id);
00084 std::string nameRoll = RPCname.name();
00085
00086 RPCGeomServ RPCnumber(id);
00087 int nr = RPCnumber.chambernr();
00088
00089 RPCGeomServ RPCsegment(id);
00090 int seg = RPCsegment.segment();
00091
00092
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 {
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
00102 me = dbe_->get(globalFolder_ + "/AfterPulseBxDiff");
00103 if(!me) continue;
00104 me->Fill(dbx);
00105
00106 if (id.region()!=0){
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 {
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 }
00136 }
00137 }
00138 }
00139 }
00140 }
00141 }