File indexing completed on 2024-09-11 04:33:34
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include "Validation/TrackerRecHits/interface/SiPixelRecHitsValid.h"
0011
0012 #include "DataFormats/Common/interface/DetSetVector.h"
0013 #include "DataFormats/Common/interface/Handle.h"
0014 #include "DataFormats/Common/interface/OwnVector.h"
0015 #include "DataFormats/Common/interface/Ref.h"
0016 #include "DataFormats/DetId/interface/DetId.h"
0017 #include "DataFormats/GeometryVector/interface/GlobalPoint.h"
0018 #include "DataFormats/GeometryVector/interface/LocalPoint.h"
0019 #include "DataFormats/SiPixelCluster/interface/SiPixelCluster.h"
0020 #include "DataFormats/SiPixelDetId/interface/PixelSubdetector.h"
0021 #include "DataFormats/TrackerCommon/interface/TrackerTopology.h"
0022 #include "DataFormats/TrackerRecHit2D/interface/SiPixelRecHit.h"
0023
0024 #include "DQMServices/Core/interface/DQMStore.h"
0025
0026 #include "FWCore/Framework/interface/Event.h"
0027 #include "FWCore/Framework/interface/EventSetup.h"
0028 #include "FWCore/Framework/interface/ESHandle.h"
0029 #include "FWCore/Framework/interface/MakerMacros.h"
0030 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0031 #include "FWCore/ServiceRegistry/interface/Service.h"
0032
0033 #include "Geometry/CommonDetUnit/interface/GeomDetType.h"
0034 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0035 #include "Geometry/CommonTopologies/interface/PixelTopology.h"
0036 #include "Geometry/CommonDetUnit/interface/PixelGeomDetType.h"
0037 #include "Geometry/CommonDetUnit/interface/PixelGeomDetUnit.h"
0038 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0039 #include "Geometry/TrackerNumberingBuilder/interface/GeometricDet.h"
0040
0041 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
0042 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h"
0043
0044 #include <cmath>
0045
0046 SiPixelRecHitsValid::SiPixelRecHitsValid(const edm::ParameterSet& ps)
0047 : tTopoEsToken(esConsumes()),
0048 tGeomEsToken(esConsumes()),
0049 trackerHitAssociatorConfig_(ps, consumesCollector()),
0050 siPixelRecHitCollectionToken_(consumes<SiPixelRecHitCollection>(ps.getParameter<edm::InputTag>("src"))) {}
0051
0052 SiPixelRecHitsValid::~SiPixelRecHitsValid() = default;
0053
0054 void SiPixelRecHitsValid::bookHistograms(DQMStore::IBooker& ibooker, const edm::Run& run, const edm::EventSetup& es) {
0055 ibooker.setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Pixel/clustBPIX");
0056
0057 Char_t histo[200];
0058
0059
0060
0061
0062
0063
0064
0065
0066 for (int i = 0; i < 8; i++) {
0067 sprintf(histo, "Clust_y_size_Module%d", i + 1);
0068 clustYSizeModule[i] = ibooker.book1D(histo, "Cluster y-size by Module", 20, 0.5, 20.5);
0069 }
0070
0071
0072 for (int i = 0; i < 3; i++) {
0073 sprintf(histo, "Clust_x_size_Layer%d", i + 1);
0074 clustXSizeLayer[i] = ibooker.book1D(histo, "Cluster x-size by Layer", 20, 0.5, 20.5);
0075 }
0076
0077
0078 for (int i = 0; i < 8; i++) {
0079
0080 sprintf(histo, "Clust_charge_Layer1_Module%d", i + 1);
0081 clustChargeLayer1Modules[i] = ibooker.book1D(histo, "Cluster charge Layer 1 by Module", 50, 0., 200000.);
0082
0083
0084 sprintf(histo, "Clust_charge_Layer2_Module%d", i + 1);
0085 clustChargeLayer2Modules[i] = ibooker.book1D(histo, "Cluster charge Layer 2 by Module", 50, 0., 200000.);
0086
0087
0088 sprintf(histo, "Clust_charge_Layer3_Module%d", i + 1);
0089 clustChargeLayer3Modules[i] = ibooker.book1D(histo, "Cluster charge Layer 3 by Module", 50, 0., 200000.);
0090 }
0091
0092 ibooker.setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Pixel/clustFPIX");
0093
0094 for (int i = 0; i < 7; i++) {
0095
0096 sprintf(histo, "Clust_x_size_Disk1_Plaquette%d", i + 1);
0097 clustXSizeDisk1Plaquettes[i] = ibooker.book1D(histo, "Cluster X-size for Disk1 by Plaquette", 20, 0.5, 20.5);
0098
0099
0100 sprintf(histo, "Clust_x_size_Disk2_Plaquette%d", i + 1);
0101 clustXSizeDisk2Plaquettes[i] = ibooker.book1D(histo, "Cluster X-size for Disk2 by Plaquette", 20, 0.5, 20.5);
0102
0103
0104 sprintf(histo, "Clust_y_size_Disk1_Plaquette%d", i + 1);
0105 clustYSizeDisk1Plaquettes[i] = ibooker.book1D(histo, "Cluster Y-size for Disk1 by Plaquette", 20, 0.5, 20.5);
0106
0107
0108 sprintf(histo, "Clust_y_size_Disk2_Plaquette%d", i + 1);
0109 clustYSizeDisk2Plaquettes[i] = ibooker.book1D(histo, "Cluster Y-size for Disk2 by Plaquette", 20, 0.5, 20.5);
0110
0111
0112 sprintf(histo, "Clust_charge_Disk1_Plaquette%d", i + 1);
0113 clustChargeDisk1Plaquettes[i] = ibooker.book1D(histo, "Cluster charge for Disk1 by Plaquette", 50, 0., 200000.);
0114
0115
0116 sprintf(histo, "Clust_charge_Disk2_Plaquette%d", i + 1);
0117 clustChargeDisk2Plaquettes[i] = ibooker.book1D(histo, "Cluster charge for Disk2 by Plaquette", 50, 0., 200000.);
0118 }
0119
0120 ibooker.setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Pixel/recHitBPIX");
0121
0122 recHitBunchB = ibooker.book1D("RecHit_Bunch_Barrel", "RecHit Bunch Crossing, Barrel", 20, -10., 10.);
0123
0124
0125 recHitEventB = ibooker.book1D("RecHit_Event_Barrel", "RecHit Event (in-time bunch), Barrel", 100, 0., 100.);
0126
0127
0128 recHitXResAllB = ibooker.book1D("RecHit_xres_b_All", "RecHit X Res All Modules in Barrel", 100, -200., 200.);
0129
0130
0131 recHitYResAllB = ibooker.book1D("RecHit_yres_b_All", "RecHit Y Res All Modules in Barrel", 100, -200., 200.);
0132
0133
0134 recHitXFullModules = ibooker.book1D("RecHit_x_FullModules", "RecHit X distribution for full modules", 100, -2., 2.);
0135
0136
0137 recHitXHalfModules = ibooker.book1D("RecHit_x_HalfModules", "RecHit X distribution for half modules", 100, -1., 1.);
0138
0139
0140 recHitYAllModules = ibooker.book1D("RecHit_y_AllModules", "RecHit Y distribution for all modules", 100, -4., 4.);
0141
0142
0143 for (int i = 0; i < 3; i++) {
0144
0145 sprintf(histo, "RecHit_NsimHit_Layer%d", i + 1);
0146 recHitNsimHitLayer[i] = ibooker.book1D(histo, "RecHit Number of simHits by Layer", 30, 0., 30.);
0147
0148
0149 sprintf(histo, "RecHit_XRes_FlippedLadder_Layer%d", i + 1);
0150 recHitXResFlippedLadderLayers[i] = ibooker.book1D(histo, "RecHit XRes Flipped Ladders by Layer", 100, -200., 200.);
0151
0152
0153 sprintf(histo, "RecHit_XRes_UnFlippedLadder_Layer%d", i + 1);
0154 recHitXResNonFlippedLadderLayers[i] =
0155 ibooker.book1D(histo, "RecHit XRes NonFlipped Ladders by Layer", 100, -200., 200.);
0156 }
0157
0158
0159 for (int i = 0; i < 8; i++) {
0160
0161 sprintf(histo, "RecHit_YRes_Layer1_Module%d", i + 1);
0162 recHitYResLayer1Modules[i] = ibooker.book1D(histo, "RecHit YRes Layer1 by module", 100, -200., 200.);
0163
0164
0165 sprintf(histo, "RecHit_YRes_Layer2_Module%d", i + 1);
0166 recHitYResLayer2Modules[i] = ibooker.book1D(histo, "RecHit YRes Layer2 by module", 100, -200., 200.);
0167
0168
0169 sprintf(histo, "RecHit_YRes_Layer3_Module%d", i + 1);
0170 recHitYResLayer3Modules[i] = ibooker.book1D(histo, "RecHit YRes Layer3 by module", 100, -200., 200.);
0171 }
0172
0173 ibooker.setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Pixel/recHitFPIX");
0174
0175 recHitBunchF = ibooker.book1D("RecHit_Bunch_Forward", "RecHit Bunch Crossing, Forward", 20, -10., 10.);
0176
0177
0178 recHitEventF = ibooker.book1D("RecHit_Event_Forward", "RecHit Event (in-time bunch), Forward", 100, 0., 100.);
0179
0180
0181 recHitNsimHitDisk1 = ibooker.book1D("RecHit_NsimHit_Disk1", "RecHit Number of simHits, Disk1", 30, 0., 30.);
0182 recHitNsimHitDisk2 = ibooker.book1D("RecHit_NsimHit_Disk2", "RecHit Number of simHits, Disk2", 30, 0., 30.);
0183
0184
0185 recHitXResAllF = ibooker.book1D("RecHit_xres_f_All", "RecHit X Res All in Forward", 100, -200., 200.);
0186
0187
0188 recHitYResAllF = ibooker.book1D("RecHit_yres_f_All", "RecHit Y Res All in Forward", 100, -200., 200.);
0189
0190
0191 recHitXPlaquetteSize1 =
0192 ibooker.book1D("RecHit_x_Plaquette_xsize1", "RecHit X Distribution for plaquette x-size1", 100, -2., 2.);
0193
0194
0195 recHitXPlaquetteSize2 =
0196 ibooker.book1D("RecHit_x_Plaquette_xsize2", "RecHit X Distribution for plaquette x-size2", 100, -2., 2.);
0197
0198
0199 recHitYPlaquetteSize2 =
0200 ibooker.book1D("RecHit_y_Plaquette_ysize2", "RecHit Y Distribution for plaquette y-size2", 100, -4., 4.);
0201
0202
0203 recHitYPlaquetteSize3 =
0204 ibooker.book1D("RecHit_y_Plaquette_ysize3", "RecHit Y Distribution for plaquette y-size3", 100, -4., 4.);
0205
0206
0207 recHitYPlaquetteSize4 =
0208 ibooker.book1D("RecHit_y_Plaquette_ysize4", "RecHit Y Distribution for plaquette y-size4", 100, -4., 4.);
0209
0210
0211 recHitYPlaquetteSize5 =
0212 ibooker.book1D("RecHit_y_Plaquette_ysize5", "RecHit Y Distribution for plaquette y-size5", 100, -4., 4.);
0213
0214
0215 for (int i = 0; i < 7; i++) {
0216
0217 sprintf(histo, "RecHit_XRes_Disk1_Plaquette%d", i + 1);
0218 recHitXResDisk1Plaquettes[i] = ibooker.book1D(histo, "RecHit XRes Disk1 by plaquette", 100, -200., 200.);
0219
0220 sprintf(histo, "RecHit_XRes_Disk2_Plaquette%d", i + 1);
0221 recHitXResDisk2Plaquettes[i] = ibooker.book1D(histo, "RecHit XRes Disk2 by plaquette", 100, -200., 200.);
0222
0223
0224 sprintf(histo, "RecHit_YRes_Disk1_Plaquette%d", i + 1);
0225 recHitYResDisk1Plaquettes[i] = ibooker.book1D(histo, "RecHit YRes Disk1 by plaquette", 100, -200., 200.);
0226
0227 sprintf(histo, "RecHit_YRes_Disk2_Plaquette%d", i + 1);
0228 recHitYResDisk2Plaquettes[i] = ibooker.book1D(histo, "RecHit YRes Disk2 by plaquette", 100, -200., 200.);
0229 }
0230
0231 ibooker.setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Pixel/recHitPullsBPIX");
0232 recHitXPullAllB = ibooker.book1D("RecHit_xres_b_All", "RecHit X Pull All Modules in Barrel", 100, -10.0, 10.0);
0233 recHitYPullAllB = ibooker.book1D("RecHit_yres_b_All", "RecHit Y Pull All Modules in Barrel", 100, -10.0, 10.0);
0234
0235 for (int i = 0; i < 3; i++) {
0236 sprintf(histo, "RecHit_XPull_FlippedLadder_Layer%d", i + 1);
0237 recHitXPullFlippedLadderLayers[i] =
0238 ibooker.book1D(histo, "RecHit XPull Flipped Ladders by Layer", 100, -10.0, 10.0);
0239
0240 sprintf(histo, "RecHit_XPull_UnFlippedLadder_Layer%d", i + 1);
0241 recHitXPullNonFlippedLadderLayers[i] =
0242 ibooker.book1D(histo, "RecHit XPull NonFlipped Ladders by Layer", 100, -10.0, 10.0);
0243 }
0244
0245 for (int i = 0; i < 8; i++) {
0246 sprintf(histo, "RecHit_YPull_Layer1_Module%d", i + 1);
0247 recHitYPullLayer1Modules[i] = ibooker.book1D(histo, "RecHit YPull Layer1 by module", 100, -10.0, 10.0);
0248
0249 sprintf(histo, "RecHit_YPull_Layer2_Module%d", i + 1);
0250 recHitYPullLayer2Modules[i] = ibooker.book1D(histo, "RecHit YPull Layer2 by module", 100, -10.0, 10.0);
0251
0252 sprintf(histo, "RecHit_YPull_Layer3_Module%d", i + 1);
0253 recHitYPullLayer3Modules[i] = ibooker.book1D(histo, "RecHit YPull Layer3 by module", 100, -10.0, 10.0);
0254 }
0255
0256 ibooker.setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Pixel/recHitPullsFPIX");
0257 recHitXPullAllF = ibooker.book1D("RecHit_XPull_f_All", "RecHit X Pull All in Forward", 100, -10.0, 10.0);
0258
0259 recHitYPullAllF = ibooker.book1D("RecHit_YPull_f_All", "RecHit Y Pull All in Forward", 100, -10.0, 10.0);
0260
0261 for (int i = 0; i < 7; i++) {
0262 sprintf(histo, "RecHit_XPull_Disk1_Plaquette%d", i + 1);
0263 recHitXPullDisk1Plaquettes[i] = ibooker.book1D(histo, "RecHit XPull Disk1 by plaquette", 100, -10.0, 10.0);
0264 sprintf(histo, "RecHit_XPull_Disk2_Plaquette%d", i + 1);
0265 recHitXPullDisk2Plaquettes[i] = ibooker.book1D(histo, "RecHit XPull Disk2 by plaquette", 100, -10.0, 10.0);
0266
0267 sprintf(histo, "RecHit_YPull_Disk1_Plaquette%d", i + 1);
0268 recHitYPullDisk1Plaquettes[i] = ibooker.book1D(histo, "RecHit YPull Disk1 by plaquette", 100, -10.0, 10.0);
0269
0270 sprintf(histo, "RecHit_YPull_Disk2_Plaquette%d", i + 1);
0271 recHitYPullDisk2Plaquettes[i] = ibooker.book1D(histo, "RecHit YPull Disk2 by plaquette", 100, -10.0, 10.0);
0272 }
0273 }
0274
0275 void SiPixelRecHitsValid::analyze(const edm::Event& e, const edm::EventSetup& es) {
0276
0277 const TrackerTopology* tTopo = &es.getData(tTopoEsToken);
0278
0279 edm::LogInfo("EventInfo") << " Run = " << e.id().run() << " Event = " << e.id().event();
0280 if (e.id().event() % 1000 == 0)
0281 std::cout << " Run = " << e.id().run() << " Event = " << e.id().event() << std::endl;
0282
0283
0284 edm::Handle<SiPixelRecHitCollection> recHitColl;
0285 e.getByToken(siPixelRecHitCollectionToken_, recHitColl);
0286
0287
0288 const TrackerGeometry* theTracker = &es.getData(tGeomEsToken);
0289
0290 TrackerHitAssociator associate(e, trackerHitAssociatorConfig_);
0291
0292
0293
0294 for (const auto& it : theTracker->dets()) {
0295 DetId detId = it->geographicalId();
0296 unsigned int subid = detId.subdetId();
0297
0298 if (!((subid == 1) || (subid == 2)))
0299 continue;
0300
0301 const PixelGeomDetUnit* theGeomDet = dynamic_cast<const PixelGeomDetUnit*>(theTracker->idToDet(detId));
0302
0303 SiPixelRecHitCollection::const_iterator pixeldet = recHitColl->find(detId);
0304 if (pixeldet == recHitColl->end())
0305 continue;
0306 SiPixelRecHitCollection::DetSet pixelrechitRange = *pixeldet;
0307 SiPixelRecHitCollection::DetSet::const_iterator pixelrechitRangeIteratorBegin = pixelrechitRange.begin();
0308 SiPixelRecHitCollection::DetSet::const_iterator pixelrechitRangeIteratorEnd = pixelrechitRange.end();
0309 SiPixelRecHitCollection::DetSet::const_iterator pixeliter = pixelrechitRangeIteratorBegin;
0310 std::vector<PSimHit> matched;
0311
0312
0313 for (; pixeliter != pixelrechitRangeIteratorEnd; pixeliter++) {
0314 matched.clear();
0315 matched = associate.associateHit(*pixeliter);
0316
0317 if (!matched.empty()) {
0318 float closest = 9999.9;
0319 std::vector<PSimHit>::const_iterator closestit = matched.begin();
0320 LocalPoint lp = pixeliter->localPosition();
0321 float rechit_x = lp.x();
0322 float rechit_y = lp.y();
0323
0324
0325 for (std::vector<PSimHit>::const_iterator m = matched.begin(); m < matched.end(); m++) {
0326 float sim_x1 = (*m).entryPoint().x();
0327 float sim_x2 = (*m).exitPoint().x();
0328 float sim_xpos = 0.5 * (sim_x1 + sim_x2);
0329
0330 float sim_y1 = (*m).entryPoint().y();
0331 float sim_y2 = (*m).exitPoint().y();
0332 float sim_ypos = 0.5 * (sim_y1 + sim_y2);
0333
0334 float x_res = fabs(sim_xpos - rechit_x);
0335 float y_res = fabs(sim_ypos - rechit_y);
0336
0337 float dist = sqrt(x_res * x_res + y_res * y_res);
0338
0339 if (dist < closest) {
0340 closest = dist;
0341 closestit = m;
0342 }
0343 }
0344
0345 if (subid == 1) {
0346 fillBarrel(*pixeliter, *closestit, detId, theGeomDet, tTopo);
0347 }
0348 if (subid == 2) {
0349 fillForward(*pixeliter, *closestit, detId, theGeomDet, tTopo);
0350 }
0351
0352 }
0353
0354 int NsimHit = matched.size();
0355 if (subid == 1) {
0356 for (unsigned int i = 0; i < 3; i++)
0357 if (tTopo->pxbLayer(detId) == i + 1)
0358 recHitNsimHitLayer[i]->Fill(NsimHit);
0359 }
0360 if (subid == 2) {
0361 if (tTopo->pxfDisk(detId) == 1)
0362 recHitNsimHitDisk1->Fill(NsimHit);
0363 else
0364 recHitNsimHitDisk2->Fill(NsimHit);
0365 }
0366 }
0367 }
0368 }
0369
0370 void SiPixelRecHitsValid::fillBarrel(const SiPixelRecHit& recHit,
0371 const PSimHit& simHit,
0372 DetId detId,
0373 const PixelGeomDetUnit* theGeomDet,
0374 const TrackerTopology* tTopo) {
0375 const float cmtomicron = 10000.0;
0376
0377 int bunch = simHit.eventId().bunchCrossing();
0378 int event = simHit.eventId().event();
0379
0380 recHitBunchB->Fill(bunch);
0381 if (bunch == 0)
0382 recHitEventB->Fill(event);
0383
0384 LocalPoint lp = recHit.localPosition();
0385 float lp_y = lp.y();
0386 float lp_x = lp.x();
0387
0388 LocalError lerr = recHit.localPositionError();
0389 float lerr_x = sqrt(lerr.xx());
0390 float lerr_y = sqrt(lerr.yy());
0391
0392 recHitYAllModules->Fill(lp_y);
0393
0394 float sim_x1 = simHit.entryPoint().x();
0395 float sim_x2 = simHit.exitPoint().x();
0396 float sim_xpos = 0.5 * (sim_x1 + sim_x2);
0397 float res_x = (lp.x() - sim_xpos) * cmtomicron;
0398
0399 recHitXResAllB->Fill(res_x);
0400
0401 float sim_y1 = simHit.entryPoint().y();
0402 float sim_y2 = simHit.exitPoint().y();
0403 float sim_ypos = 0.5 * (sim_y1 + sim_y2);
0404 float res_y = (lp.y() - sim_ypos) * cmtomicron;
0405
0406 recHitYResAllB->Fill(res_y);
0407
0408 float pull_x = (lp_x - sim_xpos) / lerr_x;
0409 float pull_y = (lp_y - sim_ypos) / lerr_y;
0410
0411 recHitXPullAllB->Fill(pull_x);
0412 recHitYPullAllB->Fill(pull_y);
0413
0414 int rows = theGeomDet->specificTopology().nrows();
0415
0416 if (rows == 160) {
0417 recHitXFullModules->Fill(lp_x);
0418 } else if (rows == 80) {
0419 recHitXHalfModules->Fill(lp_x);
0420 }
0421
0422 float tmp1 = theGeomDet->surface().toGlobal(Local3DPoint(0., 0., 0.)).perp();
0423 float tmp2 = theGeomDet->surface().toGlobal(Local3DPoint(0., 0., 1.)).perp();
0424
0425 if (tmp2 < tmp1) {
0426 for (unsigned int i = 0; i < 3; i++) {
0427 if (tTopo->pxbLayer(detId) == i + 1) {
0428 recHitXResFlippedLadderLayers[i]->Fill(res_x);
0429 recHitXPullFlippedLadderLayers[i]->Fill(pull_x);
0430 }
0431 }
0432 } else {
0433 for (unsigned int i = 0; i < 3; i++) {
0434 if (tTopo->pxbLayer(detId) == i + 1) {
0435 recHitXResNonFlippedLadderLayers[i]->Fill(res_x);
0436 recHitXPullNonFlippedLadderLayers[i]->Fill(pull_x);
0437 }
0438 }
0439 }
0440
0441
0442 SiPixelRecHit::ClusterRef const& clust = recHit.cluster();
0443
0444
0445 for (unsigned int i = 0; i < 8; i++) {
0446 if (tTopo->pxbModule(detId) == i + 1) {
0447 int sizeY = (*clust).sizeY();
0448 clustYSizeModule[i]->Fill(sizeY);
0449
0450 if (tTopo->pxbLayer(detId) == 1) {
0451 float charge = (*clust).charge();
0452 clustChargeLayer1Modules[i]->Fill(charge);
0453 recHitYResLayer1Modules[i]->Fill(res_y);
0454 recHitYPullLayer1Modules[i]->Fill(pull_y);
0455 } else if (tTopo->pxbLayer(detId) == 2) {
0456 float charge = (*clust).charge();
0457 clustChargeLayer2Modules[i]->Fill(charge);
0458 recHitYResLayer2Modules[i]->Fill(res_y);
0459 recHitYPullLayer2Modules[i]->Fill(pull_y);
0460 } else if (tTopo->pxbLayer(detId) == 3) {
0461 float charge = (*clust).charge();
0462 clustChargeLayer3Modules[i]->Fill(charge);
0463 recHitYResLayer3Modules[i]->Fill(res_y);
0464 recHitYPullLayer3Modules[i]->Fill(pull_y);
0465 }
0466 }
0467 }
0468 int sizeX = (*clust).sizeX();
0469 if (tTopo->pxbLayer(detId) == 1)
0470 clustXSizeLayer[0]->Fill(sizeX);
0471 if (tTopo->pxbLayer(detId) == 2)
0472 clustXSizeLayer[1]->Fill(sizeX);
0473 if (tTopo->pxbLayer(detId) == 3)
0474 clustXSizeLayer[2]->Fill(sizeX);
0475 }
0476
0477 void SiPixelRecHitsValid::fillForward(const SiPixelRecHit& recHit,
0478 const PSimHit& simHit,
0479 DetId detId,
0480 const PixelGeomDetUnit* theGeomDet,
0481 const TrackerTopology* tTopo) {
0482 int rows = theGeomDet->specificTopology().nrows();
0483 int cols = theGeomDet->specificTopology().ncolumns();
0484
0485 const float cmtomicron = 10000.0;
0486
0487 int bunch = simHit.eventId().bunchCrossing();
0488 int event = simHit.eventId().event();
0489
0490 recHitBunchF->Fill(bunch);
0491 if (bunch == 0)
0492 recHitEventF->Fill(event);
0493
0494 LocalPoint lp = recHit.localPosition();
0495 float lp_x = lp.x();
0496 float lp_y = lp.y();
0497
0498 LocalError lerr = recHit.localPositionError();
0499 float lerr_x = sqrt(lerr.xx());
0500 float lerr_y = sqrt(lerr.yy());
0501
0502 float sim_x1 = simHit.entryPoint().x();
0503 float sim_x2 = simHit.exitPoint().x();
0504 float sim_xpos = 0.5 * (sim_x1 + sim_x2);
0505
0506 float sim_y1 = simHit.entryPoint().y();
0507 float sim_y2 = simHit.exitPoint().y();
0508 float sim_ypos = 0.5 * (sim_y1 + sim_y2);
0509
0510 float pull_x = (lp_x - sim_xpos) / lerr_x;
0511 float pull_y = (lp_y - sim_ypos) / lerr_y;
0512
0513 if (rows == 80) {
0514 recHitXPlaquetteSize1->Fill(lp_x);
0515 } else if (rows == 160) {
0516 recHitXPlaquetteSize2->Fill(lp_x);
0517 }
0518
0519 if (cols == 104) {
0520 recHitYPlaquetteSize2->Fill(lp_y);
0521 } else if (cols == 156) {
0522 recHitYPlaquetteSize3->Fill(lp_y);
0523 } else if (cols == 208) {
0524 recHitYPlaquetteSize4->Fill(lp_y);
0525 } else if (cols == 260) {
0526 recHitYPlaquetteSize5->Fill(lp_y);
0527 }
0528
0529 float res_x = (lp.x() - sim_xpos) * cmtomicron;
0530
0531 recHitXResAllF->Fill(res_x);
0532 recHitXPullAllF->Fill(pull_x);
0533
0534 float res_y = (lp.y() - sim_ypos) * cmtomicron;
0535
0536 recHitYPullAllF->Fill(pull_y);
0537
0538
0539 SiPixelRecHit::ClusterRef const& clust = recHit.cluster();
0540
0541
0542 for (unsigned int i = 0; i < 7; i++) {
0543 if (tTopo->pxfModule(detId) == i + 1) {
0544 if (tTopo->pxfDisk(detId) == 1) {
0545 int sizeX = (*clust).sizeX();
0546 clustXSizeDisk1Plaquettes[i]->Fill(sizeX);
0547
0548 int sizeY = (*clust).sizeY();
0549 clustYSizeDisk1Plaquettes[i]->Fill(sizeY);
0550
0551 float charge = (*clust).charge();
0552 clustChargeDisk1Plaquettes[i]->Fill(charge);
0553
0554 recHitXResDisk1Plaquettes[i]->Fill(res_x);
0555 recHitYResDisk1Plaquettes[i]->Fill(res_y);
0556
0557 recHitXPullDisk1Plaquettes[i]->Fill(pull_x);
0558 recHitYPullDisk1Plaquettes[i]->Fill(pull_y);
0559 } else {
0560 int sizeX = (*clust).sizeX();
0561 clustXSizeDisk2Plaquettes[i]->Fill(sizeX);
0562
0563 int sizeY = (*clust).sizeY();
0564 clustYSizeDisk2Plaquettes[i]->Fill(sizeY);
0565
0566 float charge = (*clust).charge();
0567 clustChargeDisk2Plaquettes[i]->Fill(charge);
0568
0569 recHitXResDisk2Plaquettes[i]->Fill(res_x);
0570 recHitYResDisk2Plaquettes[i]->Fill(res_y);
0571
0572 recHitXPullDisk2Plaquettes[i]->Fill(pull_x);
0573 recHitYPullDisk2Plaquettes[i]->Fill(pull_y);
0574
0575 }
0576 }
0577 else if (tTopo->pxfPanel(detId) == 2 && (tTopo->pxfModule(detId) + 4) == i + 1) {
0578 if (tTopo->pxfDisk(detId) == 1) {
0579 int sizeX = (*clust).sizeX();
0580 clustXSizeDisk1Plaquettes[i]->Fill(sizeX);
0581
0582 int sizeY = (*clust).sizeY();
0583 clustYSizeDisk1Plaquettes[i]->Fill(sizeY);
0584
0585 float charge = (*clust).charge();
0586 clustChargeDisk1Plaquettes[i]->Fill(charge);
0587
0588 recHitXResDisk1Plaquettes[i]->Fill(res_x);
0589 recHitYResDisk1Plaquettes[i]->Fill(res_y);
0590
0591 recHitXPullDisk1Plaquettes[i]->Fill(pull_x);
0592 recHitYPullDisk1Plaquettes[i]->Fill(pull_y);
0593 } else {
0594 int sizeX = (*clust).sizeX();
0595 clustXSizeDisk2Plaquettes[i]->Fill(sizeX);
0596
0597 int sizeY = (*clust).sizeY();
0598 clustYSizeDisk2Plaquettes[i]->Fill(sizeY);
0599
0600 float charge = (*clust).charge();
0601 clustChargeDisk2Plaquettes[i]->Fill(charge);
0602
0603 recHitXResDisk2Plaquettes[i]->Fill(res_x);
0604 recHitYResDisk2Plaquettes[i]->Fill(res_y);
0605
0606 recHitXPullDisk2Plaquettes[i]->Fill(pull_x);
0607 recHitYPullDisk2Plaquettes[i]->Fill(pull_y);
0608
0609 }
0610 }
0611 }
0612 }
0613 DEFINE_FWK_MODULE(SiPixelRecHitsValid);