BOSS 7.0.1
BESIII Offline Software System
Loading...
Searching...
No Matches
HelixTraj.cxx
Go to the documentation of this file.
1// $Id: HelixTraj.cxx,v 1.4 2010/03/25 09:56:26 zhangy Exp $
2
3#include <assert.h>
4#include <math.h>
5#include <limits.h>
6
7#include "MdcGeom/Constants.h"
8#include "MdcGeom/BesAngle.h"
9#include "CLHEP/Geometry/Point3D.h"
10#include "CLHEP/Vector/ThreeVector.h"
11#include "CLHEP/Matrix/SymMatrix.h"
12#include "TrkBase/HelixTraj.h"
13#include "TrkBase/TrkVisitor.h"
14#include "TrkBase/TrkExchangePar.h"
15#include "MdcRecoUtil/DifNumber.h"
16#include "MdcRecoUtil/DifPoint.h"
17#include "MdcRecoUtil/DifVector.h"
18//#include "ErrLogger/ErrLog.h"
19
20using std::endl;
21using std::ostream;
22// Fix for some machines
23//
24#ifndef M_2PI
25#define M_2PI 2*M_PI
26#endif
27
28HelixTraj::HelixTraj(const HepVector& pvec, const HepSymMatrix& pcov,
29 double lowlim, double hilim, const HepPoint3D& refpoint) :
30 TrkSimpTraj(pvec, pcov, lowlim,hilim,refpoint)
31{
32 // Make sure the dimensions of the input matrix and vector are correct
33
34 if( pvec.num_row() != NHLXPRM || pcov.num_row() != NHLXPRM ){
35 std::cout<<"ErrMsg(fatal) "
36 << "HelixTraj: incorrect constructor vector/matrix dimension" << std::endl;
37 ::abort();
38 }
39
40 if (omega() == 0.0) parameters()->parameter()[omegaIndex] = 1.e-9;
41}
42
43
45 double lowlim, double hilim, const HepPoint3D& refpoint) :
46 TrkSimpTraj(inpar.params(), inpar.covariance(), lowlim,hilim,refpoint)
47{
48 if (omega() == 0.0) parameters()->parameter()[omegaIndex] = 1.e-9;
49}
50
52 double lowlim, double hilim, const HepPoint3D& refpoint) :
53 TrkSimpTraj(inpar, lowlim,hilim,refpoint)
54{
55 assert(inpar.parameter().num_row()==NHLXPRM);
56 if (omega() == 0.0) parameters()->parameter()[omegaIndex] = 1.e-9;
57}
58
60 : TrkSimpTraj(h.parameters()->parameter(), h.parameters()->covariance(),
61 h.lowRange(),h.hiRange(),h.referencePoint())
62{
63}
64
67{
68 return new HelixTraj(*this);
69}
70
73{
74 if( &h != this ){
76 _dtparams = *(h.parameters());
78 }
79 return *this;
80}
81
83{
84}
85
86double
87HelixTraj::z(const double& f) const
88{
89 return z0() + f*sinDip() + referencePoint().z();
90}
91
93HelixTraj::position( double f) const
94{
95 double cDip = cosDip();
96 double sDip = tanDip() * cDip;
97 double phi00 = parameters()->parameter()[phi0Index]; // Don't normalize
98 double ang = phi00 + cDip*f*omega();
99 double cang = cos(ang);
100 double sang = sin(ang);
101 double sphi0 = sin(phi00);
102 double cphi0 = cos(phi00);
103
104 return HepPoint3D((sang - sphi0)/omega() - d0()*sphi0+referencePoint().x(),
105 -(cang - cphi0)/omega() + d0()*cphi0+referencePoint().y(),
106 z0() + f*sDip +referencePoint().z());
107}
108
109Hep3Vector
110HelixTraj::direction( double f) const
111{
112 // Angle formed by tangent vector after
113 // being rotated 'arclength' around orbit.
114 double alpha = angle( f );
115 // Construct 3-D tangent vector of unit magnitude.
116 double cDip = cosDip();
117 return Hep3Vector ( cos(alpha)*cDip,
118 sin(alpha)*cDip,
119 cDip*tanDip() );
120}
121
122Hep3Vector
123HelixTraj::delDirect( double fltLen ) const
124{
125 double ang = angle(fltLen);
126 double cDip = cosDip();
127 double delX = -omega() * cDip * cDip * sin(ang);
128 double delY = omega() * cDip * cDip * cos(ang);
129 return Hep3Vector(delX, delY, 0.0);
130}
131
132double
133HelixTraj::distTo1stError(double s, double tol, int pathDir) const
134{
135// return sqrt(2.*tol/fabs(omega())*(1.+sqr(tanDip())));
136 return sqrt(2.*tol/fabs(omega())*(1.+tanDip()*tanDip()));
137}
138
139double
140HelixTraj::distTo2ndError(double s, double tol, int pathDir) const
141{
142// return sqrt(1.+sqr(tanDip()))*cbrt(6.*tol/sqr(omega()));
143 return sqrt(1.+tanDip()*tanDip())*cbrt(6.*tol/omega()*omega());
144}
145
146void
147HelixTraj::getInfo(double fltLen, HepPoint3D& pos, Hep3Vector& dir,
148 Hep3Vector& delDir) const
149{
150 // double ang = angle(fltLen);
151 double cDip = cosDip();
152 double sDip = tanDip() * cDip;
153 double phi00 = parameters()->parameter()[phi0Index]; // Don't normalize
154 double ang = phi00 + cDip*fltLen*omega();
155 double cang = cos(ang);
156 double sang = sin(ang);
157 double sphi0 = sin(phi00);
158 double cphi0 = cos(phi00);
159
160 double xt = (sang - sphi0)/omega() - d0()*sphi0 +
161 referencePoint().x();
162 double yt = -(cang - cphi0)/omega() + d0()*cphi0 +
163 referencePoint().y();
164 double zt = z0() + fltLen*sDip + referencePoint().z();
165 pos.setX(xt);
166 pos.setY(yt);
167 pos.setZ(zt);
168
169 dir.setX(cang * cDip);
170 dir.setY(sang * cDip);
171 dir.setZ(sDip);
172
173 double delX = -omega() * cDip * cDip * sang;
174 double delY = omega() * cDip * cDip * cang;
175 delDir.setX(delX);
176 delDir.setY(delY);
177 delDir.setZ(0.0);
178}
179
180void
181HelixTraj::getInfo( double fltLen, HepPoint3D& pos, Hep3Vector& dir ) const
182{
183 // double ang = angle(fltLen);
184 double cDip = cosDip();
185 double sDip = tanDip() * cDip;
186 double phi00 = parameters()->parameter()[phi0Index]; // Don't normalize
187 double ang = phi00 + cDip*fltLen*omega();
188 double cang = cos(ang);
189 double sang = sin(ang);
190 double sphi0 = sin(phi00);
191 double cphi0 = cos(phi00);
192
193 double xt = (sang - sphi0)/omega() - d0()*sphi0 +
194 referencePoint().x();
195 double yt = -(cang - cphi0)/omega() + d0()*cphi0 +
196 referencePoint().y();
197 double zt = z0() + fltLen*sDip + referencePoint().z();
198 pos.setX(xt);
199 pos.setY(yt);
200 pos.setZ(zt);
201
202 dir.setX(cang * cDip);
203 dir.setY(sang * cDip);
204 dir.setZ(sDip);
205}
206
207void HelixTraj::getDFInfo2(double flt, DifPoint& pos, DifVector& dir) const
208{
209 //Provides difNum version of information for calculation of derivatives.
210 // All arithmetic operations have been replaced by +=, etc. versions
211 // for speed.
212
213 // Create difNumber versions of parameters
214 DifNumber phi0Df(phi0(), phi0Index+1, NHLXPRM);
215 phi0Df.setIndepPar( parameters() );
216 DifNumber d0Df(d0(), d0Index+1, NHLXPRM);
217 d0Df.setIndepPar( parameters() );
218 DifNumber z0Df(z0(), z0Index+1, NHLXPRM);
219 z0Df.setIndepPar( parameters() );
220 DifNumber tanDipDf(tanDip(), tanDipIndex+1, NHLXPRM);
221 tanDipDf.setIndepPar( parameters() );
222 DifNumber omegaDf(omega(), omegaIndex+1, NHLXPRM);
223 omegaDf.setIndepPar( parameters() );
224
225 DifNumber dipDf = atan(tanDipDf);
226
227 static DifNumber cDip;
228 dipDf.cosAndSin(cDip, dir.z);
229 static DifNumber sinPhi0, cosPhi0;
230 phi0Df.cosAndSin(cosPhi0, sinPhi0);
231
232 bool lref = (referencePoint().x() != 0. || referencePoint().y() != 0. ||
233 referencePoint().z() != 0.);
234
235 DifNumber alphaDf = cDip;
236 alphaDf *= omegaDf;
237 alphaDf *= flt;
238 alphaDf += phi0Df;
239
240 // This is not the prettiest line imaginable for this operation:
242 // DifNumber sinAlpha, cosAlpha;
243 alphaDf.cosAndSin(dir.x, dir.y);
244
245 // DifNumber x = (sinAlpha - sinPhi0) / omegaDf - d0Df * sinPhi0 + px;
246 // DifNumber y = -(cosAlpha - cosPhi0) / omegaDf + d0Df * cosPhi0 + py;
247
248 pos.x = dir.y;
249 pos.x -= sinPhi0;
250 pos.x /= omegaDf;
251 DifNumber temp = d0Df;
252 temp *= sinPhi0;
253 pos.x -= temp;
254
255 pos.y = cosPhi0;
256 pos.y -= dir.x;
257 pos.y /= omegaDf;
258 temp = d0Df;
259 temp *= cosPhi0;
260 pos.y += temp;
261
262 pos.z = flt;
263 pos.z *= dir.z;
264 pos.z += z0Df;
265
266 if (lref) {
267 DifNumber px(referencePoint().x());
268 DifNumber py(referencePoint().y());
269 DifNumber pz(referencePoint().z());
270 pos.x += px;
271 pos.y += py;
272 pos.z += pz;
273 }
274
275 dir.x *= cDip;
276 dir.y *= cDip;
277}
278
279void
281 DifVector& delDir) const
282{
283 //Provides difNum version of information for calculation of derivatives.
284 // All arithmetic operations have been replaced by +=, etc. versions
285 // for speed.
286
287 // Create difNumber versions of parameters
288 DifNumber phi0Df(phi0(), phi0Index+1, NHLXPRM);
289 DifNumber d0Df(d0(), d0Index+1, NHLXPRM);
290 DifNumber z0Df(z0(), z0Index+1, NHLXPRM);
291 DifNumber tanDipDf(tanDip(), tanDipIndex+1, NHLXPRM);
292 DifNumber omegaDf(omega(), omegaIndex+1, NHLXPRM);
293 phi0Df.setIndepPar( parameters() );
294 d0Df.setIndepPar( parameters() );
295 z0Df.setIndepPar( parameters() );
296 tanDipDf.setIndepPar( parameters() );
297 omegaDf.setIndepPar( parameters() );
298 DifNumber dipDf = atan(tanDipDf);
299
300 static DifNumber cDip;
301 dipDf.cosAndSin(cDip, dir.z);
302 static DifNumber sinPhi0, cosPhi0;
303 phi0Df.cosAndSin(cosPhi0, sinPhi0);
304
305 bool lref = (referencePoint().x() != 0. || referencePoint().y() != 0. ||
306 referencePoint().z() != 0.);
307
308 DifNumber alphaDf = cDip;
309 alphaDf *= omegaDf;
310 alphaDf *= flt;
311 alphaDf += phi0Df;
312
313 // This is not the prettiest line imaginable for this operation:
315 // DifNumber sinAlpha, cosAlpha;
316 alphaDf.cosAndSin(dir.x, dir.y);
317
318 // DifNumber x = (sinAlpha - sinPhi0) / omegaDf - d0Df * sinPhi0 + px;
319 // DifNumber y = -(cosAlpha - cosPhi0) / omegaDf + d0Df * cosPhi0 + py;
320
321 pos.x = dir.y;
322 pos.x -= sinPhi0;
323 pos.x /= omegaDf;
324 DifNumber temp = d0Df;
325 temp *= sinPhi0;
326 pos.x -= temp;
327
328 pos.y = cosPhi0;
329 pos.y -= dir.x;
330 pos.y /= omegaDf;
331 temp = d0Df;
332 temp *= cosPhi0;
333 pos.y += temp;
334
335 pos.z = flt;
336 pos.z *= dir.z;
337 pos.z += z0Df;
338
339 if (lref) {
340 DifNumber px(referencePoint().x());
341 DifNumber py(referencePoint().y());
342 DifNumber pz(referencePoint().z());
343 pos.x += px;
344 pos.y += py;
345 pos.z += pz;
346 }
347
348 delDir.x = -omegaDf;
349 delDir.x *= cDip;
350 delDir.x *= cDip;
351 delDir.x *= dir.y;
352
353 delDir.y = omegaDf;
354 delDir.y *= cDip;
355 delDir.y *= cDip;
356 delDir.y *= dir.x;
357
358 delDir.z = 0.;
359
360 dir.x *= cDip;
361 dir.y *= cDip;
362}
363
364HepMatrix
365HelixTraj::derivDeflect(double fltlen,deflectDirection idirect) const
366{
367//
368// This function computes the column matrix of derrivatives for the change
369// in parameters for a change in the direction of a track at a point along
370// its flight, holding the momentum and position constant. The effects for
371// changes in 2 perpendicular directions (theta1 = dip and
372// theta2 = phi*cos(dip)) can sometimes be added, as scattering in these
373// are uncorrelated.
374//
375 HepMatrix ddflct(NHLXPRM,1);
376//
377// Compute some common things
378//
379 double omeg = omega();
380 double tand = tanDip();
381 double arcl = arc(fltlen);
382 double dx = cos(arcl);
383 double dy = sin(arcl);
384 double cosd = cosDip();
385 double darc = omeg*d0();
386//
387// Go through the parameters
388//
389 switch (idirect) {
390 case theta1:
391 ddflct(omegaIndex+1,1) = omeg*tand;
392// ddflct(tanDipIndex+1,1) = 1.0/sqr(cosd);
393 ddflct(tanDipIndex+1,1) = 1.0/(cosd*cosd);
394 ddflct(d0Index+1,1) = (1-dx)*tand/omeg;
395 ddflct(phi0Index+1,1) = -dy*tand/(1+darc);
396// ddflct(z0Index+1,1) = - translen(fltlen) - sqr(tand)*dy/(omeg*(1+darc));
397 ddflct(z0Index+1,1) = - translen(fltlen) - (tand*tand)*dy/(omeg*(1+darc));
398 break;
399 case theta2:
400 ddflct(omegaIndex+1,1) = 0;
401 ddflct(tanDipIndex+1,1) = 0;
402 ddflct(d0Index+1,1) = -dy/(cosd*omeg);
403 ddflct(phi0Index+1,1) = dx/(cosd*(1+darc));
404 ddflct(z0Index+1,1) = -tand*(1- dx/(1+darc))/(cosd*omeg);
405 break;
406 }
407
408 return ddflct;
409}
410
411
412HepMatrix
413HelixTraj::derivDisplace(double fltlen,deflectDirection idirect) const
414{
415//
416// This function computes the column matrix of derrivatives for the change
417// in parameters for a change in the position of a track at a point along
418// its flight, holding the momentum and direction constant. The effects for
419// changes in 2 perpendicular directions 'theta1' = (-sin(l)cos(p),-sin(l)sin(p),cos(l)) and
420// 'theta2' = (-sin(p),cos(p),0). These are by definition orthogonal and uncorrelated.
421// these displacements are correlated with the angular change above
422//
423 HepMatrix ddflct(NHLXPRM,1);
424//
425// Compute some common things
426//
427 double omeg = omega();
428 double tand = tanDip();
429 double arcl = arc(fltlen);
430 double dx = cos(arcl);
431 double dy = sin(arcl);
432 double cosd = cosDip();
433 double sind = sinDip();
434 double darc_1 = 1.0+omeg*d0();
435//
436// Go through the parameters
437//
438 switch (idirect) {
439 case theta1:
440 ddflct(omegaIndex+1,1) = 0.0;
441 ddflct(tanDipIndex+1,1) = 0.0;
442 ddflct(d0Index+1,1) = -sind*dy;
443 ddflct(phi0Index+1,1) = sind*dx*omeg/darc_1;
444 ddflct(z0Index+1,1) = sind*tand*dx/darc_1 + cosd;
445 break;
446 case theta2:
447 ddflct(omegaIndex+1,1) = 0;
448 ddflct(tanDipIndex+1,1) = 0;
449 ddflct(d0Index+1,1) = dx;
450 ddflct(phi0Index+1,1) = dy*omeg/darc_1;
451 ddflct(z0Index+1,1) = tand*dy/darc_1;
452 break;
453 }
454
455 return ddflct;
456}
457
458
459HepMatrix
460HelixTraj::derivPFract(double fltlen) const
461{
462//
463// This function computes the column matrix of derrivatives for the change
464// in parameters from a (fractional) change in the track momentum,
465// holding the direction and position constant. The momentum change can
466// come from energy loss or bfield inhomogeneities.
467//
468// For a helix, dp/P = -domega/omega,
469// dParam/d(domega/omega) = -omega*dParam/ddomega
470//
471 HepMatrix dmomfrac(NHLXPRM,1);
472//
473// Compute some common things
474
475 double omeg = omega();
476 double tand = tanDip();
477 double tranl = translen(fltlen);
478 double arcl = tranl*omeg;
479 double dx = cos(arcl);
480 double dy = sin(arcl);
481 double darc = omeg*d0();
482
483// Go through the parameters
484// omega
485 dmomfrac(omegaIndex+1,1) = -omeg;
486// tanDip
487 dmomfrac(tanDipIndex+1,1) = 0.0;
488// d0
489 dmomfrac(d0Index+1,1) = -(1-dx)/omeg;
490// phi0
491 dmomfrac(phi0Index+1,1) = dy/(1+darc);
492// z0
493 dmomfrac(z0Index+1,1) = -tand*(tranl-dy/((1+darc)*omeg));
494//
495 return dmomfrac;
496}
497
498double
500{
501// Compute the curvature as the magnitude of the 2nd derivative
502// of the position function with respect to the 3-d flight distance
503//
504 double cosd = cosDip();
505// return sqr(cosd)*fabs(omega());
506 return (cosd*cosd)*fabs(omega());
507}
508
509double
511{
512 return BesAngle(parameters()->parameter()[phi0Index]).rad();
513}
514
515void
516HelixTraj::paramFunc(const HepPoint3D& oldpoint,const HepPoint3D& newpoint,
517 const HepVector& oldvec,const HepSymMatrix& oldcov,
518 HepVector& newvec,HepSymMatrix& newcov,
519 double fltlen)
520{
521// copy the input parameter vector, in case the input and output are the same
522 HepVector parvec(oldvec);
523// start with the input: omega and tandip don't change
524 newvec = parvec;
525//
526 double delx = newpoint.x()-oldpoint.x();
527 double dely = newpoint.y()-oldpoint.y();
528 double delz = newpoint.z()-oldpoint.z();
529//
530 double rad = 1./parvec[omegaIndex];
531 double rad2 = rad*rad;
532 double delta = rad + parvec[d0Index];
533 double cos0 = cos(parvec[phi0Index]);
534 double sin0 = sin(parvec[phi0Index]);
535 double perp = delx*sin0-dely*cos0;
536 double para = delx*cos0+dely*sin0;
537 double tand = parvec[tanDipIndex];
538 double oldphi = parvec[phi0Index] +
539 fltlen*parvec[omegaIndex]/sqrt(1.+tand*tand);
540// delta
541 double newdelta2 = delta*delta + delx*delx + dely*dely +
542 2.0*delta*perp;
543// assume delta, newdelta have the same sign
544 double newdelta = delta>0 ? sqrt(newdelta2) : -sqrt(newdelta2);
545 double invdelta = 1.0/newdelta;
546 double invdelta2 = 1.0/newdelta2;
547// d0
548 newvec[d0Index] = newdelta - rad;
549// phi0; check that we don't get the wrong wrapping. Atan2 has 2Pi ambiguity, not pi
550 double newphi = atan2(sin0+delx/delta,cos0-dely/delta);
551 while(fabs(newphi - oldphi)>M_PI)
552 if(newphi > oldphi)
553 newphi -= M_2PI;
554 else
555 newphi += M_2PI;
556 newvec[phi0Index] = newphi;
557 double delphi = newphi-parvec[phi0Index];
558//z0
559 newvec[z0Index] += tand*rad*(delphi) - delz;
560// now covariance: first, compute the rotation matrix
561// start with 0: lots of terms are zero
562 static HepMatrix covrot(NHLXPRM,NHLXPRM,0);
563//
564// omega is diagonal
565 covrot(omegaIndex+1,omegaIndex+1) = 1.0;
566// tandip is diagonal
567 covrot(tanDipIndex+1,tanDipIndex+1) = 1.0;
568// d0
569 covrot(d0Index+1,omegaIndex+1) = rad2*(1.0 - invdelta*(delta + perp));
570 covrot(d0Index+1,d0Index+1) = invdelta*(delta + perp);
571 covrot(d0Index+1,phi0Index+1) = delta*para*invdelta;
572// phi0
573 covrot(phi0Index+1,omegaIndex+1) = rad2*para*invdelta2;
574 covrot(phi0Index+1,d0Index+1) = -para*invdelta2;
575 covrot(phi0Index+1,phi0Index+1) = delta*(delta + perp)*invdelta2;
576// z0
577 covrot(z0Index+1,omegaIndex+1) = tand*
578 (rad*covrot(phi0Index+1,omegaIndex+1) - rad2*delphi);
579 covrot(z0Index+1,d0Index+1) = tand*rad*covrot(phi0Index+1,d0Index+1);
580 covrot(z0Index+1,phi0Index+1) =
581 tand*rad*(covrot(phi0Index+1,phi0Index+1) - 1.0);
582 covrot(z0Index+1,tanDipIndex+1) = rad*delphi;
583 covrot(z0Index+1,z0Index+1) = 1.0;
584//
585// Apply the rotation
586 newcov = oldcov.similarity(covrot);
587// done
588}
589
590void
592{
593// Visitor access--just use the Visitor class member function
594 vis->trkVisitHelixTraj(this);
595}
596
597void
598HelixTraj::invertParams(TrkParams* params, std::vector<bool>& flags) const
599{
600 // Inverts parameters and returns true if the parameter inversion
601 // requires a change in sign of elements in the covariance matrix
602
603 for (unsigned iparam = 0; iparam < NHLXPRM; iparam++) {
604 switch ( iparam ) {
605 case d0Index: // changes sign
606 case omegaIndex: // changes sign
607 case tanDipIndex: // changes sign
608 params->parameter()[iparam] *= -1.0;
609 flags[iparam] = true;
610 break;
611 case phi0Index: // changes by pi, but covariance matrix shouldn't change
612 params->parameter()[iparam] =
613 BesAngle(params->parameter()[iparam] + Constants::pi);
614 flags[iparam] = false;
615 break;
616 case z0Index: // nochange
617 flags[iparam] = false;
618 }
619 }
620 return;
621}
622
623//yzhang
624/*int
625HelixTraj::nPar() const
626{
627 return NHLXPRM;
628}*/
629//zhangy
630double
631HelixTraj::angle(const double& f) const
632{
633 return BesAngle(phi0() + arc(f));
634}
635
636void
637HelixTraj::printAll(ostream& os) const
638{
639 os << "HelixTraj with range "
640 << lowRange() <<" to " << hiRange() << " and parameters " << endl
641 << "d0= " << d0() << " phi0= "
642 << phi0() << " omega= "
643 << omega() << " z0 = "
644 << z0() << " tanDip= "
645 << tanDip() << endl;
646}
647
648void
649HelixTraj::print(ostream& os) const
650{
651 Trajectory::print(os << "HelixTraj" );
652}
Double_t x[10]
const double alpha
#define M_2PI
Definition: HelixTraj.cxx:25
XmlRpcServer s
Definition: HelloServer.cpp:11
double sin(const BesAngle a)
double cos(const BesAngle a)
************Class m_ypar INTEGER m_KeyWgt INTEGER m_nphot INTEGER m_KeyGPS INTEGER m_IsBeamPolarized INTEGER m_EvtGenInterface DOUBLE PRECISION m_Emin DOUBLE PRECISION m_sphot DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_q2 DOUBLE PRECISION m_PolBeam2 DOUBLE PRECISION m_xErrPb *COMMON c_KK2f $ !CMS energy average $ !Spin Polarization vector first beam $ !Spin Polarization vector second beam $ !Beam energy spread[GeV] $ !minimum hadronization energy[GeV] $ !input parameters
Definition: KK2f.h:46
#define M_PI
Definition: TConstant.h:4
DifNumber & mod(double lo, double hi)
void cosAndSin(DifNumber &c, DifNumber &s) const
double curvature(double fltLen) const
Definition: HelixTraj.cxx:499
HelixTraj(const HepVector &, const HepSymMatrix &, double lowlim=-99999., double hilim=99999., const HepPoint3D &refpoint=_theOrigin)
Definition: HelixTraj.cxx:28
virtual ~HelixTraj()
Definition: HelixTraj.cxx:82
HepMatrix derivDeflect(double fltlen, deflectDirection) const
Definition: HelixTraj.cxx:365
HelixTraj * clone() const
Definition: HelixTraj.cxx:66
virtual void getDFInfo2(double fltLen, DifPoint &pos, DifVector &dir) const
Definition: HelixTraj.cxx:207
HepMatrix derivPFract(double fltlen) const
Definition: HelixTraj.cxx:460
virtual void print(std::ostream &os) const
virtual HepPoint3D position(double fltLen) const
Definition: HelixTraj.cxx:93
void invertParams(TrkParams *params, std::vector< bool > &flags) const
Definition: HelixTraj.cxx:598
virtual Hep3Vector delDirect(double) const
Definition: HelixTraj.cxx:123
HelixTraj & operator=(const HelixTraj &)
Definition: HelixTraj.cxx:72
virtual void printAll(std::ostream &os) const
virtual double distTo2ndError(double s, double tol, int pathDir) const
Definition: HelixTraj.cxx:140
HepMatrix derivDisplace(double fltlen, deflectDirection idir) const
Definition: HelixTraj.cxx:413
virtual void getDFInfo(double fltLen, DifPoint &, DifVector &dir, DifVector &delDir) const
Definition: HelixTraj.cxx:280
virtual void getInfo(double fltLen, HepPoint3D &pos, Hep3Vector &dir) const
Definition: HelixTraj.cxx:181
double phi0() const
Definition: HelixTraj.cxx:510
virtual double distTo1stError(double s, double tol, int pathDir) const
Definition: HelixTraj.cxx:133
virtual void visitAccept(TrkVisitor *vis) const
Definition: HelixTraj.cxx:591
virtual Hep3Vector direction(double fltLen) const
Definition: HelixTraj.cxx:110
virtual void print(std::ostream &os) const
Trajectory & operator=(const Trajectory &)
Definition: Trajectory.cxx:86
const HepPoint3D & referencePoint() const
virtual void trkVisitHelixTraj(const HelixTraj *)=0