BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
KalmanFit::Lpar Class Reference

#include <Lpar.h>

Inheritance diagram for KalmanFit::Lpar:

Public Member Functions

 Lpar ()
virtual ~Lpar ()
const Lparoperator= (const Lpar &)
void neg ()
void circle (double x1, double y1, double x2, double y2, double x3, double y3)
double kappa () const
double radius () const
HepVector center () const
double s (double x, double y) const
double d (double x, double y) const
double dr (double x, double y) const
double s (double r, int dir=0) const
double phi (double r, int dir=0) const
int sd (double r, double x, double y, double limit, double &s, double &d) const
HepVector Hpar (const HepPoint3D &pivot) const
 Lpar ()
virtual ~Lpar ()
const Lparoperator= (const Lpar &)
void neg ()
void circle (double x1, double y1, double x2, double y2, double x3, double y3)
double kappa () const
double radius () const
HepVector center () const
double s (double x, double y) const
double d (double x, double y) const
double dr (double x, double y) const
double s (double r, int dir=0) const
double phi (double r, int dir=0) const
int sd (double r, double x, double y, double limit, double &s, double &d) const
HepVector Hpar (const HepPoint3D &pivot) const
 Lpar ()
virtual ~Lpar ()
const Lparoperator= (const Lpar &)
void neg ()
void circle (double x1, double y1, double x2, double y2, double x3, double y3)
double kappa () const
double radius () const
HepVector center () const
double s (double x, double y) const
double d (double x, double y) const
double dr (double x, double y) const
double s (double r, int dir=0) const
double phi (double r, int dir=0) const
int sd (double r, double x, double y, double limit, double &s, double &d) const
HepVector Hpar (const HepPoint3D &pivot) const

Friends

class Lpav
class Lpar::Cpar
std::ostream & operator<< (std::ostream &o, Lpar &s)
int intersect (const Lpar &lp1, const Lpar &lp2, HepVector &v1, HepVector &v2)
std::ostream & operator<< (std::ostream &o, Lpar &s)
int intersect (const Lpar &lp1, const Lpar &lp2, HepVector &v1, HepVector &v2)
std::ostream & operator<< (std::ostream &o, Lpar &s)
int intersect (const Lpar &lp1, const Lpar &lp2, HepVector &v1, HepVector &v2)

Detailed Description

Constructor & Destructor Documentation

◆ Lpar() [1/3]

Lpar::Lpar ( )
inline

Definition at line 156 of file InstallArea/x86_64-el9-gcc13-dbg/include/KalFitAlg/lpav/Lpar.h.

156 {
157 m_alpha = 0;
158 m_beta = 1;
159 m_gamma = 0;
160 m_kappa = 0;
161 }

Referenced by Hpar(), intersect, Lpar::Cpar, Lpav, operator<<, KalmanFit::Lpav::operator<<, operator=(), and KalmanFit::Lpav::operator=().

◆ ~Lpar() [1/3]

Lpar::~Lpar ( )
virtual

Definition at line 53 of file KalFitAlg/src/lpav/Lpar.cxx.

53{}

◆ Lpar() [2/3]

KalmanFit::Lpar::Lpar ( )

◆ ~Lpar() [2/3]

virtual KalmanFit::Lpar::~Lpar ( )
virtual

◆ Lpar() [3/3]

KalmanFit::Lpar::Lpar ( )

◆ ~Lpar() [3/3]

virtual KalmanFit::Lpar::~Lpar ( )
virtual

Member Function Documentation

◆ center() [1/3]

HepVector Lpar::center ( ) const

Definition at line 242 of file KalFitAlg/src/lpav/Lpar.cxx.

245 {
246#else
247 {
248 HepVector v( 3 );
249#endif
250 v( 1 ) = xc();
251 v( 2 ) = yc();
252 v( 3 ) = 0;
253 return ( v );
254 }
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
Definition KarLud.h:35

Referenced by intersect, and KalFitWire::z().

◆ center() [2/3]

HepVector KalmanFit::Lpar::center ( ) const

◆ center() [3/3]

HepVector KalmanFit::Lpar::center ( ) const

◆ circle() [1/3]

void Lpar::circle ( double x1,
double y1,
double x2,
double y2,
double x3,
double y3 )

Definition at line 76 of file KalFitAlg/src/lpav/Lpar.cxx.

76 {
77 double a;
78 double b;
79 double c;
80 double delta = ( x1 - x2 ) * ( y1 - y3 ) - ( y1 - y2 ) * ( x1 - x3 );
81 if ( delta == 0 )
82 {
83 //
84 // three points are on a line.
85 //
86 m_kappa = 0;
87 double r12sq = ( x1 - x2 ) * ( x1 - x2 ) + ( y1 - y2 ) * ( y1 - y2 );
88 if ( r12sq > 0 )
89 {
90 double r12 = sqrt( r12sq );
91 m_beta = -( x1 - x2 ) / r12;
92 m_alpha = ( y1 - y2 ) / r12;
93 m_gamma = -( m_alpha * x1 + m_beta * y1 );
94 }
95 else
96 {
97 double r13sq = ( x1 - x3 ) * ( x1 - x3 ) + ( y1 - y3 ) * ( y1 - y3 );
98 if ( r13sq > 0 )
99 {
100 double r13 = sqrt( r13sq );
101 m_beta = -( x1 - x3 ) / r13;
102 m_alpha = ( y1 - y3 ) / r13;
103 m_gamma = -( m_alpha * x3 + m_beta * y3 );
104 }
105 else
106 {
107 double r23sq = ( x2 - x3 ) * ( x2 - x3 ) + ( y2 - y3 ) * ( y2 - y3 );
108 if ( r23sq > 0 )
109 {
110 double r23 = sqrt( r23sq );
111 m_beta = -( x2 - x3 ) / r23;
112 m_alpha = ( y2 - y3 ) / r23;
113 m_gamma = -( m_alpha * x3 + m_beta * y3 );
114 }
115 else
116 {
117 m_alpha = 1;
118 m_beta = 0;
119 m_gamma = 0;
120 }
121 }
122 }
123 }
124 else
125 {
126 double r1sq = x1 * x1 + y1 * y1;
127 double r2sq = x2 * x2 + y2 * y2;
128 double r3sq = x3 * x3 + y3 * y3;
129 a = 0.5 * ( ( y1 - y3 ) * ( r1sq - r2sq ) - ( y1 - y2 ) * ( r1sq - r3sq ) ) / delta;
130 b = 0.5 * ( -( x1 - x3 ) * ( r1sq - r2sq ) + ( x1 - x2 ) * ( r1sq - r3sq ) ) / delta;
131 double csq = ( x1 - a ) * ( x1 - a ) + ( y1 - b ) * ( y1 - b );
132 c = sqrt( csq );
133 double csq2 = ( x2 - a ) * ( x2 - a ) + ( y2 - b ) * ( y2 - b );
134 double csq3 = ( x3 - a ) * ( x3 - a ) + ( y3 - b ) * ( y3 - b );
135 m_kappa = 1 / ( 2 * c );
136 m_alpha = -2 * a * m_kappa;
137 m_beta = -2 * b * m_kappa;
138 m_gamma = ( a * a + b * b - c * c ) * m_kappa;
139 }
140 }

◆ circle() [2/3]

void KalmanFit::Lpar::circle ( double x1,
double y1,
double x2,
double y2,
double x3,
double y3 )

◆ circle() [3/3]

void KalmanFit::Lpar::circle ( double x1,
double y1,
double x2,
double y2,
double x3,
double y3 )

◆ d() [1/3]

double Lpar::d ( double x,
double y ) const
inline

Definition at line 209 of file InstallArea/x86_64-el9-gcc13-dbg/include/KalFitAlg/lpav/Lpar.h.

209 {
210 double dd = d0( x, y );
211 const double approx_limit = 0.2;
212 if ( std::fabs( m_kappa * dd ) > approx_limit ) return -1;
213 return dd * ( 1 - m_kappa * dd );
214 }

Referenced by KalmanFit::Lpav::delta_chisq(), intersect, and sd().

◆ d() [2/3]

double KalmanFit::Lpar::d ( double x,
double y ) const
inline

◆ d() [3/3]

double KalmanFit::Lpar::d ( double x,
double y ) const
inline

◆ dr() [1/3]

double Lpar::dr ( double x,
double y ) const
inline

Definition at line 216 of file InstallArea/x86_64-el9-gcc13-dbg/include/KalFitAlg/lpav/Lpar.h.

216 {
217 double dx = xc() - x;
218 double dy = yc() - y;
219 double r = 0.5 / std::fabs( m_kappa );
220 return std::fabs( std::sqrt( dx * dx + dy * dy ) - r );
221 }

◆ dr() [2/3]

double KalmanFit::Lpar::dr ( double x,
double y ) const
inline

◆ dr() [3/3]

double KalmanFit::Lpar::dr ( double x,
double y ) const
inline

◆ Hpar() [1/3]

HepVector Lpar::Hpar ( const HepPoint3D & pivot) const
inline

Definition at line 273 of file InstallArea/x86_64-el9-gcc13-dbg/include/KalFitAlg/lpav/Lpar.h.

273 {
274 HepVector a( 5 );
275 double dd = d0( pivot.x(), pivot.y() );
276 a( 1 ) = dd * ( m_kappa * dd - 1 );
277 a( 2 ) = ( m_kappa > 0 ) ? std::atan2( yc() - pivot.y(), xc() - pivot.x() ) + M_PI
278 : std::atan2( pivot.y() - yc(), pivot.x() - xc() ) - M_PI;
279 a( 3 ) = -2.0 * BELLE_ALPHA * m_kappa;
280 a( 4 ) = 0;
281 a( 5 ) = 0;
282 return a;
283 }
#define M_PI
Definition TConstant.h:4

◆ Hpar() [2/3]

HepVector KalmanFit::Lpar::Hpar ( const HepPoint3D & pivot) const
inline

◆ Hpar() [3/3]

HepVector KalmanFit::Lpar::Hpar ( const HepPoint3D & pivot) const
inline

◆ kappa() [1/3]

double KalmanFit::Lpar::kappa ( ) const
inline

Definition at line 62 of file InstallArea/x86_64-el9-gcc13-dbg/include/KalFitAlg/lpav/Lpar.h.

62{ return m_kappa; }

Referenced by intersect, s(), and s().

◆ kappa() [2/3]

double KalmanFit::Lpar::kappa ( ) const
inline

Definition at line 62 of file InstallArea/x86_64-el9-gcc13-opt/include/KalFitAlg/lpav/Lpar.h.

62{ return m_kappa; }

◆ kappa() [3/3]

double KalmanFit::Lpar::kappa ( ) const
inline

Definition at line 62 of file Reconstruction/KalFitAlg/include/KalFitAlg/lpav/Lpar.h.

62{ return m_kappa; }

◆ neg() [1/3]

void Lpar::neg ( )
inline

Definition at line 198 of file InstallArea/x86_64-el9-gcc13-dbg/include/KalFitAlg/lpav/Lpar.h.

198 {
199 m_alpha = -m_alpha;
200 m_beta = -m_beta;
201 m_gamma = -m_gamma;
202 m_kappa = -m_kappa;
203 }

Referenced by KalmanFit::Lpav::calculate_lpar(), and KalmanFit::Lpav::calculate_lpar3().

◆ neg() [2/3]

void KalmanFit::Lpar::neg ( )
inline

◆ neg() [3/3]

void KalmanFit::Lpar::neg ( )
inline

◆ operator=() [1/3]

const Lpar & Lpar::operator= ( const Lpar & l)
inline

Definition at line 170 of file InstallArea/x86_64-el9-gcc13-dbg/include/KalFitAlg/lpav/Lpar.h.

170 {
171 if ( this != &l )
172 {
173 m_alpha = l.m_alpha;
174 m_beta = l.m_beta;
175 m_gamma = l.m_gamma;
176 m_kappa = l.m_kappa;
177 }
178 return *this;
179 }

Referenced by KalmanFit::Lpav::operator=().

◆ operator=() [2/3]

const Lpar & KalmanFit::Lpar::operator= ( const Lpar & )
inline

◆ operator=() [3/3]

const Lpar & KalmanFit::Lpar::operator= ( const Lpar & )
inline

◆ phi() [1/3]

double Lpar::phi ( double r,
int dir = 0 ) const

Definition at line 200 of file KalFitAlg/src/lpav/Lpar.cxx.

200 {
201 double x, y;
202 if ( !xy( r, x, y, dir ) ) return -1;
203 double p = atan2( y, x );
204 if ( p < 0 ) p += ( 2 * M_PI );
205 return p;
206 }

Referenced by KalmanFit::Lpav::extrapolate(), and sd().

◆ phi() [2/3]

double KalmanFit::Lpar::phi ( double r,
int dir = 0 ) const

◆ phi() [3/3]

double KalmanFit::Lpar::phi ( double r,
int dir = 0 ) const

◆ radius() [1/3]

double KalmanFit::Lpar::radius ( ) const
inline

Definition at line 63 of file InstallArea/x86_64-el9-gcc13-dbg/include/KalFitAlg/lpav/Lpar.h.

63{ return 0.5 / std::fabs( m_kappa ); }

Referenced by KalFitWire::z().

◆ radius() [2/3]

double KalmanFit::Lpar::radius ( ) const
inline

Definition at line 63 of file InstallArea/x86_64-el9-gcc13-opt/include/KalFitAlg/lpav/Lpar.h.

63{ return 0.5 / std::fabs( m_kappa ); }

◆ radius() [3/3]

double KalmanFit::Lpar::radius ( ) const
inline

Definition at line 63 of file Reconstruction/KalFitAlg/include/KalFitAlg/lpav/Lpar.h.

63{ return 0.5 / std::fabs( m_kappa ); }

◆ s() [1/6]

double Lpar::s ( double r,
int dir = 0 ) const

Definition at line 233 of file KalFitAlg/src/lpav/Lpar.cxx.

233 {
234 double d0 = da();
235 if ( fabs( r ) < fabs( d0 ) ) return -1;
236 double b = fabs( kappa() ) * sqrt( ( r * r - d0 * d0 ) / ( 1 + 2 * kappa() * d0 ) );
237 if ( fabs( b ) > 1 ) return -1;
238 if ( dir == 0 ) return asin( b ) / fabs( kappa() );
239 return ( M_PI - asin( b ) ) / fabs( kappa() );
240 }

◆ s() [2/6]

double KalmanFit::Lpar::s ( double r,
int dir = 0 ) const

◆ s() [3/6]

double KalmanFit::Lpar::s ( double r,
int dir = 0 ) const

◆ s() [4/6]

double Lpar::s ( double x,
double y ) const

Definition at line 221 of file KalFitAlg/src/lpav/Lpar.cxx.

221 {
222 double xh, yh, xx, yy;
223 xhyh( x, y, xh, yh );
224 double fk = fabs( kappa() );
225 if ( fk == 0 ) return 0;
226 yy = 2 * fk * ( alpha() * yh - beta() * xh );
227 xx = 2 * kappa() * ( alpha() * xh + beta() * yh ) + xi2();
228 double sp = atan2( yy, xx );
229 if ( sp < 0 ) sp += ( 2 * M_PI );
230 return sp / 2 / fk;
231 }
double alpha

Referenced by intersect, Lpar::Cpar, KalmanFit::Lpav::operator+=(), operator<<, KalmanFit::Lpav::operator=(), and sd().

◆ s() [5/6]

double KalmanFit::Lpar::s ( double x,
double y ) const

◆ s() [6/6]

double KalmanFit::Lpar::s ( double x,
double y ) const

◆ sd() [1/3]

int Lpar::sd ( double r,
double x,
double y,
double limit,
double & s,
double & d ) const
inline

Definition at line 253 of file InstallArea/x86_64-el9-gcc13-dbg/include/KalFitAlg/lpav/Lpar.h.

254 {
255 if ( ( x * yc() - y * xc() ) * m_kappa < 0 ) return 0;
256 double dd = d0( x, y );
257 d = dd * ( 1 - m_kappa * dd );
258 double d_cross_limit = d * limit;
259 if ( d_cross_limit < 0 || d_cross_limit > limit * limit ) return 0;
260
261 double rc = std::sqrt( m_alpha * m_alpha + m_beta * m_beta ) / ( 2 * m_kappa );
262 double rho = 1. / ( -2 * m_kappa );
263 double cosPhi = ( rc * rc + rho * rho - r * r ) / ( -2 * rc * rho );
264 double phi = std::acos( cosPhi );
265 s = std::fabs( rho ) * phi;
266 d *= r / ( std::fabs( rc ) * std::sin( phi ) );
267 if ( abs( d ) > abs( limit ) ) return 0;
268 d_cross_limit = d * limit;
269 if ( d_cross_limit > limit * limit ) return 0;
270 return 1;
271 }
double s(double x, double y) const
double phi(double r, int dir=0) const

◆ sd() [2/3]

int KalmanFit::Lpar::sd ( double r,
double x,
double y,
double limit,
double & s,
double & d ) const
inline

◆ sd() [3/3]

int KalmanFit::Lpar::sd ( double r,
double x,
double y,
double limit,
double & s,
double & d ) const
inline

◆ intersect [1/3]

int intersect ( const Lpar & lp1,
const Lpar & lp2,
HepVector & v1,
HepVector & v2 )
friend

Definition at line 256 of file KalFitAlg/src/lpav/Lpar.cxx.

256 {
257 HepVector cen1( lp1.center() );
258 HepVector cen2( lp2.center() );
259 double dx = cen1( 1 ) - cen2( 1 );
260 double dy = cen1( 2 ) - cen2( 2 );
261 double dc = sqrt( dx * dx + dy * dy );
262 if ( dc < fabs( 0.5 / lp1.kappa() ) + fabs( 0.5 / lp2.kappa() ) )
263 {
264 double a1 = std::sqrt( lp1.alpha() ) + std::sqrt( lp1.beta() );
265 double a2 = std::sqrt( lp2.alpha() ) + std::sqrt( lp2.beta() );
266 double a3 = lp1.alpha() * lp2.alpha() + lp1.beta() * lp2.beta();
267 double det = lp1.alpha() * lp2.beta() - lp1.beta() * lp2.alpha();
268 if ( fabs( det ) > 1e-12 )
269 {
270 double c1 = a2 * std::sqrt( lp1.kappa() ) + a1 * std::sqrt( lp2.kappa() ) -
271 2.0 * a3 * lp1.kappa() * lp2.kappa();
272 if ( c1 != 0 )
273 {
274 double cinv = 1.0 / c1;
275 double c2 = std::sqrt( a3 ) - 0.5 * ( a1 + a2 ) -
276 2.0 * a3 * ( lp1.gamma() * lp2.kappa() + lp2.gamma() * lp1.kappa() );
277 double c3 = a2 * std::sqrt( lp1.gamma() ) + a1 * std::sqrt( lp2.gamma() ) -
278 2.0 * a3 * lp1.gamma() * lp2.gamma();
279 double root = std::sqrt( c2 ) - 4.0 * c1 * c3;
280 if ( root >= 0 )
281 {
282 root = sqrt( root );
283 double rad2[2];
284 rad2[0] = 0.5 * cinv * ( -c2 - root );
285 rad2[1] = 0.5 * cinv * ( -c2 + root );
286 double ab1 = -( lp2.beta() * lp1.gamma() - lp1.beta() * lp2.gamma() );
287 double ab2 = ( lp2.alpha() * lp1.gamma() - lp1.alpha() * lp2.gamma() );
288 double ac1 = -( lp2.beta() * lp1.kappa() - lp1.beta() * lp2.kappa() );
289 double ac2 = ( lp2.alpha() * lp1.kappa() - lp1.alpha() * lp2.kappa() );
290 double dinv = 1.0 / det;
291 v1( 1 ) = dinv * ( ab1 + ac1 * rad2[0] );
292 v1( 2 ) = dinv * ( ab2 + ac2 * rad2[0] );
293 v1( 3 ) = 0;
294 v2( 1 ) = dinv * ( ab1 + ac1 * rad2[1] );
295 v2( 2 ) = dinv * ( ab2 + ac2 * rad2[1] );
296 v2( 3 ) = 0;
297 double d1 = lp1.d( v1( 1 ), v1( 2 ) );
298 double d2 = lp2.d( v1( 1 ), v1( 2 ) );
299 double d3 = lp1.d( v2( 1 ), v2( 2 ) );
300 double d4 = lp2.d( v2( 1 ), v2( 2 ) );
301 double r = sqrt( rad2[0] );
302 Lpar::Cpar cp1( lp1 );
303 Lpar::Cpar cp2( lp2 );
304 for ( int j = 0; j < 2; j++ )
305 {
306 double s1, s2;
307 if ( j == 0 )
308 {
309 s1 = lp1.s( v1( 1 ), v1( 2 ) );
310 s2 = lp2.s( v1( 1 ), v1( 2 ) );
311 }
312 else
313 {
314 s1 = lp1.s( v2( 1 ), v2( 2 ) );
315 s2 = lp2.s( v2( 1 ), v2( 2 ) );
316 }
317 double phi1 = cp1.fi() + 2 * cp1.cu() * s1;
318 double phi2 = cp2.fi() + 2 * cp2.cu() * s2;
319 double f = ( 1 + 2 * cp1.cu() * cp1.da() ) * ( 1 + 2 * cp2.cu() * cp2.da() ) *
320 cos( cp1.fi() - cp2.fi() );
321 f -= 2 * ( lp1.gamma() * lp2.kappa() + lp2.gamma() * lp1.kappa() );
322 double cosphi12 = f;
323 }
324 return 2;
325 }
326 }
327 }
328 }
329 return 0;
330 }
std::string root
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
Double_t phi2
Double_t phi1
int dc[18]
Definition EvtPycont.cc:63
double s(double x, double y) const
HepVector center() const

◆ intersect [2/3]

int intersect ( const Lpar & lp1,
const Lpar & lp2,
HepVector & v1,
HepVector & v2 )
friend

Definition at line 256 of file KalFitAlg/src/lpav/Lpar.cxx.

256 {
257 HepVector cen1( lp1.center() );
258 HepVector cen2( lp2.center() );
259 double dx = cen1( 1 ) - cen2( 1 );
260 double dy = cen1( 2 ) - cen2( 2 );
261 double dc = sqrt( dx * dx + dy * dy );
262 if ( dc < fabs( 0.5 / lp1.kappa() ) + fabs( 0.5 / lp2.kappa() ) )
263 {
264 double a1 = std::sqrt( lp1.alpha() ) + std::sqrt( lp1.beta() );
265 double a2 = std::sqrt( lp2.alpha() ) + std::sqrt( lp2.beta() );
266 double a3 = lp1.alpha() * lp2.alpha() + lp1.beta() * lp2.beta();
267 double det = lp1.alpha() * lp2.beta() - lp1.beta() * lp2.alpha();
268 if ( fabs( det ) > 1e-12 )
269 {
270 double c1 = a2 * std::sqrt( lp1.kappa() ) + a1 * std::sqrt( lp2.kappa() ) -
271 2.0 * a3 * lp1.kappa() * lp2.kappa();
272 if ( c1 != 0 )
273 {
274 double cinv = 1.0 / c1;
275 double c2 = std::sqrt( a3 ) - 0.5 * ( a1 + a2 ) -
276 2.0 * a3 * ( lp1.gamma() * lp2.kappa() + lp2.gamma() * lp1.kappa() );
277 double c3 = a2 * std::sqrt( lp1.gamma() ) + a1 * std::sqrt( lp2.gamma() ) -
278 2.0 * a3 * lp1.gamma() * lp2.gamma();
279 double root = std::sqrt( c2 ) - 4.0 * c1 * c3;
280 if ( root >= 0 )
281 {
282 root = sqrt( root );
283 double rad2[2];
284 rad2[0] = 0.5 * cinv * ( -c2 - root );
285 rad2[1] = 0.5 * cinv * ( -c2 + root );
286 double ab1 = -( lp2.beta() * lp1.gamma() - lp1.beta() * lp2.gamma() );
287 double ab2 = ( lp2.alpha() * lp1.gamma() - lp1.alpha() * lp2.gamma() );
288 double ac1 = -( lp2.beta() * lp1.kappa() - lp1.beta() * lp2.kappa() );
289 double ac2 = ( lp2.alpha() * lp1.kappa() - lp1.alpha() * lp2.kappa() );
290 double dinv = 1.0 / det;
291 v1( 1 ) = dinv * ( ab1 + ac1 * rad2[0] );
292 v1( 2 ) = dinv * ( ab2 + ac2 * rad2[0] );
293 v1( 3 ) = 0;
294 v2( 1 ) = dinv * ( ab1 + ac1 * rad2[1] );
295 v2( 2 ) = dinv * ( ab2 + ac2 * rad2[1] );
296 v2( 3 ) = 0;
297 double d1 = lp1.d( v1( 1 ), v1( 2 ) );
298 double d2 = lp2.d( v1( 1 ), v1( 2 ) );
299 double d3 = lp1.d( v2( 1 ), v2( 2 ) );
300 double d4 = lp2.d( v2( 1 ), v2( 2 ) );
301 double r = sqrt( rad2[0] );
302 Lpar::Cpar cp1( lp1 );
303 Lpar::Cpar cp2( lp2 );
304 for ( int j = 0; j < 2; j++ )
305 {
306 double s1, s2;
307 if ( j == 0 )
308 {
309 s1 = lp1.s( v1( 1 ), v1( 2 ) );
310 s2 = lp2.s( v1( 1 ), v1( 2 ) );
311 }
312 else
313 {
314 s1 = lp1.s( v2( 1 ), v2( 2 ) );
315 s2 = lp2.s( v2( 1 ), v2( 2 ) );
316 }
317 double phi1 = cp1.fi() + 2 * cp1.cu() * s1;
318 double phi2 = cp2.fi() + 2 * cp2.cu() * s2;
319 double f = ( 1 + 2 * cp1.cu() * cp1.da() ) * ( 1 + 2 * cp2.cu() * cp2.da() ) *
320 cos( cp1.fi() - cp2.fi() );
321 f -= 2 * ( lp1.gamma() * lp2.kappa() + lp2.gamma() * lp1.kappa() );
322 double cosphi12 = f;
323 }
324 return 2;
325 }
326 }
327 }
328 }
329 return 0;
330 }

◆ intersect [3/3]

int intersect ( const Lpar & lp1,
const Lpar & lp2,
HepVector & v1,
HepVector & v2 )
friend

Definition at line 256 of file KalFitAlg/src/lpav/Lpar.cxx.

256 {
257 HepVector cen1( lp1.center() );
258 HepVector cen2( lp2.center() );
259 double dx = cen1( 1 ) - cen2( 1 );
260 double dy = cen1( 2 ) - cen2( 2 );
261 double dc = sqrt( dx * dx + dy * dy );
262 if ( dc < fabs( 0.5 / lp1.kappa() ) + fabs( 0.5 / lp2.kappa() ) )
263 {
264 double a1 = std::sqrt( lp1.alpha() ) + std::sqrt( lp1.beta() );
265 double a2 = std::sqrt( lp2.alpha() ) + std::sqrt( lp2.beta() );
266 double a3 = lp1.alpha() * lp2.alpha() + lp1.beta() * lp2.beta();
267 double det = lp1.alpha() * lp2.beta() - lp1.beta() * lp2.alpha();
268 if ( fabs( det ) > 1e-12 )
269 {
270 double c1 = a2 * std::sqrt( lp1.kappa() ) + a1 * std::sqrt( lp2.kappa() ) -
271 2.0 * a3 * lp1.kappa() * lp2.kappa();
272 if ( c1 != 0 )
273 {
274 double cinv = 1.0 / c1;
275 double c2 = std::sqrt( a3 ) - 0.5 * ( a1 + a2 ) -
276 2.0 * a3 * ( lp1.gamma() * lp2.kappa() + lp2.gamma() * lp1.kappa() );
277 double c3 = a2 * std::sqrt( lp1.gamma() ) + a1 * std::sqrt( lp2.gamma() ) -
278 2.0 * a3 * lp1.gamma() * lp2.gamma();
279 double root = std::sqrt( c2 ) - 4.0 * c1 * c3;
280 if ( root >= 0 )
281 {
282 root = sqrt( root );
283 double rad2[2];
284 rad2[0] = 0.5 * cinv * ( -c2 - root );
285 rad2[1] = 0.5 * cinv * ( -c2 + root );
286 double ab1 = -( lp2.beta() * lp1.gamma() - lp1.beta() * lp2.gamma() );
287 double ab2 = ( lp2.alpha() * lp1.gamma() - lp1.alpha() * lp2.gamma() );
288 double ac1 = -( lp2.beta() * lp1.kappa() - lp1.beta() * lp2.kappa() );
289 double ac2 = ( lp2.alpha() * lp1.kappa() - lp1.alpha() * lp2.kappa() );
290 double dinv = 1.0 / det;
291 v1( 1 ) = dinv * ( ab1 + ac1 * rad2[0] );
292 v1( 2 ) = dinv * ( ab2 + ac2 * rad2[0] );
293 v1( 3 ) = 0;
294 v2( 1 ) = dinv * ( ab1 + ac1 * rad2[1] );
295 v2( 2 ) = dinv * ( ab2 + ac2 * rad2[1] );
296 v2( 3 ) = 0;
297 double d1 = lp1.d( v1( 1 ), v1( 2 ) );
298 double d2 = lp2.d( v1( 1 ), v1( 2 ) );
299 double d3 = lp1.d( v2( 1 ), v2( 2 ) );
300 double d4 = lp2.d( v2( 1 ), v2( 2 ) );
301 double r = sqrt( rad2[0] );
302 Lpar::Cpar cp1( lp1 );
303 Lpar::Cpar cp2( lp2 );
304 for ( int j = 0; j < 2; j++ )
305 {
306 double s1, s2;
307 if ( j == 0 )
308 {
309 s1 = lp1.s( v1( 1 ), v1( 2 ) );
310 s2 = lp2.s( v1( 1 ), v1( 2 ) );
311 }
312 else
313 {
314 s1 = lp1.s( v2( 1 ), v2( 2 ) );
315 s2 = lp2.s( v2( 1 ), v2( 2 ) );
316 }
317 double phi1 = cp1.fi() + 2 * cp1.cu() * s1;
318 double phi2 = cp2.fi() + 2 * cp2.cu() * s2;
319 double f = ( 1 + 2 * cp1.cu() * cp1.da() ) * ( 1 + 2 * cp2.cu() * cp2.da() ) *
320 cos( cp1.fi() - cp2.fi() );
321 f -= 2 * ( lp1.gamma() * lp2.kappa() + lp2.gamma() * lp1.kappa() );
322 double cosphi12 = f;
323 }
324 return 2;
325 }
326 }
327 }
328 }
329 return 0;
330 }

◆ Lpar::Cpar

Lpar::Cpar
friend

◆ Lpav

Lpav
friend

Definition at line 76 of file InstallArea/x86_64-el9-gcc13-dbg/include/KalFitAlg/lpav/Lpar.h.

Referenced by Hpar(), and Lpav.

◆ operator<< [1/3]

std::ostream & operator<< ( std::ostream & o,
Lpar & s )
friend

Definition at line 340 of file KalFitAlg/src/lpav/Lpar.cxx.

340 {
341 return o << " al=" << s.m_alpha << " be=" << s.m_beta << " ka=" << s.m_kappa
342 << " ga=" << s.m_gamma;
343 }

◆ operator<< [2/3]

std::ostream & operator<< ( std::ostream & o,
Lpar & s )
friend

Definition at line 340 of file KalFitAlg/src/lpav/Lpar.cxx.

340 {
341 return o << " al=" << s.m_alpha << " be=" << s.m_beta << " ka=" << s.m_kappa
342 << " ga=" << s.m_gamma;
343 }

◆ operator<< [3/3]

std::ostream & operator<< ( std::ostream & o,
Lpar & s )
friend

Definition at line 340 of file KalFitAlg/src/lpav/Lpar.cxx.

340 {
341 return o << " al=" << s.m_alpha << " be=" << s.m_beta << " ka=" << s.m_kappa
342 << " ga=" << s.m_gamma;
343 }

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