14 #include "Framework/Conventions/GBuild.h"
32 using namespace genie;
33 using namespace genie::constants;
34 using namespace genie::utils;
68 double q2 = kinematics.
q2();
73 double Mnuc2 = TMath::Power(Mnuc,2);
78 double ml2 = TMath::Power(ml,2);
80 double M2 = (
this)->
MHyperon(interaction);
81 double v = (TMath::Power(M2,2) - Mnuc2 - q2) / (2*Mnuc);
82 double v2 = TMath::Power(v,2);
83 double s = Mnuc2 + 2*Mnuc*E;
84 double u = Mnuc2 + ml2 + 2*v*Mnuc - 2*Mnuc*E;
88 int sign = (is_neutrino) ? -1 : 1;
102 double Mm2 = TMath::Power(Mm, 2);
103 double Mp2 = TMath::Power(Mp, 2);
106 double FA2 = TMath::Power(FA, 2);
111 double w1 = (Mm2 - q2)/(4*Mnuc2)*TMath::Power((F1V + xiF2V), 2) + (Mp2 - q2)/(4*Mnuc2) * FA2;
112 double w2 = FA2 + TMath::Power((F1V + xiF2V - Mp * xiF2V / (2 * Mnuc)), 2) - q2 / Mnuc2 * TMath::Power((xiF2V / 2), 2);
113 double w3 = 2 * FA * (F1V + xiF2V);
115 double xsec = Gf*
fSin8c2 / (16*Mnuc2*E2) * (-8*Mnuc2*q2*w1 - 4*(Mnuc2*v2 - q2)*w2 - sign*2*(s - u)*q2*w3 + (s-u)*(s-u)*w2);
116 xsec = TMath::Max(xsec,0.);
167 if(!is_exclusive_strange)
return false;
170 if(!proc_info.
IsWeak())
return false;
195 double MR =
this ->
MHyperon (interaction);
198 double Mnuc2 = TMath::Power(Mnuc,2);
201 double ER = ( TMath::Power(MR+ml,2) - Mnuc2 ) / (2*Mnuc);
203 if(E <= ER)
return false;
225 fSin8c2 = TMath::Power(TMath::Sin(thc), 2);
229 this->
SubAlg(
"FormFactorsAlg"));
Cross Section Calculation Interface.
bool IsNeutrino(int pdgc)
double J(double q0, double q3, double Enu, double ml)
Cross Section Integrator Interface.
void Configure(const Registry &config)
int HitNucPdg(void) const
bool IsQuasiElastic(void) const
double HitNucMass(void) const
bool IsStrangeEvent(void) const
static constexpr double s
Generated/set kinematical variables for an event.
enum genie::EKinePhaseSpace KinePhaseSpace_t
Contains minimal information for tagging exclusive processes.
Summary information for an interaction.
double MHyperon(const Interaction *interaction) const
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
double q2(bool selected=false) const
int StrangeHadronPdg(void) const
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
const Kinematics & Kine(void) const
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
const UInt_t kISkipKinematicChk
if set, skip kinematic validity checks
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
double Integral(const Interaction *i) const
bool IsInclusiveStrange(void) const
TLorentzVector * HitNucP4Ptr(void) const
static PDGLibrary * Instance(void)
bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
A registry. Provides the container for algorithm configuration parameters.
QELFormFactors fFormFactors
const UInt_t kIAssumeFreeNucleon
const XclsTag & ExclTag(void) const
virtual ~PaisQELLambdaPXSec()
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) const
TParticlePDG * Find(int pdgc, bool must_exist=true)
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
const Target & Tgt(void) const
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
double ProbeE(RefFrame_t rf) const
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
const XSecIntegratorI * fXSecIntegrator
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
const UInt_t kISkipProcessChk
if set, skip process validity checks
Initial State information.
const QELFormFactorsModelI * fFormFactorsModel
const Algorithm * SubAlg(const RgKey ®istry_key) const