00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <string>
00016 #include <iostream>
00017
00018 #include "DQMServices/Core/interface/DQMStore.h"
00019 #include "FWCore/ServiceRegistry/interface/Service.h"
00020 #include "DQM/SiPixelCommon/interface/SiPixelHistogramId.h"
00021 #include "DQM/SiPixelMonitorTrack/interface/SiPixelTrackResidualModule.h"
00022
00023
00024 #include "DataFormats/SiPixelDetId/interface/PixelBarrelName.h"
00025 #include "DataFormats/SiPixelDetId/interface/PixelEndcapName.h"
00026 #include "DataFormats/DetId/interface/DetId.h"
00027 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
00028
00029
00030 using namespace std;
00031
00032
00033 SiPixelTrackResidualModule::SiPixelTrackResidualModule() : id_(0) {
00034 bBookTracks = true;
00035 }
00036
00037
00038 SiPixelTrackResidualModule::SiPixelTrackResidualModule(uint32_t id) : id_(id) {
00039 bBookTracks = true;
00040 }
00041
00042
00043 SiPixelTrackResidualModule::~SiPixelTrackResidualModule() {
00044
00045 }
00046
00047
00048 void SiPixelTrackResidualModule::book(const edm::ParameterSet& iConfig, int type) {
00049 DQMStore* dbe = edm::Service<DQMStore>().operator->();
00050
00051 bool barrel = DetId::DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00052 bool endcap = DetId::DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00053 bool isHalfModule = false;
00054 if(barrel){
00055 isHalfModule = PixelBarrelName::PixelBarrelName(DetId::DetId(id_)).isHalfModule();
00056 }
00057
00058 edm::InputTag src = iConfig.getParameter<edm::InputTag>("src");
00059 SiPixelHistogramId* theHistogramId = new SiPixelHistogramId(src.label());
00060 std::string hisID;
00061
00062 if(type==0){
00063 hisID = theHistogramId->setHistoId("residualX",id_);
00064 meResidualX_ = dbe->book1D(hisID,"Hit-to-Track Residual in X",500,-5.,5.);
00065 meResidualX_->setAxisTitle("hit-to-track residual in x (cm)",1);
00066
00067 hisID = theHistogramId->setHistoId("residualY",id_);
00068 meResidualY_ = dbe->book1D(hisID,"Hit-to-Track Residual in Y",500,-5.,5.);
00069 meResidualY_->setAxisTitle("hit-to-track residual in y (cm)",1);
00070
00071 delete theHistogramId;
00072 }
00073
00074 if(type==1 && barrel){
00075 uint32_t DBladder = PixelBarrelName::PixelBarrelName(DetId::DetId(id_)).ladderName();
00076 char sladder[80]; sprintf(sladder,"Ladder_%02i",DBladder);
00077 hisID = src.label() + "_" + sladder;
00078 if(isHalfModule) hisID += "H";
00079 else hisID += "F";
00080
00081 meResidualXLad_ = dbe->book1D("residualX_"+hisID,"Hit-to-Track Residual in X",500,-5.,5.);
00082 meResidualXLad_->setAxisTitle("hit-to-track residual in x (cm)",1);
00083
00084 meResidualYLad_ = dbe->book1D("residualY_"+hisID,"Hit-to-Track Residual in Y",500,-5.,5.);
00085 meResidualYLad_->setAxisTitle("hit-to-track residual in y (cm)",1);
00086 }
00087
00088 if(type==2 && barrel){
00089 uint32_t DBlayer = PixelBarrelName::PixelBarrelName(DetId::DetId(id_)).layerName();
00090 char slayer[80]; sprintf(slayer,"Layer_%i",DBlayer);
00091 hisID = src.label() + "_" + slayer;
00092
00093 meResidualXLay_ = dbe->book1D("residualX_"+hisID,"Hit-to-Track Residual in X",500,-5.,5.);
00094 meResidualXLay_->setAxisTitle("hit-to-track residual in x (cm)",1);
00095
00096 meResidualYLay_ = dbe->book1D("residualY_"+hisID,"Hit-to-Track Residual in Y",500,-5.,5.);
00097 meResidualYLay_->setAxisTitle("hit-to-track residual in y (cm)",1);
00098 }
00099
00100 if(type==3 && barrel){
00101 uint32_t DBmodule = PixelBarrelName::PixelBarrelName(DetId::DetId(id_)).moduleName();
00102 char smodule[80]; sprintf(smodule,"Ring_%i",DBmodule);
00103 hisID = src.label() + "_" + smodule;
00104
00105 meResidualXPhi_ = dbe->book1D("residualX_"+hisID,"Hit-to-Track Residual in X",500,-5.,5.);
00106 meResidualXPhi_->setAxisTitle("hit-to-track residual in x (cm)",1);
00107
00108 meResidualYPhi_ = dbe->book1D("residualY_"+hisID,"Hit-to-Track Residual in Y",500,-5.,5.);
00109 meResidualYPhi_->setAxisTitle("hit-to-track residual in y (cm)",1);
00110 }
00111
00112 if(type==4 && endcap){
00113 uint32_t blade= PixelEndcapName::PixelEndcapName(DetId::DetId(id_)).bladeName();
00114
00115 char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
00116 hisID = src.label() + "_" + sblade;
00117
00118 meResidualXBlade_ = dbe->book1D("residualX_"+hisID,"Hit-to-Track Residual in X",500,-5.,5.);
00119 meResidualXBlade_->setAxisTitle("hit-to-track residual in x (cm)",1);
00120
00121 meResidualYBlade_ = dbe->book1D("residualY_"+hisID,"Hit-to-Track Residual in Y",500,-5.,5.);
00122 meResidualYBlade_->setAxisTitle("hit-to-track residual in y (cm)",1);
00123 }
00124
00125 if(type==5 && endcap){
00126 uint32_t disk = PixelEndcapName::PixelEndcapName(DetId::DetId(id_)).diskName();
00127
00128 char sdisk[80]; sprintf(sdisk, "Disk_%i",disk);
00129 hisID = src.label() + "_" + sdisk;
00130
00131 meResidualXDisk_ = dbe->book1D("residualX_"+hisID,"Hit-to-Track Residual in X",500,-5.,5.);
00132 meResidualXDisk_->setAxisTitle("hit-to-track residual in x (cm)",1);
00133
00134 meResidualYDisk_ = dbe->book1D("residualY_"+hisID,"Hit-to-Track Residual in Y",500,-5.,5.);
00135 meResidualYDisk_->setAxisTitle("hit-to-track residual in y (cm)",1);
00136 }
00137
00138 if(type==6 && endcap){
00139 uint32_t panel= PixelEndcapName::PixelEndcapName(DetId::DetId(id_)).pannelName();
00140 uint32_t module= PixelEndcapName::PixelEndcapName(DetId::DetId(id_)).plaquetteName();
00141 char slab[80]; sprintf(slab, "Panel_%i_Ring_%i",panel, module);
00142 hisID = src.label() + "_" + slab;
00143
00144 meResidualXRing_ = dbe->book1D("residualX_"+hisID,"Hit-to-Track Residual in X",500,-5.,5.);
00145 meResidualXRing_->setAxisTitle("hit-to-track residual in x (cm)",1);
00146
00147 meResidualYRing_ = dbe->book1D("residualY_"+hisID,"Hit-to-Track Residual in Y",500,-5.,5.);
00148 meResidualYRing_->setAxisTitle("hit-to-track residual in y (cm)",1);
00149 }
00150
00151
00152
00153
00154
00155
00156
00157 }
00158
00159
00160 void SiPixelTrackResidualModule::fill(const Measurement2DVector& residual, bool modon, bool ladon, bool layon, bool phion, bool bladeon, bool diskon, bool ringon) {
00161
00162 bool barrel = DetId::DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00163 bool endcap = DetId::DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00164
00165 if(modon){
00166 (meResidualX_)->Fill(residual.x());
00167 (meResidualY_)->Fill(residual.y());
00168 }
00169
00170 if(ladon && barrel){
00171 (meResidualXLad_)->Fill(residual.x());
00172 (meResidualYLad_)->Fill(residual.y());
00173 }
00174
00175 if(layon && barrel){
00176 (meResidualXLay_)->Fill(residual.x());
00177 (meResidualYLay_)->Fill(residual.y());
00178 }
00179 if(phion && barrel){
00180 (meResidualXPhi_)->Fill(residual.x());
00181 (meResidualYPhi_)->Fill(residual.y());
00182 }
00183
00184 if(bladeon && endcap){
00185 (meResidualXBlade_)->Fill(residual.x());
00186 (meResidualYBlade_)->Fill(residual.y());
00187 }
00188
00189 if(diskon && endcap){
00190 (meResidualXDisk_)->Fill(residual.x());
00191 (meResidualYDisk_)->Fill(residual.y());
00192 }
00193
00194 if(ringon && endcap){
00195 (meResidualXRing_)->Fill(residual.x());
00196 (meResidualYRing_)->Fill(residual.y());
00197 }
00198 }
00199
00200