345 const Double_t c_light = 0.000299792458;
347 Double_t x = T[0], y = T[1], tx = T[2], ty = T[3], qp0 = T[4], z = T[5],
353 txtx = tx * tx, tyty = ty * ty, txty = tx * ty;
355 Double_t Ax = txty, Ay = -txtx - 1, Az = ty, Ayy = tx * (txtx * 3 + 3), Ayz = -2 * txty, Azy = Ayz,
356 Ayyy = -(15 * txtx * txtx + 18 * txtx + 3),
358 Bx = tyty + 1, By = -txty, Bz = -tx, Byy = ty * (txtx * 3 + 1), Byz = 2 * txtx + 1, Bzy = txtx - tyty,
359 Byyy = -txty * (txtx * 15 + 9);
361 Double_t t = c_light *
sqrt(1. + txtx + tyty), h = t * qp0;
365 Double_t Sx = 0, Sy = 0, Sz = 0, Syy = 0, Syz = 0, Szy = 0, Syyy = 0;
368 Double_t sx = 0, sy = 0, sz = 0, syy = 0, syz = 0, szy = 0, syyy = 0;
379 MagneticField->GetFieldValue(r, B[0]);
383 MagneticField->GetFieldValue(r, B[1]);
387 MagneticField->GetFieldValue(r, B[2]);
389 sx = (B[0][0] + 4 * B[1][0] + B[2][0]) * dz * 2 / 6.;
390 sy = (B[0][1] + 4 * B[1][1] + B[2][1]) * dz * 2 / 6.;
391 sz = (B[0][2] + 4 * B[1][2] + B[2][2]) * dz * 2 / 6.;
393 Sx = (B[0][0] + 2 * B[1][0]) * dz * dz * 4 / 6.;
394 Sy = (B[0][1] + 2 * B[1][1]) * dz * dz * 4 / 6.;
395 Sz = (B[0][2] + 2 * B[1][2]) * dz * dz * 4 / 6.;
397 Double_t c2[3][3] = {{5, -4, -1}, {44, 80, -4}, {11, 44, 5}};
398 Double_t C2[3][3] = {{38, 8, -4}, {148, 208, -20}, {3, 36, 3}};
399 for (
Int_t k = 0; k < 3; k++)
401 syz += c2[k][
m] * B[k][1] * B[
m][2];
402 Syz += C2[k][
m] * B[k][1] * B[
m][2];
403 szy += c2[k][
m] * B[k][2] * B[
m][1];
404 Szy += C2[k][
m] * B[k][2] * B[
m][1];
407 syz *= dz * dz * 4 / 360.;
408 Syz *= dz * dz * dz * 8 / 2520.;
410 szy *= dz * dz * 4 / 360.;
411 Szy *= dz * dz * dz * 8 / 2520.;
413 syy = (B[0][1] + 4 * B[1][1] + B[2][1]) * dz * 2;
414 syyy = syy * syy * syy / 1296;
415 syy = syy * syy / 72;
417 Syy = (B[0][1] * (38 * B[0][1] + 156 * B[1][1] - B[2][1]) + B[1][1] * (208 * B[1][1] + 16 * B[2][1])
418 + B[2][1] * (3 * B[2][1]))
419 * dz * dz * dz * 8 / 2520.;
421 * (B[0][1] * (85 * B[0][1] + 526 * B[1][1] - 7 * B[2][1])
422 + B[1][1] * (1376 * B[1][1] + 84 * B[2][1]) + B[2][1] * (19 * B[2][1]))
423 + B[1][1] * (B[1][1] * (1376 * B[1][1] + 256 * B[2][1]) + B[2][1] * (62 * B[2][1]))
424 + B[2][1] * B[2][1] * (3 * B[2][1]))
425 * dz * dz * dz * dz * 16 / 90720.;
427 x += tx * 2 * dz + h * (Sx * Ax + Sy * Ay + Sz * Az) + h * h * (Syy * Ayy + Syz * Ayz + Szy * Azy)
428 + h * h * h * Syyy * Ayyy;
429 y += ty * 2 * dz + h * (Sx * Bx + Sy * By + Sz * Bz) + h * h * (Syy * Byy + Syz * Byz + Szy * Bzy)
430 + h * h * h * Syyy * Byyy;
431 tx += h * (sx * Ax + sy * Ay + sz * Az) + h * h * (syy * Ayy + syz * Ayz + szy * Azy)
432 + h * h * h * syyy * Ayyy;
433 ty += h * (sx * Bx + sy * By + sz * Bz) + h * h * (syy * Byy + syz * Byz + szy * Bzy)
434 + h * h * h * syyy * Byyy;
443 Ayy = tx * (txtx * 3 + 3);
446 Ayyy = -(15 * txtx * txtx + 18 * txtx + 3);
451 Byy = ty * (txtx * 3 + 1);
454 Byyy = -txty * (txtx * 15 + 9);
456 t = c_light *
sqrt(1. + txtx + tyty);
462 Double_t B0[3] = {B[0][0], B[0][1], B[0][2]};
474 B[2][0] = B0[0] - 3 * B[0][0] + 3 * B[1][0];
475 B[2][1] = B0[1] - 3 * B[0][1] + 3 * B[1][1];
476 B[2][2] = B0[2] - 3 * B[0][2] + 3 * B[1][2];
478 Double_t Sx_, Sy_, Sz_, Syy_, Syz_, Szy_, Syyy_;
480 Sx_ = (-B[0][0] + 10 * B[1][0] + 3 * B[2][0]) * dz * dz * 4 / 96.;
481 Sy_ = (-B[0][1] + 10 * B[1][1] + 3 * B[2][1]) * dz * dz * 4 / 96.;
482 Sz_ = (-B[0][2] + 10 * B[1][2] + 3 * B[2][2]) * dz * dz * 4 / 96.;
486 Double_t c2[3][3] = {{5, -52, -13}, {-28, 320, 68}, {-37, 332, 125}};
487 Double_t C2[3][3] = {{13, -152, -29}, {-82, 1088, 170}, {-57, 576, 153}};
489 for (
Int_t k = 0; k < 3; k++)
491 Syz_ += C2[k][
m] * B[k][1] * B[
m][2];
492 Szy_ += C2[k][
m] * B[k][2] * B[
m][1];
496 Syz_ *= dz * dz * dz * 8 / 80640.;
497 Szy_ *= dz * dz * dz * 8 / 80640.;
499 Syy_ = (B[0][1] * (13 * B[0][1] - 234 * B[1][1] - 86 * B[2][1]) + B[1][1] * (1088 * B[1][1] + 746 * B[2][1])
500 + B[2][1] * (153 * B[2][1]))
501 * dz * dz * dz * 8 / 80640.;
504 * (B[0][1] * (-43 * B[0][1] + 1118 * B[1][1] + 451 * B[2][1])
505 + B[1][1] * (-9824 * B[1][1] - 7644 * B[2][1]) + B[2][1] * (-1669 * B[2][1]))
506 + B[1][1] * (B[1][1] * (29344 * B[1][1] + 32672 * B[2][1]) + B[2][1] * (13918 * B[2][1]))
507 + B[2][1] * B[2][1] * (2157 * B[2][1]))
508 * dz * dz * dz * dz * 16 / 23224320.;
511 r[0] = x + tx * dz + h * (Sx_ * Ax + Sy_ * Ay + Sz_ * Az) + h * h * (Syy_ * Ayy + Syz_ * Ayz + Szy_ * Azy)
512 + h * h * h * Syyy_ * Ayyy;
513 r[1] = y + ty * dz + h * (Sx_ * Bx + Sy_ * By + Sz_ * Bz) + h * h * (Syy_ * Byy + Syz_ * Byz + Szy_ * Bzy)
514 + h * h * h * Syyy_ * Byyy;
535 MagneticField->GetFieldValue(r, B[2]);
537 Double_t sx_, sy_, sz_, syy_, syz_, szy_, syyy_;
539 sx_ = (-B[0][0] + 8 * B[1][0] + 5 * B[2][0]) * dz * 2 / 24.;
540 sy_ = (-B[0][1] + 8 * B[1][1] + 5 * B[2][1]) * dz * 2 / 24.;
541 sz_ = (-B[0][2] + 8 * B[1][2] + 5 * B[2][2]) * dz * 2 / 24.;
543 Sx_ = (-B[0][0] + 10 * B[1][0] + 3 * B[2][0]) * dz * dz * 4 / 96.;
544 Sy_ = (-B[0][1] + 10 * B[1][1] + 3 * B[2][1]) * dz * dz * 4 / 96.;
545 Sz_ = (-B[0][2] + 10 * B[1][2] + 3 * B[2][2]) * dz * dz * 4 / 96.;
547 syz_ = Syz_ = szy_ = Szy_ = 0;
550 for (
Int_t k = 0; k < 3; k++)
552 syz_ += c2[k][
m] * B[k][1] * B[
m][2];
553 Syz_ += C2[k][
m] * B[k][1] * B[
m][2];
554 szy_ += c2[k][
m] * B[k][2] * B[
m][1];
555 Szy_ += C2[k][
m] * B[k][2] * B[
m][1];
558 syz_ *= dz * dz * 4 / 5760.;
559 Syz_ *= dz * dz * dz * 8 / 80640.;
561 szy_ *= dz * dz * 4 / 5760.;
562 Szy_ *= dz * dz * dz * 8 / 80640.;
564 syy_ = (B[0][1] - 8 * B[1][1] - 5 * B[2][1]) * dz * 2;
565 syyy_ = -syy_ * syy_ * syy_ / 82944;
566 syy_ = syy_ * syy_ / 1152;
568 Syy_ = (B[0][1] * (13 * B[0][1] - 234 * B[1][1] - 86 * B[2][1]) + B[1][1] * (1088 * B[1][1] + 746 * B[2][1])
569 + B[2][1] * (153 * B[2][1]))
570 * dz * dz * dz * 8 / 80640.;
573 * (B[0][1] * (-43 * B[0][1] + 1118 * B[1][1] + 451 * B[2][1])
574 + B[1][1] * (-9824 * B[1][1] - 7644 * B[2][1]) + B[2][1] * (-1669 * B[2][1]))
575 + B[1][1] * (B[1][1] * (29344 * B[1][1] + 32672 * B[2][1]) + B[2][1] * (13918 * B[2][1]))
576 + B[2][1] * B[2][1] * (2157 * B[2][1]))
577 * dz * dz * dz * dz * 16 / 23224320.;
579 x += tx * dz + h * (Sx_ * Ax + Sy_ * Ay + Sz_ * Az) + h * h * (Syy_ * Ayy + Syz_ * Ayz + Szy_ * Azy)
580 + h * h * h * Syyy_ * Ayyy;
581 y += ty * dz + h * (Sx_ * Bx + Sy_ * By + Sz_ * Bz) + h * h * (Syy_ * Byy + Syz_ * Byz + Szy_ * Bzy)
582 + h * h * h * Syyy_ * Byyy;
583 tx += h * (sx_ * Ax + sy_ * Ay + sz_ * Az) + h * h * (syy_ * Ayy + syz_ * Ayz + szy_ * Azy)
584 + h * h * h * syyy_ * Ayyy;
585 ty += h * (sx_ * Bx + sy_ * By + sz_ * Bz) + h * h * (syy_ * Byy + syz_ * Byz + szy_ * Bzy)
586 + h * h * h * syyy_ * Byyy;
595 Ayy = tx * (txtx * 3 + 3);
598 Ayyy = -(15 * txtx * txtx + 18 * txtx + 3);
603 Byy = ty * (txtx * 3 + 1);
606 Byyy = -txty * (txtx * 15 + 9);
608 t = c_light *
sqrt(1. + txtx + tyty);
611 Syyy += dz * syyy + Sy_ * syy + Syy_ * sy + Syyy_;
612 Syy += dz * syy + sy * Sy_ + Syy_;
613 Syz += dz * syz + sz * Sy_ + Syz_;
614 Szy += dz * szy + sy * Sz_ + Szy_;
619 syyy += sy_ * syy + syy_ * sy + syyy_;
620 syy += sy * sy_ + syy_;
621 syz += sz * sy_ + syz_;
622 szy += sz * sz_ + szy_;
642 Ayy = tx * (txtx * 3 + 3);
645 Ayyy = -(15 * txtx * txtx + 18 * txtx + 3);
650 Byy = ty * (txtx * 3 + 1);
653 Byyy = -txty * (txtx * 15 + 9);
655 t = c_light *
sqrt(1. + txtx + tyty);
660 c = (x - vx) + tx * (vz - z),
661 b = t * (Sx * Ax + Sy * Ay + Sz * Az), a = t * t * (Syy * Ayy + Syz * Ayz + Szy * Azy),
662 d = t * t * t * (Syyy * Ayyy);
664 Double_t C = d * qp0 * qp0 * qp0 + a * qp0 * qp0 + b * qp0 + c, B = 3 * d * qp0 * qp0 + 2 * a * qp0 + b,