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