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 #include <iomanip>
00008
00009 void RPCMonitorDigi::bookRollME(RPCDetId & detId, const edm::EventSetup & iSetup, const std::string & recHitType, std::map<std::string, MonitorElement*> & meMap) {
00010
00011
00012
00013 RPCBookFolderStructure * folderStr = new RPCBookFolderStructure();
00014 std::string folder = subsystemFolder_+ "/"+ recHitType +"/"+folderStr->folderStructure(detId);
00015
00016 dbe->setCurrentFolder(folder);
00017
00018
00019 int nstrips = this->stripsInRoll(detId, iSetup);
00020 if (nstrips == 0 ) nstrips = 1;
00021
00023 RPCGeomServ RPCname(detId);
00024 std::string nameRoll = "";
00025
00026 if (RPCMonitorDigi::useRollInfo_) {
00027 nameRoll = RPCname.name();
00028 }else{
00029 nameRoll = RPCname.chambername();
00030 }
00031
00032 if(detId.region() != 0 ||
00033 (abs(detId.ring()) == 2 && detId.station()== 2 && detId.layer() != 1) ||
00034 (abs(detId.ring()) != 2 && detId.station()== 2 && detId.layer() == 1)){nstrips *= 3;}
00035 else {
00036 nstrips *= 2;
00037 }
00038
00039
00040 std::stringstream os;
00041 os.str("");
00042 os<<"Occupancy_"<<nameRoll;
00043 meMap[os.str()] = dbe->book1D(os.str(), os.str(), nstrips, 0.5, nstrips+0.5);
00044 dbe->tag( meMap[os.str()], rpcdqm::OCCUPANCY);
00045
00046 os.str("");
00047 os<<"BXDistribution_"<<nameRoll;
00048 meMap[os.str()] = dbe->book1D(os.str(), os.str(), 7, -3.5, 3.5);
00049
00050
00051 if(detId.region() == 0){
00052 os.str("");
00053 os<<"ClusterSize_"<<nameRoll;
00054 meMap[os.str()] = dbe->book1D(os.str(), os.str(), 15, 0.5, 15.5);
00055 dbe->tag( meMap[os.str()], rpcdqm::CLUSTERSIZE);
00056
00057 os.str("");
00058 os<<"Multiplicity_"<<nameRoll;
00059 meMap[os.str()] = dbe->book1D(os.str(), os.str(), 30, 0.5, 30.5);
00060 dbe->tag( meMap[os.str()], rpcdqm::MULTIPLICITY);
00061
00062 }else{
00063 os.str("");
00064 os<<"ClusterSize_"<<nameRoll;
00065 meMap[os.str()] = dbe->book1D(os.str(), os.str(), 10, 0.5, 10.5);
00066 dbe->tag( meMap[os.str()], rpcdqm::CLUSTERSIZE);
00067
00068 os.str("");
00069 os<<"Multiplicity_"<<nameRoll;
00070 meMap[os.str()] = dbe->book1D(os.str(), os.str(), 15, 0.5, 15.5);
00071 dbe->tag( meMap[os.str()], rpcdqm::MULTIPLICITY);
00072 }
00073
00074
00075
00076
00077
00078
00079 os.str("");
00080 os<<"NumberOfClusters_"<<nameRoll;
00081 meMap[os.str()] = dbe->book1D(os.str(), os.str(),10,0.5,10.5);
00082
00083
00084 delete folderStr;
00085
00086 }
00087
00088
00089 void RPCMonitorDigi::bookSectorRingME(const std::string &recHitType, std::map<std::string, MonitorElement*> & meMap) {
00090
00091
00092
00093 std::stringstream os;
00094
00095 for(int wheel = -2 ; wheel <= 2; wheel++){
00096 os.str("");
00097 os<< subsystemFolder_<< "/"<<recHitType<<"/Barrel/Wheel_"<<wheel<<"/SummaryBySectors";
00098 dbe->setCurrentFolder(os.str());
00099
00100 for (int sector = 1 ; sector <= 12 ; sector++){
00101
00102 os.str("");
00103 os<<"Occupancy_Wheel_"<<wheel<<"_Sector_"<<sector;
00104
00105 if (sector==9 || sector==11)
00106 meMap[os.str()] = dbe->book2D(os.str(), os.str(), 90, 0.5, 90.5, 15, 0.5, 15.5);
00107 else if (sector==4)
00108 meMap[os.str()] = dbe->book2D(os.str(), os.str(), 90, 0.5, 90.5, 21, 0.5, 21.5);
00109 else
00110 meMap[os.str()] = dbe->book2D(os.str(), os.str(), 90, 0.5, 90.5, 17, 0.5, 17.5);
00111
00112 meMap[os.str()]->setAxisTitle("strip", 1);
00113 rpcdqm::utils rpcUtils;
00114 rpcUtils.labelYAxisRoll( meMap[os.str()], 0, wheel, true);
00115
00116
00117
00118
00119
00120 }
00121 }
00122
00123
00124 for (int region = -1 ; region <= 1; region++){
00125 if( region == 0 ) continue;
00126
00127 std::string regionName = "Endcap-";
00128 if(region == 1) regionName = "Endcap+";
00129
00130 for (int disk = 1; disk <= RPCMonitorDigi::numberOfDisks_; disk++) {
00131 os.str("");
00132 os<< subsystemFolder_<< "/"<<recHitType<<"/"<<regionName<<"/Disk_"<<(region * disk)<<"/SummaryByRings/";
00133
00134 dbe->setCurrentFolder(os.str());
00135
00136 for (int ring = RPCMonitorDigi::numberOfInnerRings_ ; ring <= 3; ring ++) {
00137
00138 os.str("");
00139 os<<"Occupancy_Disk_"<<(region * disk)<<"_Ring_"<<ring<<"_CH01-CH18";
00140
00141 meMap[os.str()] = dbe->book2D(os.str(), os.str(), 96, 0.5, 96.5, 18 , 0.5, 18.5);
00142 meMap[os.str()]->setAxisTitle("strip", 1);
00143
00144 std::stringstream yLabel;
00145 for (int i = 1 ; i<=18; i++) {
00146 yLabel.str("");
00147 yLabel<<"R"<<ring<<"_CH"<<std::setw(2)<<std::setfill('0')<<i;
00148 meMap[os.str()]->setBinLabel(i, yLabel.str(), 2);
00149 }
00150
00151
00152 for(int i = 1; i <= 96 ; i++) {
00153 if (i ==1) meMap[os.str()]->setBinLabel(i, "1", 1);
00154 else if (i==16) meMap[os.str()]->setBinLabel(i, "RollA", 1);
00155 else if (i==32) meMap[os.str()]->setBinLabel(i, "32", 1);
00156 else if (i==33) meMap[os.str()]->setBinLabel(i, "1", 1);
00157 else if (i==48) meMap[os.str()]->setBinLabel(i, "RollB", 1);
00158 else if (i==64) meMap[os.str()]->setBinLabel(i, "32", 1);
00159 else if (i==65) meMap[os.str()]->setBinLabel(i, "1", 1);
00160 else if (i==80) meMap[os.str()]->setBinLabel(i, "RollC", 1);
00161 else if (i==96) meMap[os.str()]->setBinLabel(i, "32", 1);
00162 else meMap[os.str()]->setBinLabel(i, "", 1);
00163 }
00164
00165
00166 os.str("");
00167 os<<"Occupancy_Disk_"<<(region * disk)<<"_Ring_"<<ring<<"_CH19-CH36";
00168
00169 meMap[os.str()] = dbe->book2D(os.str(), os.str(), 96, 0.5, 96.5, 18 , 18.5, 36.5);
00170 meMap[os.str()]->setAxisTitle("strip", 1);
00171
00172 for (int i = 1 ; i<= 18; i++) {
00173 yLabel.str("");
00174 yLabel<<"R"<<ring<<"_CH"<<i+18;
00175 meMap[os.str()]->setBinLabel(i, yLabel.str(), 2);
00176 }
00177
00178
00179 for(int i = 1; i <= 96 ; i++) {
00180 if (i ==1) meMap[os.str()]->setBinLabel(i, "1", 1);
00181 else if (i==16) meMap[os.str()]->setBinLabel(i, "RollA", 1);
00182 else if (i==32) meMap[os.str()]->setBinLabel(i, "32", 1);
00183 else if (i==33) meMap[os.str()]->setBinLabel(i, "1", 1);
00184 else if (i==48) meMap[os.str()]->setBinLabel(i, "RollB", 1);
00185 else if (i==64) meMap[os.str()]->setBinLabel(i, "32", 1);
00186 else if (i==65) meMap[os.str()]->setBinLabel(i, "1", 1);
00187 else if (i==80) meMap[os.str()]->setBinLabel(i, "RollC", 1);
00188 else if (i==96) meMap[os.str()]->setBinLabel(i, "32", 1);
00189 else meMap[os.str()]->setBinLabel(i, "", 1);
00190 }
00191
00192
00193
00194
00195
00196
00197 }
00198 }
00199 }
00200
00201
00202 }
00203
00204
00205 void RPCMonitorDigi::bookWheelDiskME(const std::string &recHitType, std::map<std::string, MonitorElement*> &meMap) {
00206
00207
00208
00209 dbe->setCurrentFolder(subsystemFolder_ +"/"+recHitType+"/"+ globalFolder_);
00210
00211 std::stringstream os, label, name, title ;
00212 rpcdqm::utils rpcUtils;
00213
00214 for (int wheel = -2 ; wheel<= 2; wheel++ ) {
00215
00216
00217
00218
00219
00220
00221 os.str("");
00222 os<<"1DOccupancy_Wheel_"<<wheel;
00223 meMap[os.str()] = dbe->book1D(os.str(), os.str(), 12, 0.5, 12.5);
00224 for(int i=1; i<12; i++) {
00225 label.str("");
00226 label<<"Sec"<<i;
00227 meMap[os.str()] ->setBinLabel(i, label.str(), 1);
00228 }
00229
00230 os.str("");
00231 os<<"Occupancy_Roll_vs_Sector_Wheel_"<<wheel;
00232 meMap[os.str()] = dbe->book2D(os.str(), os.str(), 12, 0.5,12.5, 21, 0.5, 21.5);
00233 rpcUtils.labelXAxisSector(meMap[os.str()]);
00234 rpcUtils.labelYAxisRoll( meMap[os.str()], 0, wheel, true);
00235
00236 os.str("");
00237 os<<"BxDistribution_Wheel_"<<wheel;
00238 meMap[os.str()] = dbe->book1D(os.str(), os.str(), 9, -4.5, 4.5);
00239
00240
00241 for(int layer = 1 ; layer <= 6 ; layer ++){
00242 name.str("");
00243 title.str("");
00244 name<<"ClusterSize_Wheel_"<<wheel<<"_Layer"<< layer;
00245 title<< "ClusterSize - Wheel "<<wheel<<" Layer"<<layer;
00246 meMap[name.str()] = dbe->book1D(name.str(), title.str(), 16, 0.5, 16.5);
00247 }
00248
00249
00250
00251 }
00252
00253
00254 for (int disk = - RPCMonitorDigi::numberOfDisks_; disk <= RPCMonitorDigi::numberOfDisks_; disk++){
00255
00256 if(disk == 0) continue;
00257
00258
00259 os.str("");
00260 os<<"Occupancy_Ring_vs_Segment_Disk_"<<disk;
00261 meMap[os.str()] = dbe->book2D(os.str(), os.str(), 36, 0.5,36.5, 6, 0.5, 6.5);
00262
00263 rpcUtils.labelXAxisSegment(meMap[os.str()]);
00264 rpcUtils.labelYAxisRing(meMap[os.str()], 2, true);
00265
00266 os.str("");
00267 os<<"BxDistribution_Disk_"<<disk;
00268 meMap[os.str()] = dbe->book1D(os.str(), os.str(), 9, -4.5, 4.5);
00269
00270
00271 for(int ring = RPCMonitorDigi::numberOfInnerRings_ ; ring <= 3 ; ring ++){
00272
00273 name.str("");
00274 title.str("");
00275 name<<"ClusterSize_Disk_"<<disk<<"_Ring"<< ring;
00276 title<< "ClusterSize - Disk"<<disk<<" Ring"<<ring;
00277 meMap[name.str()] = dbe->book1D(name.str(), title.str(), 16, 0.5, 16.5);
00278
00279 }
00280
00281 }
00282
00283 for(int ring = RPCMonitorDigi::numberOfInnerRings_ ; ring <= 3 ; ring ++){
00284 os.str("");
00285 os<<"1DOccupancy_Ring_"<<ring;
00286 meMap[os.str()] = dbe->book1D(os.str(), os.str(), 6 , 0.5, 6.5);
00287 for(int xbin= 1 ; xbin<= 6 ; xbin++) {
00288 label.str("");
00289 if (xbin < 4) label<<"Disk "<< (xbin - 4);
00290 else label<<"Disk "<< (xbin - 3);
00291 meMap[os.str()] ->setBinLabel(xbin, label.str(), 1);
00292 }
00293 }
00294
00295
00296
00297
00298
00299 }
00300
00301
00302
00303
00304 int RPCMonitorDigi::stripsInRoll(RPCDetId & id, const edm::EventSetup & iSetup) {
00305 edm::ESHandle<RPCGeometry> rpcgeo;
00306 iSetup.get<MuonGeometryRecord>().get(rpcgeo);
00307
00308 const RPCRoll * rpcRoll = rpcgeo->roll(id);
00309
00310 if (!rpcRoll) return 1;
00311
00312 return rpcRoll->nstrips();
00313
00314
00315
00316 }
00317
00318
00319 void RPCMonitorDigi::bookRegionME(const std::string & recHitType, std::map<std::string, MonitorElement*> & meMap) {
00320
00321
00322
00323
00324 std::string currentFolder = subsystemFolder_ +"/"+recHitType+"/"+ globalFolder_;
00325 dbe->setCurrentFolder(currentFolder);
00326
00327 MonitorElement * me = NULL;
00328 std::stringstream name;
00329 std::stringstream title;
00330 for(int r = 0; r < 3; r++){
00331
00332 std::string regionName = RPCMonitorDigi::regionNames_[r];
00333
00334 name.str("");
00335 title.str("");
00336 name<<"ClusterSize_"<< regionName;
00337 title<< "ClusterSize - "<<regionName;
00338 me = dbe->get(currentFolder+ "/" + name.str());
00339 if (me) dbe->removeElement(me->getName());
00340 meMap[name.str()] = dbe->book1D(name.str(), title.str(), 16, 0.5, 16.5);
00341
00342
00343 }
00344
00345
00346
00347 name.str("");
00348 title.str("");
00349 name<<"NumberOfClusters_Barrel";
00350 title<< "Number of Clusters per Event - Barrel";
00351 me = dbe->get(currentFolder+ "/" + name.str());
00352 if (me) dbe->removeElement(me->getName());
00353 meMap[name.str()] = dbe->book1D(name.str(), title.str(), 30, 0.5, 30.5);
00354
00355 name.str("");
00356 title.str("");
00357 name<<"NumberOfClusters_Endcap+";
00358 title<< "Number of Clusters per Event - Endcap+";
00359 me = dbe->get(currentFolder+ "/" + name.str());
00360 if (me) dbe->removeElement(me->getName());
00361 meMap[name.str()] = dbe->book1D(name.str(), title.str(), 15, 0.5, 15.5);
00362
00363 name.str("");
00364 title.str("");
00365 name<<"NumberOfClusters_Endcap-";
00366 title<< "Number of Clusters per Event - Endcap-";
00367 me = dbe->get(currentFolder+ "/" + name.str());
00368 if (me) dbe->removeElement(me->getName());
00369 meMap[name.str()] = dbe->book1D(name.str(), title.str(), 15, 0.5, 15.5);
00370
00371
00372 name.str("");
00373 title.str("");
00374 name<<"Multiplicity_Barrel";
00375 title<< "Multiplicity per Event per Roll - Barrel";
00376 me = dbe->get(currentFolder+ "/" + name.str());
00377 if (me) dbe->removeElement(me->getName());
00378 meMap[name.str()] = dbe->book1D(name.str(), title.str(), 50, 0.5, 50.5);
00379
00380
00381 name.str("");
00382 title.str("");
00383 name<<"Multiplicity_Endcap+";
00384 title<< "Multiplicity per Event per Roll - Endcap+";
00385 me = dbe->get(currentFolder+ "/" + name.str());
00386 if (me) dbe->removeElement(me->getName());
00387 meMap[name.str()] = dbe->book1D(name.str(), title.str(), 32, 0.5, 32.5);
00388
00389 name.str("");
00390 title.str("");
00391 name<<"Multiplicity_Endcap-";
00392 title<< "Multiplicity per Event per Roll - Endcap-";
00393 me = dbe->get(currentFolder+ "/" + name.str());
00394 if (me) dbe->removeElement(me->getName());
00395 meMap[name.str()] = dbe->book1D(name.str(), title.str(), 32, 0.5, 32.5);
00396
00397
00398 for(int layer = 1 ; layer <= 6 ; layer ++){
00399
00400 name.str("");
00401 title.str("");
00402 name<<"ClusterSize_Layer"<< layer;
00403 title<< "ClusterSize - Layer"<<layer;
00404 me = dbe->get(currentFolder+ "/" + name.str());
00405 if (me) dbe->removeElement(me->getName());
00406 meMap[name.str()] = dbe->book1D(name.str(), title.str(), 16, 0.5, 16.5);
00407 }
00408
00409 for(int ring = RPCMonitorDigi::numberOfInnerRings_ ; ring <= 3 ; ring ++){
00410
00411 name.str("");
00412 title.str("");
00413 name<<"ClusterSize_Ring"<< ring;
00414 title<< "ClusterSize - Ring"<<ring;
00415 me = dbe->get(currentFolder+ "/" + name.str());
00416 if (me) dbe->removeElement(me->getName());
00417 meMap[name.str()] = dbe->book1D(name.str(), title.str(), 16, 0.5, 16.5);
00418
00419 }
00420
00421
00422 me = dbe->get(currentFolder+ "/Occupancy_for_Endcap");
00423 if (me) dbe->removeElement(me->getName());
00424 meMap["Occupancy_for_Endcap"] = dbe -> book2D("Occupancy_for_Endcap", "Occupancy Endcap", 6, 0.5, 6.5, 2, 1.5, 3.5);
00425 meMap["Occupancy_for_Endcap"] ->setAxisTitle("Disk", 1);
00426 meMap["Occupancy_for_Endcap"] ->setAxisTitle("Ring", 2);
00427
00428 std::stringstream binlabel;
00429 for (int bin = 1 ; bin <= 6 ; bin++){
00430 binlabel.str("");
00431 if(bin<4) {
00432 binlabel<<(bin-4);
00433 }else{
00434 binlabel<<(bin-3);
00435 }
00436 meMap["Occupancy_for_Endcap"]->setBinLabel( bin , binlabel.str(), 1);
00437 }
00438
00439 meMap["Occupancy_for_Endcap"]->setBinLabel( 1 , "2", 2);
00440 meMap["Occupancy_for_Endcap"]->setBinLabel( 2 , "3", 2);
00441
00442
00443 me = dbe->get(currentFolder+ "/Occupancy_for_Barrel");
00444 if (me) dbe->removeElement(me->getName());
00445 meMap["Occupancy_for_Barrel"] = dbe -> book2D("Occupancy_for_Barrel", "Occupancy Barrel", 12, 0.5 , 12.5, 5, -2.5, 2.5 );
00446 meMap["Occupancy_for_Barrel"] ->setAxisTitle("Sec", 1);
00447 meMap["Occupancy_for_Barrel"] ->setAxisTitle("Wheel", 2);
00448
00449 for (int bin = 1 ; bin <= 12 ; bin++){
00450 binlabel.str("");
00451 binlabel<<bin;
00452 meMap["Occupancy_for_Barrel"]->setBinLabel( bin , binlabel.str(), 1);
00453 if(bin <= 5 ){
00454 binlabel.str("");
00455 binlabel<< (bin - 3);
00456 meMap["Occupancy_for_Barrel"]->setBinLabel( bin , binlabel.str(), 2);
00457 }
00458 }
00459
00460
00461 }