CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_6_1_2_SLHC4_patch1/src/DQM/SiPixelMonitorTrack/src/SiPixelTrackResidualModule.cc

Go to the documentation of this file.
00001 // Package:    SiPixelMonitorTrack
00002 // Class:      SiPixelTrackResidualModule
00003 // 
00004 // class SiPixelTrackResidualModule SiPixelTrackResidualModule.cc 
00005 //       DQM/SiPixelMonitorTrack/src/SiPixelTrackResidualModule.cc
00006 //
00007 // Description: SiPixel hit-to-track residual data quality monitoring modules
00008 // Implementation: prototype -> improved -> never final - end of the 1st step 
00009 //
00010 // Original Author: Shan-Huei Chuang
00011 //         Created: Fri Mar 23 18:41:42 CET 2007
00012 // $Id: SiPixelTrackResidualModule.cc,v 1.12 2013/04/17 09:48:50 itopsisg Exp $
00013 
00014 
00015 #include <string>
00016 #include <iostream>
00017 
00018 #include "DQMServices/Core/interface/DQMStore.h"
00019 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00020 #include "FWCore/ServiceRegistry/interface/Service.h"
00021 #include "FWCore/Utilities/interface/InputTag.h"
00022 #include "DQM/SiPixelCommon/interface/SiPixelHistogramId.h"
00023 #include "DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualModule.h"
00024 
00025 // Data Formats
00026 #include "DataFormats/SiPixelDetId/interface/PixelBarrelName.h"
00027 #include "DataFormats/SiPixelDetId/interface/PixelBarrelNameUpgrade.h"
00028 #include "DataFormats/SiPixelDetId/interface/PixelEndcapName.h"
00029 #include "DataFormats/SiPixelDetId/interface/PixelEndcapNameUpgrade.h"
00030 #include "DataFormats/DetId/interface/DetId.h"
00031 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
00032 
00033 
00034 using namespace std; 
00035 
00036 
00037 SiPixelTrackResidualModule::SiPixelTrackResidualModule() : id_(0) {
00038   bBookTracks = true;
00039 }
00040 
00041 
00042 SiPixelTrackResidualModule::SiPixelTrackResidualModule(uint32_t id) : id_(id) { 
00043   bBookTracks = true;
00044 }
00045 
00046 
00047 SiPixelTrackResidualModule::~SiPixelTrackResidualModule() { 
00048  
00049 }
00050 
00051 
00052 void SiPixelTrackResidualModule::book(const edm::ParameterSet& iConfig, bool reducedSet, int type, bool isUpgrade) {
00053   DQMStore* dbe = edm::Service<DQMStore>().operator->();
00054 
00055   bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00056   bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00057   bool isHalfModule = false;
00058   if(barrel){
00059     if (!isUpgrade) {
00060       isHalfModule = PixelBarrelName(DetId(id_)).isHalfModule(); 
00061     } else if (isUpgrade) {
00062       isHalfModule = PixelBarrelNameUpgrade(DetId(id_)).isHalfModule(); 
00063     }
00064   }
00065   
00066   edm::InputTag src = iConfig.getParameter<edm::InputTag>("src");
00067   std::string hisID;
00068 
00069   if(type==0){
00070     SiPixelHistogramId* theHistogramId = new SiPixelHistogramId(src.label());
00071     hisID = theHistogramId->setHistoId("residualX",id_);
00072     meResidualX_ = dbe->book1D(hisID,"Hit-to-Track Residual in r-phi",100,-150,150);
00073     meResidualX_->setAxisTitle("hit-to-track residual in r-phi (um)",1);
00074     hisID = theHistogramId->setHistoId("residualY",id_);
00075     meResidualY_ = dbe->book1D(hisID,"Hit-to-Track Residual in Z",100,-300,300);
00076     meResidualY_->setAxisTitle("hit-to-track residual in z (um)",1);
00077     // Number of clusters
00078     hisID = theHistogramId->setHistoId("nclusters_OnTrack",id_);
00079     meNClusters_onTrack_ = dbe->book1D(hisID,"Number of Clusters (on Track)",10,0.,10.);
00080     meNClusters_onTrack_->setAxisTitle("Number of Clusters on Track",1);
00081     // Total cluster charge in ke
00082     hisID = theHistogramId->setHistoId("charge_OnTrack",id_);
00083     meCharge_onTrack_ = dbe->book1D(hisID,"Normalized Cluster charge (on Track)",100,0.,200.);
00084     meCharge_onTrack_->setAxisTitle("Charge [kilo electrons]",1);
00085     // Total cluster size (in pixels)
00086     hisID = theHistogramId->setHistoId("size_OnTrack",id_);
00087     meSize_onTrack_ = dbe->book1D(hisID,"Total cluster size (on Track)",30,0.,30.);
00088     meSize_onTrack_->setAxisTitle("Cluster size [number of pixels]",1);
00089     // Number of clusters
00090     hisID = theHistogramId->setHistoId("nclusters_OffTrack",id_);
00091     meNClusters_offTrack_ = dbe->book1D(hisID,"Number of Clusters (off Track)",35,0.,35.);
00092     meNClusters_offTrack_->setAxisTitle("Number of Clusters off Track",1);
00093     // Total cluster charge in ke
00094     hisID = theHistogramId->setHistoId("charge_OffTrack",id_);
00095     meCharge_offTrack_ = dbe->book1D(hisID,"Cluster charge (off Track)",100,0.,200.);
00096     meCharge_offTrack_->setAxisTitle("Charge [kilo electrons]",1);
00097     // Total cluster size (in pixels)
00098     hisID = theHistogramId->setHistoId("size_OffTrack",id_);
00099     meSize_offTrack_ = dbe->book1D(hisID,"Total cluster size (off Track)",30,0.,30.);
00100     meSize_offTrack_->setAxisTitle("Cluster size [number of pixels]",1);
00101     if(!reducedSet){
00102       // Cluster width on the x-axis
00103       hisID = theHistogramId->setHistoId("sizeX_OnTrack",id_);
00104       meSizeX_onTrack_ = dbe->book1D(hisID,"Cluster x-width (rows) (on Track)",10,0.,10.);
00105       meSizeX_onTrack_->setAxisTitle("Cluster x-size [rows]",1);
00106       // Cluster width on the y-axis
00107       hisID = theHistogramId->setHistoId("sizeY_OnTrack",id_);
00108       meSizeY_onTrack_ = dbe->book1D(hisID,"Cluster y-width (columns) (on Track)",15,0.,15.);
00109       meSizeY_onTrack_->setAxisTitle("Cluster y-size [columns]",1);
00110       // Cluster width on the x-axis
00111       hisID = theHistogramId->setHistoId("sizeX_OffTrack",id_);
00112       meSizeX_offTrack_ = dbe->book1D(hisID,"Cluster x-width (rows) (off Track)",10,0.,10.);
00113       meSizeX_offTrack_->setAxisTitle("Cluster x-size [rows]",1);
00114       // Cluster width on the y-axis
00115       hisID = theHistogramId->setHistoId("sizeY_OffTrack",id_);
00116       meSizeY_offTrack_ = dbe->book1D(hisID,"Cluster y-width (columns) (off Track)",15,0.,15.);
00117       meSizeY_offTrack_->setAxisTitle("Cluster y-size [columns]",1);
00118     }
00119     delete theHistogramId;
00120   }
00121 
00122   if(type==1 && barrel){
00123     uint32_t DBladder;
00124     if (!isUpgrade) { DBladder = PixelBarrelName(DetId(id_)).ladderName(); }
00125     else if (isUpgrade) { DBladder = PixelBarrelNameUpgrade(DetId(id_)).ladderName(); }
00126     char sladder[80]; sprintf(sladder,"Ladder_%02i",DBladder);
00127     hisID = src.label() + "_" + sladder;
00128     if(isHalfModule) hisID += "H";
00129     else hisID += "F";
00130     meResidualXLad_ = dbe->book1D("residualX_"+hisID,"Hit-to-Track Residual in r-phi",100,-150,150);
00131     meResidualXLad_->setAxisTitle("hit-to-track residual in r-phi (um)",1);
00132     meResidualYLad_ = dbe->book1D("residualY_"+hisID,"Hit-to-Track Residual in Z",100,-300,300);
00133     meResidualYLad_->setAxisTitle("hit-to-track residual in z (um)",1);
00134     // Number of clusters
00135     meNClusters_onTrackLad_ = dbe->book1D("nclusters_OnTrack_" + hisID,"Number of Clusters (on Track)",10,0.,10.);
00136     meNClusters_onTrackLad_->setAxisTitle("Number of Clusters on Track",1);
00137     // Total cluster charge in MeV
00138     meCharge_onTrackLad_ = dbe->book1D("charge_OnTrack_" + hisID,"Normalized Cluster charge (on Track)",100,0.,200.);
00139     meCharge_onTrackLad_->setAxisTitle("Charge [kilo electrons]",1);
00140     // Total cluster size (in pixels)
00141     meSize_onTrackLad_ = dbe->book1D("size_OnTrack_" + hisID,"Total cluster size (on Track)",30,0.,30.);
00142     meSize_onTrackLad_->setAxisTitle("Cluster size [number of pixels]",1);
00143     // Number of clusters
00144     meNClusters_offTrackLad_ = dbe->book1D("nclusters_OffTrack_" + hisID,"Number of Clusters (off Track)",35,0.,35.);
00145     meNClusters_offTrackLad_->setAxisTitle("Number of Clusters off Track",1);
00146     // Total cluster charge in MeV
00147     meCharge_offTrackLad_ = dbe->book1D("charge_OffTrack_" + hisID,"Cluster charge (off Track)",100,0.,200.);
00148     meCharge_offTrackLad_->setAxisTitle("Charge [kilo electrons]",1);
00149     // Total cluster size (in pixels)
00150     meSize_offTrackLad_ = dbe->book1D("size_OffTrack_" + hisID,"Total cluster size (off Track)",30,0.,30.);
00151     meSize_offTrackLad_->setAxisTitle("Cluster size [number of pixels]",1);
00152     if(!reducedSet){
00153       // Cluster width on the x-axis
00154       meSizeX_offTrackLad_ = dbe->book1D("sizeX_OffTrack_" + hisID,"Cluster x-width (rows) (off Track)",10,0.,10.);
00155       meSizeX_offTrackLad_->setAxisTitle("Cluster x-size [rows]",1);
00156       // Cluster width on the y-axis
00157       meSizeY_offTrackLad_ = dbe->book1D("sizeY_OffTrack_" + hisID,"Cluster y-width (columns) (off Track)",15,0.,15.);
00158       meSizeY_offTrackLad_->setAxisTitle("Cluster y-size [columns]",1);
00159       // Cluster width on the x-axis
00160       meSizeX_onTrackLad_ = dbe->book1D("sizeX_OnTrack_" + hisID,"Cluster x-width (rows) (on Track)",10,0.,10.);
00161       meSizeX_onTrackLad_->setAxisTitle("Cluster x-size [rows]",1);
00162       // Cluster width on the y-axis
00163       meSizeY_onTrackLad_ = dbe->book1D("sizeY_OnTrack_" + hisID,"Cluster y-width (columns) (on Track)",15,0.,15.);
00164       meSizeY_onTrackLad_->setAxisTitle("Cluster y-size [columns]",1);
00165     }
00166   }
00167 
00168   if(type==2 && barrel){
00169     uint32_t DBlayer;
00170     if (!isUpgrade) { DBlayer = PixelBarrelName(DetId(id_)).layerName(); }
00171     else if (isUpgrade) { DBlayer = PixelBarrelNameUpgrade(DetId(id_)).layerName(); }
00172     char slayer[80]; sprintf(slayer,"Layer_%i",DBlayer);
00173     hisID = src.label() + "_" + slayer;
00174     meResidualXLay_ = dbe->book1D("residualX_"+hisID,"Hit-to-Track Residual in r-phi",100,-150,150);
00175     meResidualXLay_->setAxisTitle("hit-to-track residual in r-phi (um)",1);
00176     meResidualYLay_ = dbe->book1D("residualY_"+hisID,"Hit-to-Track Residual in Z",100,-300,300);
00177     meResidualYLay_->setAxisTitle("hit-to-track residual in z (um)",1);
00178     // Number of clusters
00179     meNClusters_onTrackLay_ = dbe->book1D("nclusters_OnTrack_" + hisID,"Number of Clusters (on Track)",10,0.,10.);
00180     meNClusters_onTrackLay_->setAxisTitle("Number of Clusters on Track",1);
00181     // Total cluster charge in MeV
00182     meCharge_onTrackLay_ = dbe->book1D("charge_OnTrack_" + hisID,"Normalized Cluster charge (on Track)",100,0.,200.);
00183     meCharge_onTrackLay_->setAxisTitle("Charge [kilo electrons]",1);
00184     // Total cluster size (in pixels)
00185     meSize_onTrackLay_ = dbe->book1D("size_OnTrack_" + hisID,"Total cluster size (on Track)",30,0.,30.);
00186     meSize_onTrackLay_->setAxisTitle("Cluster size [number of pixels]",1);    
00187     // Number of clusters
00188     meNClusters_offTrackLay_ = dbe->book1D("nclusters_OffTrack_" + hisID,"Number of Clusters (off Track)",35,0.,35.);
00189     meNClusters_offTrackLay_->setAxisTitle("Number of Clusters off Track",1);
00190     // Total cluster charge in MeV
00191     meCharge_offTrackLay_ = dbe->book1D("charge_OffTrack_" + hisID,"Cluster charge (off Track)",100,0.,200.);
00192     meCharge_offTrackLay_->setAxisTitle("Charge [kilo electrons]",1);
00193     // Total cluster size (in pixels)
00194     meSize_offTrackLay_ = dbe->book1D("size_OffTrack_" + hisID,"Total cluster size (off Track)",30,0.,30.);
00195     meSize_offTrackLay_->setAxisTitle("Cluster size [number of pixels]",1);
00196     if(!reducedSet){
00197       // Cluster width on the x-axis
00198       meSizeX_onTrackLay_ = dbe->book1D("sizeX_OnTrack_" + hisID,"Cluster x-width (rows) (on Track)",10,0.,10.);
00199       meSizeX_onTrackLay_->setAxisTitle("Cluster x-size [rows]",1);
00200       // Cluster width on the y-axis
00201       meSizeY_onTrackLay_ = dbe->book1D("sizeY_OnTrack_" + hisID,"Cluster y-width (columns) (on Track)",15,0.,15.);
00202       meSizeY_onTrackLay_->setAxisTitle("Cluster y-size [columns]",1);
00203       // Cluster width on the x-axis
00204       meSizeX_offTrackLay_ = dbe->book1D("sizeX_OffTrack_" + hisID,"Cluster x-width (rows) (off Track)",10,0.,10.);
00205       meSizeX_offTrackLay_->setAxisTitle("Cluster x-size [rows]",1);
00206       // Cluster width on the y-axis
00207       meSizeY_offTrackLay_ = dbe->book1D("sizeY_OffTrack_" + hisID,"Cluster y-width (columns) (off Track)",15,0.,15.);
00208       meSizeY_offTrackLay_->setAxisTitle("Cluster y-size [columns]",1);
00209     }
00210   }
00211 
00212   if(type==3 && barrel){
00213     uint32_t DBmodule;
00214     if (!isUpgrade) { DBmodule = PixelBarrelName(DetId(id_)).moduleName(); }
00215     else if (isUpgrade) { DBmodule = PixelBarrelNameUpgrade(DetId(id_)).moduleName(); }
00216     char smodule[80]; sprintf(smodule,"Ring_%i",DBmodule);
00217     hisID = src.label() + "_" + smodule;
00218     meResidualXPhi_ = dbe->book1D("residualX_"+hisID,"Hit-to-Track Residual in r-phi",100,-150,150);
00219     meResidualXPhi_->setAxisTitle("hit-to-track residual in r-phi (um)",1);
00220     meResidualYPhi_ = dbe->book1D("residualY_"+hisID,"Hit-to-Track Residual in Z",100,-300,300);
00221     meResidualYPhi_->setAxisTitle("hit-to-track residual in z (um)",1);
00222     // Number of clusters
00223     meNClusters_onTrackPhi_ = dbe->book1D("nclusters_OnTrack_" + hisID,"Number of Clusters (on Track)",10,0.,10.);
00224     meNClusters_onTrackPhi_->setAxisTitle("Number of Clusters on Track",1);
00225     // Total cluster charge in MeV
00226     meCharge_onTrackPhi_ = dbe->book1D("charge_OnTrack_" + hisID,"Normalized Cluster charge (on Track)",100,0.,200.);
00227     meCharge_onTrackPhi_->setAxisTitle("Charge [kilo electrons]",1);
00228     // Total cluster size (in pixels)
00229     meSize_onTrackPhi_ = dbe->book1D("size_OnTrack_" + hisID,"Total cluster size (on Track)",30,0.,30.);
00230     meSize_onTrackPhi_->setAxisTitle("Cluster size [number of pixels]",1);    
00231     // Number of clusters
00232     meNClusters_offTrackPhi_ = dbe->book1D("nclusters_OffTrack_" + hisID,"Number of Clusters (off Track)",35,0.,35.);
00233     meNClusters_offTrackPhi_->setAxisTitle("Number of Clusters off Track",1);
00234     // Total cluster charge in MeV
00235     meCharge_offTrackPhi_ = dbe->book1D("charge_OffTrack_" + hisID,"Cluster charge (off Track)",100,0.,200.);
00236     meCharge_offTrackPhi_->setAxisTitle("Charge [kilo electrons]",1);
00237     // Total cluster size (in pixels)
00238     meSize_offTrackPhi_ = dbe->book1D("size_OffTrack_" + hisID,"Total cluster size (off Track)",30,0.,30.);
00239     meSize_offTrackPhi_->setAxisTitle("Cluster size [number of pixels]",1);
00240     if(!reducedSet){
00241       // Cluster width on the x-axis
00242       meSizeX_onTrackPhi_ = dbe->book1D("sizeX_OnTrack_" + hisID,"Cluster x-width (rows) (on Track)",10,0.,10.);
00243       meSizeX_onTrackPhi_->setAxisTitle("Cluster x-size [rows]",1);
00244       // Cluster width on the y-axis
00245       meSizeY_onTrackPhi_ = dbe->book1D("sizeY_OnTrack_" + hisID,"Cluster y-width (columns) (on Track)",15,0.,15.);
00246       meSizeY_onTrackPhi_->setAxisTitle("Cluster y-size [columns]",1);
00247       // Cluster width on the x-axis
00248       meSizeX_offTrackPhi_ = dbe->book1D("sizeX_OffTrack_" + hisID,"Cluster x-width (rows) (off Track)",10,0.,10.);
00249       meSizeX_offTrackPhi_->setAxisTitle("Cluster x-size [rows]",1);
00250       // Cluster width on the y-axis
00251       meSizeY_offTrackPhi_ = dbe->book1D("sizeY_OffTrack_" + hisID,"Cluster y-width (columns) (off Track)",15,0.,15.);
00252       meSizeY_offTrackPhi_->setAxisTitle("Cluster y-size [columns]",1);
00253     }
00254   }
00255 
00256   if(type==4 && endcap){
00257     uint32_t blade;
00258     if (!isUpgrade) { blade= PixelEndcapName(DetId(id_)).bladeName(); }
00259     else if (isUpgrade) { blade= PixelEndcapNameUpgrade(DetId(id_)).bladeName(); }
00260     char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
00261     hisID = src.label() + "_" + sblade;
00262     meResidualXBlade_ = dbe->book1D("residualX_"+hisID,"Hit-to-Track Residual in r-phi",100,-150,150);
00263     meResidualXBlade_->setAxisTitle("hit-to-track residual in r-phi (um)",1);
00264     meResidualYBlade_ = dbe->book1D("residualY_"+hisID,"Hit-to-Track Residual in Z",100,-300,300);
00265     meResidualYBlade_->setAxisTitle("hit-to-track residual in z (um)",1);
00266     // Number of clusters
00267     meNClusters_onTrackBlade_ = dbe->book1D("nclusters_OnTrack_" + hisID,"Number of Clusters (on Track)",10,0.,10.);
00268     meNClusters_onTrackBlade_->setAxisTitle("Number of Clusters on Track",1);
00269     // Total cluster charge in MeV
00270     meCharge_onTrackBlade_ = dbe->book1D("charge_OnTrack_" + hisID,"Normalized Cluster charge (on Track)",100,0.,200.);
00271     meCharge_onTrackBlade_->setAxisTitle("Charge [kilo electrons]",1);
00272     // Total cluster size (in pixels)
00273     meSize_onTrackBlade_ = dbe->book1D("size_OnTrack_" + hisID,"Total cluster size (on Track)",30,0.,30.);
00274     meSize_onTrackBlade_->setAxisTitle("Cluster size [number of pixels]",1);    
00275     // Number of clusters
00276     meNClusters_offTrackBlade_ = dbe->book1D("nclusters_OffTrack_" + hisID,"Number of Clusters (off Track)",35,0.,35.);
00277     meNClusters_offTrackBlade_->setAxisTitle("Number of Clusters off Track",1);
00278     // Total cluster charge in MeV
00279     meCharge_offTrackBlade_ = dbe->book1D("charge_OffTrack_" + hisID,"Cluster charge (off Track)",100,0.,200.);
00280     meCharge_offTrackBlade_->setAxisTitle("Charge [kilo electrons]",1);
00281     // Total cluster size (in pixels)
00282     meSize_offTrackBlade_ = dbe->book1D("size_OffTrack_" + hisID,"Total cluster size (off Track)",30,0.,30.);
00283     meSize_offTrackBlade_->setAxisTitle("Cluster size [number of pixels]",1);
00284     if(!reducedSet){
00285       // Cluster width on the x-axis
00286       meSizeX_onTrackBlade_ = dbe->book1D("sizeX_OnTrack_" + hisID,"Cluster x-width (rows) (on Track)",10,0.,10.);
00287       meSizeX_onTrackBlade_->setAxisTitle("Cluster x-size [rows]",1);
00288       // Cluster width on the y-axis
00289       meSizeY_onTrackBlade_ = dbe->book1D("sizeY_OnTrack_" + hisID,"Cluster y-width (columns) (on Track)",15,0.,15.);
00290       meSizeY_onTrackBlade_->setAxisTitle("Cluster y-size [columns]",1);
00291       // Cluster width on the x-axis
00292       meSizeX_offTrackBlade_ = dbe->book1D("sizeX_OffTrack_" + hisID,"Cluster x-width (rows) (off Track)",10,0.,10.);
00293       meSizeX_offTrackBlade_->setAxisTitle("Cluster x-size [rows]",1);
00294       // Cluster width on the y-axis
00295       meSizeY_offTrackBlade_ = dbe->book1D("sizeY_OffTrack_" + hisID,"Cluster y-width (columns) (off Track)",15,0.,15.);
00296       meSizeY_offTrackBlade_->setAxisTitle("Cluster y-size [columns]",1);
00297     }
00298   }
00299 
00300   if(type==5 && endcap){
00301     uint32_t disk;
00302     if (!isUpgrade) { disk = PixelEndcapName(DetId(id_)).diskName(); }
00303     else if (isUpgrade) { disk = PixelEndcapNameUpgrade(DetId(id_)).diskName(); }
00304     
00305     char sdisk[80]; sprintf(sdisk, "Disk_%i",disk);
00306     hisID = src.label() + "_" + sdisk;
00307     meResidualXDisk_ = dbe->book1D("residualX_"+hisID,"Hit-to-Track Residual in r-phi",100,-150,150);
00308     meResidualXDisk_->setAxisTitle("hit-to-track residual in r-phi (um)",1);
00309     meResidualYDisk_ = dbe->book1D("residualY_"+hisID,"Hit-to-Track Residual in Z",100,-300,300);
00310     meResidualYDisk_->setAxisTitle("hit-to-track residual in z (um)",1);
00311     // Number of clusters
00312     meNClusters_onTrackDisk_ = dbe->book1D("nclusters_OnTrack_" + hisID,"Number of Clusters (on Track)",10,0.,10.);
00313     meNClusters_onTrackDisk_->setAxisTitle("Number of Clusters on Track",1);
00314     // Total cluster charge in MeV
00315     meCharge_onTrackDisk_ = dbe->book1D("charge_OnTrack_" + hisID,"Normalized Cluster charge (on Track)",100,0.,200.);
00316     meCharge_onTrackDisk_->setAxisTitle("Charge [kilo electrons]",1);
00317     // Total cluster size (in pixels)
00318     meSize_onTrackDisk_ = dbe->book1D("size_OnTrack_" + hisID,"Total cluster size (on Track)",30,0.,30.);
00319     meSize_onTrackDisk_->setAxisTitle("Cluster size [number of pixels]",1);    
00320     // Number of clusters
00321     meNClusters_offTrackDisk_ = dbe->book1D("nclusters_OffTrack_" + hisID,"Number of Clusters (off Track)",35,0.,35.);
00322     meNClusters_offTrackDisk_->setAxisTitle("Number of Clusters off Track",1);
00323     // Total cluster charge in MeV
00324     meCharge_offTrackDisk_ = dbe->book1D("charge_OffTrack_" + hisID,"Cluster charge (off Track)",100,0.,200.);
00325     meCharge_offTrackDisk_->setAxisTitle("Charge [kilo electrons]",1);
00326     // Total cluster size (in pixels)
00327     meSize_offTrackDisk_ = dbe->book1D("size_OffTrack_" + hisID,"Total cluster size (off Track)",30,0.,30.);
00328     meSize_offTrackDisk_->setAxisTitle("Cluster size [number of pixels]",1);
00329     if(!reducedSet){
00330       // Cluster width on the x-axis
00331       meSizeX_onTrackDisk_ = dbe->book1D("sizeX_OnTrack_" + hisID,"Cluster x-width (rows) (on Track)",10,0.,10.);
00332       meSizeX_onTrackDisk_->setAxisTitle("Cluster x-size [rows]",1);
00333       // Cluster width on the y-axis
00334       meSizeY_onTrackDisk_ = dbe->book1D("sizeY_OnTrack_" + hisID,"Cluster y-width (columns) (on Track)",15,0.,15.);
00335       meSizeY_onTrackDisk_->setAxisTitle("Cluster y-size [columns]",1);
00336       // Cluster width on the x-axis
00337       meSizeX_offTrackDisk_ = dbe->book1D("sizeX_OffTrack_" + hisID,"Cluster x-width (rows) (off Track)",10,0.,10.);
00338       meSizeX_offTrackDisk_->setAxisTitle("Cluster x-size [rows]",1);
00339       // Cluster width on the y-axis
00340       meSizeY_offTrackDisk_ = dbe->book1D("sizeY_OffTrack_" + hisID,"Cluster y-width (columns) (off Track)",15,0.,15.);
00341       meSizeY_offTrackDisk_->setAxisTitle("Cluster y-size [columns]",1);
00342     }
00343   }
00344 
00345   if(type==6 && endcap){
00346     uint32_t panel;
00347     uint32_t module;
00348     if (!isUpgrade) {
00349       panel= PixelEndcapName(DetId(id_)).pannelName();
00350       module= PixelEndcapName(DetId(id_)).plaquetteName();
00351     } else if (isUpgrade) {
00352       panel= PixelEndcapNameUpgrade(DetId(id_)).pannelName();
00353       module= PixelEndcapNameUpgrade(DetId(id_)).plaquetteName();
00354     }
00355     
00356     char slab[80]; sprintf(slab, "Panel_%i_Ring_%i",panel, module);
00357     hisID = src.label() + "_" + slab;
00358     meResidualXRing_ = dbe->book1D("residualX_"+hisID,"Hit-to-Track Residual in r-phi",100,-150,150);
00359     meResidualXRing_->setAxisTitle("hit-to-track residual in r-phi (um)",1);
00360     meResidualYRing_ = dbe->book1D("residualY_"+hisID,"Hit-to-Track Residual in Z",100,-300,300);
00361     meResidualYRing_->setAxisTitle("hit-to-track residual in z (um)",1);
00362     // Number of clusters
00363     meNClusters_onTrackRing_ = dbe->book1D("nclusters_OnTrack_" + hisID,"Number of Clusters (on Track)",10,0.,10.);
00364     meNClusters_onTrackRing_->setAxisTitle("Number of Clusters on Track",1);
00365     // Total cluster charge in MeV
00366     meCharge_onTrackRing_ = dbe->book1D("charge_OnTrack_" + hisID,"Normalized Cluster charge (on Track)",100,0.,200.);
00367     meCharge_onTrackRing_->setAxisTitle("Charge [kilo electrons]",1);
00368     // Total cluster size (in pixels)
00369     meSize_onTrackRing_ = dbe->book1D("size_OnTrack_" + hisID,"Total cluster size (on Track)",30,0.,30.);
00370     meSize_onTrackRing_->setAxisTitle("Cluster size [number of pixels]",1);    
00371     // Number of clusters
00372     meNClusters_offTrackRing_ = dbe->book1D("nclusters_OffTrack_" + hisID,"Number of Clusters (off Track)",35,0.,35.);
00373     meNClusters_offTrackRing_->setAxisTitle("Number of Clusters off Track",1);
00374     // Total cluster charge in MeV
00375     meCharge_offTrackRing_ = dbe->book1D("charge_OffTrack_" + hisID,"Cluster charge (off Track)",100,0.,200.);
00376     meCharge_offTrackRing_->setAxisTitle("Charge [kilo electrons]",1);
00377     // Total cluster size (in pixels)
00378     meSize_offTrackRing_ = dbe->book1D("size_OffTrack_" + hisID,"Total cluster size (off Track)",30,0.,30.);
00379     meSize_offTrackRing_->setAxisTitle("Cluster size [number of pixels]",1);
00380     if(!reducedSet){
00381       // Cluster width on the x-axis
00382       meSizeX_onTrackRing_ = dbe->book1D("sizeX_OnTrack_" + hisID,"Cluster x-width (rows) (on Track)",10,0.,10.);
00383       meSizeX_onTrackRing_->setAxisTitle("Cluster x-size [rows]",1);
00384       // Cluster width on the y-axis
00385       meSizeY_onTrackRing_ = dbe->book1D("sizeY_OnTrack_" + hisID,"Cluster y-width (columns) (on Track)",15,0.,15.);
00386       meSizeY_onTrackRing_->setAxisTitle("Cluster y-size [columns]",1);
00387       // Cluster width on the x-axis
00388       meSizeX_offTrackRing_ = dbe->book1D("sizeX_OffTrack_" + hisID,"Cluster x-width (rows) (off Track)",10,0.,10.);
00389       meSizeX_offTrackRing_->setAxisTitle("Cluster x-size [rows]",1);
00390       // Cluster width on the y-axis
00391       meSizeY_offTrackRing_ = dbe->book1D("sizeY_OffTrack_" + hisID,"Cluster y-width (columns) (off Track)",15,0.,15.);
00392       meSizeY_offTrackRing_->setAxisTitle("Cluster y-size [columns]",1);
00393     }
00394   }
00395 }
00396 
00397 
00398 void SiPixelTrackResidualModule::fill(const Measurement2DVector& residual, bool reducedSet, bool modon, bool ladon, bool layon, bool phion, bool bladeon, bool diskon, bool ringon) {
00399 
00400   bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00401   bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00402 
00403   if(modon){
00404     (meResidualX_)->Fill(residual.x()); 
00405     (meResidualY_)->Fill(residual.y()); 
00406   }
00407 
00408   if(ladon && barrel){
00409     (meResidualXLad_)->Fill(residual.x()); 
00410     (meResidualYLad_)->Fill(residual.y()); 
00411   }
00412 
00413   if(layon && barrel){
00414     (meResidualXLay_)->Fill(residual.x()); 
00415     (meResidualYLay_)->Fill(residual.y()); 
00416   }
00417   if(phion && barrel){
00418     (meResidualXPhi_)->Fill(residual.x()); 
00419     (meResidualYPhi_)->Fill(residual.y()); 
00420   }
00421 
00422   if(bladeon && endcap){
00423     (meResidualXBlade_)->Fill(residual.x()); 
00424     (meResidualYBlade_)->Fill(residual.y()); 
00425   }
00426 
00427   if(diskon && endcap){
00428     (meResidualXDisk_)->Fill(residual.x()); 
00429     (meResidualYDisk_)->Fill(residual.y()); 
00430   }
00431 
00432   if(ringon && endcap){
00433     (meResidualXRing_)->Fill(residual.x()); 
00434     (meResidualYRing_)->Fill(residual.y()); 
00435   }
00436 }
00437 
00438 
00439 void SiPixelTrackResidualModule::fill(const SiPixelCluster &clust, bool onTrack, double corrCharge, bool reducedSet, bool modon, bool ladon, bool layon, bool phion, bool bladeon, bool diskon, bool ringon){
00440 
00441   bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00442   bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00443 
00444   float charge = 0.001*(clust.charge()); // total charge of cluster
00445   if(onTrack) charge = corrCharge;              // corrected cluster charge
00446   int size = clust.size();               // total size of cluster (in pixels)
00447   int sizeX = clust.sizeX();             // size of cluster in x-clustrection
00448   int sizeY = clust.sizeY();             // size of cluster in y-direction
00449   
00450   if(onTrack){
00451     if(modon){
00452       (meCharge_onTrack_)->Fill((float)charge);
00453       (meSize_onTrack_)->Fill((int)size);
00454       if(!reducedSet){
00455         (meSizeX_onTrack_)->Fill((int)sizeX);
00456         (meSizeY_onTrack_)->Fill((int)sizeY);
00457       }
00458     }
00459     if(barrel && ladon){
00460       (meCharge_onTrackLad_)->Fill((float)charge);
00461       (meSize_onTrackLad_)->Fill((int)size);
00462       if(!reducedSet){
00463         (meSizeX_onTrackLad_)->Fill((int)sizeX);
00464         (meSizeY_onTrackLad_)->Fill((int)sizeY);
00465       }
00466     }
00467     if(barrel && layon){
00468       (meCharge_onTrackLay_)->Fill((float)charge);
00469       (meSize_onTrackLay_)->Fill((int)size);
00470       if(!reducedSet){
00471         (meSizeX_onTrackLay_)->Fill((int)sizeX);
00472         (meSizeY_onTrackLay_)->Fill((int)sizeY);
00473       }
00474     }   
00475     if(barrel && phion){
00476       (meCharge_onTrackPhi_)->Fill((float)charge);
00477       (meSize_onTrackPhi_)->Fill((int)size);
00478       if(!reducedSet){
00479         (meSizeX_onTrackPhi_)->Fill((int)sizeX);
00480         (meSizeY_onTrackPhi_)->Fill((int)sizeY);
00481       }
00482     }
00483     if(endcap && bladeon){
00484       (meCharge_onTrackBlade_)->Fill((float)charge);
00485       (meSize_onTrackBlade_)->Fill((int)size);
00486       if(!reducedSet){
00487         (meSizeX_onTrackBlade_)->Fill((int)sizeX);
00488         (meSizeY_onTrackBlade_)->Fill((int)sizeY);
00489       }
00490     }
00491     if(endcap && diskon){
00492       (meCharge_onTrackDisk_)->Fill((float)charge);
00493       (meSize_onTrackDisk_)->Fill((int)size);
00494       if(!reducedSet){
00495         (meSizeX_onTrackDisk_)->Fill((int)sizeX);
00496         (meSizeY_onTrackDisk_)->Fill((int)sizeY);
00497       }
00498     }
00499     if(endcap && ringon){
00500       (meCharge_onTrackRing_)->Fill((float)charge);
00501       (meSize_onTrackRing_)->Fill((int)size);
00502       if(!reducedSet){
00503         (meSizeX_onTrackRing_)->Fill((int)sizeX);
00504         (meSizeY_onTrackRing_)->Fill((int)sizeY);
00505       }
00506     }
00507   }
00508 
00509   if(!onTrack){
00510     if(modon){
00511       (meCharge_offTrack_)->Fill((float)charge);
00512       (meSize_offTrack_)->Fill((int)size);
00513       if(!reducedSet){
00514         (meSizeX_offTrack_)->Fill((int)sizeX);
00515         (meSizeY_offTrack_)->Fill((int)sizeY);
00516       }
00517     }
00518     if(barrel && ladon){
00519       (meCharge_offTrackLad_)->Fill((float)charge);
00520       (meSize_offTrackLad_)->Fill((int)size);
00521       if(!reducedSet){
00522         (meSizeX_offTrackLad_)->Fill((int)sizeX);
00523         (meSizeY_offTrackLad_)->Fill((int)sizeY);
00524       }
00525     }
00526     if(barrel && layon){
00527       (meCharge_offTrackLay_)->Fill((float)charge);
00528       (meSize_offTrackLay_)->Fill((int)size);
00529       if(!reducedSet){
00530         (meSizeX_offTrackLay_)->Fill((int)sizeX);
00531         (meSizeY_offTrackLay_)->Fill((int)sizeY);
00532       }
00533     }   
00534     if(barrel && phion){
00535       (meCharge_offTrackPhi_)->Fill((float)charge);
00536       (meSize_offTrackPhi_)->Fill((int)size);
00537       if(!reducedSet){
00538         (meSizeX_offTrackPhi_)->Fill((int)sizeX);
00539         (meSizeY_offTrackPhi_)->Fill((int)sizeY);
00540       }
00541     }
00542     if(endcap && bladeon){
00543       (meCharge_offTrackBlade_)->Fill((float)charge);
00544       (meSize_offTrackBlade_)->Fill((int)size);
00545       if(!reducedSet){
00546         (meSizeX_offTrackBlade_)->Fill((int)sizeX);
00547         (meSizeY_offTrackBlade_)->Fill((int)sizeY);
00548       }
00549     }
00550     if(endcap && diskon){
00551       (meCharge_offTrackDisk_)->Fill((float)charge);
00552       (meSize_offTrackDisk_)->Fill((int)size);
00553       if(!reducedSet){
00554         (meSizeX_offTrackDisk_)->Fill((int)sizeX);
00555         (meSizeY_offTrackDisk_)->Fill((int)sizeY);
00556       }
00557     }
00558     if(endcap && ringon){
00559       (meCharge_offTrackRing_)->Fill((float)charge);
00560       (meSize_offTrackRing_)->Fill((int)size);
00561       if(!reducedSet){
00562         (meSizeX_offTrackRing_)->Fill((int)sizeX);
00563         (meSizeY_offTrackRing_)->Fill((int)sizeY);
00564       }
00565     }
00566   }
00567 
00568 
00569   
00570 }
00571 
00572 void SiPixelTrackResidualModule::nfill(int onTrack, int offTrack, bool reducedSet, bool modon, bool ladon, bool layon, bool phion, bool bladeon, bool diskon, bool ringon){
00573 
00574   bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00575   bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00576   bool fillOn = false; if(onTrack>0) fillOn = true; 
00577   bool fillOff = false; if(offTrack>0) fillOff = true; 
00578 
00579   if(modon){
00580     if(fillOn) meNClusters_onTrack_->Fill(onTrack); 
00581     if(fillOff) meNClusters_offTrack_->Fill(offTrack); 
00582   }
00583   if(ladon && barrel){
00584     if(fillOn) meNClusters_onTrackLad_->Fill(onTrack); 
00585     if(fillOff) meNClusters_offTrackLad_->Fill(offTrack); 
00586   }
00587   
00588   if(layon && barrel){
00589     if(fillOn) meNClusters_onTrackLay_->Fill(onTrack); 
00590     if(fillOff) meNClusters_offTrackLay_->Fill(offTrack); 
00591   }
00592   if(phion && barrel){
00593     if(fillOn) meNClusters_onTrackPhi_->Fill(onTrack); 
00594     if(fillOff) meNClusters_offTrackPhi_->Fill(offTrack); 
00595   }
00596   if(bladeon && endcap){
00597     if(fillOn) meNClusters_onTrackBlade_->Fill(onTrack); 
00598     if(fillOff) meNClusters_offTrackBlade_->Fill(offTrack); 
00599   }
00600   if(diskon && endcap){
00601     if(fillOn) meNClusters_onTrackDisk_->Fill(onTrack); 
00602     if(fillOff) meNClusters_offTrackDisk_->Fill(offTrack); 
00603   }
00604   if(ringon && endcap){
00605     if(fillOn) meNClusters_onTrackRing_->Fill(onTrack); 
00606     if(fillOff) meNClusters_offTrackRing_->Fill(offTrack); 
00607   }
00608 }