22 #include "Framework/Conventions/GBuild.h"
32 using namespace genie;
33 using namespace genie::constants;
71 double dW = (W.
max-W.
min)/(kNW-1);
73 for(
int iw=0; iw<kNW; iw++) {
76 double dQ2 = (Q2.
max-Q2.
min);
97 const double kdV = kdx*kdy;
99 double cW=-1, cQ2 = -1;
103 for(
int ix=0; ix<kNx; ix++) {
104 double x = kminx+ix*kdx;
105 for(
int iy=0; iy<kNy; iy++) {
106 double y = kminy+iy*kdy;
123 <<
"Couldn't compute phase space volume for "
153 <<
"Computing Jacobian for transformation: "
162 if ( fromps == tops )
191 J = 1. / (kine.
x() * kine.
y());
200 J = TMath::Log(10.)*kine.
x() * TMath::Log(10.)*kine.
Q2();
209 J = 1. / (kine.
Q2() * kine.
y());
265 J = TMath::Power(2*M*Ev,2) * y;
279 J = 2*TMath::Power(M*Ev,2) * y/
W;
304 double mv = init_state.
Probe()->Mass();
306 double pv = std::sqrt( std::max(0., Ev*Ev - mv*mv) );
309 const TLorentzVector& hit_nuc_P4 = init_state.
Tgt().
HitNucP4();
310 double M = hit_nuc_P4.M();
317 double El = Ev - ( (W*W + Q2 - M*M) / (2.*M) );
318 double pl = std::sqrt( std::max(0., El*El - ml*ml) );
322 J = W / ( 2. * pv * pl * M );
326 std::ostringstream msg;
327 msg <<
"Can not compute Jacobian for transforming: "
330 SLOG(
"KineLimits",
pFATAL) <<
"*** " << msg.str();
336 if(!forward) J = 1./
J;
347 bool matched = ( (a==inpa&&b==inpb) || (a==inpb&&b==inpa) );
350 if(a==inpa&&b==inpb) fwd =
true;
362 double M2 = TMath::Power(M,2);
363 double s = M2 + 2*M*Ev;
368 W.
max = TMath::Sqrt(s) - ml;
380 double Ev,
double M,
double ml,
double W,
double Q2min_cut)
388 double M2 = TMath::Power(M, 2.);
389 double ml2 = TMath::Power(ml, 2.);
390 double W2 = TMath::Power(W, 2.);
391 double s = M2 + 2*M*Ev;
397 double auxC = 0.5*(s-M2)/s;
398 double aux1 = s + ml2 - W2;
399 double aux2 = aux1*aux1 - 4*s*ml2;
401 (aux2 < 0) ? ( aux2 = 0 ) : ( aux2 = TMath::Sqrt(aux2) );
403 Q2.
max = -ml2 + auxC * (aux1 + aux2);
404 Q2.
min = -ml2 + auxC * (aux1 - aux2);
407 Q2.
max = TMath::Max(0., Q2.
max);
408 Q2.
min = TMath::Max(0., Q2.
min);
411 if(Q2.
min < Q2min_cut) {Q2.
min = Q2min_cut; }
418 double Ev,
double M,
double ml,
double W,
double q2min_cut)
430 double Ev,
double M,
double ml,
double Q2min_cut)
439 if(W.
min<0)
return Q2;
446 double Ev,
double M,
double ml,
double q2min_cut)
462 double M2 = TMath::Power(M, 2.);
463 double ml2 = TMath::Power(ml,2.);
464 double s = M2 + 2*M*Ev;
486 assert(xl.
min>0 && xl.
max>0);
488 const unsigned int N=100;
489 const double logxmin = TMath::Log10(xl.
min);
490 const double logxmax = TMath::Log10(xl.
max);
491 const double dlogx = (logxmax-logxmin) / (
double)(N-1);
493 for(
unsigned int i=0; i<N; i++) {
494 double x = TMath::Power(10, logxmin + i*dlogx);
501 if(y.
max >= 0 && y.
max <= 1 && y.
min >= 0 && y.
min <= 1) {
513 double Ev,
double M,
double ml,
double x)
522 double Ev2 = TMath::Power(Ev,2);
523 double ml2 = TMath::Power(ml,2);
531 double a = 0.5 * ml2/(M*Ev*x);
533 double c = 1 + 0.5*x*M/Ev;
534 double d = TMath::Max(0., TMath::Power(1-a,2.) - b);
536 double A = 0.5 * (1-a-0.5*
b)/c;
537 double B = 0.5 * TMath::Sqrt(d)/c;
551 double M2 = TMath::Power(M,2);
552 double ml2 = TMath::Power(ml,2);
553 double s = M2 + 2*M*El + ml2;
558 W.
max = TMath::Sqrt(s) - ml;
570 double El,
double ml,
double M,
double W)
578 double M2 = TMath::Power(M, 2.);
579 double ml2 = TMath::Power(ml, 2.);
580 double W2 = TMath::Power(W, 2.);
581 double s = M2 + 2*M*El + ml2;
587 double auxC = 0.5*(s - M2 - ml2)/s;
588 double aux1 = s + ml2 - W2;
589 double aux2 = aux1*aux1 - 4*s*ml2;
591 (aux2 < 0) ? ( aux2 = 0 ) : ( aux2 = TMath::Sqrt(aux2) );
593 Q2.
max = -ml2 + auxC * (aux1 + aux2);
594 Q2.
min = -ml2 + auxC * (aux1 - aux2);
597 Q2.
max = TMath::Max(0., Q2.
max);
598 Q2.
min = TMath::Max(0., Q2.
min);
608 double El,
double ml,
double M,
double W)
620 double El,
double ml,
double M)
629 if(W.
min<0)
return Q2;
636 double El,
double ml,
double M)
652 double M2 = TMath::Power(M, 2.);
653 double ml2 = TMath::Power(ml,2.);
654 double s = M2 + 2*M*El + ml2;
658 assert (s > M2 + ml2);
676 assert(xl.
min>0 && xl.
max>0);
678 const unsigned int N=100;
679 const double logxmin = TMath::Log10(xl.
min);
680 const double logxmax = TMath::Log10(xl.
max);
681 const double dlogx = (logxmax-logxmin) / (
double)(N-1);
683 for(
unsigned int i=0; i<N; i++) {
684 double x = TMath::Power(10, logxmin + i*dlogx);
691 if(y.
max >= 0 && y.
max <= 1 && y.
min >= 0 && y.
min <= 1) {
703 double El,
double ml,
double M,
double x)
712 double El2 = TMath::Power(El,2);
713 double ml2 = TMath::Power(ml,2);
721 double a = 0.5 * ml2/(M*El*x);
723 double c = 1 + 0.5*x*M/El;
724 double d = TMath::Max(0., TMath::Power(1-a,2.) - b);
726 double A = 0.5 * (1-a-0.5*
b)/c;
727 double B = 0.5 * TMath::Sqrt(d)/c;
754 Q2.
max = std::numeric_limits<double>::max();
756 double Mn2 = Mn * Mn;
757 double mlep2 = mlep * mlep;
758 double s = Mn2 + 2.0 * Mn * Ev;
759 double W2min =
CohW2Min(Mn, m_produced);
763 double b = mlep2 /
s;
764 double c = W2min /
s;
765 double lambda = a * a + b * b + c * c - 2.0 * a * b - 2.0 * a * c - 2.0 * b * c;
767 double A = (s - Mn * Mn) / 2.0;
768 double B = 1 - TMath::Sqrt(lambda);
769 double C = 0.5 * (W2min + mlep2 - Mn2 * (W2min - mlep2) / s );
772 <<
"Q2 kinematic limits calculation failed for CohQ2Lim. "
773 <<
"Assuming Q2min = 0.0";
775 Q2.
min = TMath::Max(0., A * B - C);
778 <<
"Q2 kinematic limits calculation failed for CohQ2Lim. "
779 <<
"Assuming Q2min = 0.0";
795 double Ev,
double Q2)
808 double s = Mn * Mn + 2.0 * Mn * Ev;
809 double Mnterm = 1 - Mn * Mn /
s;
810 double Mlterm = 1 - mlep * mlep /
s;
812 double T1 = 0.25 * s * s * Mnterm * Mnterm * Mlterm;
813 double T2 = Q2 - (0.5 * s * Mnterm) + (0.5 * mlep * mlep * Mnterm);
816 W2l.
max = (T1 - T2 * T2 ) *
818 (1.0 / (Q2 + mlep * mlep));
824 double Q2,
double Mn,
double xsi)
830 double nu_min = (W2min + Q2 - Mn * Mn) / (2.0 * Mn);
831 double nu_max = (W2max + Q2 - Mn * Mn) / (2.0 * Mn);
832 double xsiQ = xsi * TMath::Sqrt(Q2);
834 nul.
min = (xsiQ > nu_min) ? xsiQ : nu_min;
841 double Ev,
double Q2,
double xsi)
848 if (W2lim.
min > W2lim.
max) {
850 <<
"Kinematically forbidden region in CohYLim. W2min = " << W2lim.
min
851 <<
"; W2max =" << W2lim.
max;
853 <<
" Mn = " << Mn <<
"; m_had_sys = " << m_produced <<
"; mlep = "
854 << mlep <<
"; Ev = " << Ev <<
"; Q2 = " <<
Q2;
859 ylim.
min = nulim.
min / Ev;
860 ylim.
max = nulim.
max / Ev;
883 return (Mn + m_produced) * (Mn + m_produced);
896 double M2 = TMath::Power(M,2);
897 double ml2 = TMath::Power(ml,2);
898 double s = M2 + 2*M*Ev + ml2;
904 W.
max = TMath::Sqrt(s) - ml;
916 double Ev,
double M,
double ml,
double W,
double Q2min_cut)
924 double M2 = TMath::Power(M, 2.);
925 double ml2 = TMath::Power(ml, 2.);
926 double W2 = TMath::Power(W, 2.);
927 double s = M2 + 2*M*Ev + ml2;
929 double sqs = TMath::Sqrt(s);
930 double E1CM = (s + ml2 - M2) / (2.*sqs);
931 double p1CM = TMath::Max(0., E1CM*E1CM - ml2);
932 p1CM = TMath::Sqrt(p1CM);
933 double E3CM = (s + ml2 - W2) / (2.*sqs);
934 double p3CM = TMath::Max(0., E3CM*E3CM - ml2);
935 p3CM = TMath::Sqrt(p3CM);
941 SLOG(
"KineLimits",
pDEBUG) <<
"E1_CM = " << E1CM;
942 SLOG(
"KineLimits",
pDEBUG) <<
"p1_CM = " << p1CM;
943 SLOG(
"KineLimits",
pDEBUG) <<
"E3_CM = " << E3CM;
944 SLOG(
"KineLimits",
pDEBUG) <<
"p3_CM = " << p3CM;
946 Q2.
min = TMath::Power(p3CM - p1CM,2) - TMath::Power((W2 - M2) / (2.*sqs),2);
947 Q2.
max = TMath::Power(p3CM + p1CM,2) - TMath::Power((W2 - M2) / (2.*sqs),2);
949 SLOG(
"KineLimits",
pDEBUG) <<
"Nominal Q^2 limits: " << Q2.
min <<
" , " << Q2.
max;
951 Q2.
max = TMath::Max(0., Q2.
max);
952 Q2.
min = TMath::Max(0., Q2.
min);
955 if(Q2.
min < Q2min_cut) {Q2.
min = Q2min_cut; }
962 double Ev,
double M,
double ml,
double W,
double q2min_cut)
974 double Ev,
double M,
double ml,
double Q2min_cut)
983 if(W.
min<0)
return Q2;
990 double Ev,
double M,
double ml,
double q2min_cut)
1007 double Wmin = Wl.
min;
1008 double W2min = Wmin*Wmin;
1009 SLOG(
"KineLimits",
pDEBUG) <<
"W^2_min = " << W2min;
1011 SLOG(
"KineLimits",
pDEBUG) <<
"Q^2 range : " << Q2l.
min <<
" , " << Q2l.
max;
1014 x.
min = Q2l.
min / (Q2l.
min + W2min - M2);
1015 x.
max = Q2l.
max / (Q2l.
max + W2min - M2);
1025 double Wmin = Wl.
min;
1026 double W2min = Wmin*Wmin;
1030 y.
min = (Q2l.
min + W2min - M2) / (2*Ev*M);
1031 y.
max = (Q2l.
max + W2min - M2) / (2*Ev*M);
1038 double Ev,
double M,
double ml,
double x)
1049 double Wmin = Wl.
min;
1050 double W2min = Wmin*Wmin;
1053 y.
min = (W2min - M2) / (1.-x) / (2*Ev*M);
1054 y.
max = 2.* M * x *(Ev*Ev - ml2) / Ev / (2. * M * Ev * x + M2 * x * x + ml2);
1085 double Q2 = kinematics.
Q2();
1091 double x = kinematics.
x();
1092 double y = kinematics.
y();
1094 double Q2 = 2*Mn*Ev*x*y;
1097 SLOG(
"KineLimits",
pERROR) <<
"Couldn't compute Q^2 for \n"<< *interaction;
1114 double W = kinematics.
W();
1122 double x = kinematics.
x();
1123 double y = kinematics.
y();
1124 double W2 = TMath::Max(0., M2 + 2*Ev*M*y*(1-x));
1125 double W = TMath::Sqrt(W2);
1128 SLOG(
"KineLimits",
pERROR) <<
"Couldn't compute W for \n"<< *interaction;
1133 double Ev,
double M,
double W,
double Q2,
double & x,
double & y)
1140 double M2 = TMath::Power(M,2);
1141 double W2 = TMath::Power(W,2);
1143 x = Q2 / (W2-M2+
Q2);
1144 y = (W2-M2+
Q2) / (2*M*Ev);
1146 x = TMath::Min(1.,x);
1147 y = TMath::Min(1.,y);
1148 x = TMath::Max(0.,x);
1149 y = TMath::Max(0.,y);
1152 <<
"(W=" << W <<
",Q2=" << Q2 <<
") => (x="<< x <<
", y=" << y<<
")";
1156 double Ev,
double M,
double &
W,
double &
Q2,
double x,
double y)
1163 double M2 = TMath::Power(M,2);
1164 double W2 = M2 + 2*Ev*M*y*(1-x);
1166 W = TMath::Sqrt(TMath::Max(0., W2));
1170 <<
"(x=" << x <<
",y=" << y <<
" => (W=" << W <<
",Q2=" << Q2 <<
")";
1174 double Ev,
double M,
double &
W,
double Q2,
double x,
double & y)
1181 double M2 = TMath::Power(M,2);
1182 y = Q2 / (2 * x * M * Ev);
1183 y = TMath::Min(1.,y);
1185 double W2 = M2 + 2*Ev*M*y*(1-x);
1186 W = TMath::Sqrt(TMath::Max(0., W2));
1189 <<
"(x=" << x <<
",Q2=" << Q2 <<
" => (W=" << W <<
",Y=" << y <<
")";
1193 double Ev,
double M,
double x,
double y)
1199 double M2 = TMath::Power(M,2);
1200 double W2 = M2 + 2*Ev*M*y*(1-x);
1201 double W = TMath::Sqrt(TMath::Max(0., W2));
1203 LOG(
"KineLimits",
pDEBUG) <<
"(x=" << x <<
",y=" << y <<
") => W=" <<
W;
1209 double Ev,
double M,
double x,
double y)
1215 double Q2 = 2*x*y*M*Ev;
1217 LOG(
"KineLimits",
pDEBUG) <<
"(x=" << x <<
",y=" << y <<
") => Q2=" <<
Q2;
1223 double Ev,
double M,
double Q2,
double y)
1228 assert(Ev > 0. && M > 0. && Q2 > 0. && y > 0.);
1230 double x = Q2 / (2. * y * M * Ev);
1232 LOG(
"KineLimits",
pDEBUG) <<
"(Ev=" << Ev <<
",Q2=" << Q2
1233 <<
",y=" << y <<
",M=" << M <<
") => x=" << x;
1239 double x,
double Q2,
double M,
double mc)
1246 double M2 = TMath::Power(M,2);
1247 double v = 0.5*Q2/(M*x);
1248 double W2 = TMath::Max(0., M2+2*M*v-Q2);
1249 double W = TMath::Sqrt(W2);
1253 if(xc>=1 || W<=Wmin)
return false;
1258 double x,
double Q2,
double M,
double mc)
1265 double mc2 = TMath::Power(mc,2);
1266 double v = 0.5*Q2/(M*x);
1267 double xc = x + 0.5*mc2/(M*v);
1272 Range1D_t & range,
double min_cut,
double max_cut)
1283 if (min_cut > range.
max || max_cut < range.
min) {
1298 double x = kine->
x();
1299 double y = kine->
y();
1316 double W = kine->
W();
1317 double Q2 = kine->
Q2();
1334 double x = kine->
x();
1335 double Q2 = kine->
Q2();
1364 double y = kine->
y();
1365 double Q2 = kine->
Q2();
1373 double * x,
double * par)
1382 double xsmax = par[2];
1383 double Wmax = par[3];
1398 double hwfe = mD+2*gD;
1399 double lwfe = mD-gD/2;
1403 func = xsmax / (1 + 5* TMath::Power((W-lwfe)/gD,2));
1404 }
else if (W > hwfe) {
1406 func = xsmax / (1 + TMath::Power((W-hwfe)/gD,2));
1416 double plateau_edge = Wmax-0.1;
1418 if (W > plateau_edge) {
1423 func = xsmax / (1 + TMath::Power((W-plateau_edge)/gD,2));
1435 double * x,
double * par)
1442 double xpeak = par[0];
1443 double xmin = par[1];
1445 double xsmax = par[2];
1449 if(xb < xpeak/20.) {
1451 double plateau_edge = xpeak/20.;
1452 double slope = xsmax/(xmin - plateau_edge);
1453 func = xsmax - slope * (xb - plateau_edge);
1454 }
else if (xb > 2*xpeak) {
1456 double plateau_edge = 2*xpeak;
1457 double slope = xsmax/(xmax - plateau_edge);
1458 func = xsmax - slope * (xb - plateau_edge);
1467 double * x,
double * par)
1474 double xsmax = 3*par[0];
1477 if(yb<0.|| yb>1.)
return 0.;
1478 if(xb<0.|| xb>1.)
return 0.;
1480 if(Ev<1)
return xsmax;
1481 if(xb/Ev<1E-4 && yb>0.95)
return 5*xsmax;
1485 double yp = (Ev>2.5) ? 2.5/Ev : 1;
1492 xs0 = xsmax - (yb-yp)*xsmax;
1494 double d = TMath::Power( (xb-xp)/0.075, 2);
1498 func = xsmax - (yb-yp)*xsmax;
double COHImportanceSamplingEnvelope(double *x, double *par)
static const double kMaxX
double W(bool selected=false) const
const KPhaseSpace & PhaseSpace(void) const
bool TransformMatched(KinePhaseSpace_t ia, KinePhaseSpace_t ib, KinePhaseSpace_t a, KinePhaseSpace_t b, bool &fwd)
double J(double q0, double q3, double Enu, double ml)
Range1D_t InelXLim(double El, double ml, double M)
Range1D_t InelWLim(double El, double ml, double M)
void XQ2toWY(double Ev, double M, double &W, double Q2, double x, double &y)
void UpdateXYFromWQ2(const Interaction *in)
double Q2(const Interaction *const i)
Range1D_t Inelq2Lim_W(double El, double ml, double M, double W)
double DISImportanceSamplingEnvelope(double *x, double *par)
void SetQ2(double Q2, bool selected=false)
Kinematics * KinePtr(void) const
Range1D_t CohW2Lim(double Mn, double m_produced, double mlep, double Ev, double Q2)
Range1D_t InelWLim(double Ev, double M, double ml)
int RecoilNucleonPdg(void) const
recoil nucleon pdg
A simple [min,max] interval for doubles.
Range1D_t Darkq2Lim(double Ev, double M, double ml, double q2min_cut=-1 *controls::kMinQ2Limit)
bool IsQuasiElastic(void) const
static const double kMaxY
Range1D_t DarkQ2Lim_W(double Ev, double M, double ml, double W, double Q2min_cut=controls::kMinQ2Limit)
bool IsWithinLimits(double x, Range1D_t range)
static constexpr double s
Generated/set kinematical variables for an event.
static const double kPhotontest
TParticlePDG * Probe(void) const
double x(bool selected=false) const
static const double kLightestChmHad
static const double kMinQ2Limit
static const double kMinY
Range1D_t CEvNSQ2Lim(double Ev)
bool IsCoherentProduction(void) const
Range1D_t Q2Lim_W(void) const
Q2 limits @ fixed W.
Range1D_t InelQ2Lim(double Ev, double M, double ml, double Q2min_cut=controls::kMinQ2Limit)
enum genie::EKinePhaseSpace KinePhaseSpace_t
Range1D_t Limits(KineVar_t kvar) const
Return the kinematical variable limits.
void UpdateWYFromXQ2(const Interaction *in)
double XYtoW(double Ev, double M, double x, double y)
double PhaseSpaceVolume(const Interaction *const i, KinePhaseSpace_t ps)
Range1D_t InelQ2Lim_W(double Ev, double M, double ml, double W, double Q2min_cut=controls::kMinQ2Limit)
double y(bool selected=false) const
static constexpr double b
double W(const Interaction *const i)
Summary information for an interaction.
const TLorentzVector & HitNucP4(void) const
double SlowRescalingVar(double x, double Q2, double M, double mc)
Range1D_t InelXLim(double Ev, double M, double ml)
Range1D_t DarkQ2Lim(double Ev, double M, double ml, double Q2min_cut=controls::kMinQ2Limit)
Range1D_t Inelq2Lim_W(double Ev, double M, double ml, double W, double q2min_cut=-1 *controls::kMinQ2Limit)
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Range1D_t CohNuLim(double W2min, double W2max, double Q2, double Mn, double xsi)
bool KVSet(KineVar_t kv) const
double QD2toQ2(double QD2)
Exception used inside Interaction classes.
Range1D_t Darkq2Lim_W(double Ev, double M, double ml, double W, double q2min_cut=-1 *controls::kMinQ2Limit)
static constexpr double A
static string AsString(KinePhaseSpace_t kps)
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
double XYtoQ2(double Ev, double M, double x, double y)
void XYtoWQ2(double Ev, double M, double &W, double &Q2, double x, double y)
void WQ2toXY(double Ev, double M, double W, double Q2, double &x, double &y)
Range1D_t Cohq2Lim(double Mn, double m_produced, double mlep, double Ev)
const Kinematics & Kine(void) const
static const double kNeutronMass
static const double kMinX
double func(double x, double y)
static const double kASmallNum
double GetKV(KineVar_t kv) const
bool IsAboveCharmThreshold(double x, double Q2, double M, double mc)
static constexpr double ps
double Q2toQD2(double Q2)
Range1D_t InelQ2Lim(double El, double ml, double M)
Range1D_t Inelq2Lim(double El, double ml, double M)
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
void Setx(double x, bool selected=false)
static const double kMQD2
void UpdateWQ2FromXY(const Interaction *in)
Range1D_t InelYLim(double El, double ml, double M)
void SetW(double W, bool selected=false)
TLorentzVector * HitNucP4Ptr(void) const
Range1D_t InelQ2Lim_W(double El, double ml, double M, double W)
static PDGLibrary * Instance(void)
double CohW2Min(double Mn, double m_produced)
static const double kPionMass
Range1D_t InelYLim_X(double Ev, double M, double ml, double x)
double Q2YtoX(double Ev, double M, double Q2, double y)
Range1D_t CohYLim(double Mn, double m_produced, double mlep, double Ev, double Q2, double xsi)
Range1D_t DarkYLim(double Ev, double M, double ml)
void Sety(double y, bool selected=false)
void UpdateXFromQ2Y(const Interaction *in)
static const double kAVerySmallNum
Range1D_t InelYLim_X(double El, double ml, double M, double x)
Range1D_t CohQ2Lim(double Mn, double m_produced, double mlep, double Ev)
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) const
Range1D_t DarkYLim_X(double Ev, double M, double ml, double x)
Range1D_t Inelq2Lim(double Ev, double M, double ml, double q2min_cut=-1 *controls::kMinQ2Limit)
TParticlePDG * Find(int pdgc, bool must_exist=true)
double Q2(bool selected=false) const
const Target & Tgt(void) const
#define SLOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a short string (using the FUNCTION and...
Range1D_t InelYLim(double Ev, double M, double ml)
double ProbeE(RefFrame_t rf) const
Range1D_t DarkXLim(double Ev, double M, double ml)
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
void ApplyCutsToKineLimits(Range1D_t &r, double min, double max)
Range1D_t DarkWLim(double Ev, double M, double ml)
Initial State information.
double RESImportanceSamplingEnvelope(double *x, double *par)