22#include "Framework/Conventions/GBuild.h"
48 vol =
Q2.max -
Q2.min;
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; }
412 if(
Q2.max <
Q2.min ) {
Q2.min = -1;
Q2.max = -1;}
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);
602 if(
Q2.max <
Q2.min ) {
Q2.min = -1;
Q2.max = -1;}
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; }
956 if(
Q2.max <
Q2.min ) {
Q2.min = -1;
Q2.max = -1;}
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);
1094 double Q2 = 2*Mn*Ev*x*y;
1097 SLOG(
"KineLimits",
pERROR) <<
"Couldn't compute Q^2 for \n"<< *interaction;
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;
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
#define SLOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a short string (using the FUNCTION and...
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils.
Initial State information.
const Target & Tgt(void) const
TParticlePDG * Probe(void) const
double ProbeE(RefFrame_t rf) const
Summary information for an interaction.
const Kinematics & Kine(void) const
int RecoilNucleonPdg(void) const
recoil nucleon pdg
const ProcessInfo & ProcInfo(void) const
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
const KPhaseSpace & PhaseSpace(void) const
const InitialState & InitState(void) const
Kinematics * KinePtr(void) const
Range1D_t Q2Lim_W(void) const
Q2 limits @ fixed W.
Range1D_t Limits(KineVar_t kvar) const
Return the kinematical variable limits.
static string AsString(KinePhaseSpace_t kps)
Generated/set kinematical variables for an event.
void Setx(double x, bool selected=false)
void SetQ2(double Q2, bool selected=false)
bool KVSet(KineVar_t kv) const
double Q2(bool selected=false) const
double y(bool selected=false) const
double GetKV(KineVar_t kv) const
double W(bool selected=false) const
void Sety(double y, bool selected=false)
void SetW(double W, bool selected=false)
double x(bool selected=false) const
static PDGLibrary * Instance(void)
TParticlePDG * Find(int pdgc, bool must_exist=true)
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
bool IsCoherentProduction(void) const
bool IsQuasiElastic(void) const
A simple [min,max] interval for doubles.
const TLorentzVector & HitNucP4(void) const
TLorentzVector * HitNucP4Ptr(void) const
Exception used inside Interaction classes.
double func(double x, double y)
static const double kLightestChmHad
static const double kPhotontest
static const double kPionMass
static const double kNeutronMass
static const double kMaxX
static const double kMinX
static const double kMaxY
static const double kAVerySmallNum
static const double kASmallNum
static const double kMQD2
static const double kMinY
Range1D_t InelXLim(double El, double ml, double M)
Range1D_t InelWLim(double El, double ml, double M)
Range1D_t Inelq2Lim(double El, double ml, double M)
Range1D_t Inelq2Lim_W(double El, double ml, double M, double W)
Range1D_t InelQ2Lim_W(double El, double ml, double M, double W)
Range1D_t InelYLim(double El, double ml, double M)
Range1D_t InelQ2Lim(double El, double ml, double M)
Range1D_t InelYLim_X(double El, double ml, double M, double x)
static const double kMinQ2Limit
Range1D_t CohW2Lim(double Mn, double m_produced, double mlep, double Ev, double Q2)
double CohW2Min(double Mn, double m_produced)
Range1D_t InelQ2Lim(double Ev, double M, double ml, double Q2min_cut=controls::kMinQ2Limit)
double Q2YtoX(double Ev, double M, double Q2, double y)
void UpdateXYFromWQ2(const Interaction *in)
Range1D_t DarkWLim(double Ev, double M, double ml)
Range1D_t Cohq2Lim(double Mn, double m_produced, double mlep, double Ev)
double SlowRescalingVar(double x, double Q2, double M, double mc)
void UpdateWQ2FromXY(const Interaction *in)
double W(const Interaction *const i)
void WQ2toXY(double Ev, double M, double W, double Q2, double &x, double &y)
Range1D_t Darkq2Lim(double Ev, double M, double ml, double q2min_cut=-1 *controls::kMinQ2Limit)
Range1D_t DarkQ2Lim_W(double Ev, double M, double ml, double W, double Q2min_cut=controls::kMinQ2Limit)
bool IsAboveCharmThreshold(double x, double Q2, double M, double mc)
double QD2toQ2(double QD2)
double COHImportanceSamplingEnvelope(double *x, double *par)
Range1D_t CEvNSQ2Lim(double Ev)
void XYtoWQ2(double Ev, double M, double &W, double &Q2, double x, double y)
void UpdateWYFromXQ2(const Interaction *in)
double DISImportanceSamplingEnvelope(double *x, double *par)
Range1D_t DarkYLim_X(double Ev, double M, double ml, double x)
double XYtoW(double Ev, double M, double x, 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)
double Q2(const Interaction *const i)
Range1D_t CohNuLim(double W2min, double W2max, double Q2, double Mn, double xsi)
Range1D_t InelWLim(double Ev, double M, double ml)
void ApplyCutsToKineLimits(Range1D_t &r, double min, double max)
Range1D_t DarkQ2Lim(double Ev, double M, double ml, double Q2min_cut=controls::kMinQ2Limit)
bool TransformMatched(KinePhaseSpace_t ia, KinePhaseSpace_t ib, KinePhaseSpace_t a, KinePhaseSpace_t b, bool &fwd)
Range1D_t Inelq2Lim(double Ev, double M, double ml, double q2min_cut=-1 *controls::kMinQ2Limit)
Range1D_t CohQ2Lim(double Mn, double m_produced, double mlep, double Ev)
Range1D_t DarkXLim(double Ev, double M, double ml)
Range1D_t Darkq2Lim_W(double Ev, double M, double ml, double W, double q2min_cut=-1 *controls::kMinQ2Limit)
void UpdateXFromQ2Y(const Interaction *in)
double RESImportanceSamplingEnvelope(double *x, double *par)
double PhaseSpaceVolume(const Interaction *const i, KinePhaseSpace_t ps)
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
Range1D_t InelYLim_X(double Ev, double M, double ml, double x)
Range1D_t InelXLim(double Ev, double M, double ml)
Range1D_t InelQ2Lim_W(double Ev, double M, double ml, double W, double Q2min_cut=controls::kMinQ2Limit)
double XYtoQ2(double Ev, double M, double x, double y)
Range1D_t Inelq2Lim_W(double Ev, double M, double ml, double W, double q2min_cut=-1 *controls::kMinQ2Limit)
void XQ2toWY(double Ev, double M, double &W, double Q2, double x, double &y)
double Q2toQD2(double Q2)
Range1D_t InelYLim(double Ev, double M, double ml)
bool IsWithinLimits(double x, Range1D_t range)
THE MAIN GENIE PROJECT NAMESPACE
enum genie::EKinePhaseSpace KinePhaseSpace_t