Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
CylinderSurface.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // CylinderSurface.cxx, (c) ATLAS Detector Software
8 
9 // Trk
12 // Gaudi
13 #include "GaudiKernel/MsgStream.h"
14 //CxxUtils
15 #include "CxxUtils/inline_hints.h"
16 // STD
17 #include <iomanip>
18 #include <iostream>
19 
20 // default constructor
22  : Trk::Surface()
23  , m_bounds(nullptr)
24  , m_referencePoint(nullptr)
25  , m_rotSymmetryAxis(nullptr)
26 {}
27 
28 // copy constructor
30  : Trk::Surface(csf)
31  , m_bounds(csf.m_bounds)
32  , m_referencePoint(nullptr)
33  , m_rotSymmetryAxis(nullptr)
34 {}
35 
36 // copy constructor with shift
38  const Amg::Transform3D& transf)
39  : Trk::Surface(csf, transf)
40  , m_bounds(csf.m_bounds)
41  , m_referencePoint(nullptr)
42  , m_rotSymmetryAxis(nullptr)
43 {}
44 
45 // constructor by radius and halflenght
47  double radius,
48  double hlength)
49  : Trk::Surface(htrans)
50  , m_bounds(std::make_shared<const Trk::CylinderBounds>(radius, hlength))
51  , m_referencePoint(nullptr)
52  , m_rotSymmetryAxis(nullptr)
53 {}
54 
55 // constructor by radius, halflenght and phisector
57  double radius,
58  double hphi,
59  double hlength)
60  : Trk::Surface(htrans)
61  , m_bounds(std::make_shared<Trk::CylinderBounds>(radius, hphi, hlength))
62  , m_referencePoint(nullptr)
63  , m_rotSymmetryAxis(nullptr)
64 {}
65 
66 // constructor by CylinderBounds
68  std::shared_ptr<const Trk::CylinderBounds> cbounds)
69  : Trk::Surface(htrans)
70  , m_bounds(std::move(cbounds))
71  , m_referencePoint(nullptr)
72  , m_rotSymmetryAxis(nullptr)
73 {
74 }
75 
76 // constructor from transform
78  : Trk::Surface(htrans)
79  , m_bounds(nullptr)
80  , m_referencePoint(nullptr)
81  , m_rotSymmetryAxis(nullptr)
82 {}
83 
84 // constructor by radius and halflength
86  : Trk::Surface()
87  , m_bounds(std::make_shared<Trk::CylinderBounds>(radius, hlength))
88  , m_referencePoint(nullptr)
89  , m_rotSymmetryAxis(nullptr)
90 {}
91 
92 // constructor by radius, halflength and phisector
94  double hphi,
95  double hlength)
96  : Trk::Surface()
97  , m_bounds(std::make_shared<Trk::CylinderBounds>(radius, hphi, hlength))
98  , m_referencePoint(nullptr)
99  , m_rotSymmetryAxis(nullptr)
100 {}
101 
102 // constructor by CylinderBounds
103 Trk::CylinderSurface::CylinderSurface(std::shared_ptr<const Trk::CylinderBounds> cbounds)
104  : Trk::Surface()
105  , m_bounds(std::move(cbounds))
106  , m_referencePoint(nullptr)
107  , m_rotSymmetryAxis(nullptr)
108 {
109 }
110 
113 {
114  if (this != &csf) {
116  m_bounds = csf.m_bounds;
117  m_referencePoint.store(nullptr);
118  m_rotSymmetryAxis.store(nullptr);
119  }
120  return *this;
121 }
122 
127  double l1, double l2, double phi, double theta, double qop,
128  std::optional<AmgSymMatrix(5)> cov) const {
129  return std::make_unique<ParametersT<5, Charged, CylinderSurface>>(
130  l1, l2, phi, theta, qop, *this, std::move(cov));
131 }
132 
137  const Amg::Vector3D& position, const Amg::Vector3D& momentum, double charge,
138  std::optional<AmgSymMatrix(5)> cov) const {
139  return std::make_unique<ParametersT<5, Charged, CylinderSurface>>(
140  position, momentum, charge, *this, std::move(cov));
141 }
142 
147  double l1, double l2, double phi, double theta, double qop,
148  std::optional<AmgSymMatrix(5)> cov) const {
149  return std::make_unique<ParametersT<5, Neutral, CylinderSurface>>(
150  l1, l2, phi, theta, qop, *this, std::move(cov));
151 }
152 
157  const Amg::Vector3D& position, const Amg::Vector3D& momentum, double charge,
158  std::optional<AmgSymMatrix(5)> cov) const {
159  return std::make_unique<ParametersT<5, Neutral, CylinderSurface>>(
160  position, momentum, charge, *this, std::move(cov));
161 }
162 
163 const Amg::Vector3D&
165 {
166  if (!m_referencePoint) {
167  double rMedium = bounds().r();
168  double phi = bounds().averagePhi();
169  Amg::Vector3D gp(rMedium * cos(phi), rMedium * sin(phi), 0.);
170  m_referencePoint.set(std::make_unique<Amg::Vector3D>(transform() * gp));
171  }
172  return (*m_referencePoint);
173 }
174 
175 bool
177 {
178  // first check the type not to compare apples with oranges
179  if (sf.type()!=Trk::SurfaceType::Cylinder){
180  return false;
181  }
182  return (*this) == static_cast<const Trk::CylinderSurface&>(sf);
183 }
184 
185 // return the measurement frame: it's the tangential plane
188  const Amg::Vector3D&) const
189 {
190  Amg::RotationMatrix3D mFrame;
191  // construct the measurement frame
192  Amg::Vector3D measY(
193  transform().rotation().col(2)); // measured Y is the z axis
194  Amg::Vector3D measDepth =
195  Amg::Vector3D(pos.x(), pos.y(), 0.)
196  .unit(); // measured z is the position transverse normalized
197  Amg::Vector3D measX(
198  measY.cross(measDepth).unit()); // measured X is what comoes out of it
199  // the columnes
200  mFrame.col(0) = measX;
201  mFrame.col(1) = measY;
202  mFrame.col(2) = measDepth;
203  // return the rotation matrix
204  return mFrame;
205 }
206 
207 const Amg::Vector3D&
209 {
210  if (!m_rotSymmetryAxis) {
212  m_rotSymmetryAxis.set(std::make_unique<Amg::Vector3D>(zAxis));
213  }
214  return (*m_rotSymmetryAxis);
215 }
216 
217 // Avoid out-of-line-eigen calls
219 void
221  const Amg::Vector3D&,
222  Amg::Vector3D& glopos) const
223 {
224  // create the position in the local 3d frame
225  double r = bounds().r();
226  double phi = locpos[Trk::locRPhi] / r;
227  glopos = Amg::Vector3D(r * cos(phi), r * sin(phi), locpos[Trk::locZ]);
228  // transform it to the globalframe: CylinderSurfaces are allowed to have 0
229  // pointer transform
231  glopos = transform() * glopos;
232 }
233 
234 bool
236  const Amg::Vector3D&,
237  Amg::Vector2D& locpos) const
238 {
239  // get the transform & transform global position into cylinder frame
240  // transform it to the globalframe: CylinderSurfaces are allowed to have 0
241  // pointer transform
242  double radius = 0.;
243  double inttol = bounds().r() * 0.0001;
244  if (inttol < 0.01)
245  inttol = 0.01;
246  // do the transformation or not
248  Amg::Vector3D loc3Dframe(inverseTransformMultHelper(glopos));
249  locpos = Amg::Vector2D(bounds().r() * loc3Dframe.phi(), loc3Dframe.z());
250  radius = loc3Dframe.perp();
251  } else {
252  locpos = Amg::Vector2D(bounds().r() * glopos.phi(), glopos.z());
253  radius = glopos.perp();
254  }
255  // return true or false
256  return (fabs(radius - bounds().r()) <= inttol);
257 }
258 
259 bool
261  const Trk::BoundaryCheck& bchk,
262  double tol1,
263  double tol2) const
264 {
265  Amg::Vector3D loc3Dframe =
266  Trk::Surface::m_transforms ? inverseTransformMultHelper(glopo) : glopo;
267  return (bchk ? bounds().inside3D(loc3Dframe,
268  tol1 + s_onSurfaceTolerance,
269  tol2 + s_onSurfaceTolerance)
270  : true);
271 }
272 
275  const Amg::Vector3D& dir,
276  bool forceDir,
277  Trk::BoundaryCheck bchk) const
278 {
279  bool needsTransform = m_transforms || m_associatedDetElement;
280  // create the hep points
281  Amg::Vector3D point1 = pos;
282  Amg::Vector3D direction = dir;
283  if (needsTransform) {
284  Amg::Transform3D invTrans = inverseTransformHelper();
285  point1 = invTrans * pos;
286  direction = invTrans.linear() * dir;
287  }
288  // the bounds radius
289  double R = bounds().r();
290  double t1 = 0.;
291  double t2 = 0.;
292  if (direction.x()) {
293  // get line and circle constants
294  double idirx = 1. / direction.x();
295  double k = direction.y() * idirx;
296  double d = point1.y() - point1.x() * k;
297  // and solve the qaudratic equation
298  Trk::RealQuadraticEquation pquad(1 + k * k, 2 * k * d, d * d - R * R);
299  if (pquad.solutions != Trk::none) {
300  // the solutions in the 3D frame of the cylinder
301  t1 = (pquad.first - point1.x()) * idirx;
302  t2 = (pquad.second - point1.x()) * idirx;
303  } else // bail out if no solution exists
304  return {pos, 0., false};
305  } else if (direction.y()) {
306  // x value is the one of point1
307  // x^2 + y^2 = R^2
308  // y = sqrt(R^2-x^2)
309  double x = point1.x();
310  double r2mx2 = R * R - x * x;
311  // bail out if no solution
312  if (r2mx2 < 0.)
313  return {pos, 0., false};
314  double y = sqrt(r2mx2);
315  // assign parameters and solutions
316  double idiry = 1. / direction.y();
317  t1 = (y - point1.y()) * idiry;
318  t2 = (-y - point1.y()) * idiry;
319  } else {
320  return {pos, 0., false};
321  }
322  Amg::Vector3D sol1raw(point1 + t1 * direction);
323  Amg::Vector3D sol2raw(point1 + t2 * direction);
324  // now reorder and return
325  Amg::Vector3D solution(0, 0, 0);
326  double path = 0.;
327 
328  // first check the validity of the direction
329  bool isValid = true;
330 
331  // both solutions are of same sign, take the smaller, but flag as false if not
332  // forward
333  if (t1 * t2 > 0 || !forceDir) {
334  // asign validity
335  isValid = forceDir ? (t1 > 0.) : true;
336  // assign the right solution
337  if (t1 * t1 < t2 * t2) {
338  solution = sol1raw;
339  path = t1;
340  } else {
341  solution = sol2raw;
342  path = t2;
343  }
344  } else {
345  if (t1 > 0.) {
346  solution = sol1raw;
347  path = t1;
348  } else {
349  solution = sol2raw;
350  path = t2;
351  }
352  }
353  // the solution is still in the local 3D frame, direct check
354  isValid =
355  bchk ? (isValid && m_bounds->inside3D(solution,
358  : isValid;
359 
360  // now return
361  return needsTransform ? Intersection(transform() * solution, path, isValid)
362  : Intersection(solution, path, isValid);
363 }
364 
367 // We compile this function with optimization, even in debug builds; otherwise,
368 // the heavy use of Eigen makes it too slow. However, from here we may call
369 // to out-of-line Eigen code that is linked from other DSOs; in that case,
370 // it would not be optimized. Avoid this by forcing all Eigen code
371 // to be inlined here if possible.
375  const Amg::Vector3D& pos,
376  const Amg::Vector3D& dir) const
377 {
378  double tol = 0.001;
379 
380  const Amg::Vector3D& X = center(); // point
381  const Amg::Vector3D& S = normal(); // vector
382 
383  double radius = bounds().r();
384  double sp = pos.dot(S);
385  double sc = X.dot(S);
386  double dp = dir.dot(S);
387  Amg::Vector3D dx = X - pos - (sc - sp) * S; // vector
388  Amg::Vector3D ax = dir - dp * S; // vector
389 
390  double A = ax.dot(ax); // size of projected direction (squared)
391  double B = ax.dot(dx); // dot product (->cos angle)
392  double C = dx.dot(dx); // distance to axis (squared)
393  double currDist = radius - sqrt(C);
394 
395  if (A == 0.) { // direction parallel to cylinder axis
396  if (fabs(currDist) < tol) {
397  return {1, 0., true, 0.}; // solution at surface
398  }
399  return {
400  0, currDist, true, 0.}; // point of closest approach without intersection
401  }
402 
403  // minimal distance to cylinder axis
404  // The [[maybe_unused]] declaration is to suppress redundant division checking
405  // here. Even a tiny change in rmin (~1e-13) can cause huge changes in the
406  // reconstructed output, so don't change how it's evaluated.
407  [[maybe_unused]] const double rmin_tmp = B * B / A;
408  const double rmin2 = C - rmin_tmp;
409  const double rmin = rmin2 < 0 ? 0 : sqrt(rmin2);
410 
411  if (rmin > radius) { // no intersection
412  double first = B / A;
413  return {
414  0,
415  currDist,
416  true,
417  first}; // point of closest approach without intersection
418  }
419  if (fabs(rmin - radius) <
420  tol) { // tangential 'intersection' - return double solution
421  double first = B / A;
422  return {2, currDist, true, first, first};
423  }
424  // The [[maybe_unused]] declaration here suppresses redundant division
425  // checking. We don't want to rewrite how this is evaluated due to
426  // instabilities.
427  [[maybe_unused]] const double b_a = B / A;
428  const double x = sqrt((radius - rmin) * (radius + rmin) / A);
429  double first = b_a - x;
430  double second = b_a + x;
431  if (first >= 0.) {
432  return {2, currDist, true, first, second};
433  }
434  if (second <= 0.) {
435  return {2, currDist, true, second, first};
436  } // inside cylinder
437  return {2, currDist, true, second, first};
438 }
439 
442  const Amg::Vector3D& dir,
443  bool bound) const
444 {
445  const double tolb = .01;
446 
447  const Amg::Transform3D& T = transform();
448  // double Ax[3] = {T.xx(),T.yx(),T.zx()};
449  // double Ay[3] = {T.xy(),T.yy(),T.zy()};
450  // double Az[3] = {T.xz(),T.yz(),T.zz()};
451 
452  // Transformation to cylinder system coordinates
453  //
454 
455  // BEGIN here is what i guess this might mean: BEGIN
456  Amg::Vector3D Ax = T.rotation().col(0);
457  Amg::Vector3D Ay = T.rotation().col(1);
458  Amg::Vector3D Az = T.rotation().col(2);
459 
460  Amg::Vector3D dxyz = pos - T.translation();
461  double x = dxyz.dot(Ax);
462  double y = dxyz.dot(Ay);
463  double z = dxyz.dot(Az);
464  double ax = dir.dot(Ax);
465  double ay = dir.dot(Ay);
466  double at = ax * ax + ay * ay;
467  double r = sqrt(x * x + y * y);
468  double R = bounds().r();
469 
470  // END here is what i guessed this means END
471 
472  // double dx = pos[0]-T.dx() ;
473  // double dy = pos[1]-T.dy() ;
474  // double dz = pos[2]-T.dz() ;
475  // double x = dx*Ax[0]+dy*Ax[1]+dz*Ax[2] ;
476  // double y = dx*Ay[0]+dy*Ay[1]+dz*Ay[2] ;
477  // double z = dx*Az[0]+dy*Az[1]+dz*Az[2] ;
478  // double ax = dir[0]*Ax[0]+dir[1]*Ax[1]+dir[2]*Ax[2];
479  // double ay = dir[0]*Ay[0]+dir[1]*Ay[1]+dir[2]*Ay[2];
480  // double at = ax*ax+ay*ay ;
481  // double r = sqrt(x*x+y*y) ;
482  // double R = bounds().r() ;
483 
484  // Step to surface
485  //
486  int ns = 0;
487  double s1 = 0.;
488  double s2 = 0.;
489 
490  if (at != 0.) {
491 
492  const double inv_at = 1. / at;
493  double A = -(ax * x + ay * y) * inv_at;
494  double B = A * A + (R - r) * (R - r) * inv_at;
495 
496  if (B >= 0.) {
497 
498  B = sqrt(B);
499  if (B > tolb) {
500  if (A > 0.) {
501  s1 = A - B;
502  s2 = A + B;
503  } else {
504  s1 = A + B;
505  s2 = A - B;
506  }
507  ns = 2;
508  } else {
509  s1 = A;
510  ns = 1;
511  }
512  }
513  }
514  double sr = r - R;
515  if (!bound)
516  return {ns, fabs(sr), true, s1, s2};
517 
518  // Min distance to surface
519  //
520  Amg::Vector2D lp(atan2(y, x) * R, 0.);
521 
522  double d = bounds().minDistance(lp);
523  double sz = fabs(z) - bounds().halflengthZ();
524  if (sz <= 0.)
525  sz = 0.;
526  double dist = sr * sr + sz * sz;
527  if (d > 0.)
528  dist += ((d * d) * (sr / R + 1.));
529 
530  return {ns, sqrt(dist), true, s1, s2};
531 }
Trk::y
@ y
Definition: ParamDefs.h:56
beamspotman.r
def r
Definition: beamspotman.py:676
TileDCSDataPlotter.dp
dp
Definition: TileDCSDataPlotter.py:840
Trk::CylinderSurface::rotSymmetryAxis
virtual const Amg::Vector3D & rotSymmetryAxis() const
Return method for the rotational symmetry axis - the z-Axis of the HepTransform.
Definition: CylinderSurface.cxx:208
Trk::CylinderSurface::operator==
virtual bool operator==(const Surface &sf) const override
Equality operator.
Definition: CylinderSurface.cxx:176
fitman.sz
sz
Definition: fitman.py:527
Trk::Intersection
Definition: Intersection.h:24
inline_hints.h
athena.path
path
python interpreter configuration --------------------------------------—
Definition: athena.py:128
Trk::z
@ z
global position (cartesian)
Definition: ParamDefs.h:57
fitman.ax
ax
Definition: fitman.py:522
PlotCalibFromCool.zAxis
zAxis
Definition: PlotCalibFromCool.py:76
Trk::CylinderSurface::localToGlobal
virtual void localToGlobal(const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const override
Specialized for CylinderSurface : LocalToGlobal method without dynamic memory allocation.
Definition: CylinderSurface.cxx:220
Trk::DistanceSolution
Definition: DistanceSolution.h:25
Trk::RealQuadraticEquation::second
double second
Definition: TrkDetDescr/TrkSurfaces/TrkSurfaces/RealQuadraticEquation.h:55
Trk::Surface::ChargedTrackParametersUniquePtr
std::unique_ptr< ParametersBase< 5, Trk::Charged > > ChargedTrackParametersUniquePtr
Unique ptr types.
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:129
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
hist_file_dump.d
d
Definition: hist_file_dump.py:143
Trk::locRPhi
@ locRPhi
Definition: ParamDefs.h:40
ALFA_EventTPCnv_Dict::t1
std::vector< ALFA_RawDataCollection_p1 > t1
Definition: ALFA_EventTPCnvDict.h:43
python.SystemOfUnits.second
float second
Definition: SystemOfUnits.py:134
plotBeamSpotVxVal.cov
cov
Definition: plotBeamSpotVxVal.py:201
Trk::none
@ none
Definition: TrkDetDescr/TrkSurfaces/TrkSurfaces/RealQuadraticEquation.h:21
Trk::CylinderSurface::straightLineIntersection
virtual Intersection straightLineIntersection(const Amg::Vector3D &pos, const Amg::Vector3D &dir, bool forceDir=false, Trk::BoundaryCheck bchk=false) const override final
fast straight line intersection schema - provides closest intersection and (signed) path length
Definition: CylinderSurface.cxx:274
Trk::Surface::NeutralTrackParametersUniquePtr
std::unique_ptr< ParametersBase< 5, Trk::Neutral > > NeutralTrackParametersUniquePtr
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:131
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
isValid
bool isValid(const T &p)
Av: we implement here an ATLAS-sepcific convention: all particles which are 99xxxxx are fine.
Definition: AtlasPID.h:812
Trk::RealQuadraticEquation::solutions
RQESolutionType solutions
Definition: TrkDetDescr/TrkSurfaces/TrkSurfaces/RealQuadraticEquation.h:56
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:560
JetTiledMap::S
@ S
Definition: TiledEtaPhiMap.h:44
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Monitored::X
@ X
Definition: HistogramFillerUtils.h:24
Trk::AmgSymMatrix
AmgSymMatrix(5) &GXFTrackState
Definition: GXFTrackState.h:156
Trk::Surface::operator=
Surface & operator=(const Surface &sf)
Definition: Surface.cxx:91
Trk::CylinderSurface::globalToLocal
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const override
Specialized for CylinderSurface : GlobalToLocal method without dynamic memory allocation - boolean ch...
Definition: CylinderSurface.cxx:235
Trk::CylinderSurface::straightLineDistanceEstimate
virtual DistanceSolution straightLineDistanceEstimate(const Amg::Vector3D &pos, const Amg::Vector3D &dir) const override
fast distance to Surface
Definition: CylinderSurface.cxx:374
A
skel.l2
l2
Definition: skel.GENtoEVGEN.py:410
Trk::Surface::m_transforms
std::unique_ptr< Transforms > m_transforms
Unique Pointer to the Transforms struct.
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:439
Trk::Surface::s_onSurfaceTolerance
static constexpr double s_onSurfaceTolerance
Tolerance for being on Surface.
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:458
Trk::locZ
@ locZ
local cylindrical
Definition: ParamDefs.h:42
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
ATH_FLATTEN
#define ATH_FLATTEN
Definition: inline_hints.h:52
Trk::theta
@ theta
Definition: ParamDefs.h:66
Trk::CylinderSurface::CylinderSurface
CylinderSurface()
Default Constructor.
Definition: CylinderSurface.cxx:21
Trk::CylinderSurface
Definition: CylinderSurface.h:55
xAOD::rotation
rotation
Definition: TrackSurface_v1.cxx:15
Trk::CylinderBounds
Definition: CylinderBounds.h:46
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
CylinderSurface.h
Trk::RealQuadraticEquation
Definition: TrkDetDescr/TrkSurfaces/TrkSurfaces/RealQuadraticEquation.h:52
Trk::CylinderSurface::measurementFrame
virtual Amg::RotationMatrix3D measurementFrame(const Amg::Vector3D &glopos, const Amg::Vector3D &glomom) const override final
Return the measurement frame - this is needed for alignment, in particular for StraightLine and Perig...
Definition: CylinderSurface.cxx:187
Trk::CylinderSurface::m_bounds
std::shared_ptr< const CylinderBounds > m_bounds
The global reference point (== a point on the surface)
Definition: CylinderSurface.h:289
Trk::CylinderSurface::createUniqueNeutralParameters
virtual NeutralTrackParametersUniquePtr createUniqueNeutralParameters(double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
Use the Surface as a ParametersBase constructor, from local parameters - neutral.
Definition: CylinderSurface.cxx:146
beamspotman.dir
string dir
Definition: beamspotman.py:623
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition: FakeTrackBuilder.h:9
Trk::CylinderSurface::operator=
CylinderSurface & operator=(const CylinderSurface &csf)
Assignment operator.
Definition: CylinderSurface.cxx:112
charge
double charge(const T &p)
Definition: AtlasPID.h:931
python.SystemOfUnits.sr
float sr
Definition: SystemOfUnits.py:127
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
RealQuadraticEquation.h
query_example.col
col
Definition: query_example.py:7
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
Trk::RealQuadraticEquation::first
double first
Definition: TrkDetDescr/TrkSurfaces/TrkSurfaces/RealQuadraticEquation.h:54
ALFA_EventTPCnv_Dict::t2
std::vector< ALFA_RawDataContainer_p1 > t2
Definition: ALFA_EventTPCnvDict.h:44
mapkey::sf
@ sf
Definition: TElectronEfficiencyCorrectionTool.cxx:38
Trk::CylinderSurface::isOnSurface
virtual bool isOnSurface(const Amg::Vector3D &glopo, const BoundaryCheck &bchk=true, double tol1=0., double tol2=0.) const override
This method returns true if the GlobalPosition is on the Surface for both, within or without check of...
Definition: CylinderSurface.cxx:260
Amg::RotationMatrix3D
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Definition: GeoPrimitives.h:49
Trk::BoundaryCheck
Definition: BoundaryCheck.h:51
DeMoScan.first
bool first
Definition: DeMoScan.py:536
ReadCellNoiseFromCoolCompare.s2
s2
Definition: ReadCellNoiseFromCoolCompare.py:379
makeTRTBarrelCans.dx
tuple dx
Definition: makeTRTBarrelCans.py:20
Trk::SurfaceType::Cylinder
@ Cylinder
Trk::CylinderSurface::createUniqueTrackParameters
virtual Surface::ChargedTrackParametersUniquePtr createUniqueTrackParameters(double l1, double l2, double phi, double theta, double qop, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const override final
Use the Surface as a ParametersBase constructor, from local parameters - charged.
Definition: CylinderSurface.cxx:126
Trk::phi
@ phi
Definition: ParamDefs.h:75
skel.l1
l1
Definition: skel.GENtoEVGEN.py:409
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
Trk::x
@ x
Definition: ParamDefs.h:55
Trk::CylinderSurface::globalReferencePoint
virtual const Amg::Vector3D & globalReferencePoint() const override final
Returns a global reference point: For the Cylinder this is Where denotes the averagePhi() of the cy...
Definition: CylinderSurface.cxx:164
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:79
python.SystemOfUnits.ns
float ns
Definition: SystemOfUnits.py:145
fitman.k
k
Definition: fitman.py:528
fitman.ay
ay
Definition: fitman.py:525