297 FairField *MagneticField
301 const Double_t c_light = 0.000299792458;
326 Ayyy = -(15*txtx*txtx+18*txtx+3),
334 Byyy = -txty*(txtx*15+9);
337 t = c_light*
sqrt( 1. + txtx + tyty ),
342 Double_t Sx=0, Sy=0, Sz=0, Syy=0, Syz=0, Szy=0, Syyy=0;
345 Double_t sx=0,sy=0,sz=0,syy=0,syz=0, szy=0, syyy=0;
347 Double_t r[3] = { x, y, z };
350 Int_t n = int(
fabs(vz-z)/5.);
352 Double_t dz = (vz-z)/n;
355 MagneticField->GetFieldValue( r, B[0] );
359 MagneticField->GetFieldValue( r, B[1] );
363 MagneticField->GetFieldValue( r, B[2] );
365 sx = ( B[0][0] + 4*B[1][0] + B[2][0] )*dz*2/6.;
366 sy = ( B[0][1] + 4*B[1][1] + B[2][1] )*dz*2/6.;
367 sz = ( B[0][2] + 4*B[1][2] + B[2][2] )*dz*2/6.;
369 Sx = ( B[0][0] + 2*B[1][0])*dz*dz*4/6.;
370 Sy = ( B[0][1] + 2*B[1][1])*dz*dz*4/6.;
371 Sz = ( B[0][2] + 2*B[1][2])*dz*dz*4/6.;
373 Double_t c2[3][3] = { { 5, -4, -1},{ 44, 80, -4},{ 11, 44, 5} };
374 Double_t C2[3][3] = { { 38, 8, -4},{ 148, 208, -20},{ 3, 36, 3} };
375 for(Int_t k=0; k<3; k++)
376 for(Int_t
m=0;
m<3;
m++)
378 syz += c2[k][
m]*B[k][1]*B[
m][2];
379 Syz += C2[k][
m]*B[k][1]*B[
m][2];
380 szy += c2[k][
m]*B[k][2]*B[
m][1];
381 Szy += C2[k][
m]*B[k][2]*B[
m][1];
385 Syz *= dz*dz*dz*8/2520.;
388 Szy *= dz*dz*dz*8/2520.;
390 syy = ( B[0][1] + 4*B[1][1] + B[2][1] )*dz*2;
391 syyy = syy*syy*syy / 1296;
394 Syy = ( B[0][1]*( 38*B[0][1] + 156*B[1][1] - B[2][1] )+
395 B[1][1]*( 208*B[1][1] +16*B[2][1] )+
396 B[2][1]*( 3*B[2][1] )
400 B[0][1]*( B[0][1]*( 85*B[0][1] + 526*B[1][1] - 7*B[2][1] )+
401 B[1][1]*( 1376*B[1][1] +84*B[2][1] )+
402 B[2][1]*( 19*B[2][1] ) )+
403 B[1][1]*( B[1][1]*( 1376*B[1][1] +256*B[2][1] )+
404 B[2][1]*( 62*B[2][1] ) )+
405 B[2][1]*B[2][1] *( 3*B[2][1] )
406 )*dz*dz*dz*dz*16/90720.;
409 + h*( Sx*Ax + Sy*Ay + Sz*Az )
410 + h*h*( Syy*Ayy + Syz*Ayz + Szy*Azy )
413 + h*( Sx*Bx + Sy*By + Sz*Bz )
414 + h*h*( Syy*Byy + Syz*Byz + Szy*Bzy )
416 tx += h*( sx*Ax + sy*Ay + sz*Az )
417 + h*h*( syy*Ayy + syz*Ayz + szy*Azy )
419 ty += h*( sx*Bx + sy*By + sz*Bz )
420 + h*h*( syy*Byy + syz*Byz + szy*Bzy )
433 Ayyy = -(15*txtx*txtx+18*txtx+3);
441 Byyy = -txty*(txtx*15+9);
443 t = c_light*
sqrt( 1. + txtx + tyty );
447 for( Int_t
i=2;
i<n;
i++ )
450 Double_t B0[3] = { B[0][0], B[0][1], B[0][2] };
462 B[2][0] = B0[0] -3*B[0][0] + 3*B[1][0];
463 B[2][1] = B0[1] -3*B[0][1] + 3*B[1][1];
464 B[2][2] = B0[2] -3*B[0][2] + 3*B[1][2];
466 Double_t Sx_, Sy_, Sz_, Syy_, Syz_, Szy_, Syyy_;
468 Sx_ = ( -B[0][0] + 10*B[1][0] + 3*B[2][0] )*dz*dz*4/96.;
469 Sy_ = ( -B[0][1] + 10*B[1][1] + 3*B[2][1] )*dz*dz*4/96.;
470 Sz_ = ( -B[0][2] + 10*B[1][2] + 3*B[2][2] )*dz*dz*4/96.;
474 Double_t c2[3][3] = { { 5, -52, -13},{ -28, 320, 68},{ -37, 332, 125} };
475 Double_t C2[3][3] = { { 13, -152, -29},{ -82, 1088, 170},{ -57, 576, 153} };
476 {
for(Int_t k=0; k<3; k++)
477 for(Int_t
m=0;
m<3;
m++)
479 Syz_ += C2[k][
m]*B[k][1]*B[
m][2];
480 Szy_ += C2[k][
m]*B[k][2]*B[
m][1];
484 Syz_ *= dz*dz*dz*8/80640.;
485 Szy_ *= dz*dz*dz*8/80640.;
487 Syy_ = ( B[0][1]*( 13*B[0][1] - 234*B[1][1] - 86*B[2][1] )+
488 B[1][1]*( 1088*B[1][1] +746*B[2][1] )+
489 B[2][1]*( 153*B[2][1] )
494 B[0][1]*( B[0][1]*( -43*B[0][1] + 1118*B[1][1]+451*B[2][1] )+
495 B[1][1]*( -9824*B[1][1] -7644*B[2][1] )+
496 B[2][1]*( -1669*B[2][1] ) )+
497 B[1][1]*( B[1][1]*( 29344*B[1][1] +32672*B[2][1] )+
498 B[2][1]*( 13918*B[2][1] ) )+
499 B[2][1]*B[2][1] *( 2157*B[2][1] )
500 )*dz*dz*dz*dz*16/23224320.;
505 + h*( Sx_*Ax + Sy_*Ay + Sz_*Az )
506 + h*h*( Syy_*Ayy + Syz_*Ayz + Szy_*Azy )
509 + h*( Sx_*Bx + Sy_*By + Sz_*Bz )
510 + h*h*( Syy_*Byy + Syz_*Byz + Szy_*Bzy )
532 MagneticField->GetFieldValue( r, B[2] );
534 Double_t sx_, sy_, sz_, syy_, syz_, szy_, syyy_;
536 sx_ = ( -B[0][0] + 8*B[1][0] + 5*B[2][0] )*dz*2/24.;
537 sy_ = ( -B[0][1] + 8*B[1][1] + 5*B[2][1] )*dz*2/24.;
538 sz_ = ( -B[0][2] + 8*B[1][2] + 5*B[2][2] )*dz*2/24.;
540 Sx_ = ( -B[0][0] + 10*B[1][0] + 3*B[2][0] )*dz*dz*4/96.;
541 Sy_ = ( -B[0][1] + 10*B[1][1] + 3*B[2][1] )*dz*dz*4/96.;
542 Sz_ = ( -B[0][2] + 10*B[1][2] + 3*B[2][2] )*dz*dz*4/96.;
544 syz_ = Syz_ = szy_ = Szy_ = 0;
546 {
for(Int_t k=0; k<3; k++)
547 for(Int_t
m=0;
m<3;
m++)
549 syz_ += c2[k][
m]*B[k][1]*B[
m][2];
550 Syz_ += C2[k][
m]*B[k][1]*B[
m][2];
551 szy_ += c2[k][
m]*B[k][2]*B[
m][1];
552 Szy_ += C2[k][
m]*B[k][2]*B[
m][1];
555 syz_ *= dz*dz*4/5760.;
556 Syz_ *= dz*dz*dz*8/80640.;
558 szy_ *= dz*dz*4/5760.;
559 Szy_ *= dz*dz*dz*8/80640.;
561 syy_ = ( B[0][1] -8*B[1][1] - 5*B[2][1] )*dz*2;
562 syyy_ = -syy_*syy_*syy_/82944;
563 syy_ = syy_*syy_/1152;
565 Syy_ = ( B[0][1]*( 13*B[0][1] - 234*B[1][1] - 86*B[2][1] )+
566 B[1][1]*( 1088*B[1][1] +746*B[2][1] )+
567 B[2][1]*( 153*B[2][1] )
572 B[0][1]*( B[0][1]*( -43*B[0][1] + 1118*B[1][1]+451*B[2][1] )+
573 B[1][1]*( -9824*B[1][1] -7644*B[2][1] )+
574 B[2][1]*( -1669*B[2][1] ) )+
575 B[1][1]*( B[1][1]*( 29344*B[1][1] +32672*B[2][1] )+
576 B[2][1]*( 13918*B[2][1] ) )+
577 B[2][1]*B[2][1] *( 2157*B[2][1] )
578 )*dz*dz*dz*dz*16/23224320.;
581 + h*( Sx_*Ax + Sy_*Ay + Sz_*Az )
582 + h*h*( Syy_*Ayy + Syz_*Ayz + Szy_*Azy )
585 + h*( Sx_*Bx + Sy_*By + Sz_*Bz )
586 + h*h*( Syy_*Byy + Syz_*Byz + Szy_*Bzy )
588 tx += h*( sx_*Ax + sy_*Ay + sz_*Az )
589 + h*h*( syy_*Ayy + syz_*Ayz + szy_*Azy )
591 ty += h*( sx_*Bx + sy_*By + sz_*Bz )
592 + h*h*( syy_*Byy + syz_*Byz + szy_*Bzy )
605 Ayyy = -(15*txtx*txtx+18*txtx+3);
613 Byyy = -txty*(txtx*15+9);
615 t = c_light*
sqrt( 1. + txtx + tyty );
619 Syyy+= dz*syyy+Sy_*syy+Syy_*sy+Syyy_;
620 Syy += dz*syy + sy*Sy_ + Syy_;
621 Syz += dz*syz + sz*Sy_ + Syz_;
622 Szy += dz*szy + sy*Sz_ + Szy_;
627 syyy+= sy_*syy+syy_*sy+syyy_;
628 syy += sy*sy_ + syy_;
629 syz += sz*sy_ + syz_;
630 szy += sz*sz_ + szy_;
653 Ayyy = -(15*txtx*txtx+18*txtx+3);
661 Byyy = -txty*(txtx*15+9);
663 t = c_light*
sqrt( 1. + txtx + tyty );
668 c = (x-vx) + tx*(vz-z),
669 b = t*( Sx*Ax + Sy*Ay + Sz*Az ) ,
670 a = t*t*( Syy*Ayy + Syz*Ayz + Szy*Azy ),
671 d = t*t*t*( Syyy*Ayyy);
674 C =
d*qp0*qp0*qp0 + a*qp0*qp0 + b*qp0 + c,
675 B = 3*
d*qp0*qp0+2*a*qp0+b,
678 Double_t D = B*B-4*A*C;
682 Double_t dqp1 = (-B+D)/2/A;
683 Double_t dqp2 = (-B-D)/2/A;
684 Double_t dqp = (
fabs(dqp1)<
fabs(dqp2)) ?dqp1 : dqp2;