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
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
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
00060
00061
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
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{
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
00179
00180
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
00196 meMap[os.str()] ->setBinLabel(i, label.str(), 1);
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
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 }