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/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/SiPixelHitEfficiencyModule.h"
00024
00025
00026 #include "DataFormats/SiPixelDetId/interface/PixelBarrelName.h"
00027 #include "DataFormats/SiPixelDetId/interface/PixelEndcapName.h"
00028 #include "DataFormats/DetId/interface/DetId.h"
00029 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
00030
00031
00032 using namespace std;
00033
00034
00035 SiPixelHitEfficiencyModule::SiPixelHitEfficiencyModule() : id_(0) {
00036 bBookTracks = true;
00037 }
00038
00039
00040 SiPixelHitEfficiencyModule::SiPixelHitEfficiencyModule(uint32_t id) : id_(id) {
00041 bBookTracks = true;
00042 }
00043
00044
00045 SiPixelHitEfficiencyModule::~SiPixelHitEfficiencyModule() {
00046
00047 }
00048
00049
00050 void SiPixelHitEfficiencyModule::book(const edm::ParameterSet& iConfig, int type) {
00051 DQMStore* dbe = edm::Service<DQMStore>().operator->();
00052
00053 bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00054 bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00055 bool isHalfModule = false;
00056 if(barrel){
00057 isHalfModule = PixelBarrelName(DetId(id_)).isHalfModule();
00058 }
00059
00060 edm::InputTag src = iConfig.getParameter<edm::InputTag>("src");
00061 debug_ = iConfig.getUntrackedParameter<bool>("debug",false);
00062 updateEfficiencies = iConfig.getUntrackedParameter<bool>("updateEfficiencies",false);
00063 std::string hisID;
00064
00065 int nbinangle = 28;
00066 int nbinX = 45;
00067 int nbinY = 40;
00068
00069 if(type==0){
00070 SiPixelHistogramId* theHistogramId = new SiPixelHistogramId(src.label());
00071
00072 if(updateEfficiencies){
00073
00074 hisID = theHistogramId->setHistoId("efficiency",id_);
00075 meEfficiency_ = dbe->book1D(hisID,"Hit efficiency",1,0,1.);
00076 meEfficiency_->setAxisTitle("Hit efficiency",1);
00077
00078 hisID = theHistogramId->setHistoId("efficiencyX",id_);
00079 meEfficiencyX_ = dbe->book1D(hisID,"Hit efficiency in X",nbinX,-1.5,1.5);
00080 meEfficiencyX_->setAxisTitle("Hit efficiency in X",1);
00081
00082 hisID = theHistogramId->setHistoId("efficiencyY",id_);
00083 meEfficiencyY_ = dbe->book1D(hisID,"Hit efficiency in Y",nbinY,-4.,4.);
00084 meEfficiencyY_->setAxisTitle("Hit efficiency in Y",1);
00085
00086 hisID = theHistogramId->setHistoId("efficiencyAlpha",id_);
00087 meEfficiencyAlpha_ = dbe->book1D(hisID,"Hit efficiency in Alpha",nbinangle,-3.5,3.5);
00088 meEfficiencyAlpha_->setAxisTitle("Hit efficiency in Alpha",1);
00089
00090 hisID = theHistogramId->setHistoId("efficiencyBeta",id_);
00091 meEfficiencyBeta_ = dbe->book1D(hisID,"Hit efficiency in Beta",nbinangle,-3.5,3.5);
00092 meEfficiencyBeta_->setAxisTitle("Hit efficiency in Beta",1);
00093 }
00094
00095
00096 hisID = theHistogramId->setHistoId("valid",id_);
00097 meValid_ = dbe->book1D(hisID,"# Valid hits",1,0,1.);
00098 meValid_->setAxisTitle("# Valid hits",1);
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117 hisID = theHistogramId->setHistoId("missing",id_);
00118 meMissing_ = dbe->book1D(hisID,"# Missing hits",1,0,1.);
00119 meMissing_->setAxisTitle("# Missing hits",1);
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137 delete theHistogramId;
00138 }
00139
00140 if(type==1 && barrel){
00141 uint32_t DBladder = PixelBarrelName(DetId(id_)).ladderName();
00142 char sladder[80]; sprintf(sladder,"Ladder_%02i",DBladder);
00143 hisID = src.label() + "_" + sladder;
00144 if(isHalfModule) hisID += "H";
00145 else hisID += "F";
00146
00147 if(updateEfficiencies){
00148
00149 meEfficiencyLad_ = dbe->book1D("efficiency_"+hisID,"Hit efficiency",1,0,1.);
00150 meEfficiencyLad_->setAxisTitle("Hit efficiency",1);
00151
00152 meEfficiencyXLad_ = dbe->book1D("efficiencyX_"+hisID,"Hit efficiency in X",nbinX,-1.5,1.5);
00153 meEfficiencyXLad_->setAxisTitle("Hit efficiency in X",1);
00154
00155 meEfficiencyYLad_ = dbe->book1D("efficiencyY_"+hisID,"Hit efficiency in Y",nbinY,-4.,4.);
00156 meEfficiencyYLad_->setAxisTitle("Hit efficiency in Y",1);
00157
00158 meEfficiencyAlphaLad_ = dbe->book1D("efficiencyAlpha_"+hisID,"Hit efficiency in Alpha",nbinangle,-3.5,3.5);
00159 meEfficiencyAlphaLad_->setAxisTitle("Hit efficiency in Alpha",1);
00160
00161 meEfficiencyBetaLad_ = dbe->book1D("efficiencyBeta_"+hisID,"Hit efficiency in Beta",nbinangle,-3.5,3.5);
00162 meEfficiencyBetaLad_->setAxisTitle("Hit efficiency in Beta",1);
00163 }
00164
00165
00166 meValidLad_ = dbe->book1D("valid_"+hisID,"# Valid hits",1,0,1.);
00167 meValidLad_->setAxisTitle("# Valid hits",1);
00168
00169 meValidXLad_ = dbe->book1D("validX_"+hisID,"# Valid hits in X",nbinX,-1.5,1.5);
00170 meValidXLad_->setAxisTitle("# Valid hits in X",1);
00171
00172 meValidYLad_ = dbe->book1D("validY_"+hisID,"# Valid hits in Y",nbinY,-4.,4.);
00173 meValidYLad_->setAxisTitle("# Valid hits in Y",1);
00174
00175 meValidAlphaLad_ = dbe->book1D("validAlpha_"+hisID,"# Valid hits in Alpha",nbinangle,-3.5,3.5);
00176 meValidAlphaLad_->setAxisTitle("# Valid hits in Alpha",1);
00177
00178 meValidBetaLad_ = dbe->book1D("validBeta_"+hisID,"# Valid hits in Beta",nbinangle,-3.5,3.5);
00179 meValidBetaLad_->setAxisTitle("# Valid hits in Beta",1);
00180
00181
00182 meMissingLad_ = dbe->book1D("missing_"+hisID,"# Missing hits",1,0,1.);
00183 meMissingLad_->setAxisTitle("# Missing hits",1);
00184
00185 meMissingXLad_ = dbe->book1D("missingX_"+hisID,"# Missing hits in X",nbinX,-1.5,1.5);
00186 meMissingXLad_->setAxisTitle("# Missing hits in X",1);
00187
00188 meMissingYLad_ = dbe->book1D("missingY_"+hisID,"# Missing hits in Y",nbinY,-4.,4.);
00189 meMissingYLad_->setAxisTitle("# Missing hits in Y",1);
00190
00191 meMissingAlphaLad_ = dbe->book1D("missingAlpha_"+hisID,"# Missing hits in Alpha",nbinangle,-3.5,3.5);
00192 meMissingAlphaLad_->setAxisTitle("# Missing hits in Alpha",1);
00193
00194 meMissingBetaLad_ = dbe->book1D("missingBeta_"+hisID,"# Missing hits in Beta",nbinangle,-3.5,3.5);
00195 meMissingBetaLad_->setAxisTitle("# Missing hits in Beta",1);
00196 }
00197
00198 if(type==2 && barrel){
00199 uint32_t DBlayer = PixelBarrelName(DetId(id_)).layerName();
00200 char slayer[80]; sprintf(slayer,"Layer_%i",DBlayer);
00201 hisID = src.label() + "_" + slayer;
00202
00203
00204 if(updateEfficiencies){
00205
00206 meEfficiencyLay_ = dbe->book1D("efficiency_"+hisID,"Hit efficiency",1,0,1.);
00207 meEfficiencyLay_->setAxisTitle("Hit efficiency",1);
00208
00209 meEfficiencyXLay_ = dbe->book1D("efficiencyX_"+hisID,"Hit efficiency in X",nbinX,-1.5,1.5);
00210 meEfficiencyXLay_->setAxisTitle("Hit efficiency in X",1);
00211
00212 meEfficiencyYLay_ = dbe->book1D("efficiencyY_"+hisID,"Hit efficiency in Y",nbinY,-4.,4.);
00213 meEfficiencyYLay_->setAxisTitle("Hit efficiency in Y",1);
00214
00215 meEfficiencyAlphaLay_ = dbe->book1D("efficiencyAlpha_"+hisID,"Hit efficiency in Alpha",nbinangle,-3.5,3.5);
00216 meEfficiencyAlphaLay_->setAxisTitle("Hit efficiency in Alpha",1);
00217
00218 meEfficiencyBetaLay_ = dbe->book1D("efficiencyBeta_"+hisID,"Hit efficiency in Beta",nbinangle,-3.5,3.5);
00219 meEfficiencyBetaLay_->setAxisTitle("Hit efficiency in Beta",1);
00220 }
00221
00222
00223 meValidLay_ = dbe->book1D("valid_"+hisID,"# Valid hits",1,0,1.);
00224 meValidLay_->setAxisTitle("# Valid hits",1);
00225
00226 meValidXLay_ = dbe->book1D("validX_"+hisID,"# Valid hits in X",nbinX,-1.5,1.5);
00227 meValidXLay_->setAxisTitle("# Valid hits in X",1);
00228
00229 meValidYLay_ = dbe->book1D("validY_"+hisID,"# Valid hits in Y",nbinY,-4.,4.);
00230 meValidYLay_->setAxisTitle("# Valid hits in Y",1);
00231
00232 meValidAlphaLay_ = dbe->book1D("validAlpha_"+hisID,"# Valid hits in Alpha",nbinangle,-3.5,3.5);
00233 meValidAlphaLay_->setAxisTitle("# Valid hits in Alpha",1);
00234
00235 meValidBetaLay_ = dbe->book1D("validBeta_"+hisID,"# Valid hits in Beta",nbinangle,-3.5,3.5);
00236 meValidBetaLay_->setAxisTitle("# Valid hits in Beta",1);
00237
00238
00239 meMissingLay_ = dbe->book1D("missing_"+hisID,"# Missing hits",1,0,1.);
00240 meMissingLay_->setAxisTitle("# Missing hits",1);
00241
00242 meMissingXLay_ = dbe->book1D("missingX_"+hisID,"# Missing hits in X",nbinX,-1.5,1.5);
00243 meMissingXLay_->setAxisTitle("# Missing hits in X",1);
00244
00245 meMissingYLay_ = dbe->book1D("missingY_"+hisID,"# Missing hits in Y",nbinY,-4.,4.);
00246 meMissingYLay_->setAxisTitle("# Missing hits in Y",1);
00247
00248 meMissingAlphaLay_ = dbe->book1D("missingAlpha_"+hisID,"# Missing hits in Alpha",nbinangle,-3.5,3.5);
00249 meMissingAlphaLay_->setAxisTitle("# Missing hits in Alpha",1);
00250
00251 meMissingBetaLay_ = dbe->book1D("missingBeta_"+hisID,"# Missing hits in Beta",nbinangle,-3.5,3.5);
00252 meMissingBetaLay_->setAxisTitle("# Missing hits in Beta",1);
00253 }
00254
00255 if(type==3 && barrel){
00256 uint32_t DBmodule = PixelBarrelName(DetId(id_)).moduleName();
00257 char smodule[80]; sprintf(smodule,"Ring_%i",DBmodule);
00258 hisID = src.label() + "_" + smodule;
00259
00260 if(updateEfficiencies){
00261
00262 meEfficiencyPhi_ = dbe->book1D("efficiency_"+hisID,"Hit efficiency",1,0,1.);
00263 meEfficiencyPhi_->setAxisTitle("Hit efficiency",1);
00264
00265 meEfficiencyXPhi_ = dbe->book1D("efficiencyX_"+hisID,"Hit efficiency in X",nbinX,-1.5,1.5);
00266 meEfficiencyXPhi_->setAxisTitle("Hit efficiency in X",1);
00267
00268 meEfficiencyYPhi_ = dbe->book1D("efficiencyY_"+hisID,"Hit efficiency in Y",nbinY,-4.,4.);
00269 meEfficiencyYPhi_->setAxisTitle("Hit efficiency in Y",1);
00270
00271 meEfficiencyAlphaPhi_ = dbe->book1D("efficiencyAlpha_"+hisID,"Hit efficiency in Alpha",nbinangle,-3.5,3.5);
00272 meEfficiencyAlphaPhi_->setAxisTitle("Hit efficiency in Alpha",1);
00273
00274 meEfficiencyBetaPhi_ = dbe->book1D("efficiencyBeta_"+hisID,"Hit efficiency in Beta",nbinangle,-3.5,3.5);
00275 meEfficiencyBetaPhi_->setAxisTitle("Hit efficiency in Beta",1);
00276 }
00277
00278
00279 meValidPhi_ = dbe->book1D("valid_"+hisID,"# Valid hits",1,0,1.);
00280 meValidPhi_->setAxisTitle("# Valid hits",1);
00281
00282 meValidXPhi_ = dbe->book1D("validX_"+hisID,"# Valid hits in X",nbinX,-1.5,1.5);
00283 meValidXPhi_->setAxisTitle("# Valid hits in X",1);
00284
00285 meValidYPhi_ = dbe->book1D("validY_"+hisID,"# Valid hits in Y",nbinY,-4.,4.);
00286 meValidYPhi_->setAxisTitle("# Valid hits in Y",1);
00287
00288 meValidAlphaPhi_ = dbe->book1D("validAlpha_"+hisID,"# Valid hits in Alpha",nbinangle,-3.5,3.5);
00289 meValidAlphaPhi_->setAxisTitle("# Valid hits in Alpha",1);
00290
00291 meValidBetaPhi_ = dbe->book1D("validBeta_"+hisID,"# Valid hits in Beta",nbinangle,-3.5,3.5);
00292 meValidBetaPhi_->setAxisTitle("# Valid hits in Beta",1);
00293
00294
00295 meMissingPhi_ = dbe->book1D("missing_"+hisID,"# Missing hits",1,0,1.);
00296 meMissingPhi_->setAxisTitle("# Missing hits",1);
00297
00298 meMissingXPhi_ = dbe->book1D("missingX_"+hisID,"# Missing hits in X",nbinX,-1.5,1.5);
00299 meMissingXPhi_->setAxisTitle("# Missing hits in X",1);
00300
00301 meMissingYPhi_ = dbe->book1D("missingY_"+hisID,"# Missing hits in Y",nbinY,-4.,4.);
00302 meMissingYPhi_->setAxisTitle("# Missing hits in Y",1);
00303
00304 meMissingAlphaPhi_ = dbe->book1D("missingAlpha_"+hisID,"# Missing hits in Alpha",nbinangle,-3.5,3.5);
00305 meMissingAlphaPhi_->setAxisTitle("# Missing hits in Alpha",1);
00306
00307 meMissingBetaPhi_ = dbe->book1D("missingBeta_"+hisID,"# Missing hits in Beta",nbinangle,-3.5,3.5);
00308 meMissingBetaPhi_->setAxisTitle("# Missing hits in Beta",1);
00309 }
00310
00311 if(type==4 && endcap){
00312 uint32_t blade= PixelEndcapName(DetId(id_)).bladeName();
00313
00314 char sblade[80]; sprintf(sblade, "Blade_%02i",blade);
00315 hisID = src.label() + "_" + sblade;
00316
00317 if(updateEfficiencies){
00318
00319 meEfficiencyBlade_ = dbe->book1D("efficiency_"+hisID,"Hit efficiency",1,0,1.);
00320 meEfficiencyBlade_->setAxisTitle("Hit efficiency",1);
00321
00322 meEfficiencyXBlade_ = dbe->book1D("efficiencyX_"+hisID,"Hit efficiency in X",nbinX,-1.5,1.5);
00323 meEfficiencyXBlade_->setAxisTitle("Hit efficiency in X",1);
00324
00325 meEfficiencyYBlade_ = dbe->book1D("efficiencyY_"+hisID,"Hit efficiency in Y",nbinY,-4.,4.);
00326 meEfficiencyYBlade_->setAxisTitle("Hit efficiency in Y",1);
00327
00328 meEfficiencyAlphaBlade_ = dbe->book1D("efficiencyAlpha_"+hisID,"Hit efficiency in Alpha",nbinangle,-3.5,3.5);
00329 meEfficiencyAlphaBlade_->setAxisTitle("Hit efficiency in Alpha",1);
00330
00331 meEfficiencyBetaBlade_ = dbe->book1D("efficiencyBeta_"+hisID,"Hit efficiency in Beta",nbinangle,-3.5,3.5);
00332 meEfficiencyBetaBlade_->setAxisTitle("Hit efficiency in Beta",1);
00333 }
00334
00335
00336 meValidBlade_ = dbe->book1D("valid_"+hisID,"# Valid hits",1,0,1.);
00337 meValidBlade_->setAxisTitle("# Valid hits",1);
00338
00339 meValidXBlade_ = dbe->book1D("validX_"+hisID,"# Valid hits in X",nbinX,-1.5,1.5);
00340 meValidXBlade_->setAxisTitle("# Valid hits in X",1);
00341
00342 meValidYBlade_ = dbe->book1D("validY_"+hisID,"# Valid hits in Y",nbinY,-4.,4.);
00343 meValidYBlade_->setAxisTitle("# Valid hits in Y",1);
00344
00345 meValidAlphaBlade_ = dbe->book1D("validAlpha_"+hisID,"# Valid hits in Alpha",nbinangle,-3.5,3.5);
00346 meValidAlphaBlade_->setAxisTitle("# Valid hits in Alpha",1);
00347
00348 meValidBetaBlade_ = dbe->book1D("validBeta_"+hisID,"# Valid hits in Beta",nbinangle,-3.5,3.5);
00349 meValidBetaBlade_->setAxisTitle("# Valid hits in Beta",1);
00350
00351
00352 meMissingBlade_ = dbe->book1D("missing_"+hisID,"# Missing hits",1,0,1.);
00353 meMissingBlade_->setAxisTitle("# Missing hits",1);
00354
00355 meMissingXBlade_ = dbe->book1D("missingX_"+hisID,"# Missing hits in X",nbinX,-1.5,1.5);
00356 meMissingXBlade_->setAxisTitle("# Missing hits in X",1);
00357
00358 meMissingYBlade_ = dbe->book1D("missingY_"+hisID,"# Missing hits in Y",nbinY,-4.,4.);
00359 meMissingYBlade_->setAxisTitle("# Missing hits in Y",1);
00360
00361 meMissingAlphaBlade_ = dbe->book1D("missingAlpha_"+hisID,"# Missing hits in Alpha",nbinangle,-3.5,3.5);
00362 meMissingAlphaBlade_->setAxisTitle("# Missing hits in Alpha",1);
00363
00364 meMissingBetaBlade_ = dbe->book1D("missingBeta_"+hisID,"# Missing hits in Beta",nbinangle,-3.5,3.5);
00365 meMissingBetaBlade_->setAxisTitle("# Missing hits in Beta",1);
00366 }
00367
00368 if(type==5 && endcap){
00369 uint32_t disk = PixelEndcapName(DetId(id_)).diskName();
00370
00371 char sdisk[80]; sprintf(sdisk, "Disk_%i",disk);
00372 hisID = src.label() + "_" + sdisk;
00373
00374 if(updateEfficiencies){
00375
00376 meEfficiencyDisk_ = dbe->book1D("efficiency_"+hisID,"Hit efficiency",1,0,1.);
00377 meEfficiencyDisk_->setAxisTitle("Hit efficiency",1);
00378
00379 meEfficiencyXDisk_ = dbe->book1D("efficiencyX_"+hisID,"Hit efficiency in X",nbinX,-1.5,1.5);
00380 meEfficiencyXDisk_->setAxisTitle("Hit efficiency in X",1);
00381
00382 meEfficiencyYDisk_ = dbe->book1D("efficiencyY_"+hisID,"Hit efficiency in Y",nbinY,-4.,4.);
00383 meEfficiencyYDisk_->setAxisTitle("Hit efficiency in Y",1);
00384
00385 meEfficiencyAlphaDisk_ = dbe->book1D("efficiencyAlpha_"+hisID,"Hit efficiency in Alpha",nbinangle,-3.5,3.5);
00386 meEfficiencyAlphaDisk_->setAxisTitle("Hit efficiency in Alpha",1);
00387
00388 meEfficiencyBetaDisk_ = dbe->book1D("efficiencyBeta_"+hisID,"Hit efficiency in Beta",nbinangle,-3.5,3.5);
00389 meEfficiencyBetaDisk_->setAxisTitle("Hit efficiency in Beta",1);
00390 }
00391
00392
00393 meValidDisk_ = dbe->book1D("valid_"+hisID,"# Valid hits",1,0,1.);
00394 meValidDisk_->setAxisTitle("# Valid hits",1);
00395
00396 meValidXDisk_ = dbe->book1D("validX_"+hisID,"# Valid hits in X",nbinX,-1.5,1.5);
00397 meValidXDisk_->setAxisTitle("# Valid hits in X",1);
00398
00399 meValidYDisk_ = dbe->book1D("validY_"+hisID,"# Valid hits in Y",nbinY,-4.,4.);
00400 meValidYDisk_->setAxisTitle("# Valid hits in Y",1);
00401
00402 meValidAlphaDisk_ = dbe->book1D("validAlpha_"+hisID,"# Valid hits in Alpha",nbinangle,-3.5,3.5);
00403 meValidAlphaDisk_->setAxisTitle("# Valid hits in Alpha",1);
00404
00405 meValidBetaDisk_ = dbe->book1D("validBeta_"+hisID,"# Valid hits in Beta",nbinangle,-3.5,3.5);
00406 meValidBetaDisk_->setAxisTitle("# Valid hits in Beta",1);
00407
00408
00409 meMissingDisk_ = dbe->book1D("missing_"+hisID,"# Missing hits",1,0,1.);
00410 meMissingDisk_->setAxisTitle("# Missing hits",1);
00411
00412 meMissingXDisk_ = dbe->book1D("missingX_"+hisID,"# Missing hits in X",nbinX,-1.5,1.5);
00413 meMissingXDisk_->setAxisTitle("# Missing hits in X",1);
00414
00415 meMissingYDisk_ = dbe->book1D("missingY_"+hisID,"# Missing hits in Y",nbinY,-4.,4.);
00416 meMissingYDisk_->setAxisTitle("# Missing hits in Y",1);
00417
00418 meMissingAlphaDisk_ = dbe->book1D("missingAlpha_"+hisID,"# Missing hits in Alpha",nbinangle,-3.5,3.5);
00419 meMissingAlphaDisk_->setAxisTitle("# Missing hits in Alpha",1);
00420
00421 meMissingBetaDisk_ = dbe->book1D("missingBeta_"+hisID,"# Missing hits in Beta",nbinangle,-3.5,3.5);
00422 meMissingBetaDisk_->setAxisTitle("# Missing hits in Beta",1);
00423 }
00424
00425
00426 if(type==6 && endcap){
00427 uint32_t panel= PixelEndcapName(DetId(id_)).pannelName();
00428 uint32_t module= PixelEndcapName(DetId(id_)).plaquetteName();
00429 char slab[80]; sprintf(slab, "Panel_%i_Ring_%i",panel, module);
00430 hisID = src.label() + "_" + slab;
00431
00432 if(updateEfficiencies){
00433
00434 meEfficiencyRing_ = dbe->book1D("efficiency_"+hisID,"Hit efficiency",1,0,1.);
00435 meEfficiencyRing_->setAxisTitle("Hit efficiency",1);
00436
00437 meEfficiencyXRing_ = dbe->book1D("efficiencyX_"+hisID,"Hit efficiency in X",nbinX,-1.5,1.5);
00438 meEfficiencyXRing_->setAxisTitle("Hit efficiency in X",1);
00439
00440 meEfficiencyYRing_ = dbe->book1D("efficiencyY_"+hisID,"Hit efficiency in Y",nbinY,-4.,4.);
00441 meEfficiencyYRing_->setAxisTitle("Hit efficiency in Y",1);
00442
00443 meEfficiencyAlphaRing_ = dbe->book1D("efficiencyAlpha_"+hisID,"Hit efficiency in Alpha",nbinangle,-3.5,3.5);
00444 meEfficiencyAlphaRing_->setAxisTitle("Hit efficiency in Alpha",1);
00445
00446 meEfficiencyBetaRing_ = dbe->book1D("efficiencyBeta_"+hisID,"Hit efficiency in Beta",nbinangle,-3.5,3.5);
00447 meEfficiencyBetaRing_->setAxisTitle("Hit efficiency in Beta",1);
00448 }
00449
00450
00451 meValidRing_ = dbe->book1D("valid_"+hisID,"# Valid hits",1,0,1.);
00452 meValidRing_->setAxisTitle("# Valid hits",1);
00453
00454 meValidXRing_ = dbe->book1D("validX_"+hisID,"# Valid hits in X",nbinX,-1.5,1.5);
00455 meValidXRing_->setAxisTitle("# Valid hits in X",1);
00456
00457 meValidYRing_ = dbe->book1D("validY_"+hisID,"# Valid hits in Y",nbinY,-4.,4.);
00458 meValidYRing_->setAxisTitle("# Valid hits in Y",1);
00459
00460 meValidAlphaRing_ = dbe->book1D("validAlpha_"+hisID,"# Valid hits in Alpha",nbinangle,-3.5,3.5);
00461 meValidAlphaRing_->setAxisTitle("# Valid hits in Alpha",1);
00462
00463 meValidBetaRing_ = dbe->book1D("validBeta_"+hisID,"# Valid hits in Beta",nbinangle,-3.5,3.5);
00464 meValidBetaRing_->setAxisTitle("# Valid hits in Beta",1);
00465
00466
00467 meMissingRing_ = dbe->book1D("missing_"+hisID,"# Missing hits",1,0,1.);
00468 meMissingRing_->setAxisTitle("# Missing hits",1);
00469
00470 meMissingXRing_ = dbe->book1D("missingX_"+hisID,"# Missing hits in X",nbinX,-1.5,1.5);
00471 meMissingXRing_->setAxisTitle("# Missing hits in X",1);
00472
00473 meMissingYRing_ = dbe->book1D("missingY_"+hisID,"# Missing hits in Y",nbinY,-4.,4.);
00474 meMissingYRing_->setAxisTitle("# Missing hits in Y",1);
00475
00476 meMissingAlphaRing_ = dbe->book1D("missingAlpha_"+hisID,"# Missing hits in Alpha",nbinangle,-3.5,3.5);
00477 meMissingAlphaRing_->setAxisTitle("# Missing hits in Alpha",1);
00478
00479 meMissingBetaRing_ = dbe->book1D("missingBeta_"+hisID,"# Missing hits in Beta",nbinangle,-3.5,3.5);
00480 meMissingBetaRing_->setAxisTitle("# Missing hits in Beta",1);
00481 }
00482 }
00483
00484
00485 void SiPixelHitEfficiencyModule::fill(LocalTrajectoryParameters ltp, bool isHitValid, bool modon, bool ladon, bool layon, bool phion, bool bladeon, bool diskon, bool ringon) {
00486
00487 bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00488 bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00489
00490 LocalVector localDir = ltp.momentum()/ltp.momentum().mag();
00491 float prediction_alpha = atan2(localDir.z(), localDir.x());
00492 float prediction_beta = atan2(localDir.z(), localDir.y());
00493 float prediction_x = ltp.position().x();
00494 float prediction_y = ltp.position().y();
00495
00496 if(isHitValid){
00497 if(modon){
00498 meValid_->Fill(0.5);
00499
00500
00501
00502
00503 }
00504 if(barrel && ladon){
00505 meValidLad_->Fill(0.5);
00506 meValidXLad_->Fill(prediction_x);
00507 meValidYLad_->Fill(prediction_y);
00508 meValidAlphaLad_->Fill(prediction_alpha);
00509 meValidBetaLad_->Fill(prediction_beta);
00510 }
00511 if(barrel && layon){
00512 meValidLay_->Fill(0.5);
00513 meValidXLay_->Fill(prediction_x);
00514 meValidYLay_->Fill(prediction_y);
00515 meValidAlphaLay_->Fill(prediction_alpha);
00516 meValidBetaLay_->Fill(prediction_beta);
00517 }
00518 if(barrel && phion){
00519 meValidPhi_->Fill(0.5);
00520 meValidXPhi_->Fill(prediction_x);
00521 meValidYPhi_->Fill(prediction_y);
00522 meValidAlphaPhi_->Fill(prediction_alpha);
00523 meValidBetaPhi_->Fill(prediction_beta);
00524 }
00525 if(endcap && bladeon){
00526 meValidBlade_->Fill(0.5);
00527 meValidXBlade_->Fill(prediction_x);
00528 meValidYBlade_->Fill(prediction_y);
00529 meValidAlphaBlade_->Fill(prediction_alpha);
00530 meValidBetaBlade_->Fill(prediction_beta);
00531 }
00532 if(endcap && diskon){
00533 meValidDisk_->Fill(0.5);
00534 meValidXDisk_->Fill(prediction_x);
00535 meValidYDisk_->Fill(prediction_y);
00536 meValidAlphaDisk_->Fill(prediction_alpha);
00537 meValidBetaDisk_->Fill(prediction_beta);
00538 }
00539 if(endcap && ringon){
00540 meValidRing_->Fill(0.5);
00541 meValidXRing_->Fill(prediction_x);
00542 meValidYRing_->Fill(prediction_y);
00543 meValidAlphaRing_->Fill(prediction_alpha);
00544 meValidBetaRing_->Fill(prediction_beta);
00545 }
00546 }
00547 else {
00548 if(modon){
00549 meMissing_->Fill(0.5);
00550
00551
00552
00553
00554 }
00555 if(barrel && ladon){
00556 meMissingLad_->Fill(0.5);
00557 meMissingXLad_->Fill(prediction_x);
00558 meMissingYLad_->Fill(prediction_y);
00559 meMissingAlphaLad_->Fill(prediction_alpha);
00560 meMissingBetaLad_->Fill(prediction_beta);
00561 }
00562 if(barrel && layon){
00563 meMissingLay_->Fill(0.5);
00564 meMissingXLay_->Fill(prediction_x);
00565 meMissingYLay_->Fill(prediction_y);
00566 meMissingAlphaLay_->Fill(prediction_alpha);
00567 meMissingBetaLay_->Fill(prediction_beta);
00568 }
00569 if(barrel && phion){
00570 meMissingPhi_->Fill(0.5);
00571 meMissingXPhi_->Fill(prediction_x);
00572 meMissingYPhi_->Fill(prediction_y);
00573 meMissingAlphaPhi_->Fill(prediction_alpha);
00574 meMissingBetaPhi_->Fill(prediction_beta);
00575 }
00576 if(endcap && bladeon){
00577 meMissingBlade_->Fill(0.5);
00578 meMissingXBlade_->Fill(prediction_x);
00579 meMissingYBlade_->Fill(prediction_y);
00580 meMissingAlphaBlade_->Fill(prediction_alpha);
00581 meMissingBetaBlade_->Fill(prediction_beta);
00582 }
00583 if(endcap && diskon){
00584 meMissingDisk_->Fill(0.5);
00585 meMissingXDisk_->Fill(prediction_x);
00586 meMissingYDisk_->Fill(prediction_y);
00587 meMissingAlphaDisk_->Fill(prediction_alpha);
00588 meMissingBetaDisk_->Fill(prediction_beta);
00589 }
00590 if(endcap && ringon){
00591 meMissingRing_->Fill(0.5);
00592 meMissingXRing_->Fill(prediction_x);
00593 meMissingYRing_->Fill(prediction_y);
00594 meMissingAlphaRing_->Fill(prediction_alpha);
00595 meMissingBetaRing_->Fill(prediction_beta);
00596 }
00597 }
00598
00599 if(updateEfficiencies)
00600 computeEfficiencies(modon, ladon, layon, phion, bladeon, diskon, ringon);
00601 }
00602
00603 void SiPixelHitEfficiencyModule::computeEfficiencies(bool modon, bool ladon, bool layon, bool phion, bool bladeon, bool diskon, bool ringon) {
00604
00605 if(debug_)
00606 std::cout<<"Now Filling histos for detid "<<id_<<std::endl;
00607
00608 bool barrel = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelBarrel);
00609 bool endcap = DetId(id_).subdetId() == static_cast<int>(PixelSubdetector::PixelEndcap);
00610
00611 if(modon){
00612 meEfficiency_->setBinContent(1,(eff(meValid_->getBinContent(1),meMissing_->getBinContent(1))).first);
00613 meEfficiency_->setBinError(1,(eff(meValid_->getBinContent(1),meMissing_->getBinContent(1))).second);
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630 }
00631 if(ladon && barrel){
00632 meEfficiencyLad_->setBinContent(1,(eff(meValidLad_->getBinContent(1),meMissingLad_->getBinContent(1))).first);
00633 meEfficiencyLad_->setBinError(1,(eff(meValidLad_->getBinContent(1),meMissingLad_->getBinContent(1))).second);
00634 for(int i=1;i<=meValidXLad_->getNbinsX();++i){
00635 meEfficiencyXLad_->setBinContent(i,(eff(meValidXLad_->getBinContent(i),meMissingXLad_->getBinContent(i))).first);
00636 meEfficiencyXLad_->setBinError(i,(eff(meValidXLad_->getBinContent(i),meMissingXLad_->getBinContent(i))).second);
00637 }
00638 for(int i=1;i<=meValidYLad_->getNbinsX();++i){
00639 meEfficiencyYLad_->setBinContent(i,(eff(meValidYLad_->getBinContent(i),meMissingYLad_->getBinContent(i))).first);
00640 meEfficiencyYLad_->setBinError(i,(eff(meValidYLad_->getBinContent(i),meMissingYLad_->getBinContent(i))).second);
00641 }
00642 for(int i=1;i<=meValidAlphaLad_->getNbinsX();++i){
00643 meEfficiencyAlphaLad_->setBinContent(i,(eff(meValidAlphaLad_->getBinContent(i),meMissingAlphaLad_->getBinContent(i))).first);
00644 meEfficiencyAlphaLad_->setBinError(i,(eff(meValidAlphaLad_->getBinContent(i),meMissingAlphaLad_->getBinContent(i))).second);
00645 }
00646 for(int i=1;i<=meValidBetaLad_->getNbinsX();++i){
00647 meEfficiencyBetaLad_->setBinContent(i,(eff(meValidBetaLad_->getBinContent(i),meMissingBetaLad_->getBinContent(i))).first);
00648 meEfficiencyBetaLad_->setBinError(i,(eff(meValidBetaLad_->getBinContent(i),meMissingBetaLad_->getBinContent(i))).second);
00649 }
00650 }
00651
00652 if(layon && barrel){
00653 meEfficiencyLay_->setBinContent(1,(eff(meValidLay_->getBinContent(1),meMissingLay_->getBinContent(1))).first);
00654 meEfficiencyLay_->setBinError(1,(eff(meValidLay_->getBinContent(1),meMissingLay_->getBinContent(1))).second);
00655 for(int i=1;i<=meValidXLay_->getNbinsX();++i){
00656 meEfficiencyXLay_->setBinContent(i,(eff(meValidXLay_->getBinContent(i),meMissingXLay_->getBinContent(i))).first);
00657 meEfficiencyXLay_->setBinError(i,(eff(meValidXLay_->getBinContent(i),meMissingXLay_->getBinContent(i))).second);
00658 }
00659 for(int i=1;i<=meValidYLay_->getNbinsX();++i){
00660 meEfficiencyYLay_->setBinContent(i,(eff(meValidYLay_->getBinContent(i),meMissingYLay_->getBinContent(i))).first);
00661 meEfficiencyYLay_->setBinError(i,(eff(meValidYLay_->getBinContent(i),meMissingYLay_->getBinContent(i))).second);
00662 }
00663 for(int i=1;i<=meValidAlphaLay_->getNbinsX();++i){
00664 meEfficiencyAlphaLay_->setBinContent(i,(eff(meValidAlphaLay_->getBinContent(i),meMissingAlphaLay_->getBinContent(i))).first);
00665 meEfficiencyAlphaLay_->setBinError(i,(eff(meValidAlphaLay_->getBinContent(i),meMissingAlphaLay_->getBinContent(i))).second);
00666 }
00667 for(int i=1;i<=meValidBetaLay_->getNbinsX();++i){
00668 meEfficiencyBetaLay_->setBinContent(i,(eff(meValidBetaLay_->getBinContent(i),meMissingBetaLay_->getBinContent(i))).first);
00669 meEfficiencyBetaLay_->setBinError(i,(eff(meValidBetaLay_->getBinContent(i),meMissingBetaLay_->getBinContent(i))).second);
00670 }
00671 }
00672
00673 if(phion && barrel){
00674 meEfficiencyPhi_->setBinContent(1,(eff(meValidPhi_->getBinContent(1),meMissingPhi_->getBinContent(1))).first);
00675 meEfficiencyPhi_->setBinError(1,(eff(meValidPhi_->getBinContent(1),meMissingPhi_->getBinContent(1))).second);
00676 for(int i=1;i<=meValidXPhi_->getNbinsX();++i){
00677 meEfficiencyXPhi_->setBinContent(i,(eff(meValidXPhi_->getBinContent(i),meMissingXPhi_->getBinContent(i))).first);
00678 meEfficiencyXPhi_->setBinError(i,(eff(meValidXPhi_->getBinContent(i),meMissingXPhi_->getBinContent(i))).second);
00679 }
00680 for(int i=1;i<=meValidYPhi_->getNbinsX();++i){
00681 meEfficiencyYPhi_->setBinContent(i,(eff(meValidYPhi_->getBinContent(i),meMissingYPhi_->getBinContent(i))).first);
00682 meEfficiencyYPhi_->setBinError(i,(eff(meValidYPhi_->getBinContent(i),meMissingYPhi_->getBinContent(i))).second);
00683 }
00684 for(int i=1;i<=meValidAlphaPhi_->getNbinsX();++i){
00685 meEfficiencyAlphaPhi_->setBinContent(i,(eff(meValidAlphaPhi_->getBinContent(i),meMissingAlphaPhi_->getBinContent(i))).first);
00686 meEfficiencyAlphaPhi_->setBinError(i,(eff(meValidAlphaPhi_->getBinContent(i),meMissingAlphaPhi_->getBinContent(i))).second);
00687 }
00688 for(int i=1;i<=meValidBetaPhi_->getNbinsX();++i){
00689 meEfficiencyBetaPhi_->setBinContent(i,(eff(meValidBetaPhi_->getBinContent(i),meMissingBetaPhi_->getBinContent(i))).first);
00690 meEfficiencyBetaPhi_->setBinError(i,(eff(meValidBetaPhi_->getBinContent(i),meMissingBetaPhi_->getBinContent(i))).second);
00691 }
00692 }
00693 if(bladeon && endcap){
00694 meEfficiencyBlade_->setBinContent(1,(eff(meValidBlade_->getBinContent(1),meMissingBlade_->getBinContent(1))).first);
00695 meEfficiencyBlade_->setBinError(1,(eff(meValidBlade_->getBinContent(1),meMissingBlade_->getBinContent(1))).second);
00696 for(int i=1;i<=meValidXBlade_->getNbinsX();++i){
00697 meEfficiencyXBlade_->setBinContent(i,(eff(meValidXBlade_->getBinContent(i),meMissingXBlade_->getBinContent(i))).first);
00698 meEfficiencyXBlade_->setBinError(i,(eff(meValidXBlade_->getBinContent(i),meMissingXBlade_->getBinContent(i))).second);
00699 }
00700 for(int i=1;i<=meValidYBlade_->getNbinsX();++i){
00701 meEfficiencyYBlade_->setBinContent(i,(eff(meValidYBlade_->getBinContent(i),meMissingYBlade_->getBinContent(i))).first);
00702 meEfficiencyYBlade_->setBinError(i,(eff(meValidYBlade_->getBinContent(i),meMissingYBlade_->getBinContent(i))).second);
00703 }
00704 for(int i=1;i<=meValidAlphaBlade_->getNbinsX();++i){
00705 meEfficiencyAlphaBlade_->setBinContent(i,(eff(meValidAlphaBlade_->getBinContent(i),meMissingAlphaBlade_->getBinContent(i))).first);
00706 meEfficiencyAlphaBlade_->setBinError(i,(eff(meValidAlphaBlade_->getBinContent(i),meMissingAlphaBlade_->getBinContent(i))).second);
00707 }
00708 for(int i=1;i<=meValidBetaBlade_->getNbinsX();++i){
00709 meEfficiencyBetaBlade_->setBinContent(i,(eff(meValidBetaBlade_->getBinContent(i),meMissingBetaBlade_->getBinContent(i))).first);
00710 meEfficiencyBetaBlade_->setBinError(i,(eff(meValidBetaBlade_->getBinContent(i),meMissingBetaBlade_->getBinContent(i))).second);
00711 }
00712 }
00713 if(diskon && endcap){
00714 meEfficiencyDisk_->setBinContent(1,(eff(meValidDisk_->getBinContent(1),meMissingDisk_->getBinContent(1))).first);
00715 meEfficiencyDisk_->setBinError(1,(eff(meValidDisk_->getBinContent(1),meMissingDisk_->getBinContent(1))).second);
00716 for(int i=1;i<=meValidXDisk_->getNbinsX();++i){
00717 meEfficiencyXDisk_->setBinContent(i,(eff(meValidXDisk_->getBinContent(i),meMissingXDisk_->getBinContent(i))).first);
00718 meEfficiencyXDisk_->setBinError(i,(eff(meValidXDisk_->getBinContent(i),meMissingXDisk_->getBinContent(i))).second);
00719 }
00720 for(int i=1;i<=meValidYDisk_->getNbinsX();++i){
00721 meEfficiencyYDisk_->setBinContent(i,(eff(meValidYDisk_->getBinContent(i),meMissingYDisk_->getBinContent(i))).first);
00722 meEfficiencyYDisk_->setBinError(i,(eff(meValidYDisk_->getBinContent(i),meMissingYDisk_->getBinContent(i))).second);
00723 }
00724 for(int i=1;i<=meValidAlphaDisk_->getNbinsX();++i){
00725 meEfficiencyAlphaDisk_->setBinContent(i,(eff(meValidAlphaDisk_->getBinContent(i),meMissingAlphaDisk_->getBinContent(i))).first);
00726 meEfficiencyAlphaDisk_->setBinError(i,(eff(meValidAlphaDisk_->getBinContent(i),meMissingAlphaDisk_->getBinContent(i))).second);
00727 }
00728 for(int i=1;i<=meValidBetaDisk_->getNbinsX();++i){
00729 meEfficiencyBetaDisk_->setBinContent(i,(eff(meValidBetaDisk_->getBinContent(i),meMissingBetaDisk_->getBinContent(i))).first);
00730 meEfficiencyBetaDisk_->setBinError(i,(eff(meValidBetaDisk_->getBinContent(i),meMissingBetaDisk_->getBinContent(i))).second);
00731 }
00732 }
00733 if(ringon && endcap){
00734 meEfficiencyRing_->setBinContent(1,(eff(meValidRing_->getBinContent(1),meMissingRing_->getBinContent(1))).first);
00735 meEfficiencyRing_->setBinError(1,(eff(meValidRing_->getBinContent(1),meMissingRing_->getBinContent(1))).second);
00736 for(int i=1;i<=meValidXRing_->getNbinsX();++i){
00737 meEfficiencyXRing_->setBinContent(i,(eff(meValidXRing_->getBinContent(i),meMissingXRing_->getBinContent(i))).first);
00738 meEfficiencyXRing_->setBinError(i,(eff(meValidXRing_->getBinContent(i),meMissingXRing_->getBinContent(i))).second);
00739 }
00740 for(int i=1;i<=meValidYRing_->getNbinsX();++i){
00741 meEfficiencyYRing_->setBinContent(i,(eff(meValidYRing_->getBinContent(i),meMissingYRing_->getBinContent(i))).first);
00742 meEfficiencyYRing_->setBinError(i,(eff(meValidYRing_->getBinContent(i),meMissingYRing_->getBinContent(i))).second);
00743 }
00744 for(int i=1;i<=meValidAlphaRing_->getNbinsX();++i){
00745 meEfficiencyAlphaRing_->setBinContent(i,(eff(meValidAlphaRing_->getBinContent(i),meMissingAlphaRing_->getBinContent(i))).first);
00746 meEfficiencyAlphaRing_->setBinError(i,(eff(meValidAlphaRing_->getBinContent(i),meMissingAlphaRing_->getBinContent(i))).second);
00747 }
00748 for(int i=1;i<=meValidBetaRing_->getNbinsX();++i){
00749 meEfficiencyBetaRing_->setBinContent(i,(eff(meValidBetaRing_->getBinContent(i),meMissingBetaRing_->getBinContent(i))).first);
00750 meEfficiencyBetaRing_->setBinError(i,(eff(meValidBetaRing_->getBinContent(i),meMissingBetaRing_->getBinContent(i))).second);
00751 }
00752 }
00753
00754 }
00755
00756 std::pair<double,double> SiPixelHitEfficiencyModule::eff(double nValid, double nMissing){
00757 double efficiency = 0, error = 0 ;
00758 if(nValid+nMissing!=0){
00759 efficiency=nValid/(nValid+nMissing);
00760 error=sqrt(efficiency*(1.-efficiency)/(nValid+nMissing));
00761 }
00762 return make_pair(efficiency,error);
00763 }