54 const InitialState & init_state = interaction -> InitState();
57 const bool isProt = target.
IsProton();
59 const double q2 = kine.
q2();
66 const double Ee = Ev + ( (q2 - mn2 + mp2) / (2.000*mp) );
68 * (isProt ? 1.000 : -1.000);
69 const double sMinusMp2 = 2.000*mp*Ev;
71#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
72 LOG(
"StrumiaVissani",
pDEBUG) <<
"*** Ev = " << Ev
75 <<
", s-u = " << sMinusU
76 <<
", s-Mp2 = " << sMinusMp2;
79 double xsec =
dSigDt(sMinusU, sMinusMp2, q2);
80#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
81 LOG(
"StrumiaVissani",
pDEBUG) <<
"*** dSdt = " << xsec;
88#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
89 LOG(
"StrumiaVissani",
pDEBUG) <<
"*** rad.corr. = " << rdcf
90 <<
", fin.st.cor. = " << fscf
91 <<
", xsec = " << xsec;
99#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
100 LOG(
"StrumiaVissani",
pDEBUG) <<
"*** Jacobian = " << J;
104#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
105 LOG(
"StrumiaVissani",
pDEBUG) <<
"*** xsec = " << xsec;
114 assert(interaction!=0);
131 const InitialState & init_state = interaction -> InitState();
132 const Target & target = init_state.
Tgt();
136 LOG(
"StrumiaVissani",
pERROR) <<
"*** Should be IBD processes either nu_e + n or anu_e + p!";
144 const InitialState & init_state = interaction -> InitState();
148 LOG(
"StrumiaVissani",
pERROR) <<
"*** Ev=" << Ev
149 <<
" is too large for VLE QEL!";
176 const double cosCab = TMath::Cos(cab);
190 GetParam(
"AnomMagnMoment-P", mup );
191 GetParam(
"AnomMagnMoment-N", mun );
197 fEpsilon = TMath::Power(10.000, -1.000 *
static_cast<double>(epmag) );
199 LOG(
"StrumiaVissani",
pINFO) <<
"*** USING: cos2(Cabibbo)="
215 const double sMinusMnuc,
216 const double t)
const
226 const double denom = (2.000 *
kPi) * sMinusMnuc*sMinusMnuc;
227 assert(TMath::Abs(denom) >
fEpsilon);
229 return ( (numer / denom) *
MtxElm(sMinusU, t) );
233 const double t)
const
246 const double t2 = t * t;
248 const double fdenomB = 1.000 - (t /
fMv2);
249 const double fdenom = (1.000 - t4m)*fdenomB*fdenomB;
250 const double g1denom = 1.000 - (t /
fMa2);
252 assert(TMath::Abs(fdenom) >
fEpsilon);
253 assert(TMath::Abs(g1denom) >
fEpsilon);
254 assert(TMath::Abs(g2denom) >
fEpsilon);
256 const double f1 = (1.000 - ( (1.000+
fNucleonMMDiff) * t4m)) / fdenom;
258 const double g1 =
fg1of0 / (g1denom*g1denom);
261 const double f12 = f1 * f1;
262 const double f124 = 4.000 * f12;
263 const double f22 = f2 * f2;
264 const double g12 = g1 * g1;
265 const double g124 = 4.000 * g12;
266 const double g22 = g2 * g2;
269 const double g1cFsumR = g1 * (f1+f2);
270 const double f1cf2 = f1 * f2;
271 const double g1cg2 = g1 * g2;
272 const double f1cf2R8 = f1cf2 * 8.000;
275#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
276 LOG(
"StrumiaVissani",
pDEBUG) <<
"*** t = " << t
284 const double mat =
MAterm(t, t2, f124, f22, g124,
285 g224meM2, f1cf2R8, g1cg2R16me, g1cFsumR);
286 const double mbt =
MBterm(t, f1cf2, g1cg2, g1cFsumR, f22);
287 const double mct =
MCterm(t, f124, f22, g124);
289 const double M2 = mat - (sMinusU * (mbt - (sMinusU * mct)));
290#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
291 LOG(
"StrumiaVissani",
pDEBUG) <<
"*** Matrix element = " << (M2 / 16.000)
292 <<
" [16A=" << mat <<
"] [16B=" << mbt
293 <<
"] [16C=" << mct <<
"]";
296 return ( M2 / 16.000 );
304 const double g224meM2,
305 const double f1cf2R8,
306 const double g1cg2R16me,
307 const double g1cFsumR)
328 r2 += g224meM2 * tmme2;
336 return ( r1 - r2 - r3 );
342 const double g1cFsumR,
348 double bterm = 16.000 * t * g1cFsumR;
371 double rc = 6.000 + (1.500 * TMath::Log(
kProtonMass / (2.000*Ee)));
385 const double eta = 2.000*
kPi*
kAem
387 const double expn = TMath::Exp(-1.000 * eta);
388 assert(expn < 1.000);
389 return ( eta / (1.000 - expn) );
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
ClassImp(StrumiaVissaniIBDPXSec) StrumiaVissaniIBDPXSec
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
virtual void Configure(const Registry &config)
const Algorithm * SubAlg(const RgKey ®istry_key) const
Initial State information.
const Target & Tgt(void) const
bool IsNuN(void) const
is neutrino + neutron?
double ProbeE(RefFrame_t rf) const
bool IsNuBarP(void) const
is anti-neutrino + proton?
Summary information for an interaction.
const Kinematics & Kine(void) const
const ProcessInfo & ProcInfo(void) const
const KPhaseSpace & PhaseSpace(void) const
bool IsAboveThreshold(void) const
Checks whether the interaction is above the energy threshold.
Generated/set kinematical variables for an event.
double q2(bool selected=false) const
bool IsInverseBetaDecay(void) const
A registry. Provides the container for algorithm configuration parameters.
An implementation of the neutrino - (free) nucleon [inverse beta decay] cross section,...
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
void Configure(const Registry &config)
double dSigDt(const double sMinusU, const double sMinusMnuc, const double t) const
double RadiativeCorr(const double Ee) const
double Integral(const Interaction *i) const
static double MAterm(const double t, const double t2, const double f124, const double f22, const double g124, const double g224meM2, const double f1cf2R8, const double g1cg2R16me, const double g1cFsumR)
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
double MtxElm(const double sMinusU, const double t) const
double FinalStateCorr(const double Ee) const
static double MBterm(const double t, const double f1cf2, const double g1cg2, const double g1cFsumR, const double f22)
static double MCterm(const double t, const double f124, const double f22, const double g124)
virtual ~StrumiaVissaniIBDPXSec()
const XSecIntegratorI * fXSecIntegrator
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
bool IsNeutron(void) const
bool IsProton(void) const
Cross Section Calculation Interface.
Cross Section Integrator Interface.
static const double k4EleMass2
static const double kPionMass2
static const double kNucMassDiff
static const double k4NucMass2
static const double kNucleonMass
static const double kNeutronMass2
static const double kElectronMass2
static const double kNucMassDiff2
static const double kNucleonMass2
static const double kElectronMass
static const double kNeutronMass
static const double kProtonMass2
static const double kProtonMass
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
THE MAIN GENIE PROJECT NAMESPACE
enum genie::EKinePhaseSpace KinePhaseSpace_t
const UInt_t kISkipKinematicChk
if set, skip kinematic validity checks
const UInt_t kISkipProcessChk
if set, skip process validity checks