CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SiPixelRecHitsValid.cc
Go to the documentation of this file.
1 // SiPixelRecHitsValid.cc
2 // Description: see SiPixelRecHitsValid.h
3 // Author: Jason Shaev, JHU
4 // Created 6/7/06
5 //
6 // G. Giurgiu, JHU (ggiurgiu@pha.jhu.edu)
7 // added pull distributions (12/27/06)
8 //--------------------------------
9 
11 
23 
26 
33 
43 
46 
47 #include <math.h>
48 
50  : trackerHitAssociatorConfig_(ps, consumesCollector())
51  , siPixelRecHitCollectionToken_( consumes<SiPixelRecHitCollection>( ps.getParameter<edm::InputTag>( "src" ) ) ) {
52 
53 }
54 
56 }
57 
59 }
60 
62  ibooker.setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Pixel/clustBPIX");
63 
64  Char_t histo[200];
65 
66  // ---------------------------------------------------------------
67  // All histograms that depend on plaquette number have 7 indexes.
68  // The first 4 (0-3) correspond to Panel 1 plaquettes 1-4.
69  // The last 3 (4-6) correspond to Panel 2 plaquettes 1-3.
70  // ---------------------------------------------------------------
71 
72  //Cluster y-size by module number for barrel
73  for (int i=0; i<8; i++) {
74  sprintf(histo, "Clust_y_size_Module%d", i+1);
75  clustYSizeModule[i] = ibooker.book1D(histo,"Cluster y-size by Module", 20, 0.5, 20.5);
76  } // end for
77 
78  //Cluster x-size by layer for barrel
79  for (int i=0; i<3; i++) {
80  sprintf(histo, "Clust_x_size_Layer%d", i+1);
81  clustXSizeLayer[i] = ibooker.book1D(histo,"Cluster x-size by Layer", 20, 0.5, 20.5);
82  } // end for
83 
84  //Cluster charge by module for 3 layers of barrel
85  for (int i=0; i<8; i++) {
86  //Cluster charge by module for Layer1
87  sprintf(histo, "Clust_charge_Layer1_Module%d", i+1);
88  clustChargeLayer1Modules[i] = ibooker.book1D(histo, "Cluster charge Layer 1 by Module", 50, 0., 200000.);
89 
90  //Cluster charge by module for Layer2
91  sprintf(histo, "Clust_charge_Layer2_Module%d", i+1);
92  clustChargeLayer2Modules[i] = ibooker.book1D(histo, "Cluster charge Layer 2 by Module", 50, 0., 200000.);
93 
94  //Cluster charge by module for Layer3
95  sprintf(histo, "Clust_charge_Layer3_Module%d", i+1);
96  clustChargeLayer3Modules[i] = ibooker.book1D(histo, "Cluster charge Layer 3 by Module",50, 0., 200000.);
97  } // end for
98 
99  ibooker.setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Pixel/clustFPIX");
100  //Cluster x-size, y-size, and charge by plaquette for Disks in Forward
101  for (int i=0; i<7; i++) {
102  //Cluster x-size for Disk1 by Plaquette
103  sprintf(histo, "Clust_x_size_Disk1_Plaquette%d", i+1);
104  clustXSizeDisk1Plaquettes[i] = ibooker.book1D(histo, "Cluster X-size for Disk1 by Plaquette", 20, 0.5, 20.5);
105 
106  //Cluster x-size for Disk2 by Plaquette
107  sprintf(histo, "Clust_x_size_Disk2_Plaquette%d", i+1);
108  clustXSizeDisk2Plaquettes[i] = ibooker.book1D(histo, "Cluster X-size for Disk2 by Plaquette", 20, 0.5, 20.5);
109 
110  //Cluster y-size for Disk1 by Plaquette
111  sprintf(histo, "Clust_y_size_Disk1_Plaquette%d", i+1);
112  clustYSizeDisk1Plaquettes[i] = ibooker.book1D(histo, "Cluster Y-size for Disk1 by Plaquette", 20, 0.5, 20.5);
113 
114  //Cluster y-size for Disk2 by Plaquette
115  sprintf(histo, "Clust_y_size_Disk2_Plaquette%d", i+1);
116  clustYSizeDisk2Plaquettes[i] = ibooker.book1D(histo, "Cluster Y-size for Disk2 by Plaquette", 20, 0.5, 20.5);
117 
118  //Cluster charge for Disk1 by Plaquette
119  sprintf(histo, "Clust_charge_Disk1_Plaquette%d", i+1);
120  clustChargeDisk1Plaquettes[i] = ibooker.book1D(histo, "Cluster charge for Disk1 by Plaquette", 50, 0., 200000.);
121 
122  //Cluster charge for Disk2 by Plaquette
123  sprintf(histo, "Clust_charge_Disk2_Plaquette%d", i+1);
124  clustChargeDisk2Plaquettes[i] = ibooker.book1D(histo, "Cluster charge for Disk2 by Plaquette", 50, 0., 200000.);
125  } // end for
126 
127 
128 
129  ibooker.setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Pixel/recHitBPIX");
130  //RecHit Bunch crossing all barrel hits
131  recHitBunchB = ibooker.book1D("RecHit_Bunch_Barrel", "RecHit Bunch Crossing, Barrel", 20, -10., 10.);
132 
133  //RecHit Event, in-time bunch, all barrel hits
134  recHitEventB = ibooker.book1D("RecHit_Event_Barrel", "RecHit Event (in-time bunch), Barrel", 100, 0., 100.);
135 
136  //RecHit X Resolution all barrel hits
137  recHitXResAllB = ibooker.book1D("RecHit_xres_b_All","RecHit X Res All Modules in Barrel", 100, -200., 200.);
138 
139  //RecHit Y Resolution all barrel hits
140  recHitYResAllB = ibooker.book1D("RecHit_yres_b_All","RecHit Y Res All Modules in Barrel", 100, -200., 200.);
141 
142  //RecHit X distribution for full modules for barrel
143  recHitXFullModules = ibooker.book1D("RecHit_x_FullModules", "RecHit X distribution for full modules", 100,-2., 2.);
144 
145  //RecHit X distribution for half modules for barrel
146  recHitXHalfModules = ibooker.book1D("RecHit_x_HalfModules", "RecHit X distribution for half modules", 100, -1., 1.);
147 
148  //RecHit Y distribution all modules for barrel
149  recHitYAllModules = ibooker.book1D("RecHit_y_AllModules", "RecHit Y distribution for all modules", 100, -4., 4.);
150 
151  //RecHit X resolution for flipped and unflipped ladders by layer for barrel
152  for (int i=0; i<3; i++) {
153  //RecHit no. of matched simHits all ladders by layer
154  sprintf(histo, "RecHit_NsimHit_Layer%d", i+1);
155  recHitNsimHitLayer[i] = ibooker.book1D(histo, "RecHit Number of simHits by Layer", 30, 0., 30.);
156 
157  //RecHit X resolution for flipped ladders by layer
158  sprintf(histo, "RecHit_XRes_FlippedLadder_Layer%d", i+1);
159  recHitXResFlippedLadderLayers[i] = ibooker.book1D(histo, "RecHit XRes Flipped Ladders by Layer", 100, -200., 200.);
160 
161  //RecHit X resolution for unflipped ladders by layer
162  sprintf(histo, "RecHit_XRes_UnFlippedLadder_Layer%d", i+1);
163  recHitXResNonFlippedLadderLayers[i] = ibooker.book1D(histo, "RecHit XRes NonFlipped Ladders by Layer", 100, -200., 200.);
164  } // end for
165 
166  //RecHit Y resolutions for layers by module for barrel
167  for (int i=0; i<8; i++) {
168  //Rec Hit Y resolution by module for Layer1
169  sprintf(histo, "RecHit_YRes_Layer1_Module%d", i+1);
170  recHitYResLayer1Modules[i] = ibooker.book1D(histo, "RecHit YRes Layer1 by module", 100, -200., 200.);
171 
172  //RecHit Y resolution by module for Layer2
173  sprintf(histo, "RecHit_YRes_Layer2_Module%d", i+1);
174  recHitYResLayer2Modules[i] = ibooker.book1D(histo, "RecHit YRes Layer2 by module", 100, -200., 200.);
175 
176  //RecHit Y resolution by module for Layer3
177  sprintf(histo, "RecHit_YRes_Layer3_Module%d", i+1);
178  recHitYResLayer3Modules[i] = ibooker.book1D(histo, "RecHit YRes Layer3 by module", 100, -200., 200.);
179  } // end for
180 
181  ibooker.setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Pixel/recHitFPIX");
182  //RecHit Bunch crossing all plaquettes
183  recHitBunchF = ibooker.book1D("RecHit_Bunch_Forward", "RecHit Bunch Crossing, Forward", 20, -10., 10.);
184 
185  //RecHit Event, in-time bunch, all plaquettes
186  recHitEventF = ibooker.book1D("RecHit_Event_Forward", "RecHit Event (in-time bunch), Forward", 100, 0., 100.);
187 
188  //RecHit No. of simHits, by disk
189  recHitNsimHitDisk1 = ibooker.book1D("RecHit_NsimHit_Disk1", "RecHit Number of simHits, Disk1", 30, 0., 30.);
190  recHitNsimHitDisk2 = ibooker.book1D("RecHit_NsimHit_Disk2", "RecHit Number of simHits, Disk2", 30, 0., 30.);
191 
192  //RecHit X resolution all plaquettes
193  recHitXResAllF = ibooker.book1D("RecHit_xres_f_All", "RecHit X Res All in Forward", 100, -200., 200.);
194 
195  //RecHit Y resolution all plaquettes
196  recHitYResAllF = ibooker.book1D("RecHit_yres_f_All", "RecHit Y Res All in Forward", 100, -200., 200.);
197 
198  //RecHit X distribution for plaquette with x-size 1 in forward
199  recHitXPlaquetteSize1 = ibooker.book1D("RecHit_x_Plaquette_xsize1", "RecHit X Distribution for plaquette x-size1", 100, -2., 2.);
200 
201  //RecHit X distribution for plaquette with x-size 2 in forward
202  recHitXPlaquetteSize2 = ibooker.book1D("RecHit_x_Plaquette_xsize2", "RecHit X Distribution for plaquette x-size2", 100, -2., 2.);
203 
204  //RecHit Y distribution for plaquette with y-size 2 in forward
205  recHitYPlaquetteSize2 = ibooker.book1D("RecHit_y_Plaquette_ysize2", "RecHit Y Distribution for plaquette y-size2", 100, -4., 4.);
206 
207  //RecHit Y distribution for plaquette with y-size 3 in forward
208  recHitYPlaquetteSize3 = ibooker.book1D("RecHit_y_Plaquette_ysize3", "RecHit Y Distribution for plaquette y-size3", 100, -4., 4.);
209 
210  //RecHit Y distribution for plaquette with y-size 4 in forward
211  recHitYPlaquetteSize4 = ibooker.book1D("RecHit_y_Plaquette_ysize4", "RecHit Y Distribution for plaquette y-size4", 100, -4., 4.);
212 
213  //RecHit Y distribution for plaquette with y-size 5 in forward
214  recHitYPlaquetteSize5 = ibooker.book1D("RecHit_y_Plaquette_ysize5", "RecHit Y Distribution for plaquette y-size5", 100, -4., 4.);
215 
216  //X and Y resolutions for both disks by plaquette in forward
217  for (int i=0; i<7; i++) {
218  //X resolution for Disk1 by plaquette
219  sprintf(histo, "RecHit_XRes_Disk1_Plaquette%d", i+1);
220  recHitXResDisk1Plaquettes[i] = ibooker.book1D(histo, "RecHit XRes Disk1 by plaquette", 100, -200., 200.);
221  //X resolution for Disk2 by plaquette
222  sprintf(histo, "RecHit_XRes_Disk2_Plaquette%d", i+1);
223  recHitXResDisk2Plaquettes[i] = ibooker.book1D(histo, "RecHit XRes Disk2 by plaquette", 100, -200., 200.);
224 
225  //Y resolution for Disk1 by plaquette
226  sprintf(histo, "RecHit_YRes_Disk1_Plaquette%d", i+1);
227  recHitYResDisk1Plaquettes[i] = ibooker.book1D(histo, "RecHit YRes Disk1 by plaquette", 100, -200., 200.);
228  //Y resolution for Disk2 by plaquette
229  sprintf(histo, "RecHit_YRes_Disk2_Plaquette%d", i+1);
230  recHitYResDisk2Plaquettes[i] = ibooker.book1D(histo, "RecHit YRes Disk2 by plaquette", 100, -200., 200.);
231 
232  }
233 
234 
235  ibooker.setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Pixel/recHitPullsBPIX");
236  recHitXPullAllB = ibooker.book1D("RecHit_xres_b_All" , "RecHit X Pull All Modules in Barrel" , 100, -10.0, 10.0);
237  recHitYPullAllB = ibooker.book1D("RecHit_yres_b_All" , "RecHit Y Pull All Modules in Barrel" , 100, -10.0, 10.0);
238 
239  for (int i=0; i<3; i++)
240  {
241  sprintf(histo, "RecHit_XPull_FlippedLadder_Layer%d", i+1);
242  recHitXPullFlippedLadderLayers[i] = ibooker.book1D(histo, "RecHit XPull Flipped Ladders by Layer", 100, -10.0, 10.0);
243 
244  sprintf(histo, "RecHit_XPull_UnFlippedLadder_Layer%d", i+1);
245  recHitXPullNonFlippedLadderLayers[i] = ibooker.book1D(histo, "RecHit XPull NonFlipped Ladders by Layer", 100, -10.0, 10.0);
246  }
247 
248  for (int i=0; i<8; i++)
249  {
250  sprintf(histo, "RecHit_YPull_Layer1_Module%d", i+1);
251  recHitYPullLayer1Modules[i] = ibooker.book1D(histo, "RecHit YPull Layer1 by module", 100, -10.0, 10.0);
252 
253  sprintf(histo, "RecHit_YPull_Layer2_Module%d", i+1);
254  recHitYPullLayer2Modules[i] = ibooker.book1D(histo, "RecHit YPull Layer2 by module", 100, -10.0, 10.0);
255 
256  sprintf(histo, "RecHit_YPull_Layer3_Module%d", i+1);
257  recHitYPullLayer3Modules[i] = ibooker.book1D(histo, "RecHit YPull Layer3 by module", 100, -10.0, 10.0);
258  }
259 
260  ibooker.setCurrentFolder("TrackerRecHitsV/TrackerRecHits/Pixel/recHitPullsFPIX");
261  recHitXPullAllF = ibooker.book1D("RecHit_XPull_f_All", "RecHit X Pull All in Forward", 100, -10.0, 10.0);
262 
263  recHitYPullAllF = ibooker.book1D("RecHit_YPull_f_All", "RecHit Y Pull All in Forward", 100, -10.0, 10.0);
264 
265  for (int i=0; i<7; i++)
266  {
267  sprintf(histo, "RecHit_XPull_Disk1_Plaquette%d", i+1);
268  recHitXPullDisk1Plaquettes[i] = ibooker.book1D(histo, "RecHit XPull Disk1 by plaquette", 100, -10.0, 10.0);
269  sprintf(histo, "RecHit_XPull_Disk2_Plaquette%d", i+1);
270  recHitXPullDisk2Plaquettes[i] = ibooker.book1D(histo, "RecHit XPull Disk2 by plaquette", 100, -10.0, 10.0);
271 
272  sprintf(histo, "RecHit_YPull_Disk1_Plaquette%d", i+1);
273  recHitYPullDisk1Plaquettes[i] = ibooker.book1D(histo, "RecHit YPull Disk1 by plaquette", 100, -10.0, 10.0);
274 
275  sprintf(histo, "RecHit_YPull_Disk2_Plaquette%d", i+1);
276  recHitYPullDisk2Plaquettes[i] = ibooker.book1D(histo, "RecHit YPull Disk2 by plaquette", 100, -10.0, 10.0);
277  }
278 }
279 
281 {
282 
283  //Retrieve tracker topology from geometry
285  es.get<TrackerTopologyRcd>().get(tTopoHand);
286  const TrackerTopology *tTopo=tTopoHand.product();
287 
288  edm::LogInfo("EventInfo") << " Run = " << e.id().run() << " Event = " << e.id().event();
289  if (e.id().event() % 1000 == 0)
290  std::cout << " Run = " << e.id().run() << " Event = " << e.id().event() << std::endl;
291 
292  //Get RecHits
294  e.getByToken( siPixelRecHitCollectionToken_, recHitColl );
295 
296  //Get event setup
298  es.get<TrackerDigiGeometryRecord>().get(geom);
299  const TrackerGeometry& theTracker(*geom);
300 
302 
303  //iterate over detunits
304  for (TrackerGeometry::DetContainer::const_iterator it = geom->dets().begin(); it != geom->dets().end(); it++)
305  {
306  DetId detId = ((*it)->geographicalId());
307  unsigned int subid=detId.subdetId();
308 
309  if (! ((subid==1) || (subid==2))) continue;
310 
311  const PixelGeomDetUnit * theGeomDet = dynamic_cast<const PixelGeomDetUnit*>(theTracker.idToDet(detId) );
312 
313  SiPixelRecHitCollection::const_iterator pixeldet = recHitColl->find(detId);
314  if (pixeldet == recHitColl->end()) continue;
315  SiPixelRecHitCollection::DetSet pixelrechitRange = *pixeldet;
316  SiPixelRecHitCollection::DetSet::const_iterator pixelrechitRangeIteratorBegin = pixelrechitRange.begin();
317  SiPixelRecHitCollection::DetSet::const_iterator pixelrechitRangeIteratorEnd = pixelrechitRange.end();
318  SiPixelRecHitCollection::DetSet::const_iterator pixeliter = pixelrechitRangeIteratorBegin;
319  std::vector<PSimHit> matched;
320 
321  //----Loop over rechits for this detId
322  for ( ; pixeliter != pixelrechitRangeIteratorEnd; pixeliter++)
323  {
324  matched.clear();
325  matched = associate.associateHit(*pixeliter);
326 
327  if ( !matched.empty() )
328  {
329  float closest = 9999.9;
330  std::vector<PSimHit>::const_iterator closestit = matched.begin();
331  LocalPoint lp = pixeliter->localPosition();
332  float rechit_x = lp.x();
333  float rechit_y = lp.y();
334 
335  //loop over sim hits and fill closet
336  for (std::vector<PSimHit>::const_iterator m = matched.begin(); m<matched.end(); m++)
337  {
338  float sim_x1 = (*m).entryPoint().x();
339  float sim_x2 = (*m).exitPoint().x();
340  float sim_xpos = 0.5*(sim_x1+sim_x2);
341 
342  float sim_y1 = (*m).entryPoint().y();
343  float sim_y2 = (*m).exitPoint().y();
344  float sim_ypos = 0.5*(sim_y1+sim_y2);
345 
346  float x_res = fabs(sim_xpos - rechit_x);
347  float y_res = fabs(sim_ypos - rechit_y);
348 
349  float dist = sqrt(x_res*x_res + y_res*y_res);
350 
351  if ( dist < closest )
352  {
353  closest = dist;
354  closestit = m;
355  }
356  } // end sim hit loop
357 
358  if (subid==1)
359  { //<----------barrel
360  fillBarrel(*pixeliter, *closestit, detId, theGeomDet,tTopo);
361  } // end barrel
362  if (subid==2)
363  { // <-------forward
364  fillForward(*pixeliter, *closestit, detId, theGeomDet,tTopo);
365  }
366 
367  } // end matched emtpy
368 
369  int NsimHit = matched.size();
370  if (subid==1)
371  { //<----------barrel
372  for (unsigned int i=0; i<3; i++)
373  if (tTopo->pxbLayer(detId) == i+1)
374  recHitNsimHitLayer[i]->Fill(NsimHit);
375  } // end barrel
376  if (subid==2)
377  { // <-------forward
378  if (tTopo->pxfDisk(detId) == 1)
379  recHitNsimHitDisk1->Fill(NsimHit);
380  else
381  recHitNsimHitDisk2->Fill(NsimHit);
382  }
383  } // <-----end rechit loop
384  } // <------ end detunit loop
385 }
386 
387 void SiPixelRecHitsValid::fillBarrel(const SiPixelRecHit& recHit, const PSimHit& simHit,
388  DetId detId, const PixelGeomDetUnit* theGeomDet,
389  const TrackerTopology *tTopo)
390 {
391  const float cmtomicron = 10000.0;
392 
393  int bunch = simHit.eventId().bunchCrossing();
394  int event = simHit.eventId().event();
395 
396  recHitBunchB->Fill(bunch);
397  if (bunch == 0) recHitEventB->Fill(event);
398 
399  LocalPoint lp = recHit.localPosition();
400  float lp_y = lp.y();
401  float lp_x = lp.x();
402 
403  LocalError lerr = recHit.localPositionError();
404  float lerr_x = sqrt(lerr.xx());
405  float lerr_y = sqrt(lerr.yy());
406 
407  recHitYAllModules->Fill(lp_y);
408 
409  float sim_x1 = simHit.entryPoint().x();
410  float sim_x2 = simHit.exitPoint().x();
411  float sim_xpos = 0.5*(sim_x1 + sim_x2);
412  float res_x = (lp.x() - sim_xpos)*cmtomicron;
413 
414  recHitXResAllB->Fill(res_x);
415 
416  float sim_y1 = simHit.entryPoint().y();
417  float sim_y2 = simHit.exitPoint().y();
418  float sim_ypos = 0.5*(sim_y1 + sim_y2);
419  float res_y = (lp.y() - sim_ypos)*cmtomicron;
420 
421  recHitYResAllB->Fill(res_y);
422 
423  float pull_x = ( lp_x - sim_xpos ) / lerr_x;
424  float pull_y = ( lp_y - sim_ypos ) / lerr_y;
425 
426  recHitXPullAllB->Fill(pull_x);
427  recHitYPullAllB->Fill(pull_y);
428 
429  int rows = theGeomDet->specificTopology().nrows();
430 
431  if (rows == 160)
432  {
433  recHitXFullModules->Fill(lp_x);
434  }
435  else if (rows == 80)
436  {
437  recHitXHalfModules->Fill(lp_x);
438  }
439 
440  float tmp1 = theGeomDet->surface().toGlobal(Local3DPoint(0.,0.,0.)).perp();
441  float tmp2 = theGeomDet->surface().toGlobal(Local3DPoint(0.,0.,1.)).perp();
442 
443  if (tmp2<tmp1)
444  { // flipped
445  for (unsigned int i=0; i<3; i++)
446  {
447  if (tTopo->pxbLayer(detId) == i+1)
448  {
451  }
452  }
453  }
454  else
455  {
456  for (unsigned int i=0; i<3; i++)
457  {
458  if (tTopo->pxbLayer(detId) == i+1)
459  {
462  }
463  }
464  }
465 
466  //get cluster
467  SiPixelRecHit::ClusterRef const& clust = recHit.cluster();
468 
469  // fill module dependent info
470  for (unsigned int i=0; i<8; i++)
471  {
472  if (tTopo->pxbModule(detId) == i+1)
473  {
474  int sizeY = (*clust).sizeY();
475  clustYSizeModule[i]->Fill(sizeY);
476 
477  if (tTopo->pxbLayer(detId) == 1)
478  {
479  float charge = (*clust).charge();
480  clustChargeLayer1Modules[i]->Fill(charge);
481  recHitYResLayer1Modules[i]->Fill(res_y);
482  recHitYPullLayer1Modules[i]->Fill(pull_y);
483  }
484  else if (tTopo->pxbLayer(detId) == 2)
485  {
486  float charge = (*clust).charge();
487  clustChargeLayer2Modules[i]->Fill(charge);
488  recHitYResLayer2Modules[i]->Fill(res_y);
489  recHitYPullLayer2Modules[i]->Fill(pull_y);
490  }
491  else if (tTopo->pxbLayer(detId) == 3)
492  {
493  float charge = (*clust).charge();
494  clustChargeLayer3Modules[i]->Fill(charge);
495  recHitYResLayer3Modules[i]->Fill(res_y);
496  recHitYPullLayer3Modules[i]->Fill(pull_y);
497  }
498  }
499  }
500  int sizeX = (*clust).sizeX();
501  if (tTopo->pxbLayer(detId) == 1) clustXSizeLayer[0]->Fill(sizeX);
502  if (tTopo->pxbLayer(detId) == 2) clustXSizeLayer[1]->Fill(sizeX);
503  if (tTopo->pxbLayer(detId) == 3) clustXSizeLayer[2]->Fill(sizeX);
504 }
505 
506 void SiPixelRecHitsValid::fillForward(const SiPixelRecHit & recHit, const PSimHit & simHit,
507  DetId detId,const PixelGeomDetUnit * theGeomDet,
508  const TrackerTopology *tTopo)
509 {
510  int rows = theGeomDet->specificTopology().nrows();
511  int cols = theGeomDet->specificTopology().ncolumns();
512 
513  const float cmtomicron = 10000.0;
514 
515  int bunch = simHit.eventId().bunchCrossing();
516  int event = simHit.eventId().event();
517 
518  recHitBunchF->Fill(bunch);
519  if (bunch == 0) recHitEventF->Fill(event);
520 
521  LocalPoint lp = recHit.localPosition();
522  float lp_x = lp.x();
523  float lp_y = lp.y();
524 
525  LocalError lerr = recHit.localPositionError();
526  float lerr_x = sqrt(lerr.xx());
527  float lerr_y = sqrt(lerr.yy());
528 
529  float sim_x1 = simHit.entryPoint().x();
530  float sim_x2 = simHit.exitPoint().x();
531  float sim_xpos = 0.5*(sim_x1 + sim_x2);
532 
533  float sim_y1 = simHit.entryPoint().y();
534  float sim_y2 = simHit.exitPoint().y();
535  float sim_ypos = 0.5*(sim_y1 + sim_y2);
536 
537  float pull_x = ( lp_x - sim_xpos ) / lerr_x;
538  float pull_y = ( lp_y - sim_ypos ) / lerr_y;
539 
540 
541  if (rows == 80)
542  {
544  }
545  else if (rows == 160)
546  {
548  }
549 
550  if (cols == 104)
551  {
553  }
554  else if (cols == 156)
555  {
557  }
558  else if (cols == 208)
559  {
561  }
562  else if (cols == 260)
563  {
565  }
566 
567  float res_x = (lp.x() - sim_xpos)*cmtomicron;
568 
569  recHitXResAllF->Fill(res_x);
570  recHitXPullAllF->Fill(pull_x);
571 
572  float res_y = (lp.y() - sim_ypos)*cmtomicron;
573 
574  recHitYPullAllF->Fill(pull_y);
575 
576  // get cluster
577  SiPixelRecHit::ClusterRef const& clust = recHit.cluster();
578 
579  // fill plaquette dependent info
580  for (unsigned int i=0; i<7; i++)
581  {
582  if (tTopo->pxfModule(detId) == i+1)
583  {
584  if (tTopo->pxfDisk(detId) == 1)
585  {
586  int sizeX = (*clust).sizeX();
588 
589  int sizeY = (*clust).sizeY();
591 
592  float charge = (*clust).charge();
594 
597 
600  }
601  else
602  {
603  int sizeX = (*clust).sizeX();
605 
606  int sizeY = (*clust).sizeY();
608 
609  float charge = (*clust).charge();
611 
614 
617 
618  } // end else
619  } // end if module
620  else if (tTopo->pxfPanel(detId) == 2 && (tTopo->pxfModule(detId)+4) == i+1)
621  {
622  if (tTopo->pxfDisk(detId) == 1)
623  {
624  int sizeX = (*clust).sizeX();
626 
627  int sizeY = (*clust).sizeY();
629 
630  float charge = (*clust).charge();
632 
635 
638  }
639  else
640  {
641  int sizeX = (*clust).sizeX();
643 
644  int sizeY = (*clust).sizeY();
646 
647  float charge = (*clust).charge();
649 
652 
655 
656  } // end else
657  } // end else
658  } // end for
659 }
RunNumber_t run() const
Definition: EventID.h:39
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:114
EventNumber_t event() const
Definition: EventID.h:41
int i
Definition: DBlmapReader.cc:9
MonitorElement * clustYSizeModule[8]
MonitorElement * clustXSizeDisk1Plaquettes[7]
float xx() const
Definition: LocalError.h:24
MonitorElement * recHitNsimHitDisk1
boost::transform_iterator< IterHelp, const_IdIter > const_iterator
MonitorElement * recHitXPullDisk2Plaquettes[7]
MonitorElement * recHitXResFlippedLadderLayers[3]
int event() const
get the contents of the subdetector field (should be protected?)
MonitorElement * recHitXFullModules
MonitorElement * recHitXResAllF
T perp() const
Definition: PV3DBase.h:72
MonitorElement * recHitXHalfModules
virtual int ncolumns() const =0
MonitorElement * recHitYPullAllF
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:464
MonitorElement * recHitXResDisk1Plaquettes[7]
MonitorElement * recHitEventF
MonitorElement * clustXSizeDisk2Plaquettes[7]
MonitorElement * recHitYResAllB
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:17
unsigned int pxfDisk(const DetId &id) const
MonitorElement * recHitYPullDisk2Plaquettes[7]
MonitorElement * recHitNsimHitLayer[3]
MonitorElement * clustXSizeLayer[3]
T y() const
Definition: PV3DBase.h:63
MonitorElement * clustChargeLayer1Modules[8]
virtual int nrows() const =0
MonitorElement * recHitYPlaquetteSize5
unsigned int pxbModule(const DetId &id) const
MonitorElement * recHitEventB
MonitorElement * recHitXPlaquetteSize1
MonitorElement * recHitXResDisk2Plaquettes[7]
const Plane & surface() const
The nominal surface of the GeomDet.
Definition: GeomDet.h:40
MonitorElement * recHitXPullNonFlippedLadderLayers[3]
void Fill(long long x)
MonitorElement * recHitYPullDisk1Plaquettes[7]
MonitorElement * recHitXPullAllB
MonitorElement * recHitXResAllB
MonitorElement * recHitBunchB
MonitorElement * clustChargeLayer2Modules[8]
virtual LocalError localPositionError() const
TrackerHitAssociator::Config trackerHitAssociatorConfig_
MonitorElement * recHitYResDisk2Plaquettes[7]
Local3DPoint exitPoint() const
Exit point in the local Det frame.
Definition: PSimHit.h:38
MonitorElement * recHitXResNonFlippedLadderLayers[3]
MonitorElement * recHitYResDisk1Plaquettes[7]
MonitorElement * recHitYResLayer2Modules[8]
MonitorElement * recHitYPlaquetteSize2
float yy() const
Definition: LocalError.h:26
void Fill(HcalDetId &id, double val, std::vector< TH2F > &depth)
T sqrt(T t)
Definition: SSEVec.h:48
int bunchCrossing() const
get the detector field from this detid
MonitorElement * recHitYPullLayer3Modules[8]
edm::EDGetTokenT< SiPixelRecHitCollection > siPixelRecHitCollectionToken_
MonitorElement * clustYSizeDisk1Plaquettes[7]
MonitorElement * book1D(Args &&...args)
Definition: DQMStore.h:115
MonitorElement * recHitBunchF
void fillForward(const SiPixelRecHit &, const PSimHit &, DetId, const PixelGeomDetUnit *, const TrackerTopology *tTopo)
EncodedEventId eventId() const
Definition: PSimHit.h:105
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:37
unsigned int pxfModule(const DetId &id) const
virtual void analyze(const edm::Event &e, const edm::EventSetup &c)
MonitorElement * recHitXPlaquetteSize2
unsigned int pxbLayer(const DetId &id) const
Point3DBase< float, LocalTag > Local3DPoint
Definition: LocalPoint.h:9
MonitorElement * clustChargeLayer3Modules[8]
Definition: DetId.h:18
void setCurrentFolder(const std::string &fullpath)
Definition: DQMStore.cc:274
MonitorElement * recHitYResAllF
MonitorElement * recHitYResLayer3Modules[8]
ClusterRef cluster() const
Definition: SiPixelRecHit.h:49
const T & get() const
Definition: EventSetup.h:56
virtual const PixelTopology & specificTopology() const
Returns a reference to the pixel proxy topology.
T const * product() const
Definition: ESHandle.h:86
MonitorElement * recHitYPullLayer2Modules[8]
MonitorElement * clustYSizeDisk2Plaquettes[7]
edm::EventID id() const
Definition: EventBase.h:60
MonitorElement * recHitYPlaquetteSize4
iterator end()
Definition: DetSetNew.h:70
MonitorElement * recHitXPullFlippedLadderLayers[3]
MonitorElement * recHitNsimHitDisk2
MonitorElement * recHitYResLayer1Modules[8]
MonitorElement * recHitYPullLayer1Modules[8]
std::vector< PSimHit > associateHit(const TrackingRecHit &thit) const
tuple cout
Definition: gather_cfg.py:121
void bookHistograms(DQMStore::IBooker &ibooker, const edm::Run &run, const edm::EventSetup &es)
MonitorElement * recHitXPullDisk1Plaquettes[7]
SiPixelRecHitsValid(const edm::ParameterSet &conf)
MonitorElement * recHitYPullAllB
T x() const
Definition: PV3DBase.h:62
virtual LocalPoint localPosition() const
MonitorElement * recHitXPullAllF
Local3DPoint entryPoint() const
Entry point in the local Det frame.
Definition: PSimHit.h:35
MonitorElement * recHitYPlaquetteSize3
MonitorElement * clustChargeDisk1Plaquettes[7]
unsigned int pxfPanel(const DetId &id) const
MonitorElement * clustChargeDisk2Plaquettes[7]
void fillBarrel(const SiPixelRecHit &, const PSimHit &, DetId, const PixelGeomDetUnit *, const TrackerTopology *tTopo)
Definition: Run.h:43
virtual const TrackerGeomDet * idToDet(DetId) const
Our base class.
Definition: SiPixelRecHit.h:23
MonitorElement * recHitYAllModules
iterator begin()
Definition: DetSetNew.h:67