LArSoft  v06_85_00
Liquid Argon Software toolkit - http://larsoft.org/
trkf::SurfWireLine Class Reference

#include "SurfWireLine.h"

Inheritance diagram for trkf::SurfWireLine:
trkf::SurfYZLine trkf::SurfLine trkf::Surface

Public Types

enum  TrackDirection { FORWARD, BACKWARD, UNKNOWN }
 Track direction enum. More...
 

Public Member Functions

 SurfWireLine (const geo::WireID &wireid, double x)
 Constructor. More...
 
virtual ~SurfWireLine ()
 Destructor. More...
 
double x0 () const
 X origin. More...
 
double y0 () const
 Y origin. More...
 
double z0 () const
 Z origin. More...
 
double phi () const
 Rotation angle about x-axis. More...
 
virtual Surfaceclone () const
 Clone method. More...
 
virtual bool isTrackValid (const TrackVector &vec) const
 Surface-specific tests of validity of track parameters. More...
 
virtual void toLocal (const double xyz[3], double uvw[3]) const
 Transform global to local coordinates. More...
 
virtual void toGlobal (const double uvw[3], double xyz[3]) const
 Transform local to global coordinates. More...
 
virtual TrackVector getDiff (const TrackVector &vec1, const TrackVector &vec2) const
 Calculate difference of two track parameter vectors. More...
 
virtual void getPosition (const TrackVector &vec, double xyz[3]) const
 Get position of track. More...
 
virtual void getMomentum (const TrackVector &vec, double mom[3], TrackDirection dir=UNKNOWN) const
 Get momentum vector of track. More...
 
virtual bool isParallel (const Surface &surf) const
 Test whether two surfaces are parallel, within tolerance. More...
 
virtual double distanceTo (const Surface &surf) const
 Find perpendicular distance to a parallel surface. More...
 
virtual bool isEqual (const Surface &surf) const
 Test two surfaces for equality, within tolerance. More...
 
virtual std::ostream & Print (std::ostream &out) const
 Printout. More...
 
double PointingError (const TrackVector &vec, const TrackError &err) const
 Get pointing error of track. More...
 
void getStartingError (TrackError &err) const
 Get starting error matrix for Kalman filter. More...
 
virtual TrackDirection getDirection (const TrackVector &, TrackDirection dir=UNKNOWN) const
 Get direction of track (default UNKNOWN). More...
 

Detailed Description

Definition at line 23 of file SurfWireLine.h.

Member Enumeration Documentation

Track direction enum.

Enumerator
FORWARD 
BACKWARD 
UNKNOWN 

Definition at line 56 of file Surface.h.

Constructor & Destructor Documentation

trkf::SurfWireLine::SurfWireLine ( const geo::WireID wireid,
double  x 
)

Constructor.

Constructor.

Arguments:

wireid - Wire id. x - X coordinate.

Definition at line 25 of file SurfWireLine.cxx.

References geo::WireGeo::GetCenter(), trkf::SurfYZLine::phi(), trkf::SurfYZLine::SurfYZLine(), geo::WireGeo::ThetaZ(), and geo::GeometryCore::WireIDToWireGeo().

26  {
27  // Get geometry service.
28 
30 
31  // Get wire geometry.
32 
33  geo::WireGeo const& wgeom = geom->WireIDToWireGeo(wireid);
34 
35  // Get wire center and angle from the wire geometry.
36  // Put local origin at center of wire.
37 
38  double xyz[3] = {0.};
39  wgeom.GetCenter(xyz);
40  double phi = TMath::PiOver2() - wgeom.ThetaZ();
41 
42  // Update base class.
43 
44  *static_cast<SurfYZLine*>(this) = SurfYZLine(x, xyz[1], xyz[2], phi);
45  }
Float_t x
Definition: compare.C:6
Geometry description of a TPC wireThe wire is a single straight segment on a wire plane...
Definition: WireGeo.h:61
double ThetaZ() const
Returns angle of wire with respect to z axis in the Y-Z plane in radians.
Definition: WireGeo.h:192
double phi() const
Rotation angle about x-axis.
Definition: SurfYZLine.h:95
void GetCenter(double *xyz, double localz=0.0) const
Fills the world coordinate of a point on the wire.
Definition: WireGeo.cxx:68
SurfYZLine()
Default constructor.
Definition: SurfYZLine.cxx:25
WireGeo const & WireIDToWireGeo(geo::WireID const &wireid) const
Returns the specified wire.
trkf::SurfWireLine::~SurfWireLine ( )
virtual

Destructor.

Definition at line 48 of file SurfWireLine.cxx.

49  {}

Member Function Documentation

Surface * trkf::SurfYZLine::clone ( ) const
virtualinherited

Clone method.

Implements trkf::Surface.

Definition at line 51 of file SurfYZLine.cxx.

References trkf::SurfYZLine::SurfYZLine().

Referenced by trkf::SurfYZLine::phi().

52  {
53  return new SurfYZLine(*this);
54  }
SurfYZLine()
Default constructor.
Definition: SurfYZLine.cxx:25
double trkf::SurfYZLine::distanceTo ( const Surface surf) const
virtualinherited

Find perpendicular distance to a parallel surface.

Find perpendicular distance to a parallel surface.

Throw an exception if the other surface is not parallel.

Arguments:

surf - Other surface.

Returned value: Distance.

Implements trkf::Surface.

Definition at line 237 of file SurfYZLine.cxx.

References trkf::SurfYZLine::isParallel(), trkf::Surface::toGlobal(), and trkf::SurfYZLine::toLocal().

Referenced by trkf::SurfYZLine::phi().

238  {
239  // Check if the other surface is parallel to this one.
240 
241  bool parallel = isParallel(surf);
242  if(!parallel)
243  throw cet::exception("SurfYZLine") << "Attempt to find distance to non-parallel surface.\n";
244 
245  // Find the origin of the other surface in global coordinates,
246  // then convert to our local coordinates.
247 
248  double otheruvw[3] = {0., 0., 0.};
249  double xyz[3];
250  double myuvw[3];
251  surf.toGlobal(otheruvw, xyz);
252  toLocal(xyz, myuvw);
253 
254  // Distance of v-axis to other surface origin.
255 
256  return std::hypot(myuvw[0], myuvw[2]);
257  }
virtual void toLocal(const double xyz[3], double uvw[3]) const
Transform global to local coordinates.
Definition: SurfYZLine.cxx:71
virtual bool isParallel(const Surface &surf) const
Test whether two surfaces are parallel, within tolerance.
Definition: SurfYZLine.cxx:208
cet::coded_exception< error, detail::translate > exception
Definition: exception.h:33
TrackVector trkf::SurfYZLine::getDiff ( const TrackVector vec1,
const TrackVector vec2 
) const
virtualinherited

Calculate difference of two track parameter vectors.

Calculate difference of two track parameter vectors, taking into account phi wrap.

Arguments:

vec1 - First vector. vec2 - Second vector.

Returns: vec1 - vec2

Reimplemented from trkf::Surface.

Definition at line 117 of file SurfYZLine.cxx.

Referenced by trkf::SurfYZLine::phi().

118  {
119  TrackVector result = vec1 - vec2;
120  while(result(2) <= -TMath::Pi())
121  result(2) += TMath::TwoPi();
122  while(result(2) > TMath::Pi())
123  result(2) -= TMath::TwoPi();
124  return result;
125  }
KVector< 5 >::type TrackVector
Track state vector, dimension 5.
virtual TrackDirection trkf::Surface::getDirection ( const TrackVector ,
TrackDirection  dir = UNKNOWN 
) const
inlinevirtualinherited
void trkf::SurfYZLine::getMomentum ( const TrackVector vec,
double  mom[3],
TrackDirection  dir = UNKNOWN 
) const
virtualinherited

Get momentum vector of track.

Get momentum vector of track.

Arguments:

vec - Track state vector. mom - Momentum vector in global coordinate system. dir - Track direction (ignored).

Implements trkf::Surface.

Definition at line 161 of file SurfYZLine.cxx.

References e, trkf::SurfYZLine::fPhi, max, and trkf::SurfYZLine::phi().

Referenced by trkf::SurfYZLine::phi().

163  {
164 
165  // Get momentum.
166 
167  double invp = std::abs(vec(4));
168  double p = 1. / std::max(invp, 1.e-3); // Capped at 1000. GeV/c.
169 
170  // Get track direction parameters.
171 
172  double phi = vec(2);
173  double eta = vec(3);
174 
175  double sinphi = std::sin(phi);
176  double cosphi = std::cos(phi);
177  double sh = 1./std::cosh(eta); // sech(eta)
178  double th = std::tanh(eta);
179 
180  // Calculate momentum vector in local coordinate system.
181 
182  double pu = p * cosphi * sh;
183  double pv = p * th;
184  double pw = p * sinphi * sh;
185 
186  // Rotate momentum to global coordinte system.
187 
188  double sinfphi = std::sin(fPhi);
189  double cosfphi = std::cos(fPhi);
190 
191  mom[0] = pu;
192  mom[1] = pv * cosfphi - pw * sinfphi;
193  mom[2] = pv * sinfphi + pw * cosfphi;
194 
195  return;
196  }
Int_t max
Definition: plot.C:27
double phi() const
Rotation angle about x-axis.
Definition: SurfYZLine.h:95
double fPhi
Rotation angle about x-axis.
Definition: SurfYZLine.h:143
Float_t e
Definition: plot.C:34
void trkf::SurfYZLine::getPosition ( const TrackVector vec,
double  xyz[3] 
) const
virtualinherited

Get position of track.

Get position of track.

Arguments:

vec - Track state vector. xyz - Position in global coordinate system.

Implements trkf::Surface.

Definition at line 134 of file SurfYZLine.cxx.

References trkf::SurfYZLine::phi(), and trkf::SurfYZLine::toGlobal().

Referenced by trkf::SurfYZLine::phi().

135  {
136  // Get position in local coordinate system.
137 
138  double phi = vec(2);
139  double sinphi = std::sin(phi);
140  double cosphi = std::cos(phi);
141 
142  double uvw[3];
143  uvw[0] = -vec(0) * sinphi;
144  uvw[1] = vec(1);
145  uvw[2] = vec(0) * cosphi;
146 
147  // Transform to global coordinate system.
148 
149  toGlobal(uvw, xyz);
150  return;
151  }
virtual void toGlobal(const double uvw[3], double xyz[3]) const
Transform local to global coordinates.
Definition: SurfYZLine.cxx:93
double phi() const
Rotation angle about x-axis.
Definition: SurfYZLine.h:95
void trkf::SurfLine::getStartingError ( TrackError err) const
virtualinherited

Get starting error matrix for Kalman filter.

Get starting error matrix for Kalman filter.

Arguments:

err - Error matrix.

Implements trkf::Surface.

Definition at line 92 of file SurfLine.cxx.

92  {
93  err.resize(5, false);
94  err.clear();
95  err(0, 0) = 1000.;
96  err(1, 1) = 1000.;
97  err(2, 2) = 10.;
98  err(3, 3) = 10.;
99  err(4, 4) = 10.;
100  }
bool trkf::SurfYZLine::isEqual ( const Surface surf) const
virtualinherited

Test two surfaces for equality, within tolerance.

Test two surfaces for equality, within tolerance. Here equal is defined as having all surface parameters the same, not just having the surfaces coincide spatially, so that the local coordinate systems are the same between the two surfaces.

Arguments:

surf - Other surface.

Returned values: true if equal.

Implements trkf::Surface.

Definition at line 270 of file SurfYZLine.cxx.

References trkf::SurfYZLine::fPhi, trkf::SurfYZLine::fPhiTolerance, trkf::SurfYZLine::fSepTolerance, trkf::SurfYZLine::fX0, trkf::SurfYZLine::fY0, trkf::SurfYZLine::fZ0, trkf::SurfYZLine::phi(), trkf::SurfYZLine::x0(), trkf::SurfYZLine::y0(), and trkf::SurfYZLine::z0().

Referenced by trkf::KHitWireLine::KHitWireLine(), and trkf::SurfYZLine::phi().

271  {
272  bool result = false;
273 
274  // Test if the other surface is a SurfYZLine.
275 
276  const SurfYZLine* psurf = dynamic_cast<const SurfYZLine*>(&surf);
277  if(psurf != 0) {
278 
279  // Test whether surface parameters are the same within tolerance.
280 
281  double delta_phi = TVector2::Phi_mpi_pi(fPhi - psurf->phi());
282  double dx = fX0 - psurf->x0();
283  double dy = fY0 - psurf->y0();
284  double dz = fZ0 - psurf->z0();
285  if(std::abs(delta_phi) <= fPhiTolerance &&
286  std::abs(dx) <= fSepTolerance &&
287  std::abs(dy) <= fSepTolerance &&
288  std::abs(dz) <= fSepTolerance)
289  result = true;
290  }
291  return result;
292  }
double fX0
X origin.
Definition: SurfYZLine.h:140
static double fPhiTolerance
Phi tolerance for parallel.
Definition: SurfYZLine.h:135
static double fSepTolerance
Separation tolerance for equal.
Definition: SurfYZLine.h:136
double fZ0
Z origin.
Definition: SurfYZLine.h:142
double fY0
Y origin.
Definition: SurfYZLine.h:141
double fPhi
Rotation angle about x-axis.
Definition: SurfYZLine.h:143
SurfYZLine()
Default constructor.
Definition: SurfYZLine.cxx:25
bool trkf::SurfYZLine::isParallel ( const Surface surf) const
virtualinherited

Test whether two surfaces are parallel, within tolerance.

Test whether two surfaces are parallel, within tolerance. This method will only return true if the other surface is a SurfYZLine.

Arguments:

surf - Other surface.

Returned value: true if parallel.

Implements trkf::Surface.

Definition at line 208 of file SurfYZLine.cxx.

References trkf::SurfYZLine::fPhi, trkf::SurfYZLine::fPhiTolerance, and trkf::SurfYZLine::phi().

Referenced by trkf::SurfYZLine::distanceTo(), and trkf::SurfYZLine::phi().

209  {
210  bool result = false;
211 
212  // Test if the other surface is a SurfYZLine.
213 
214  const SurfYZLine* psurf = dynamic_cast<const SurfYZLine*>(&surf);
215  if(psurf != 0) {
216 
217  // Test whether surface angle parameters are the same
218  // within tolerance.
219 
220  double delta_phi = TVector2::Phi_mpi_pi(fPhi - psurf->phi());
221  if(std::abs(delta_phi) <= fPhiTolerance)
222  result = true;
223  }
224  return result;
225  }
static double fPhiTolerance
Phi tolerance for parallel.
Definition: SurfYZLine.h:135
double fPhi
Rotation angle about x-axis.
Definition: SurfYZLine.h:143
SurfYZLine()
Default constructor.
Definition: SurfYZLine.cxx:25
bool trkf::SurfYZLine::isTrackValid ( const TrackVector vec) const
virtualinherited

Surface-specific tests of validity of track parameters.

Implements trkf::Surface.

Definition at line 57 of file SurfYZLine.cxx.

Referenced by trkf::SurfYZLine::phi().

58  {
59  // Limit allowed range of eta parameter.
60 
61  return std::abs(vec(3)) < 10.;
62  }
double trkf::SurfLine::PointingError ( const TrackVector vec,
const TrackError err 
) const
virtualinherited

Get pointing error of track.

Get pointing error of track.

Arguments:

vec - Track parameters. err - Track error matrix.

Returns: Pointing error.

This method calculates the track pointing error based on the slope track paramers and errors (parameters 2 and 3).

Implements trkf::Surface.

Definition at line 36 of file SurfLine.cxx.

37  {
38  // Get slope parameters and error matrix.
39 
40  double phi = vec(2);
41  double eta = vec(3);
42  double epp = err(2, 2); // sigma^2(phi,phi)
43  double ehh = err(3, 3); // sigma^2(eta,eta)
44  double ehp = err(3, 2); // sigma^2(eta,phi)
45 
46  // Calculate error matrix of pointing unit vector in some coordinate system.
47 
48  double sh = 1./std::cosh(eta); // sech(eta)
49  double sh2 = sh*sh;
50  double sh3 = sh*sh2;
51  double sh4 = sh*sh3;
52 
53  double th = std::tanh(eta);
54  double th2 = th*th;
55 
56  double cphi = std::cos(phi);
57  double cphi2 = cphi*cphi;
58 
59  double sphi = std::sin(phi);
60  double sphi2 = sphi*sphi;
61 
62  double vxx = sh2*th2*cphi2 * ehh + sh2*sphi2 * epp + 2.*sh2*th*sphi*cphi * ehp;
63  double vyy = sh2*th2*sphi2 * ehh + sh2*cphi2 * epp - 2.*sh2*th*sphi*cphi * ehp;
64  double vzz = sh4 * epp;
65 
66  double vxy = sh2*th2*sphi*cphi * ehh - sh2*sphi*cphi * epp - sh2*th*(cphi2-sphi2) * ehp;
67  double vyz = -sh3*th*sphi * ehh + sh3*cphi * ehp;
68  double vxz = -sh3*th*cphi * ehh - sh3*sphi * ehp;
69 
70  // For debugging. The determinant of the error matrix should be zero.
71 
72  // double det = vxx*vyy*vzz + 2.*vxy*vyz*vxz - vxx*vyz*vyz - vyy*vxz*vxz - vzz*vxy*vxy;
73 
74  // Calculate square root of the largest eigenvalue of error matrix.
75 
76  double ddd2 = vxx*vxx + vyy*vyy + vzz*vzz
77  - 2.*vxx*vyy - 2.*vxx*vzz - 2.*vyy*vzz
78  + 4.*vxy*vxy + 4.*vyz*vyz + 4.*vxz*vxz;
79  double ddd = sqrt(ddd2 > 0. ? ddd2 : 0.);
80  double lambda2 = 0.5 * ( vxx + vyy + vzz + ddd);
81  double lambda = sqrt(lambda2 > 0. ? lambda2 : 0.);
82 
83  return lambda;
84  }
std::ostream & trkf::SurfYZLine::Print ( std::ostream &  out) const
virtualinherited

Printout.

Implements trkf::Surface.

Definition at line 295 of file SurfYZLine.cxx.

References trkf::SurfYZLine::fPhi, trkf::SurfYZLine::fX0, trkf::SurfYZLine::fY0, and trkf::SurfYZLine::fZ0.

Referenced by trkf::SurfYZLine::phi().

296  {
297  out << "SurfYZLine{ x0=" << fX0 << ", y0=" << fY0 << ", z0=" << fZ0 << ", phi=" << fPhi << "}";
298  return out;
299  }
double fX0
X origin.
Definition: SurfYZLine.h:140
double fZ0
Z origin.
Definition: SurfYZLine.h:142
double fY0
Y origin.
Definition: SurfYZLine.h:141
double fPhi
Rotation angle about x-axis.
Definition: SurfYZLine.h:143
void trkf::SurfYZLine::toGlobal ( const double  uvw[3],
double  xyz[3] 
) const
virtualinherited

Transform local to global coordinates.

Transform local to global coordinates.

Arguments:

uvw - Cartesian coordinates in local coordinate system. xyz - Cartesian coordinates in global coordinate system.

Implements trkf::Surface.

Definition at line 93 of file SurfYZLine.cxx.

References trkf::SurfYZLine::fPhi, trkf::SurfYZLine::fX0, trkf::SurfYZLine::fY0, and trkf::SurfYZLine::fZ0.

Referenced by trkf::SurfYZLine::getPosition(), and trkf::SurfYZLine::phi().

94  {
95  double sinphi = std::sin(fPhi);
96  double cosphi = std::cos(fPhi);
97 
98  // x = x0 + u
99  xyz[0] = fX0 + uvw[0];
100 
101  // y = y0 + v*cos(phi) - w*sin(phi)
102  xyz[1] = fY0 + uvw[1] * cosphi - uvw[2] * sinphi;
103 
104  // z = z0 + v*sin(phi) + w*cos(phi)
105  xyz[2] = fZ0 + uvw[1] * sinphi + uvw[2] * cosphi;
106  }
double fX0
X origin.
Definition: SurfYZLine.h:140
double fZ0
Z origin.
Definition: SurfYZLine.h:142
double fY0
Y origin.
Definition: SurfYZLine.h:141
double fPhi
Rotation angle about x-axis.
Definition: SurfYZLine.h:143
void trkf::SurfYZLine::toLocal ( const double  xyz[3],
double  uvw[3] 
) const
virtualinherited

Transform global to local coordinates.

Transform global to local coordinates.

Arguments:

xyz - Cartesian coordinates in global coordinate system. uvw - Cartesian coordinates in local coordinate system.

Implements trkf::Surface.

Definition at line 71 of file SurfYZLine.cxx.

References trkf::SurfYZLine::fPhi, trkf::SurfYZLine::fX0, trkf::SurfYZLine::fY0, and trkf::SurfYZLine::fZ0.

Referenced by trkf::SurfYZLine::distanceTo(), and trkf::SurfYZLine::phi().

72  {
73  double sinphi = std::sin(fPhi);
74  double cosphi = std::cos(fPhi);
75 
76  // u = x-x0
77  uvw[0] = xyz[0] - fX0;
78 
79  // v = (y-y0)*cos(phi) + (z-z0)*sin(phi)
80  uvw[1] = (xyz[1] - fY0) * cosphi + (xyz[2] - fZ0) * sinphi;
81 
82  // w = -(y-y0)*sin(phi) + (z-z0)*cos(phi)
83  uvw[2] = -(xyz[1] - fY0) * sinphi + (xyz[2] - fZ0) * cosphi;
84  }
double fX0
X origin.
Definition: SurfYZLine.h:140
double fZ0
Z origin.
Definition: SurfYZLine.h:142
double fY0
Y origin.
Definition: SurfYZLine.h:141
double fPhi
Rotation angle about x-axis.
Definition: SurfYZLine.h:143
double trkf::SurfYZLine::x0 ( ) const
inlineinherited

X origin.

Definition at line 92 of file SurfYZLine.h.

References trkf::SurfYZLine::fX0.

Referenced by trkf::SurfYZLine::isEqual(), and trkf::PropYZLine::short_vec_prop().

double trkf::SurfYZLine::y0 ( ) const
inlineinherited

Y origin.

Definition at line 93 of file SurfYZLine.h.

References trkf::SurfYZLine::fY0.

Referenced by trkf::SurfYZLine::isEqual(), and trkf::PropYZLine::short_vec_prop().

double trkf::SurfYZLine::z0 ( ) const
inlineinherited

Z origin.

Definition at line 94 of file SurfYZLine.h.

References trkf::SurfYZLine::fZ0.

Referenced by trkf::SurfYZLine::isEqual(), and trkf::PropYZLine::short_vec_prop().


The documentation for this class was generated from the following files: