CMS 3D CMS Logo

SiPixelRecHitModule.cc

Go to the documentation of this file.
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 // STL
00007 #include <vector>
00008 #include <memory>
00009 #include <string>
00010 #include <iostream>
00011 #include <stdlib.h>
00012 
00013 // Data Formats
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 // Constructors
00020 //
00021 SiPixelRecHitModule::SiPixelRecHitModule() : id_(0) { }
00023 SiPixelRecHitModule::SiPixelRecHitModule(const uint32_t& id) : 
00024   id_(id)
00025 { 
00026 }
00027 
00028 //
00029 // Destructor
00030 //
00031 SiPixelRecHitModule::~SiPixelRecHitModule() {}
00032 //
00033 // Book histograms
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   // Get collection name and instantiate Histo Id builder
00046   edm::InputTag src = iConfig.getParameter<edm::InputTag>( "src" );
00047   SiPixelHistogramId* theHistogramId = new SiPixelHistogramId( src.label() );
00048   // Get DQM interface
00049   DQMStore* theDMBE = edm::Service<DQMStore>().operator->();
00050 
00051 
00052   if(type==0){
00053     if(twoD){
00054       // XYPosition
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       // projections of XYPosition
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       // projections of XYPosition
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       // projections of XYPosition
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       // projections of XYPosition
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 //     meXYPosBlade_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
00167 //     meXYPosBlade_->setAxisTitle("X Position",1);
00168 //     meXYPosBlade_->setAxisTitle("Y Position",2);
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 //     meXYPosDisk_ = theDMBE->book2D("xypos_" + hid,"XY Position",100,-1.,1,100,-4,4);
00184 //     meXYPosDisk_->setAxisTitle("X Position",1);
00185 //     meXYPosDisk_->setAxisTitle("Y Position",2);
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       // projections of XYPosition
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 // Fill histograms
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 //   bool isHalfModule = false;
00232 //   uint32_t DBladder = 0;
00233 //   if(barrel){
00234 //     isHalfModule = PixelBarrelName::PixelBarrelName(DetId::DetId(id_)).isHalfModule(); 
00235 //     DBladder = PixelBarrelName::PixelBarrelName(DetId::DetId(id_)).ladderName();
00236 //   }
00237 
00238 
00239 /*
00240   edm::DetSetVector<PixelDigi>::const_iterator isearch = input.find(id_); // search  digis of detid
00241   
00242   if( isearch != input.end() ) {  // Not at empty iterator
00243     
00244     unsigned int numberOfDigis = 0;
00245     
00246     // Look at digis now
00247     edm::DetSet<PixelDigi>::const_iterator  di;
00248     for(di = isearch->data.begin(); di != isearch->data.end(); di++) {
00249       numberOfDigis++;
00250       int adc = di->adc();    // charge
00251       int col = di->column(); // column 
00252       int row = di->row();    // row
00253       (mePixDigis_)->Fill((float)col,(float)row);
00254       (meADC_)->Fill((float)adc);
00255     }
00256     (meNDigis_)->Fill((float)numberOfDigis);
00257     //std::cout<<"number of digis="<<numberOfDigis<<std::endl;
00258       
00259   }
00260   */
00261   //std::cout << rechit_x << " " << rechit_y << " " << sizeX << " " << sizeY << std::endl;
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   //std::cout<<"number of detector units="<<numberOfDetUnits<<std::endl;
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     //meXYPosBlade_->Fill(rechit_x, rechit_y);
00305     meClustXBlade_->Fill(sizeX);
00306     meClustYBlade_->Fill(sizeY);
00307   }
00308 
00309   if(diskon && endcap){
00310     //meXYPosDisk_->Fill(rechit_x, rechit_y);
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   //barrel
00333   if(ladon && barrel) menRecHitsLad_->Fill(nrec);
00334   if(layon && barrel) menRecHitsLay_->Fill(nrec);
00335   if(phion && barrel) menRecHitsPhi_->Fill(nrec);
00336   //endcap
00337   if(bladeon && endcap) menRecHitsBlade_->Fill(nrec);
00338   if(diskon && endcap) menRecHitsDisk_->Fill(nrec);
00339   if(ringon && endcap) menRecHitsRing_->Fill(nrec);
00340 }

Generated on Tue Jun 9 17:33:24 2009 for CMSSW by  doxygen 1.5.4