00001 #include "DQM/SiPixelMonitorRecHit/interface/SiPixelRecHitModule.h"
00002 #include "DQMServices/Core/interface/DQMStore.h"
00003 #include "DQM/SiPixelCommon/interface/SiPixelHistogramId.h"
00005 #include "FWCore/ServiceRegistry/interface/Service.h"
00006
00007 #include <vector>
00008 #include <memory>
00009 #include <string>
00010 #include <iostream>
00011 #include <stdlib.h>
00012
00013
00014 #include "DataFormats/SiPixelDetId/interface/PixelBarrelName.h"
00015 #include "DataFormats/SiPixelDetId/interface/PixelEndcapName.h"
00016 #include "DataFormats/DetId/interface/DetId.h"
00017 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
00018
00019
00020
00021 SiPixelRecHitModule::SiPixelRecHitModule() : id_(0) { }
00023 SiPixelRecHitModule::SiPixelRecHitModule(const uint32_t& id) :
00024 id_(id)
00025 {
00026 }
00027
00028
00029
00030
00031 SiPixelRecHitModule::~SiPixelRecHitModule() {}
00032
00033
00034
00035 void SiPixelRecHitModule::book(const edm::ParameterSet& iConfig, int type, bool twoD) {
00036
00037 bool barrel = DetId::DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00038 bool endcap = DetId::DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00039 bool isHalfModule = false;
00040 if(barrel){
00041 isHalfModule = PixelBarrelName::PixelBarrelName(DetId::DetId(id_)).isHalfModule();
00042 }
00043
00044 std::string hid;
00045
00046 edm::InputTag src = iConfig.getParameter<edm::InputTag>( "src" );
00047 SiPixelHistogramId* theHistogramId = new SiPixelHistogramId( src.label() );
00048
00049 DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
00050
00051
00052 if(type==0){
00053 if(twoD){
00054
00055 hid = theHistogramId->setHistoId("xypos",id_);
00056 meXYPos_ = theDMBE->book2D(hid,"XY Position",100,-1.,1,100,-4,4);
00057 meXYPos_->setAxisTitle("X Position",1);
00058 meXYPos_->setAxisTitle("Y Position",2);
00059 }
00060 else{
00061
00062 hid = theHistogramId->setHistoId("xypos",id_);
00063 meXYPos_px_ = theDMBE->book1D(hid+"_px","X Position",100,-1.,1);
00064 meXYPos_px_->setAxisTitle("X Position",1);
00065 meXYPos_py_ = theDMBE->book1D(hid+"_py","Y Position",100,-4,4);
00066 meXYPos_py_->setAxisTitle("Y Position",1);
00067 }
00068 hid = theHistogramId->setHistoId("ClustX",id_);
00069 meClustX_ = theDMBE->book1D(hid, "Cluster X size", 10, 0, 10);
00070 meClustX_->setAxisTitle("Cluster size X dimension", 1);
00071 hid = theHistogramId->setHistoId("ClustY",id_);
00072 meClustY_ = theDMBE->book1D(hid, "Cluster Y size", 25, 0., 25.);
00073 meClustY_->setAxisTitle("Cluster size Y dimension", 1);
00074 hid = theHistogramId->setHistoId("nRecHits",id_);
00075 menRecHits_ = theDMBE->book1D(hid, "# of rechits in this module", 50, 0, 50);
00076 menRecHits_->setAxisTitle("number of rechits",1);
00077 delete theHistogramId;
00078 }
00079
00080 if(type==1 && barrel){
00081 uint32_t DBladder = PixelBarrelName::PixelBarrelName(DetId::DetId(id_)).ladderName();
00082 char sladder[80]; sprintf(sladder,"Ladder_%02i",DBladder);
00083 hid = src.label() + "_" + sladder;
00084 if(isHalfModule) hid += "H";
00085 else hid += "F";
00086 if(twoD){
00087 meXYPosLad_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
00088 meXYPosLad_->setAxisTitle("X Position",1);
00089 meXYPosLad_->setAxisTitle("Y Position",2);
00090 }
00091 else{
00092
00093 meXYPosLad_px_ = theDMBE->book1D("xypos_"+hid+"_px","X Position",100,-1.,1);
00094 meXYPosLad_px_->setAxisTitle("X Position",1);
00095 meXYPosLad_py_ = theDMBE->book1D("xypos_"+hid+"_py","Y Position",100,-4,4);
00096 meXYPosLad_py_->setAxisTitle("Y Position",1);
00097 }
00098 meClustXLad_ = theDMBE->book1D("ClustX_" +hid, "Cluster X size", 10, 0, 10);
00099 meClustXLad_->setAxisTitle("Cluster size X dimension", 1);
00100 meClustYLad_ = theDMBE->book1D("ClustY_" +hid,"Cluster Y size", 25, 0.,25.);
00101 meClustYLad_->setAxisTitle("Cluster size Y dimension", 1);
00102 menRecHitsLad_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 50, 0, 50);
00103 menRecHitsLad_->setAxisTitle("number of rechits",1);
00104
00105 }
00106
00107 if(type==2 && barrel){
00108
00109 uint32_t DBlayer = PixelBarrelName::PixelBarrelName(DetId::DetId(id_)).layerName();
00110 char slayer[80]; sprintf(slayer,"Layer_%i",DBlayer);
00111 hid = src.label() + "_" + slayer;
00112
00113 if(twoD){
00114 meXYPosLay_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
00115 meXYPosLay_->setAxisTitle("X Position",1);
00116 meXYPosLay_->setAxisTitle("Y Position",2);
00117 }
00118 else{
00119
00120 meXYPosLay_px_ = theDMBE->book1D("xypos_"+hid+"_px","X Position",100,-1.,1);
00121 meXYPosLay_px_->setAxisTitle("X Position",1);
00122 meXYPosLay_py_ = theDMBE->book1D("xypos_"+hid+"_py","Y Position",100,-4,4);
00123 meXYPosLay_py_->setAxisTitle("Y Position",1);
00124 }
00125
00126 meClustXLay_ = theDMBE->book1D("ClustX_" +hid, "Cluster X size", 10, 0, 10);
00127 meClustXLay_->setAxisTitle("Cluster size X dimension", 1);
00128 meClustYLay_ = theDMBE->book1D("ClustY_" +hid,"Cluster Y size", 25, 0.,25.);
00129 meClustYLay_->setAxisTitle("Cluster size Y dimension", 1);
00130 menRecHitsLay_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 50, 0, 50);
00131 menRecHitsLay_->setAxisTitle("number of rechits",1);
00132
00133 }
00134
00135 if(type==3 && barrel){
00136 uint32_t DBmodule = PixelBarrelName::PixelBarrelName(DetId::DetId(id_)).moduleName();
00137 char smodule[80]; sprintf(smodule,"Ring_%i",DBmodule);
00138 hid = src.label() + "_" + smodule;
00139
00140 if(twoD){
00141 meXYPosPhi_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
00142 meXYPosPhi_->setAxisTitle("X Position",1);
00143 meXYPosPhi_->setAxisTitle("Y Position",2);
00144 }
00145 else{
00146
00147 meXYPosPhi_px_ = theDMBE->book1D("xypos_"+hid+"_px","X Position",100,-1.,1);
00148 meXYPosPhi_px_->setAxisTitle("X Position",1);
00149 meXYPosPhi_py_ = theDMBE->book1D("xypos_"+hid+"_py","Y Position",100,-4,4);
00150 meXYPosPhi_py_->setAxisTitle("Y Position",1);
00151 }
00152 meClustXPhi_ = theDMBE->book1D("ClustX_" +hid, "Cluster X size", 10, 0, 10);
00153 meClustXPhi_->setAxisTitle("Cluster size X dimension", 1);
00154 meClustYPhi_ = theDMBE->book1D("ClustY_" +hid,"Cluster Y size", 25, 0.,25.);
00155 meClustYPhi_->setAxisTitle("Cluster size Y dimension", 1);
00156 menRecHitsPhi_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 50, 0, 50);
00157 menRecHitsPhi_->setAxisTitle("number of rechits",1);
00158
00159 }
00160
00161 if(type==4 && endcap){
00162 uint32_t blade= PixelEndcapName::PixelEndcapName(DetId::DetId(id_)).bladeName();
00163
00164 char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
00165 hid = src.label() + "_" + sblade;
00166
00167
00168
00169
00170 meClustXBlade_ = theDMBE->book1D("ClustX_" +hid, "Cluster X size", 10, 0, 10);
00171 meClustXBlade_->setAxisTitle("Cluster size X dimension", 1);
00172 meClustYBlade_ = theDMBE->book1D("ClustY_" +hid,"Cluster Y size", 25, 0.,25.);
00173 meClustYBlade_->setAxisTitle("Cluster size Y dimension", 1);
00174 menRecHitsBlade_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 50, 0, 50);
00175 menRecHitsBlade_->setAxisTitle("number of rechits",1);
00176
00177 }
00178 if(type==5 && endcap){
00179 uint32_t disk = PixelEndcapName::PixelEndcapName(DetId::DetId(id_)).diskName();
00180
00181 char sdisk[80]; sprintf(sdisk, "Disk_%i",disk);
00182 hid = src.label() + "_" + sdisk;
00183
00184
00185
00186
00187 meClustXDisk_ = theDMBE->book1D("ClustX_" +hid, "Cluster X size", 10, 0, 10);
00188 meClustXDisk_->setAxisTitle("Cluster size X dimension", 1);
00189 meClustYDisk_ = theDMBE->book1D("ClustY_" +hid,"Cluster Y size", 25, 0.,25.);
00190 meClustYDisk_->setAxisTitle("Cluster size Y dimension", 1);
00191 menRecHitsDisk_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 50, 0, 50);
00192 menRecHitsDisk_->setAxisTitle("number of rechits",1);
00193
00194 }
00195
00196 if(type==6 && endcap){
00197 uint32_t panel= PixelEndcapName::PixelEndcapName(DetId::DetId(id_)).pannelName();
00198 uint32_t module= PixelEndcapName::PixelEndcapName(DetId::DetId(id_)).plaquetteName();
00199 char slab[80]; sprintf(slab, "Panel_%i_Ring_%i",panel, module);
00200 hid = src.label() + "_" + slab;
00201
00202 if(twoD){
00203 meXYPosRing_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
00204 meXYPosRing_->setAxisTitle("X Position",1);
00205 meXYPosRing_->setAxisTitle("Y Position",2);
00206 }
00207 else{
00208
00209 meXYPosRing_px_ = theDMBE->book1D("xypos_"+hid+"_px","X Position",100,-1.,1);
00210 meXYPosRing_px_->setAxisTitle("X Position",1);
00211 meXYPosRing_py_ = theDMBE->book1D("xypos_"+hid+"_py","Y Position",100,-4,4);
00212 meXYPosRing_py_->setAxisTitle("Y Position",1);
00213 }
00214 meClustXRing_ = theDMBE->book1D("ClustX_" +hid, "Cluster X size", 10, 0, 10);
00215 meClustXRing_->setAxisTitle("Cluster size X dimension", 1);
00216 meClustYRing_ = theDMBE->book1D("ClustY_" +hid,"Cluster Y size", 25, 0.,25.);
00217 meClustYRing_->setAxisTitle("Cluster size Y dimension", 1);
00218 menRecHitsRing_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 50, 0, 50);
00219 menRecHitsRing_->setAxisTitle("number of rechits",1);
00220
00221 }
00222
00223 }
00224
00225
00226
00227 void SiPixelRecHitModule::fill(const float& rechit_x, const float& rechit_y, const int& sizeX, const int& sizeY, bool modon, bool ladon, bool layon, bool phion, bool bladeon, bool diskon, bool ringon, bool twoD) {
00228
00229 bool barrel = DetId::DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00230 bool endcap = DetId::DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262 if(modon){
00263 if(twoD) meXYPos_->Fill(rechit_x, rechit_y);
00264 else {
00265 meXYPos_px_->Fill(rechit_x);
00266 meXYPos_py_->Fill(rechit_y);
00267 }
00268 meClustX_->Fill(sizeX);
00269 meClustY_->Fill(sizeY);
00270 }
00271
00272
00273 if(ladon && barrel){
00274 if(twoD) meXYPosLad_->Fill(rechit_x, rechit_y);
00275 else{
00276 meXYPosLad_px_->Fill(rechit_x);
00277 meXYPosLad_py_->Fill(rechit_y);
00278 }
00279 meClustXLad_->Fill(sizeX);
00280 meClustYLad_->Fill(sizeY);
00281 }
00282
00283 if(layon && barrel){
00284 if(twoD) meXYPosLay_->Fill(rechit_x, rechit_y);
00285 else{
00286 meXYPosLay_px_->Fill(rechit_x);
00287 meXYPosLay_py_->Fill(rechit_y);
00288 }
00289 meClustXLay_->Fill(sizeX);
00290 meClustYLay_->Fill(sizeY);
00291 }
00292
00293 if(phion && barrel){
00294 if(twoD) meXYPosPhi_->Fill(rechit_x, rechit_y);
00295 else{
00296 meXYPosPhi_px_->Fill(rechit_x);
00297 meXYPosPhi_py_->Fill(rechit_y);
00298 }
00299 meClustXPhi_->Fill(sizeX);
00300 meClustYPhi_->Fill(sizeY);
00301 }
00302
00303 if(bladeon && endcap){
00304
00305 meClustXBlade_->Fill(sizeX);
00306 meClustYBlade_->Fill(sizeY);
00307 }
00308
00309 if(diskon && endcap){
00310
00311 meClustXDisk_->Fill(sizeX);
00312 meClustYDisk_->Fill(sizeY);
00313 }
00314
00315 if(ringon && endcap){
00316 if(twoD) meXYPosRing_->Fill(rechit_x, rechit_y);
00317 else{
00318 meXYPosRing_px_->Fill(rechit_x);
00319 meXYPosRing_py_->Fill(rechit_y);
00320 }
00321 meClustXRing_->Fill(sizeX);
00322 meClustYRing_->Fill(sizeY);
00323 }
00324 }
00325
00326 void SiPixelRecHitModule::nfill(const int& nrec, bool modon, bool ladon, bool layon, bool phion, bool bladeon, bool diskon, bool ringon) {
00327
00328 bool barrel = DetId::DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00329 bool endcap = DetId::DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00330
00331 if(modon) menRecHits_->Fill(nrec);
00332
00333 if(ladon && barrel) menRecHitsLad_->Fill(nrec);
00334 if(layon && barrel) menRecHitsLay_->Fill(nrec);
00335 if(phion && barrel) menRecHitsPhi_->Fill(nrec);
00336
00337 if(bladeon && endcap) menRecHitsBlade_->Fill(nrec);
00338 if(diskon && endcap) menRecHitsDisk_->Fill(nrec);
00339 if(ringon && endcap) menRecHitsRing_->Fill(nrec);
00340 }