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,
00036 bool twoD, bool reducedSet) {
00037
00038 bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00039 bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00040 bool isHalfModule = false;
00041 if(barrel){
00042 isHalfModule = PixelBarrelName(DetId(id_)).isHalfModule();
00043 }
00044
00045 std::string hid;
00046
00047 edm::InputTag src = iConfig.getParameter<edm::InputTag>( "src" );
00048
00049 DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
00050
00051
00052 if(type==0){
00053 SiPixelHistogramId* theHistogramId = new SiPixelHistogramId( src.label() );
00054 if(!reducedSet)
00055 {
00056 if(twoD){
00057
00058 hid = theHistogramId->setHistoId("xypos",id_);
00059 meXYPos_ = theDMBE->book2D(hid,"XY Position",100,-1.,1,100,-4,4);
00060 meXYPos_->setAxisTitle("X Position",1);
00061 meXYPos_->setAxisTitle("Y Position",2);
00062 }
00063 else{
00064
00065 hid = theHistogramId->setHistoId("xypos",id_);
00066 meXYPos_px_ = theDMBE->book1D(hid+"_px","X Position",100,-1.,1);
00067 meXYPos_px_->setAxisTitle("X Position",1);
00068 meXYPos_py_ = theDMBE->book1D(hid+"_py","Y Position",100,-4,4);
00069 meXYPos_py_->setAxisTitle("Y Position",1);
00070 }
00071 }
00072 hid = theHistogramId->setHistoId("ClustX",id_);
00073 meClustX_ = theDMBE->book1D(hid, "RecHit X size", 10, 0., 10.);
00074 meClustX_->setAxisTitle("RecHit size X dimension", 1);
00075 hid = theHistogramId->setHistoId("ClustY",id_);
00076 meClustY_ = theDMBE->book1D(hid, "RecHit Y size", 15, 0., 15.);
00077 meClustY_->setAxisTitle("RecHit size Y dimension", 1);
00078
00079 hid = theHistogramId->setHistoId("ErrorX",id_);
00080 meErrorX_ = theDMBE->book1D(hid, "RecHit error X", 100,0.,0.02);
00081 meErrorX_->setAxisTitle("RecHit error X", 1);
00082 hid = theHistogramId->setHistoId("ErrorY",id_);
00083 meErrorY_ = theDMBE->book1D(hid, "RecHit error Y", 100,0.,0.02);
00084 meErrorY_->setAxisTitle("RecHit error Y", 1);
00085
00086
00087
00088
00089
00090 delete theHistogramId;
00091 }
00092
00093 if(type==1 && barrel){
00094 uint32_t DBladder = PixelBarrelName(DetId(id_)).ladderName();
00095 char sladder[80]; sprintf(sladder,"Ladder_%02i",DBladder);
00096 hid = src.label() + "_" + sladder;
00097 if(isHalfModule) hid += "H";
00098 else hid += "F";
00099 if(!reducedSet)
00100 {
00101 if(twoD){
00102 meXYPosLad_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
00103 meXYPosLad_->setAxisTitle("X Position",1);
00104 meXYPosLad_->setAxisTitle("Y Position",2);
00105 }
00106 else{
00107
00108 meXYPosLad_px_ = theDMBE->book1D("xypos_"+hid+"_px","X Position",100,-1.,1);
00109 meXYPosLad_px_->setAxisTitle("X Position",1);
00110 meXYPosLad_py_ = theDMBE->book1D("xypos_"+hid+"_py","Y Position",100,-4,4);
00111 meXYPosLad_py_->setAxisTitle("Y Position",1);
00112 }
00113 }
00114 meClustXLad_ = theDMBE->book1D("ClustX_" +hid, "RecHit X size", 10, 0., 10.);
00115 meClustXLad_->setAxisTitle("RecHit size X dimension", 1);
00116 meClustYLad_ = theDMBE->book1D("ClustY_" +hid,"RecHit Y size", 15, 0.,15.);
00117 meClustYLad_->setAxisTitle("RecHit size Y dimension", 1);
00118 meErrorXLad_ = theDMBE->book1D("ErrorX_"+hid, "RecHit error X", 100,0.,0.02);
00119 meErrorXLad_->setAxisTitle("RecHit error X", 1);
00120 meErrorYLad_ = theDMBE->book1D("ErrorY_"+hid, "RecHit error Y", 100,0.,0.02);
00121 meErrorYLad_->setAxisTitle("RecHit error Y", 1);
00122 menRecHitsLad_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 8, 0, 8);
00123 menRecHitsLad_->setAxisTitle("number of rechits",1);
00124
00125 }
00126
00127 if(type==2 && barrel){
00128
00129 uint32_t DBlayer = PixelBarrelName(DetId(id_)).layerName();
00130 char slayer[80]; sprintf(slayer,"Layer_%i",DBlayer);
00131 hid = src.label() + "_" + slayer;
00132
00133 if(!reducedSet)
00134 {
00135 if(twoD){
00136 meXYPosLay_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
00137 meXYPosLay_->setAxisTitle("X Position",1);
00138 meXYPosLay_->setAxisTitle("Y Position",2);
00139 }
00140 else{
00141
00142 meXYPosLay_px_ = theDMBE->book1D("xypos_"+hid+"_px","X Position",100,-1.,1);
00143 meXYPosLay_px_->setAxisTitle("X Position",1);
00144 meXYPosLay_py_ = theDMBE->book1D("xypos_"+hid+"_py","Y Position",100,-4,4);
00145 meXYPosLay_py_->setAxisTitle("Y Position",1);
00146 }
00147 }
00148
00149 meClustXLay_ = theDMBE->book1D("ClustX_" +hid, "RecHit X size", 10, 0., 10.);
00150 meClustXLay_->setAxisTitle("RecHit size X dimension", 1);
00151 meClustYLay_ = theDMBE->book1D("ClustY_" +hid,"RecHit Y size", 15, 0.,15.);
00152 meClustYLay_->setAxisTitle("RecHit size Y dimension", 1);
00153 meErrorXLay_ = theDMBE->book1D("ErrorX_"+hid, "RecHit error X", 100,0.,0.02);
00154 meErrorXLay_->setAxisTitle("RecHit error X", 1);
00155 meErrorYLay_ = theDMBE->book1D("ErrorY_"+hid, "RecHit error Y", 100,0.,0.02);
00156 meErrorYLay_->setAxisTitle("RecHit error Y", 1);
00157 menRecHitsLay_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 8, 0, 8);
00158 menRecHitsLay_->setAxisTitle("number of rechits",1);
00159
00160 }
00161
00162 if(type==3 && barrel){
00163 uint32_t DBmodule = PixelBarrelName(DetId(id_)).moduleName();
00164 char smodule[80]; sprintf(smodule,"Ring_%i",DBmodule);
00165 hid = src.label() + "_" + smodule;
00166
00167 if(!reducedSet)
00168 {
00169 if(twoD){
00170 meXYPosPhi_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
00171 meXYPosPhi_->setAxisTitle("X Position",1);
00172 meXYPosPhi_->setAxisTitle("Y Position",2);
00173 }
00174 else{
00175
00176 meXYPosPhi_px_ = theDMBE->book1D("xypos_"+hid+"_px","X Position",100,-1.,1);
00177 meXYPosPhi_px_->setAxisTitle("X Position",1);
00178 meXYPosPhi_py_ = theDMBE->book1D("xypos_"+hid+"_py","Y Position",100,-4,4);
00179 meXYPosPhi_py_->setAxisTitle("Y Position",1);
00180 }
00181 }
00182 meClustXPhi_ = theDMBE->book1D("ClustX_" +hid, "RecHit X size", 10, 0., 10.);
00183 meClustXPhi_->setAxisTitle("RecHit size X dimension", 1);
00184 meClustYPhi_ = theDMBE->book1D("ClustY_" +hid,"RecHit Y size", 15, 0.,15.);
00185 meClustYPhi_->setAxisTitle("RecHit size Y dimension", 1);
00186 meErrorXPhi_ = theDMBE->book1D("ErrorX_"+hid, "RecHit error X", 100,0.,0.02);
00187 meErrorXPhi_->setAxisTitle("RecHit error X", 1);
00188 meErrorYPhi_ = theDMBE->book1D("ErrorY_"+hid, "RecHit error Y", 100,0.,0.02);
00189 meErrorYPhi_->setAxisTitle("RecHit error Y", 1);
00190 menRecHitsPhi_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 8, 0, 8);
00191 menRecHitsPhi_->setAxisTitle("number of rechits",1);
00192
00193 }
00194
00195 if(type==4 && endcap){
00196 uint32_t blade= PixelEndcapName(DetId(id_)).bladeName();
00197
00198 char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
00199 hid = src.label() + "_" + sblade;
00200
00201
00202
00203
00204 meClustXBlade_ = theDMBE->book1D("ClustX_" +hid, "RecHit X size", 10, 0., 10.);
00205 meClustXBlade_->setAxisTitle("RecHit size X dimension", 1);
00206 meClustYBlade_ = theDMBE->book1D("ClustY_" +hid,"RecHit Y size", 15, 0.,15.);
00207 meClustYBlade_->setAxisTitle("RecHit size Y dimension", 1);
00208 meErrorXBlade_ = theDMBE->book1D("ErrorX_"+hid, "RecHit error X", 100,0.,0.02);
00209 meErrorXBlade_->setAxisTitle("RecHit error X", 1);
00210 meErrorYBlade_ = theDMBE->book1D("ErrorY_"+hid, "RecHit error Y", 100,0.,0.02);
00211 meErrorYBlade_->setAxisTitle("RecHit error Y", 1);
00212 menRecHitsBlade_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 8, 0, 8);
00213 menRecHitsBlade_->setAxisTitle("number of rechits",1);
00214
00215 }
00216 if(type==5 && endcap){
00217 uint32_t disk = PixelEndcapName(DetId(id_)).diskName();
00218
00219 char sdisk[80]; sprintf(sdisk, "Disk_%i",disk);
00220 hid = src.label() + "_" + sdisk;
00221
00222
00223
00224
00225 meClustXDisk_ = theDMBE->book1D("ClustX_" +hid, "RecHit X size", 10, 0., 10.);
00226 meClustXDisk_->setAxisTitle("RecHit size X dimension", 1);
00227 meClustYDisk_ = theDMBE->book1D("ClustY_" +hid,"RecHit Y size", 15, 0.,15.);
00228 meClustYDisk_->setAxisTitle("RecHit size Y dimension", 1);
00229 meErrorXDisk_ = theDMBE->book1D("ErrorX_"+hid, "RecHit error X", 100,0.,0.02);
00230 meErrorXDisk_->setAxisTitle("RecHit error X", 1);
00231 meErrorYDisk_ = theDMBE->book1D("ErrorY_"+hid, "RecHit error Y", 100,0.,0.02);
00232 meErrorYDisk_->setAxisTitle("RecHit error Y", 1);
00233 menRecHitsDisk_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 8, 0, 8);
00234 menRecHitsDisk_->setAxisTitle("number of rechits",1);
00235
00236 }
00237
00238 if(type==6 && endcap){
00239 uint32_t panel= PixelEndcapName(DetId(id_)).pannelName();
00240 uint32_t module= PixelEndcapName(DetId(id_)).plaquetteName();
00241 char slab[80]; sprintf(slab, "Panel_%i_Ring_%i",panel, module);
00242 hid = src.label() + "_" + slab;
00243
00244 if(!reducedSet)
00245 {
00246 if(twoD){
00247 meXYPosRing_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
00248 meXYPosRing_->setAxisTitle("X Position",1);
00249 meXYPosRing_->setAxisTitle("Y Position",2);
00250 }
00251 else{
00252
00253 meXYPosRing_px_ = theDMBE->book1D("xypos_"+hid+"_px","X Position",100,-1.,1);
00254 meXYPosRing_px_->setAxisTitle("X Position",1);
00255 meXYPosRing_py_ = theDMBE->book1D("xypos_"+hid+"_py","Y Position",100,-4,4);
00256 meXYPosRing_py_->setAxisTitle("Y Position",1);
00257 }
00258 }
00259 meClustXRing_ = theDMBE->book1D("ClustX_" +hid, "RecHit X size", 10, 0., 10.);
00260 meClustXRing_->setAxisTitle("RecHit size X dimension", 1);
00261 meClustYRing_ = theDMBE->book1D("ClustY_" +hid,"RecHit Y size", 15, 0.,15.);
00262 meClustYRing_->setAxisTitle("RecHit size Y dimension", 1);
00263 meErrorXRing_ = theDMBE->book1D("ErrorX_"+hid, "RecHit error X", 100,0.,0.02);
00264 meErrorXRing_->setAxisTitle("RecHit error X", 1);
00265 meErrorYRing_ = theDMBE->book1D("ErrorY_"+hid, "RecHit error Y", 100,0.,0.02);
00266 meErrorYRing_->setAxisTitle("RecHit error Y", 1);
00267 menRecHitsRing_ = theDMBE->book1D("nRecHits_"+hid, "# of rechits in this module", 8, 0, 8);
00268 menRecHitsRing_->setAxisTitle("number of rechits",1);
00269
00270 }
00271
00272 }
00273
00274
00275
00276 void SiPixelRecHitModule::fill(const float& rechit_x, const float& rechit_y,
00277 const int& sizeX, const int& sizeY,
00278 const float& lerr_x, const float& lerr_y,
00279 bool modon, bool ladon, bool layon, bool phion,
00280 bool bladeon, bool diskon, bool ringon,
00281 bool twoD, bool reducedSet) {
00282
00283 bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00284 bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00285
00286
00287 if(modon){
00288 meClustX_->Fill(sizeX);
00289 meClustY_->Fill(sizeY);
00290 meErrorX_->Fill(lerr_x);
00291 meErrorY_->Fill(lerr_y);
00292 if(!reducedSet)
00293 {
00294 if(twoD) meXYPos_->Fill(rechit_x, rechit_y);
00295 else {
00296 meXYPos_px_->Fill(rechit_x);
00297 meXYPos_py_->Fill(rechit_y);
00298 }
00299 }
00300 }
00301
00302
00303 if(ladon && barrel){
00304 meClustXLad_->Fill(sizeX);
00305 meClustYLad_->Fill(sizeY);
00306 meErrorXLad_->Fill(lerr_x);
00307 meErrorYLad_->Fill(lerr_y);
00308 if(!reducedSet)
00309 {
00310 if(twoD) meXYPosLad_->Fill(rechit_x, rechit_y);
00311 else{
00312 meXYPosLad_px_->Fill(rechit_x);
00313 meXYPosLad_py_->Fill(rechit_y);
00314 }
00315 }
00316 }
00317
00318 if(layon && barrel){
00319 meClustXLay_->Fill(sizeX);
00320 meClustYLay_->Fill(sizeY);
00321 meErrorXLay_->Fill(lerr_x);
00322 meErrorYLay_->Fill(lerr_y);
00323 if(!reducedSet)
00324 {
00325 if(twoD) meXYPosLay_->Fill(rechit_x, rechit_y);
00326 else{
00327 meXYPosLay_px_->Fill(rechit_x);
00328 meXYPosLay_py_->Fill(rechit_y);
00329 }
00330 }
00331 }
00332
00333 if(phion && barrel){
00334 meClustXPhi_->Fill(sizeX);
00335 meClustYPhi_->Fill(sizeY);
00336 meErrorXPhi_->Fill(lerr_x);
00337 meErrorYPhi_->Fill(lerr_y);
00338 if(!reducedSet)
00339 {
00340 if(twoD) meXYPosPhi_->Fill(rechit_x, rechit_y);
00341 else{
00342 meXYPosPhi_px_->Fill(rechit_x);
00343 meXYPosPhi_py_->Fill(rechit_y);
00344 }
00345 }
00346 }
00347
00348 if(bladeon && endcap){
00349
00350 meClustXBlade_->Fill(sizeX);
00351 meClustYBlade_->Fill(sizeY);
00352 meErrorXBlade_->Fill(lerr_x);
00353 meErrorYBlade_->Fill(lerr_y);
00354 }
00355
00356 if(diskon && endcap){
00357
00358 meClustXDisk_->Fill(sizeX);
00359 meClustYDisk_->Fill(sizeY);
00360 meErrorXDisk_->Fill(lerr_x);
00361 meErrorYDisk_->Fill(lerr_y);
00362 }
00363
00364 if(ringon && endcap){
00365 meClustXRing_->Fill(sizeX);
00366 meClustYRing_->Fill(sizeY);
00367 meErrorXRing_->Fill(lerr_x);
00368 meErrorYRing_->Fill(lerr_y);
00369 if(!reducedSet)
00370 {
00371 if(twoD) meXYPosRing_->Fill(rechit_x, rechit_y);
00372 else{
00373 meXYPosRing_px_->Fill(rechit_x);
00374 meXYPosRing_py_->Fill(rechit_y);
00375 }
00376 }
00377 }
00378 }
00379
00380 void SiPixelRecHitModule::nfill(const int& nrec, bool modon, bool ladon, bool layon, bool phion, bool bladeon, bool diskon, bool ringon) {
00381
00382 bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00383 bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00384
00385
00386
00387 if(ladon && barrel) menRecHitsLad_->Fill(nrec);
00388 if(layon && barrel) menRecHitsLay_->Fill(nrec);
00389 if(phion && barrel) menRecHitsPhi_->Fill(nrec);
00390
00391 if(bladeon && endcap) menRecHitsBlade_->Fill(nrec);
00392 if(diskon && endcap) menRecHitsDisk_->Fill(nrec);
00393 if(ringon && endcap) menRecHitsRing_->Fill(nrec);
00394 }