CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
TrackerValidationVariables.cc
Go to the documentation of this file.
10 
16 
19 
27 
29 
40 
42 
44 
45 #include "TMath.h"
46 
47 #include <string>
48 
50 
53  iC.consumes<std::vector<Trajectory>>(edm::InputTag(config.getParameter<std::string>("trajectoryInput")));
54  tracksToken_ = iC.consumes<reco::TrackCollection>(config.getParameter<edm::InputTag>("Tracks"));
55 }
56 
58 
59 void TrackerValidationVariables::fillHitQuantities(reco::Track const& track, std::vector<AVHitStruct>& v_avhitout) {
60  auto const& trajParams = track.extra()->trajParams();
61  auto const& residuals = track.extra()->residuals();
62 
63  assert(trajParams.size() == track.recHitsSize());
64  auto hb = track.recHitsBegin();
65  for (unsigned int h = 0; h < track.recHitsSize(); h++) {
66  auto hit = *(hb + h);
67  if (!hit->isValid())
68  continue;
69 
70  AVHitStruct hitStruct;
71  const DetId& hit_detId = hit->geographicalId();
72  auto IntRawDetID = hit_detId.rawId();
73  auto IntSubDetID = hit_detId.subdetId();
74 
75  if (IntSubDetID == 0)
76  continue;
77 
78  if (IntSubDetID == PixelSubdetector::PixelBarrel || IntSubDetID == PixelSubdetector::PixelEndcap) {
79  const SiPixelRecHit* prechit = dynamic_cast<const SiPixelRecHit*>(
80  hit); //to be used to get the associated cluster and the cluster probability
81  if (prechit->isOnEdge())
82  hitStruct.isOnEdgePixel = true;
83  if (prechit->hasBadPixels())
84  hitStruct.isOtherBadPixel = true;
85  }
86 
87  auto lPTrk = trajParams[h].position(); // update state
88  auto lVTrk = trajParams[h].direction();
89 
90  auto gtrkdirup = hit->surface()->toGlobal(lVTrk);
91 
92  hitStruct.rawDetId = IntRawDetID;
93  hitStruct.phi = gtrkdirup.phi(); // direction, not position
94  hitStruct.eta = gtrkdirup.eta(); // same
95 
96  hitStruct.localAlpha = std::atan2(lVTrk.x(), lVTrk.z()); // wrt. normal tg(alpha)=x/z
97  hitStruct.localBeta = std::atan2(lVTrk.y(), lVTrk.z()); // wrt. normal tg(beta)= y/z
98 
99  hitStruct.resX = residuals.residualX(h);
100  hitStruct.resY = residuals.residualY(h);
101  hitStruct.resErrX = hitStruct.resX / residuals.pullX(h); // for backward compatibility....
102  hitStruct.resErrY = hitStruct.resY / residuals.pullY(h);
103 
104  // hitStruct.localX = lPhit.x();
105  // hitStruct.localY = lPhit.y();
106  // EM: use predictions for local coordinates
107  hitStruct.localX = lPTrk.x();
108  hitStruct.localY = lPTrk.y();
109 
110  // now calculate residuals taking global orientation of modules and radial topology in TID/TEC into account
111  float resXprime(999.F), resYprime(999.F);
112  float resXatTrkY(999.F);
113  float resXprimeErr(999.F), resYprimeErr(999.F);
114 
115  if (hit->detUnit()) { // is it a single physical module?
116  float uOrientation(-999.F), vOrientation(-999.F);
117  float resXTopol(999.F), resYTopol(999.F);
118  float resXatTrkYTopol(999.F);
119 
120  const Surface& surface = hit->detUnit()->surface();
121  const BoundPlane& boundplane = hit->detUnit()->surface();
122  const Bounds& bound = boundplane.bounds();
123 
124  float length = 0;
125  float width = 0;
126 
127  LocalPoint lPModule(0., 0., 0.), lUDirection(1., 0., 0.), lVDirection(0., 1., 0.);
128  GlobalPoint gPModule = surface.toGlobal(lPModule), gUDirection = surface.toGlobal(lUDirection),
129  gVDirection = surface.toGlobal(lVDirection);
130 
131  if (IntSubDetID == PixelSubdetector::PixelBarrel || IntSubDetID == PixelSubdetector::PixelEndcap ||
132  IntSubDetID == StripSubdetector::TIB || IntSubDetID == StripSubdetector::TOB) {
133  if (IntSubDetID == PixelSubdetector::PixelEndcap) {
134  uOrientation = gUDirection.perp() - gPModule.perp() >= 0 ? +1.F : -1.F;
135  vOrientation = deltaPhi(gVDirection.barePhi(), gPModule.barePhi()) >= 0. ? +1.F : -1.F;
136  } else {
137  uOrientation = deltaPhi(gUDirection.barePhi(), gPModule.barePhi()) >= 0. ? +1.F : -1.F;
138  vOrientation = gVDirection.z() - gPModule.z() >= 0 ? +1.F : -1.F;
139  }
140 
141  resXTopol = hitStruct.resX;
142  resXatTrkYTopol = hitStruct.resX;
143  resYTopol = hitStruct.resY;
144  resXprimeErr = hitStruct.resErrX;
145  resYprimeErr = hitStruct.resErrY;
146 
147  const RectangularPlaneBounds* rectangularBound = dynamic_cast<const RectangularPlaneBounds*>(&bound);
148  if (rectangularBound != nullptr) {
149  hitStruct.inside = rectangularBound->inside(lPTrk);
150  length = rectangularBound->length();
151  width = rectangularBound->width();
152  hitStruct.localXnorm = 2 * hitStruct.localX / width;
153  hitStruct.localYnorm = 2 * hitStruct.localY / length;
154  } else {
155  throw cms::Exception("Geometry Error")
156  << "[TrackerValidationVariables] Cannot cast bounds to RectangularPlaneBounds as expected for TPE";
157  }
158 
159  } else if (IntSubDetID == StripSubdetector::TID || IntSubDetID == StripSubdetector::TEC) {
160  // not possible to compute precisely as with Trajectory
161  } else {
162  edm::LogWarning("TrackerValidationVariables") << "@SUB=TrackerValidationVariables::fillHitQuantities"
163  << "No valid tracker subdetector " << IntSubDetID;
164  continue;
165  }
166 
167  resXprime = resXTopol * uOrientation;
168  resXatTrkY = resXatTrkYTopol;
169  resYprime = resYTopol * vOrientation;
170 
171  } else { // not a detUnit, so must be a virtual 2D-Module
172  // FIXME: at present only for det units residuals are calculated and filled in the hitStruct
173  // But in principle this method should also be useable for the gluedDets (2D modules in TIB, TID, TOB, TEC)
174  // In this case, only orientation should be taken into account for primeResiduals, but not the radial topology
175  // At present, default values (999.F) are given out
176  }
177 
178  hitStruct.resXprime = resXprime;
179  hitStruct.resXatTrkY = resXatTrkY;
180  hitStruct.resYprime = resYprime;
181  hitStruct.resXprimeErr = resXprimeErr;
182  hitStruct.resYprimeErr = resYprimeErr;
183 
184  v_avhitout.push_back(hitStruct);
185  }
186 }
187 
188 void TrackerValidationVariables::fillHitQuantities(const Trajectory* trajectory, std::vector<AVHitStruct>& v_avhitout) {
189  TrajectoryStateCombiner tsoscomb;
190 
191  const std::vector<TrajectoryMeasurement>& tmColl = trajectory->measurements();
192  for (std::vector<TrajectoryMeasurement>::const_iterator itTraj = tmColl.begin(); itTraj != tmColl.end(); ++itTraj) {
193  if (!itTraj->updatedState().isValid())
194  continue;
195 
196  TrajectoryStateOnSurface tsos = tsoscomb(itTraj->forwardPredictedState(), itTraj->backwardPredictedState());
197  if (!tsos.isValid())
198  continue;
200 
201  if (!hit->isValid() || hit->geographicalId().det() != DetId::Tracker)
202  continue;
203 
204  AVHitStruct hitStruct;
205  const DetId& hit_detId = hit->geographicalId();
206  unsigned int IntRawDetID = (hit_detId.rawId());
207  unsigned int IntSubDetID = (hit_detId.subdetId());
208 
209  if (IntSubDetID == 0)
210  continue;
211 
212  if (IntSubDetID == PixelSubdetector::PixelBarrel || IntSubDetID == PixelSubdetector::PixelEndcap) {
213  const SiPixelRecHit* prechit = dynamic_cast<const SiPixelRecHit*>(
214  hit.get()); //to be used to get the associated cluster and the cluster probability
215  if (prechit->isOnEdge())
216  hitStruct.isOnEdgePixel = true;
217  if (prechit->hasBadPixels())
218  hitStruct.isOtherBadPixel = true;
219  }
220 
221  //first calculate residuals in cartesian coordinates in the local module coordinate system
222 
223  LocalPoint lPHit = hit->localPosition();
224  LocalPoint lPTrk = tsos.localPosition();
225  LocalVector lVTrk = tsos.localDirection();
226 
227  hitStruct.localAlpha = atan2(lVTrk.x(), lVTrk.z()); // wrt. normal tg(alpha)=x/z
228  hitStruct.localBeta = atan2(lVTrk.y(), lVTrk.z()); // wrt. normal tg(beta)= y/z
229 
230  LocalError errHit = hit->localPositionError();
231  // no need to add APE to hitError anymore
232  // AlgebraicROOTObject<2>::SymMatrix mat = asSMatrix<2>(hit->parametersError());
233  // LocalError errHit = LocalError( mat(0,0),mat(0,1),mat(1,1) );
234  LocalError errTrk = tsos.localError().positionError();
235 
236  //check for negative error values: track error can have negative value, if matrix inversion fails (very rare case)
237  //hit error should always give positive values
238  if (errHit.xx() < 0. || errHit.yy() < 0. || errTrk.xx() < 0. || errTrk.yy() < 0.) {
239  edm::LogError("TrackerValidationVariables")
240  << "@SUB=TrackerValidationVariables::fillHitQuantities"
241  << "One of the squared error methods gives negative result"
242  << "\n\terrHit.xx()\terrHit.yy()\terrTrk.xx()\terrTrk.yy()"
243  << "\n\t" << errHit.xx() << "\t" << errHit.yy() << "\t" << errTrk.xx() << "\t" << errTrk.yy();
244  continue;
245  }
246 
247  align::LocalVector res = lPTrk - lPHit;
248 
249  float resXErr = std::sqrt(errHit.xx() + errTrk.xx());
250  float resYErr = std::sqrt(errHit.yy() + errTrk.yy());
251 
252  hitStruct.resX = res.x();
253  hitStruct.resY = res.y();
254  hitStruct.resErrX = resXErr;
255  hitStruct.resErrY = resYErr;
256 
257  // hitStruct.localX = lPhit.x();
258  // hitStruct.localY = lPhit.y();
259  // EM: use predictions for local coordinates
260  hitStruct.localX = lPTrk.x();
261  hitStruct.localY = lPTrk.y();
262 
263  // now calculate residuals taking global orientation of modules and radial topology in TID/TEC into account
264  float resXprime(999.F), resYprime(999.F);
265  float resXatTrkY(999.F);
266  float resXprimeErr(999.F), resYprimeErr(999.F);
267 
268  if (hit->detUnit()) { // is it a single physical module?
269  const GeomDetUnit& detUnit = *(hit->detUnit());
270  float uOrientation(-999.F), vOrientation(-999.F);
271  float resXTopol(999.F), resYTopol(999.F);
272  float resXatTrkYTopol(999.F);
273 
274  const Surface& surface = hit->detUnit()->surface();
275  const BoundPlane& boundplane = hit->detUnit()->surface();
276  const Bounds& bound = boundplane.bounds();
277 
278  float length = 0;
279  float width = 0;
280 
281  LocalPoint lPModule(0., 0., 0.), lUDirection(1., 0., 0.), lVDirection(0., 1., 0.);
282  GlobalPoint gPModule = surface.toGlobal(lPModule), gUDirection = surface.toGlobal(lUDirection),
283  gVDirection = surface.toGlobal(lVDirection);
284 
285  if (IntSubDetID == PixelSubdetector::PixelBarrel || IntSubDetID == StripSubdetector::TIB ||
286  IntSubDetID == StripSubdetector::TOB) {
287  uOrientation = deltaPhi(gUDirection.barePhi(), gPModule.barePhi()) >= 0. ? +1.F : -1.F;
288  vOrientation = gVDirection.z() - gPModule.z() >= 0 ? +1.F : -1.F;
289  resXTopol = res.x();
290  resXatTrkYTopol = res.x();
291  resYTopol = res.y();
292  resXprimeErr = resXErr;
293  resYprimeErr = resYErr;
294 
295  const RectangularPlaneBounds* rectangularBound = dynamic_cast<const RectangularPlaneBounds*>(&bound);
296  if (rectangularBound != nullptr) {
297  hitStruct.inside = rectangularBound->inside(lPTrk);
298  length = rectangularBound->length();
299  width = rectangularBound->width();
300  hitStruct.localXnorm = 2 * hitStruct.localX / width;
301  hitStruct.localYnorm = 2 * hitStruct.localY / length;
302  } else {
303  throw cms::Exception("Geometry Error") << "[TrackerValidationVariables] Cannot cast bounds to "
304  "RectangularPlaneBounds as expected for TPB, TIB and TOB";
305  }
306 
307  } else if (IntSubDetID == PixelSubdetector::PixelEndcap) {
308  uOrientation = gUDirection.perp() - gPModule.perp() >= 0 ? +1.F : -1.F;
309  vOrientation = deltaPhi(gVDirection.barePhi(), gPModule.barePhi()) >= 0. ? +1.F : -1.F;
310  resXTopol = res.x();
311  resXatTrkYTopol = res.x();
312  resYTopol = res.y();
313  resXprimeErr = resXErr;
314  resYprimeErr = resYErr;
315 
316  const RectangularPlaneBounds* rectangularBound = dynamic_cast<const RectangularPlaneBounds*>(&bound);
317  if (rectangularBound != nullptr) {
318  hitStruct.inside = rectangularBound->inside(lPTrk);
319  length = rectangularBound->length();
320  width = rectangularBound->width();
321  hitStruct.localXnorm = 2 * hitStruct.localX / width;
322  hitStruct.localYnorm = 2 * hitStruct.localY / length;
323  } else {
324  throw cms::Exception("Geometry Error")
325  << "[TrackerValidationVariables] Cannot cast bounds to RectangularPlaneBounds as expected for TPE";
326  }
327 
328  } else if (IntSubDetID == StripSubdetector::TID || IntSubDetID == StripSubdetector::TEC) {
329  uOrientation = deltaPhi(gUDirection.barePhi(), gPModule.barePhi()) >= 0. ? +1.F : -1.F;
330  vOrientation = gVDirection.perp() - gPModule.perp() >= 0. ? +1.F : -1.F;
331 
332  if (!dynamic_cast<const RadialStripTopology*>(&detUnit.type().topology()))
333  continue;
334  const RadialStripTopology& topol = dynamic_cast<const RadialStripTopology&>(detUnit.type().topology());
335 
336  MeasurementPoint measHitPos = topol.measurementPosition(lPHit);
337  MeasurementPoint measTrkPos = topol.measurementPosition(lPTrk);
338 
339  MeasurementError measHitErr = topol.measurementError(lPHit, errHit);
340  MeasurementError measTrkErr = topol.measurementError(lPTrk, errTrk);
341 
342  if (measHitErr.uu() < 0. || measHitErr.vv() < 0. || measTrkErr.uu() < 0. || measTrkErr.vv() < 0.) {
343  edm::LogError("TrackerValidationVariables")
344  << "@SUB=TrackerValidationVariables::fillHitQuantities"
345  << "One of the squared error methods gives negative result"
346  << "\n\tmeasHitErr.uu()\tmeasHitErr.vv()\tmeasTrkErr.uu()\tmeasTrkErr.vv()"
347  << "\n\t" << measHitErr.uu() << "\t" << measHitErr.vv() << "\t" << measTrkErr.uu() << "\t"
348  << measTrkErr.vv();
349  continue;
350  }
351 
352  float localStripLengthHit = topol.localStripLength(lPHit);
353  float localStripLengthTrk = topol.localStripLength(lPTrk);
354  float phiHit = topol.stripAngle(measHitPos.x());
355  float phiTrk = topol.stripAngle(measTrkPos.x());
356  float r_0 = topol.originToIntersection();
357 
358  resXTopol = (phiTrk - phiHit) * r_0;
359  // resXTopol = (tan(phiTrk)-tan(phiHit))*r_0;
360 
361  LocalPoint LocalHitPosCor = topol.localPosition(MeasurementPoint(measHitPos.x(), measTrkPos.y()));
362  resXatTrkYTopol = lPTrk.x() - LocalHitPosCor.x();
363 
364  //resYTopol = measTrkPos.y()*localStripLengthTrk - measHitPos.y()*localStripLengthHit;
365  float cosPhiHit(cos(phiHit)), cosPhiTrk(cos(phiTrk)), sinPhiHit(sin(phiHit)), sinPhiTrk(sin(phiTrk));
366  float l_0 = r_0 - topol.detHeight() / 2;
367  resYTopol = measTrkPos.y() * localStripLengthTrk - measHitPos.y() * localStripLengthHit +
368  l_0 * (1 / cosPhiTrk - 1 / cosPhiHit);
369 
370  resXprimeErr = std::sqrt(measHitErr.uu() + measTrkErr.uu()) * topol.angularWidth() * r_0;
371  //resYprimeErr = std::sqrt(measHitErr.vv()*localStripLengthHit*localStripLengthHit + measTrkErr.vv()*localStripLengthTrk*localStripLengthTrk);
372  float helpSummand = l_0 * l_0 * topol.angularWidth() * topol.angularWidth() *
373  (sinPhiHit * sinPhiHit / pow(cosPhiHit, 4) * measHitErr.uu() +
374  sinPhiTrk * sinPhiTrk / pow(cosPhiTrk, 4) * measTrkErr.uu());
375  resYprimeErr = std::sqrt(measHitErr.vv() * localStripLengthHit * localStripLengthHit +
376  measTrkErr.vv() * localStripLengthTrk * localStripLengthTrk + helpSummand);
377 
378  const TrapezoidalPlaneBounds* trapezoidalBound = dynamic_cast<const TrapezoidalPlaneBounds*>(&bound);
379  if (trapezoidalBound != nullptr) {
380  hitStruct.inside = trapezoidalBound->inside(lPTrk);
381  length = trapezoidalBound->length();
382  width = trapezoidalBound->width();
383  //float widthAtHalfLength = trapezoidalBound->widthAtHalfLength();
384 
385  // int yAxisOrientation=trapezoidalBound->yAxisOrientation();
386  // for trapezoidal shape modules, scale with as function of local y coordinate
387  // float widthAtlocalY=width-(1-yAxisOrientation*2*lPTrk.y()/length)*(width-widthAtHalfLength);
388  // hitStruct.localXnorm = 2*hitStruct.localX/widthAtlocalY;
389  hitStruct.localXnorm = 2 * hitStruct.localX / width;
390  hitStruct.localYnorm = 2 * hitStruct.localY / length;
391  } else {
392  throw cms::Exception("Geometry Error") << "[TrackerValidationVariables] Cannot cast bounds to "
393  "TrapezoidalPlaneBounds as expected for TID and TEC";
394  }
395 
396  } else {
397  edm::LogWarning("TrackerValidationVariables") << "@SUB=TrackerValidationVariables::fillHitQuantities"
398  << "No valid tracker subdetector " << IntSubDetID;
399  continue;
400  }
401 
402  resXprime = resXTopol * uOrientation;
403  resXatTrkY = resXatTrkYTopol;
404  resYprime = resYTopol * vOrientation;
405 
406  } else { // not a detUnit, so must be a virtual 2D-Module
407  // FIXME: at present only for det units residuals are calculated and filled in the hitStruct
408  // But in principle this method should also be useable for the gluedDets (2D modules in TIB, TID, TOB, TEC)
409  // In this case, only orientation should be taken into account for primeResiduals, but not the radial topology
410  // At present, default values (999.F) are given out
411  }
412 
413  hitStruct.resXprime = resXprime;
414  hitStruct.resXatTrkY = resXatTrkY;
415  hitStruct.resYprime = resYprime;
416  hitStruct.resXprimeErr = resXprimeErr;
417  hitStruct.resYprimeErr = resYprimeErr;
418 
419  hitStruct.rawDetId = IntRawDetID;
420  hitStruct.phi = tsos.globalDirection().phi();
421  hitStruct.eta = tsos.globalDirection().eta();
422 
423  v_avhitout.push_back(hitStruct);
424  }
425 }
426 
428  const edm::EventSetup& eventSetup,
429  std::vector<AVTrackStruct>& v_avtrackout) {
430  fillTrackQuantities(event, eventSetup, [](const reco::Track&) -> bool { return true; }, v_avtrackout);
431 }
432 
434  const edm::EventSetup& eventSetup,
435  std::function<bool(const reco::Track&)> trackFilter,
436  std::vector<AVTrackStruct>& v_avtrackout) {
438  eventSetup.get<IdealMagneticFieldRecord>().get(magneticField);
439 
441  event.getByToken(tracksToken_, tracksH);
442  if (!tracksH.isValid())
443  return;
444  auto const& tracks = *tracksH;
445  auto ntrk = tracks.size();
446  LogDebug("TrackerValidationVariables") << "Track collection size " << ntrk;
447 
449  event.getByToken(trajCollectionToken_, trajsH);
450  bool yesTraj = trajsH.isValid();
451  std::vector<Trajectory> const* trajs = nullptr;
452  if (yesTraj)
453  trajs = &(*trajsH);
454  if (yesTraj)
455  assert(trajs->size() == tracks.size());
456 
457  Trajectory const* trajectory = nullptr;
458  for (unsigned int i = 0; i < ntrk; ++i) {
459  auto const& track = tracks[i];
460  if (yesTraj)
461  trajectory = &(*trajs)[i];
462 
463  if (!trackFilter(track))
464  continue;
465 
466  AVTrackStruct trackStruct;
467 
468  trackStruct.p = track.p();
469  trackStruct.pt = track.pt();
470  trackStruct.ptError = track.ptError();
471  trackStruct.px = track.px();
472  trackStruct.py = track.py();
473  trackStruct.pz = track.pz();
474  trackStruct.eta = track.eta();
475  trackStruct.phi = track.phi();
476  trackStruct.chi2 = track.chi2();
477  trackStruct.chi2Prob = TMath::Prob(track.chi2(), track.ndof());
478  trackStruct.normchi2 = track.normalizedChi2();
479  GlobalPoint gPoint(track.vx(), track.vy(), track.vz());
480  double theLocalMagFieldInInverseGeV = magneticField->inInverseGeV(gPoint).z();
481  trackStruct.kappa = -track.charge() * theLocalMagFieldInInverseGeV / track.pt();
482  trackStruct.charge = track.charge();
483  trackStruct.d0 = track.d0();
484  trackStruct.dz = track.dz();
485  trackStruct.numberOfValidHits = track.numberOfValidHits();
486  trackStruct.numberOfLostHits = track.numberOfLostHits();
487  if (trajectory)
488  fillHitQuantities(trajectory, trackStruct.hits);
489  else
490  fillHitQuantities(track, trackStruct.hits);
491 
492  v_avtrackout.push_back(trackStruct);
493  }
494 }
#define LogDebug(id)
virtual const Topology & topology() const =0
float width() const override
Width along local X.
GlobalPoint toGlobal(const Point2DBase< Scalar, LocalTag > lp) const
Definition: Surface.h:81
T getParameter(std::string const &) const
static constexpr auto TEC
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
virtual float angularWidth() const =0
float xx() const
Definition: LocalError.h:22
float vv() const
T y() const
Definition: PV2DBase.h:44
T perp() const
Definition: PV3DBase.h:69
const TrackExtraRef & extra() const
reference to "extra" object
Definition: Track.h:139
virtual const GeomDetType & type() const
Definition: GeomDet.cc:69
virtual float originToIntersection() const =0
size_t recHitsSize() const
Get number of RecHits. (Warning, this includes invalid hits, which are not physical hits)...
Definition: Track.h:97
LocalVector localDirection() const
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Geom::Phi< T > phi() const
Definition: PV3DBase.h:66
constexpr uint32_t rawId() const
get the raw id
Definition: DetId.h:57
std::vector< Track > TrackCollection
collection of Tracks
Definition: TrackFwd.h:14
T y() const
Definition: PV3DBase.h:60
void fillHitQuantities(const Trajectory *trajectory, std::vector< AVHitStruct > &v_avhitout)
Definition: config.py:1
bool isOnEdge() const
Definition: SiPixelRecHit.h:97
LocalError positionError() const
bool hasBadPixels() const
Definition: SiPixelRecHit.h:99
Definition: Electron.h:6
LocalPoint localPosition(float strip) const override=0
T barePhi() const
Definition: PV3DBase.h:65
float localStripLength(const LocalPoint &) const override=0
DataContainer const & measurements() const
Definition: Trajectory.h:178
GlobalVector inInverseGeV(const GlobalPoint &gp) const
Field value ad specified global point, in 1/Gev.
Definition: MagneticField.h:36
Measurement2DPoint MeasurementPoint
Measurement points are two-dimensional by default.
float yy() const
Definition: LocalError.h:24
edm::EDGetTokenT< std::vector< Trajectory > > trajCollectionToken_
std::shared_ptr< TrackingRecHit const > ConstRecHitPointer
float stripAngle(float strip) const override=0
T sqrt(T t)
Definition: SSEVec.h:19
T z() const
Definition: PV3DBase.h:61
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
constexpr int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:48
float uu() const
const LocalTrajectoryError & localError() const
static constexpr auto TOB
trackingRecHit_iterator recHitsBegin() const
Iterator to first hit on the track.
Definition: Track.h:88
bool isValid() const
Definition: HandleBase.h:70
MeasurementError measurementError(const LocalPoint &, const LocalError &) const override=0
float length() const override
Lenght along local Y.
Definition: DetId.h:17
virtual float detHeight() const =0
MeasurementPoint measurementPosition(const LocalPoint &) const override=0
static constexpr auto TIB
void fillTrackQuantities(const edm::Event &, const edm::EventSetup &, std::vector< AVTrackStruct > &v_avtrackout)
T eta() const
Definition: PV3DBase.h:73
T get() const
Definition: EventSetup.h:73
bool inside(const Local2DPoint &p) const override
Definition: Bounds.h:20
edm::EDGetTokenT< std::vector< reco::Track > > tracksToken_
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:163
T x() const
Definition: PV2DBase.h:43
T x() const
Definition: PV3DBase.h:59
static constexpr auto TID
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:30
Definition: event.py:1
GlobalVector globalDirection() const
Our base class.
Definition: SiPixelRecHit.h:23