#include <iostream>
#include <cmath>
#include "KalFitAlg/lpav/Lpar.h"
Go to the source code of this file.
Functions | |
int | intersect (const Lpar &lp1, const Lpar &lp2, HepVector &v1, HepVector &v2) |
std::ostream & | operator<< (std::ostream &o, Lpar &s) |
Definition at line 242 of file Lpar.cxx.
References Lpar::alpha(), Lpar::beta(), Lpar::center(), cos(), Lpar::d(), dc, Lpar::gamma(), ganga-rec::j, Lpar::kappa(), phi1, phi2, root, and Lpar::s().
00242 { 00243 HepVector cen1(lp1.center()); 00244 HepVector cen2(lp2.center()); 00245 double dx = cen1(1)-cen2(1); 00246 double dy = cen1(2)-cen2(2); 00247 double dc = sqrt(dx*dx+dy*dy); 00248 if(dc<fabs(0.5/lp1.kappa())+fabs(0.5/lp2.kappa())) { 00249 double a1 = std::sqrt(lp1.alpha()) + std::sqrt(lp1.beta()); 00250 double a2 = std::sqrt(lp2.alpha()) + std::sqrt(lp2.beta()); 00251 double a3 = lp1.alpha()*lp2.alpha() + lp1.beta()*lp2.beta(); 00252 double det = lp1.alpha()*lp2.beta() - lp1.beta()*lp2.alpha(); 00253 if(fabs(det)>1e-12) { 00254 double c1 = a2 * std::sqrt(lp1.kappa()) + a1 * std::sqrt(lp2.kappa()) - 00255 2.0 * a3 * lp1.kappa() * lp2.kappa(); 00256 if(c1!=0) { 00257 double cinv = 1.0 / c1; 00258 double c2 = std::sqrt(a3) - 0.5 * (a1 + a2) - 2.0 * a3 * 00259 (lp1.gamma() * lp2.kappa() + lp2.gamma() * lp1.kappa()); 00260 double c3 = a2 * std::sqrt(lp1.gamma()) + a1 * std::sqrt(lp2.gamma()) - 00261 2.0 * a3 * lp1.gamma() * lp2.gamma(); 00262 double root = std::sqrt(c2) - 4.0 * c1 * c3; 00263 if (root>=0) { 00264 root = sqrt(root); 00265 double rad2[2]; 00266 rad2[0] = 0.5 * cinv * (-c2 - root); 00267 rad2[1] = 0.5 * cinv * (-c2 + root); 00268 double ab1 = -(lp2.beta() * lp1.gamma() - lp1.beta() * lp2.gamma()); 00269 double ab2 = (lp2.alpha() * lp1.gamma() - lp1.alpha() * lp2.gamma()); 00270 double ac1 = -(lp2.beta() * lp1.kappa() - lp1.beta() * lp2.kappa()); 00271 double ac2 = (lp2.alpha() * lp1.kappa() - lp1.alpha() * lp2.kappa()); 00272 double dinv = 1.0 / det; 00273 v1(1) = dinv * (ab1 + ac1 * rad2[0]); 00274 v1(2) = dinv * (ab2 + ac2 * rad2[0]); 00275 v1(3) = 0; 00276 v2(1) = dinv * (ab1 + ac1 * rad2[1]); 00277 v2(2) = dinv * (ab2 + ac2 * rad2[1]); 00278 v2(3) = 0; 00279 double d1 = lp1.d(v1(1),v1(2)); 00280 double d2 = lp2.d(v1(1),v1(2)); 00281 double d3 = lp1.d(v2(1),v2(2)); 00282 double d4 = lp2.d(v2(1),v2(2)); 00283 double r = sqrt(rad2[0]); 00284 Lpar::Cpar cp1(lp1); 00285 Lpar::Cpar cp2(lp2); 00286 for(int j=0;j<2;j++) { 00287 double s1,s2; 00288 if(j==0) { 00289 s1 = lp1.s(v1(1),v1(2)); 00290 s2 = lp2.s(v1(1),v1(2)); 00291 } else { 00292 s1 = lp1.s(v2(1),v2(2)); 00293 s2 = lp2.s(v2(1),v2(2)); 00294 } 00295 double phi1 = cp1.fi() + 2 * cp1.cu() * s1; 00296 double phi2 = cp2.fi() + 2 * cp2.cu() * s2; 00297 double f = (1 + 2 * cp1.cu() * cp1.da()) * 00298 (1 + 2 * cp2.cu() * cp2.da()) * cos(cp1.fi()-cp2.fi()); 00299 f -= 2 * (lp1.gamma() * lp2.kappa() + lp2.gamma() * lp1.kappa()); 00300 double cosphi12 = f; 00301 } 00302 return 2; 00303 } 00304 } 00305 } 00306 } 00307 return 0; 00308 }
std::ostream& operator<< | ( | std::ostream & | o, | |
Lpar & | s | |||
) |