ATLAS Offline Software
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 <cassert>
18 #include <iomanip>
19 #include <iostream>
20 
21 // default constructor
23  : Trk::Surface()
24  , m_bounds(nullptr)
25  , m_referencePoint(nullptr)
26  , m_rotSymmetryAxis(nullptr)
27 {}
28 
29 // copy constructor
31  : Trk::Surface(csf)
32  , m_bounds(csf.m_bounds)
33  , m_referencePoint(nullptr)
34  , m_rotSymmetryAxis(nullptr)
35 {}
36 
37 // copy constructor with shift
39  const Amg::Transform3D& transf)
40  : Trk::Surface(csf, transf)
41  , m_bounds(csf.m_bounds)
42  , m_referencePoint(nullptr)
43  , m_rotSymmetryAxis(nullptr)
44 {}
45 
46 // constructor by radius and halflenght
48  double radius,
49  double hlength)
50  : Trk::Surface(htrans)
51  , m_bounds(std::make_shared<Trk::CylinderBounds>(radius, hlength))
52  , m_referencePoint(nullptr)
53  , m_rotSymmetryAxis(nullptr)
54 {}
55 
56 // constructor by radius, halflenght and phisector
58  double radius,
59  double hphi,
60  double hlength)
61  : Trk::Surface(htrans)
62  , m_bounds(std::make_shared<Trk::CylinderBounds>(radius, hphi, hlength))
63  , m_referencePoint(nullptr)
64  , m_rotSymmetryAxis(nullptr)
65 {}
66 
67 // constructor by CylinderBounds
69  Trk::CylinderBounds* cbounds)
70  : Trk::Surface(htrans)
71  , m_bounds(cbounds)
72  , m_referencePoint(nullptr)
73  , m_rotSymmetryAxis(nullptr)
74 {
75  if (!cbounds) throw std::runtime_error("Cannot pass null CylinderBounds");
76 }
77 
78 // constructor from transform
80  : Trk::Surface(htrans)
81  , m_bounds(nullptr)
82  , m_referencePoint(nullptr)
83  , m_rotSymmetryAxis(nullptr)
84 {}
85 
86 // constructor by radius and halflength
88  : Trk::Surface()
89  , m_bounds(std::make_shared<Trk::CylinderBounds>(radius, hlength))
90  , m_referencePoint(nullptr)
91  , m_rotSymmetryAxis(nullptr)
92 {}
93 
94 // constructor by radius, halflength and phisector
96  double hphi,
97  double hlength)
98  : Trk::Surface()
99  , m_bounds(std::make_shared<Trk::CylinderBounds>(radius, hphi, hlength))
100  , m_referencePoint(nullptr)
101  , m_rotSymmetryAxis(nullptr)
102 {}
103 
104 // constructor by CylinderBounds
106  : Trk::Surface()
107  , m_bounds(cbounds)
108  , m_referencePoint(nullptr)
109  , m_rotSymmetryAxis(nullptr)
110 {
111  assert(cbounds);
112 }
113 
116 {
117  if (this != &csf) {
119  m_bounds = csf.m_bounds;
120  m_referencePoint.store(nullptr);
121  m_rotSymmetryAxis.store(nullptr);
122  }
123  return *this;
124 }
125 
130  double l1, double l2, double phi, double theta, double qop,
131  std::optional<AmgSymMatrix(5)> cov) const {
132  return std::make_unique<ParametersT<5, Charged, CylinderSurface>>(
133  l1, l2, phi, theta, qop, *this, std::move(cov));
134 }
135 
140  const Amg::Vector3D& position, const Amg::Vector3D& momentum, double charge,
141  std::optional<AmgSymMatrix(5)> cov) const {
142  return std::make_unique<ParametersT<5, Charged, CylinderSurface>>(
143  position, momentum, charge, *this, std::move(cov));
144 }
145 
150  double l1, double l2, double phi, double theta, double qop,
151  std::optional<AmgSymMatrix(5)> cov) const {
152  return std::make_unique<ParametersT<5, Neutral, CylinderSurface>>(
153  l1, l2, phi, theta, qop, *this, std::move(cov));
154 }
155 
160  const Amg::Vector3D& position, const Amg::Vector3D& momentum, double charge,
161  std::optional<AmgSymMatrix(5)> cov) const {
162  return std::make_unique<ParametersT<5, Neutral, CylinderSurface>>(
163  position, momentum, charge, *this, std::move(cov));
164 }
165 
166 const Amg::Vector3D&
168 {
169  if (!m_referencePoint) {
170  double rMedium = bounds().r();
171  double phi = bounds().averagePhi();
172  Amg::Vector3D gp(rMedium * cos(phi), rMedium * sin(phi), 0.);
173  m_referencePoint.set(std::make_unique<Amg::Vector3D>(transform() * gp));
174  }
175  return (*m_referencePoint);
176 }
177 
178 bool
180 {
181  // first check the type not to compare apples with oranges
182  if (sf.type()!=Trk::SurfaceType::Cylinder){
183  return false;
184  }
185  return (*this) == static_cast<const Trk::CylinderSurface&>(sf);
186 }
187 
188 // return the measurement frame: it's the tangential plane
191  const Amg::Vector3D&) const
192 {
193  Amg::RotationMatrix3D mFrame;
194  // construct the measurement frame
195  Amg::Vector3D measY(
196  transform().rotation().col(2)); // measured Y is the z axis
197  Amg::Vector3D measDepth =
198  Amg::Vector3D(pos.x(), pos.y(), 0.)
199  .unit(); // measured z is the position transverse normalized
200  Amg::Vector3D measX(
201  measY.cross(measDepth).unit()); // measured X is what comoes out of it
202  // the columnes
203  mFrame.col(0) = measX;
204  mFrame.col(1) = measY;
205  mFrame.col(2) = measDepth;
206  // return the rotation matrix
207  return mFrame;
208 }
209 
210 const Amg::Vector3D&
212 {
213  if (!m_rotSymmetryAxis) {
215  m_rotSymmetryAxis.set(std::make_unique<Amg::Vector3D>(zAxis));
216  }
217  return (*m_rotSymmetryAxis);
218 }
219 
220 // Avoid out-of-line-eigen calls
222 void
224  const Amg::Vector3D&,
225  Amg::Vector3D& glopos) const
226 {
227  // create the position in the local 3d frame
228  double r = bounds().r();
229  double phi = locpos[Trk::locRPhi] / r;
230  glopos = Amg::Vector3D(r * cos(phi), r * sin(phi), locpos[Trk::locZ]);
231  // transform it to the globalframe: CylinderSurfaces are allowed to have 0
232  // pointer transform
234  glopos = transform() * glopos;
235 }
236 
237 bool
239  const Amg::Vector3D&,
240  Amg::Vector2D& locpos) const
241 {
242  // get the transform & transform global position into cylinder frame
243  // transform it to the globalframe: CylinderSurfaces are allowed to have 0
244  // pointer transform
245  double radius = 0.;
246  double inttol = bounds().r() * 0.0001;
247  if (inttol < 0.01)
248  inttol = 0.01;
249  // do the transformation or not
251  Amg::Vector3D loc3Dframe(inverseTransformMultHelper(glopos));
252  locpos = Amg::Vector2D(bounds().r() * loc3Dframe.phi(), loc3Dframe.z());
253  radius = loc3Dframe.perp();
254  } else {
255  locpos = Amg::Vector2D(bounds().r() * glopos.phi(), glopos.z());
256  radius = glopos.perp();
257  }
258  // return true or false
259  return (fabs(radius - bounds().r()) <= inttol);
260 }
261 
262 bool
264  const Trk::BoundaryCheck& bchk,
265  double tol1,
266  double tol2) const
267 {
268  Amg::Vector3D loc3Dframe =
269  Trk::Surface::m_transforms ? inverseTransformMultHelper(glopo) : glopo;
270  return (bchk ? bounds().inside3D(loc3Dframe,
271  tol1 + s_onSurfaceTolerance,
272  tol2 + s_onSurfaceTolerance)
273  : true);
274 }
275 
278  const Amg::Vector3D& dir,
279  bool forceDir,
280  Trk::BoundaryCheck bchk) const
281 {
282  bool needsTransform = m_transforms || m_associatedDetElement;
283  // create the hep points
284  Amg::Vector3D point1 = pos;
285  Amg::Vector3D direction = dir;
286  if (needsTransform) {
287  Amg::Transform3D invTrans = inverseTransformHelper();
288  point1 = invTrans * pos;
289  direction = invTrans.linear() * dir;
290  }
291  // the bounds radius
292  double R = bounds().r();
293  double t1 = 0.;
294  double t2 = 0.;
295  if (direction.x()) {
296  // get line and circle constants
297  double idirx = 1. / direction.x();
298  double k = direction.y() * idirx;
299  double d = point1.y() - point1.x() * k;
300  // and solve the qaudratic equation
301  Trk::RealQuadraticEquation pquad(1 + k * k, 2 * k * d, d * d - R * R);
302  if (pquad.solutions != Trk::none) {
303  // the solutions in the 3D frame of the cylinder
304  t1 = (pquad.first - point1.x()) * idirx;
305  t2 = (pquad.second - point1.x()) * idirx;
306  } else // bail out if no solution exists
307  return {pos, 0., false};
308  } else if (direction.y()) {
309  // x value is the one of point1
310  // x^2 + y^2 = R^2
311  // y = sqrt(R^2-x^2)
312  double x = point1.x();
313  double r2mx2 = R * R - x * x;
314  // bail out if no solution
315  if (r2mx2 < 0.)
316  return {pos, 0., false};
317  double y = sqrt(r2mx2);
318  // assign parameters and solutions
319  double idiry = 1. / direction.y();
320  t1 = (y - point1.y()) * idiry;
321  t2 = (-y - point1.y()) * idiry;
322  } else {
323  return {pos, 0., false};
324  }
325  Amg::Vector3D sol1raw(point1 + t1 * direction);
326  Amg::Vector3D sol2raw(point1 + t2 * direction);
327  // now reorder and return
328  Amg::Vector3D solution(0, 0, 0);
329  double path = 0.;
330 
331  // first check the validity of the direction
332  bool isValid = true;
333 
334  // both solutions are of same sign, take the smaller, but flag as false if not
335  // forward
336  if (t1 * t2 > 0 || !forceDir) {
337  // asign validity
338  isValid = forceDir ? (t1 > 0.) : true;
339  // assign the right solution
340  if (t1 * t1 < t2 * t2) {
341  solution = sol1raw;
342  path = t1;
343  } else {
344  solution = sol2raw;
345  path = t2;
346  }
347  } else {
348  if (t1 > 0.) {
349  solution = sol1raw;
350  path = t1;
351  } else {
352  solution = sol2raw;
353  path = t2;
354  }
355  }
356  // the solution is still in the local 3D frame, direct check
357  isValid =
358  bchk ? (isValid && m_bounds->inside3D(solution,
361  : isValid;
362 
363  // now return
364  return needsTransform ? Intersection(transform() * solution, path, isValid)
365  : Intersection(solution, path, isValid);
366 }
367 
370 // We compile this function with optimization, even in debug builds; otherwise,
371 // the heavy use of Eigen makes it too slow. However, from here we may call
372 // to out-of-line Eigen code that is linked from other DSOs; in that case,
373 // it would not be optimized. Avoid this by forcing all Eigen code
374 // to be inlined here if possible.
378  const Amg::Vector3D& pos,
379  const Amg::Vector3D& dir) const
380 {
381  double tol = 0.001;
382 
383  const Amg::Vector3D& X = center(); // point
384  const Amg::Vector3D& S = normal(); // vector
385 
386  double radius = bounds().r();
387  double sp = pos.dot(S);
388  double sc = X.dot(S);
389  double dp = dir.dot(S);
390  Amg::Vector3D dx = X - pos - (sc - sp) * S; // vector
391  Amg::Vector3D ax = dir - dp * S; // vector
392 
393  double A = ax.dot(ax); // size of projected direction (squared)
394  double B = ax.dot(dx); // dot product (->cos angle)
395  double C = dx.dot(dx); // distance to axis (squared)
396  double currDist = radius - sqrt(C);
397 
398  if (A == 0.) { // direction parallel to cylinder axis
399  if (fabs(currDist) < tol) {
400  return {1, 0., true, 0.}; // solution at surface
401  }
402  return {
403  0, currDist, true, 0.}; // point of closest approach without intersection
404  }
405 
406  // minimal distance to cylinder axis
407  // The [[maybe_unused]] declaration is to suppress redundant division checking
408  // here. Even a tiny change in rmin (~1e-13) can cause huge changes in the
409  // reconstructed output, so don't change how it's evaluated.
410  [[maybe_unused]] const double rmin_tmp = B * B / A;
411  const double rmin2 = C - rmin_tmp;
412  const double rmin = rmin2 < 0 ? 0 : sqrt(rmin2);
413 
414  if (rmin > radius) { // no intersection
415  double first = B / A;
416  return {
417  0,
418  currDist,
419  true,
420  first}; // point of closest approach without intersection
421  }
422  if (fabs(rmin - radius) <
423  tol) { // tangential 'intersection' - return double solution
424  double first = B / A;
425  return {2, currDist, true, first, first};
426  }
427  // The [[maybe_unused]] declaration here suppresses redundant division
428  // checking. We don't want to rewrite how this is evaluated due to
429  // instabilities.
430  [[maybe_unused]] const double b_a = B / A;
431  const double x = sqrt((radius - rmin) * (radius + rmin) / A);
432  double first = b_a - x;
433  double second = b_a + x;
434  if (first >= 0.) {
435  return {2, currDist, true, first, second};
436  }
437  if (second <= 0.) {
438  return {2, currDist, true, second, first};
439  } // inside cylinder
440  return {2, currDist, true, second, first};
441 }
442 
445  const Amg::Vector3D& dir,
446  bool bound) const
447 {
448  const double tolb = .01;
449 
450  const Amg::Transform3D& T = transform();
451  // double Ax[3] = {T.xx(),T.yx(),T.zx()};
452  // double Ay[3] = {T.xy(),T.yy(),T.zy()};
453  // double Az[3] = {T.xz(),T.yz(),T.zz()};
454 
455  // Transformation to cylinder system coordinates
456  //
457 
458  // BEGIN here is what i guess this might mean: BEGIN
459  Amg::Vector3D Ax = T.rotation().col(0);
460  Amg::Vector3D Ay = T.rotation().col(1);
461  Amg::Vector3D Az = T.rotation().col(2);
462 
463  Amg::Vector3D dxyz = pos - T.translation();
464  double x = dxyz.dot(Ax);
465  double y = dxyz.dot(Ay);
466  double z = dxyz.dot(Az);
467  double ax = dir.dot(Ax);
468  double ay = dir.dot(Ay);
469  double at = ax * ax + ay * ay;
470  double r = sqrt(x * x + y * y);
471  double R = bounds().r();
472 
473  // END here is what i guessed this means END
474 
475  // double dx = pos[0]-T.dx() ;
476  // double dy = pos[1]-T.dy() ;
477  // double dz = pos[2]-T.dz() ;
478  // double x = dx*Ax[0]+dy*Ax[1]+dz*Ax[2] ;
479  // double y = dx*Ay[0]+dy*Ay[1]+dz*Ay[2] ;
480  // double z = dx*Az[0]+dy*Az[1]+dz*Az[2] ;
481  // double ax = dir[0]*Ax[0]+dir[1]*Ax[1]+dir[2]*Ax[2];
482  // double ay = dir[0]*Ay[0]+dir[1]*Ay[1]+dir[2]*Ay[2];
483  // double at = ax*ax+ay*ay ;
484  // double r = sqrt(x*x+y*y) ;
485  // double R = bounds().r() ;
486 
487  // Step to surface
488  //
489  int ns = 0;
490  double s1 = 0.;
491  double s2 = 0.;
492 
493  if (at != 0.) {
494 
495  const double inv_at = 1. / at;
496  double A = -(ax * x + ay * y) * inv_at;
497  double B = A * A + (R - r) * (R - r) * inv_at;
498 
499  if (B >= 0.) {
500 
501  B = sqrt(B);
502  if (B > tolb) {
503  if (A > 0.) {
504  s1 = A - B;
505  s2 = A + B;
506  } else {
507  s1 = A + B;
508  s2 = A - B;
509  }
510  ns = 2;
511  } else {
512  s1 = A;
513  ns = 1;
514  }
515  }
516  }
517  double sr = r - R;
518  if (!bound)
519  return {ns, fabs(sr), true, s1, s2};
520 
521  // Min distance to surface
522  //
523  Amg::Vector2D lp(atan2(y, x) * R, 0.);
524 
525  double d = bounds().minDistance(lp);
526  double sz = fabs(z) - bounds().halflengthZ();
527  if (sz <= 0.)
528  sz = 0.;
529  double dist = sr * sr + sz * sz;
530  if (d > 0.)
531  dist += ((d * d) * (sr / R + 1.));
532 
533  return {ns, sqrt(dist), true, s1, s2};
534 }
Trk::y
@ y
Definition: ParamDefs.h:62
beamspotman.r
def r
Definition: beamspotman.py:676
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
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:211
Trk::CylinderSurface::operator==
virtual bool operator==(const Surface &sf) const override
Equality operator.
Definition: CylinderSurface.cxx:179
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:126
Trk::z
@ z
global position (cartesian)
Definition: ParamDefs.h:63
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:223
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:125
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
hist_file_dump.d
d
Definition: hist_file_dump.py:137
Trk::locRPhi
@ locRPhi
Definition: ParamDefs.h:46
ALFA_EventTPCnv_Dict::t1
std::vector< ALFA_RawDataCollection_p1 > t1
Definition: ALFA_EventTPCnvDict.h:43
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:277
bound
@ bound
Definition: L1CaloPprPlotManager.h:74
Trk::Surface::NeutralTrackParametersUniquePtr
std::unique_ptr< ParametersBase< 5, Trk::Neutral > > NeutralTrackParametersUniquePtr
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:127
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
isValid
bool isValid(const T &p)
Definition: AtlasPID.h:214
Trk::RealQuadraticEquation::solutions
RQESolutionType solutions
Definition: TrkDetDescr/TrkSurfaces/TrkSurfaces/RealQuadraticEquation.h:56
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:238
Trk::CylinderSurface::straightLineDistanceEstimate
virtual DistanceSolution straightLineDistanceEstimate(const Amg::Vector3D &pos, const Amg::Vector3D &dir) const override
fast distance to Surface
Definition: CylinderSurface.cxx:377
skel.l2
l2
Definition: skel.GENtoEVGEN.py:426
Trk::Surface::m_transforms
std::unique_ptr< Transforms > m_transforms
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:436
Trk::Surface::s_onSurfaceTolerance
static constexpr double s_onSurfaceTolerance
Tolerance for being on Surface.
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:458
python.SystemOfUnits.sr
int sr
Definition: SystemOfUnits.py:113
Trk::locZ
@ locZ
local cylindrical
Definition: ParamDefs.h:48
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
Trk::CylinderSurface::m_bounds
SharedObject< const CylinderBounds > m_bounds
The global reference point (== a point on the surface)
Definition: CylinderSurface.h:290
ATH_FLATTEN
#define ATH_FLATTEN
Definition: inline_hints.h:52
Trk::theta
@ theta
Definition: ParamDefs.h:72
Trk::CylinderSurface::CylinderSurface
CylinderSurface()
Default Constructor.
Definition: CylinderSurface.cxx:22
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:190
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:149
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:115
charge
double charge(const T &p)
Definition: AtlasPID.h:494
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:263
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:534
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:129
python.SystemOfUnits.ns
int ns
Definition: SystemOfUnits.py:130
Trk::phi
@ phi
Definition: ParamDefs.h:81
skel.l1
l1
Definition: skel.GENtoEVGEN.py:425
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
Trk::x
@ x
Definition: ParamDefs.h:61
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:167
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
fitman.k
k
Definition: fitman.py:528
fitman.ay
ay
Definition: fitman.py:525