422 const M1x3& direction)
const
429 const double step2 = step * step;
435 double logCor = (1 + 0.038 * log(stepOverRadLength));
439 sigma2 = (sigma2 > 0.0 ? sigma2 : 0.0);
442 double noiseAfter[7 * 7];
443 memset(noiseAfter, 0x00, 7 * 7 *
sizeof(
double));
445 const double *a = direction;
448 noiseAfter[0 * 7 + 0] = sigma2 * step2 / 3.0 * (1 - a[0]*a[0]);
449 noiseAfter[1 * 7 + 0] = -sigma2 * step2 / 3.0 * a[0]*a[1];
450 noiseAfter[2 * 7 + 0] = -sigma2 * step2 / 3.0 * a[0]*a[2];
451 noiseAfter[3 * 7 + 0] = sigma2 * step * 0.5 * (1 - a[0]*a[0]);
452 noiseAfter[4 * 7 + 0] = -sigma2 * step * 0.5 * a[0]*a[1];
453 noiseAfter[5 * 7 + 0] = -sigma2 * step * 0.5 * a[0]*a[1];
454 noiseAfter[0 * 7 + 1] = noiseAfter[1 * 7 + 0];
455 noiseAfter[1 * 7 + 1] = sigma2 * step2 / 3.0 * (1 - a[1]*a[1]);
456 noiseAfter[2 * 7 + 1] = -sigma2 * step2 / 3.0 * a[1]*a[2];
457 noiseAfter[3 * 7 + 1] = noiseAfter[4 * 7 + 0];
458 noiseAfter[4 * 7 + 1] = sigma2 * step * 0.5 * (1 - a[1] * a[1]);
459 noiseAfter[5 * 7 + 1] = -sigma2 * step * 0.5 * a[1]*a[2];
460 noiseAfter[0 * 7 + 2] = noiseAfter[2 * 7 + 0];
461 noiseAfter[1 * 7 + 2] = noiseAfter[2 * 7 + 1];
462 noiseAfter[2 * 7 + 2] = sigma2 * step2 / 3.0 * (1 - a[2]*a[2]);
463 noiseAfter[3 * 7 + 2] = noiseAfter[5 * 7 + 0];
464 noiseAfter[4 * 7 + 2] = noiseAfter[5 * 7 + 1];
465 noiseAfter[5 * 7 + 2] = sigma2 * step * 0.5 * (1 - a[2]*a[2]);
466 noiseAfter[0 * 7 + 3] = noiseAfter[3 * 7 + 0];
467 noiseAfter[1 * 7 + 3] = noiseAfter[3 * 7 + 1];
468 noiseAfter[2 * 7 + 3] = noiseAfter[3 * 7 + 2];
469 noiseAfter[3 * 7 + 3] = sigma2 * (1 - a[0]*a[0]);
470 noiseAfter[4 * 7 + 3] = -sigma2 * a[0]*a[1];
471 noiseAfter[5 * 7 + 3] = -sigma2 * a[0]*a[2];
472 noiseAfter[0 * 7 + 4] = noiseAfter[4 * 7 + 0];
473 noiseAfter[1 * 7 + 4] = noiseAfter[4 * 7 + 1];
474 noiseAfter[2 * 7 + 4] = noiseAfter[4 * 7 + 2];
475 noiseAfter[3 * 7 + 4] = noiseAfter[4 * 7 + 3];
476 noiseAfter[4 * 7 + 4] = sigma2 * (1 - a[1]*a[1]);
477 noiseAfter[5 * 7 + 4] = -sigma2 * a[1]*a[2];
478 noiseAfter[0 * 7 + 5] = noiseAfter[5 * 7 + 0];
479 noiseAfter[1 * 7 + 5] = noiseAfter[5 * 7 + 1];
480 noiseAfter[2 * 7 + 5] = noiseAfter[5 * 7 + 2];
481 noiseAfter[3 * 7 + 5] = noiseAfter[5 * 7 + 3];
482 noiseAfter[4 * 7 + 5] = noiseAfter[5 * 7 + 4];
483 noiseAfter[5 * 7 + 5] = sigma2 * (1 - a[2]*a[2]);
486 for (
unsigned int i = 0; i < 7 * 7; ++i) {
487 noise[i] += noiseAfter[i];
497 if (abs(
pdg_) != 11)
return 0;
500 static const double C[101] = { 0.0, -0.960613E-01, 0.631029E-01, -0.142819E-01, 0.150437E-02, -0.733286E-04, 0.131404E-05, 0.859343E-01, -0.529023E-01, 0.131899E-01, -0.159201E-02, 0.926958E-04, -0.208439E-05, -0.684096E+01, 0.370364E+01, -0.786752E+00, 0.822670E-01, -0.424710E-02, 0.867980E-04, -0.200856E+01, 0.129573E+01, -0.306533E+00, 0.343682E-01, -0.185931E-02, 0.392432E-04, 0.127538E+01, -0.515705E+00, 0.820644E-01, -0.641997E-02, 0.245913E-03, -0.365789E-05, 0.115792E+00, -0.463143E-01, 0.725442E-02, -0.556266E-03, 0.208049E-04, -0.300895E-06, -0.271082E-01, 0.173949E-01, -0.452531E-02, 0.569405E-03, -0.344856E-04, 0.803964E-06, 0.419855E-02, -0.277188E-02, 0.737658E-03, -0.939463E-04, 0.569748E-05, -0.131737E-06, -0.318752E-03, 0.215144E-03, -0.579787E-04, 0.737972E-05, -0.441485E-06, 0.994726E-08, 0.938233E-05, -0.651642E-05, 0.177303E-05, -0.224680E-06, 0.132080E-07, -0.288593E-09, -0.245667E-03, 0.833406E-04, -0.129217E-04, 0.915099E-06, -0.247179E-07, 0.147696E-03, -0.498793E-04, 0.402375E-05, 0.989281E-07, -0.133378E-07, -0.737702E-02, 0.333057E-02, -0.553141E-03, 0.402464E-04, -0.107977E-05, -0.641533E-02, 0.290113E-02, -0.477641E-03, 0.342008E-04, -0.900582E-06, 0.574303E-05, 0.908521E-04, -0.256900E-04, 0.239921E-05, -0.741271E-07, -0.341260E-04, 0.971711E-05, -0.172031E-06, -0.119455E-06, 0.704166E-08, 0.341740E-05, -0.775867E-06, -0.653231E-07, 0.225605E-07, -0.114860E-08, -0.119391E-06, 0.194885E-07, 0.588959E-08, -0.127589E-08, 0.608247E-10};
501 static const double xi = 2.51, beta = 0.99, vl = 0.00004;
504 static const double C[101] = { 0.0, 0.834459E-02, 0.443979E-02, -0.101420E-02, 0.963240E-04, -0.409769E-05, 0.642589E-07, 0.464473E-02, -0.290378E-02, 0.547457E-03, -0.426949E-04, 0.137760E-05, -0.131050E-07, -0.547866E-02, 0.156218E-02, -0.167352E-03, 0.101026E-04, -0.427518E-06, 0.949555E-08, -0.406862E-02, 0.208317E-02, -0.374766E-03, 0.317610E-04, -0.130533E-05, 0.211051E-07, 0.158941E-02, -0.385362E-03, 0.315564E-04, -0.734968E-06, -0.230387E-07, 0.971174E-09, 0.467219E-03, -0.154047E-03, 0.202400E-04, -0.132438E-05, 0.431474E-07, -0.559750E-09, -0.220958E-02, 0.100698E-02, -0.596464E-04, -0.124653E-04, 0.142999E-05, -0.394378E-07, 0.477447E-03, -0.184952E-03, -0.152614E-04, 0.848418E-05, -0.736136E-06, 0.190192E-07, -0.552930E-04, 0.209858E-04, 0.290001E-05, -0.133254E-05, 0.116971E-06, -0.309716E-08, 0.212117E-05, -0.103884E-05, -0.110912E-06, 0.655143E-07, -0.613013E-08, 0.169207E-09, 0.301125E-04, -0.461920E-04, 0.871485E-05, -0.622331E-06, 0.151800E-07, -0.478023E-04, 0.247530E-04, -0.381763E-05, 0.232819E-06, -0.494487E-08, -0.336230E-04, 0.223822E-04, -0.384583E-05, 0.252867E-06, -0.572599E-08, 0.105335E-04, -0.567074E-06, -0.216564E-06, 0.237268E-07, -0.658131E-09, 0.282025E-05, -0.671965E-06, 0.565858E-07, -0.193843E-08, 0.211839E-10, 0.157544E-04, -0.304104E-05, -0.624410E-06, 0.120124E-06, -0.457445E-08, -0.188222E-05, -0.407118E-06, 0.375106E-06, -0.466881E-07, 0.158312E-08, 0.945037E-07, 0.564718E-07, -0.319231E-07, 0.371926E-08, -0.123111E-09};
505 static const double xi = 2.10, beta = 1.00, vl = 0.001;
508 double BCUT = 10000.;
510 static const double THIGH = 100., CHIGH = 50.;
511 double dedxBrems = 0.;
522 if (BCUT >= THIGH) kc = CHIGH;
530 if (BCUT > T) kc = T;
532 double X = log(T /
me_);
533 double Y = log(kc / (E * vl));
537 double S = 0., YY = 1.;
539 for (
unsigned int I = 1; I <= 2; ++I) {
541 for (
unsigned int J = 1; J <= 6; ++J) {
543 S = S + C[K] * XX * YY;
549 for (
unsigned int I = 3; I <= 6; ++I) {
551 for (
unsigned int J = 1; J <= 6; ++J) {
553 if (Y <= 0.) S = S + C[K] * XX * YY;
554 else S = S + C[K + 24] * XX * YY;
563 for (
unsigned int I = 1; I <= 2; ++I) {
565 for (
unsigned int J = 1; J <= 5; ++J) {
567 SS = SS + C[K] * XX * YY;
573 for (
unsigned int I = 3; I <= 5; ++I) {
575 for (
unsigned int J = 1; J <= 5; ++J) {
577 if (Y <= 0.) SS = SS + C[K] * XX * YY;
578 else SS = SS + C[K + 15] * XX * YY;
597 FAC *= kc * CORR / T;
599 FAC *= exp(beta * log(kc * CORR / T));
601 if (FAC <= 0.)
return 0.;
609 S = (1. - 0.5 * RAT + 2.*RAT * RAT / 9.);
611 S = S / (1. - 0.5 * RAT + 2.*RAT * RAT / 9.);
614 S = BCUT * (1. - 0.5 * RAT + 2.*RAT * RAT / 9.);
616 S = S / (kc * (1. - 0.5 * RAT + 2.*RAT * RAT / 9.));
618 dedxBrems = dedxBrems * S;
625 if (dedxBrems < 0.) dedxBrems = 0;
630 static const double AA = 7522100., A1 = 0.415, A3 = 0.0021, A5 = 0.00054;
636 if (X >= +9.) ETA = 1.;
638 double W = A1 * X + A3 * pow(X, 3.) + A5 * pow(X, 5.);
639 ETA = 0.5 + atan(W) / M_PI;
644 if (ETA < 0.0001) factor = 1.E-10;
645 else if (ETA > 0.9999) factor = 1.;
647 double E0 = BCUT /
mom_;
648 if (E0 > 1.) E0 = 1.;
649 if (E0 < 1.E-8) factor = 1.;
650 else factor = ETA * (1. - pow(1. - E0, 1. / ETA)) / E0;
654 double dE = fabs(
stepSize_) * factor * dedxBrems;