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