17 #include "Framework/Conventions/GBuild.h"
38 using namespace genie;
39 using namespace genie::constants;
68 const InitialState & init_state = interaction -> InitState();
69 const ProcessInfo & proc_info = interaction -> ProcInfo();
73 const Kinematics & kinematics = interaction -> Kine();
74 double W = kinematics.
W();
75 double q2 = kinematics.
q2();
80 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
82 <<
"RES/DIS Join Scheme: XSec[RES, W=" << W
83 <<
" >= Wcut=" <<
fWcut <<
"] = 0";
96 int probepdgc = init_state.
ProbePdg();
105 bool is_EM = proc_info.
IsEM();
107 if(is_CC && !is_delta) {
108 if((is_nu && is_p) || (is_nubar && is_n))
return 0;
130 double W2 = TMath::Power(W, 2);
131 double Mnuc2 = TMath::Power(Mnuc, 2);
132 double k = 0.5 * (W2 - Mnuc2)/Mnuc;
133 double v = k - 0.5 * q2/Mnuc;
134 double v2 = TMath::Power(v, 2);
136 double Q = TMath::Sqrt(Q2);
137 double Eprime = E - v;
138 double U = 0.5 * (E + Eprime + Q) / E;
139 double V = 0.5 * (E + Eprime - Q) / E;
140 double U2 = TMath::Power(U, 2);
141 double V2 = TMath::Power(V, 2);
144 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
146 <<
"Kinematical params V = " << V <<
", U = " << U;
151 double Go = TMath::Power(1 - 0.25 * q2/Mnuc2, 0.5-IR);
152 double GV = Go * TMath::Power( 1./(1-q2/
fMv2), 2);
153 double GA = Go * TMath::Power( 1./(1-q2/
fMa2), 2);
159 double d = TMath::Power(W+Mnuc,2.) - q2;
160 double sq2omg = TMath::Sqrt(2./
fOmega);
161 double nomg = IR *
fOmega;
162 double mq_w = Mnuc*Q/
W;
165 fFKR.
Tv = GV / (3.*W*sq2omg);
167 fFKR.
S = (-q2/
Q2) * (3*W*Mnuc + q2 - Mnuc2) * GV / (6*Mnuc2);
168 fFKR.
Ta = (2./3.) * (
fZeta/sq2omg) * mq_w * GA / d;
170 fFKR.
B =
fZeta/(3.*W*sq2omg) * (1 + (W2-Mnuc2+q2)/ d) * GA;
171 fFKR.
C =
fZeta/(6.*Q) * (W2 - Mnuc2 + nomg*(W2-Mnuc2+q2)/d) * (GA/Mnuc);
179 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
181 <<
"FKR params for RES = " << resname <<
" : " <<
fFKR;
204 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
206 <<
"Helicity Amplitudes for RES = " << resname <<
" : " << hampl;
228 double sig0 = 0.125*(g2/
kPi)*(-q2/Q2)*(W/Mnuc);
229 double scLR = W/Mnuc;
230 double scS = (Mnuc/
W)*(-Q2/q2);
231 double sigL = scLR* (hampl.Amp2Plus3 () + hampl.Amp2Plus1 ());
232 double sigR = scLR* (hampl.Amp2Minus3() + hampl.Amp2Minus1());
233 double sigS = scS * (hampl.Amp20Plus () + hampl.Amp20Minus());
235 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
236 LOG(
"ReinSehgalRes",
pDEBUG) <<
"sig_{0} = " << sig0;
237 LOG(
"ReinSehgalRes",
pDEBUG) <<
"sig_{L} = " << sigL;
238 LOG(
"ReinSehgalRes",
pDEBUG) <<
"sig_{R} = " << sigR;
239 LOG(
"ReinSehgalRes",
pDEBUG) <<
"sig_{S} = " << sigS;
243 if (is_nu || is_lminus) {
244 xsec = sig0*(V2*sigR + U2*sigL + 2*UV*sigS);
247 if (is_nubar || is_lplus) {
248 xsec = sig0*(U2*sigR + V2*sigL + 2*UV*sigS);
250 xsec = TMath::Max(0.,xsec);
253 if(is_CC && is_delta) {
254 if((is_nu && is_p) || (is_nubar && is_n)) mult=3.0;
270 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
272 <<
"BreitWigner(RES=" << resname <<
", W=" << W <<
") = " << bw;
284 if(E <spl->XMax()) rf = spl->
Evaluate(E);
290 double xsec_scale = 1.;
296 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
298 <<
"\n d2xsec/dQ2dW" <<
"[" << interaction->
AsString()
299 <<
"](W=" << W <<
", q2=" << q2 <<
", E=" << E <<
") = " << xsec;
318 int NNucl = (is_p) ? Z : N;
338 double P_Fermi = 0.0;
352 if(is_p) { P_Fermi *= TMath::Power( 2.*Z/A, 1./3); }
353 else { P_Fermi *= TMath::Power( 2.*N/A, 1./3); }
356 double FactorPauli_RES = 1.0;
358 double k0 = 0., q = 0., q0 = 0.;
362 k0 = (W2-Mnuc2-
Q2)/(2*W);
363 k = TMath::Sqrt(k0*k0+Q2);
369 FactorPauli_RES = 1.0;
370 if (2*P_Fermi >= k+q)
371 FactorPauli_RES = ((3*k*k+q*q)/(2*P_Fermi)-(5*TMath::Power(k,4)+TMath::Power(q,4)+10*k*k*q*q)/(40*TMath::Power(P_Fermi,3)))/(2*k);
372 if (2*P_Fermi >= k-q && 2*P_Fermi <= k+q)
373 FactorPauli_RES = ((q+k)*(q+k)-4*P_Fermi*P_Fermi/5-TMath::Power(k-q, 3)/(2*P_Fermi)+TMath::Power(k-q, 5)/(40*TMath::Power(P_Fermi, 3)))/(4*q*k);
375 xsec *= FactorPauli_RES;
401 if (!is_pn)
return false;
404 bool is_weak = proc_info.
IsWeak();
405 bool is_em = proc_info.
IsEM();
409 if (!nu_weak && !l_em)
return false;
439 fMa2 = TMath::Power(ma,2);
440 fMv2 = TMath::Power(mv,2);
446 this->
GetParam(
"WeinbergAngle", thw ) ;
447 fSin48w = TMath::Power( TMath::Sin(thw), 4 );
450 fVud2 = TMath::Power( Vud, 2 );
466 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelCC",
"Default"));
468 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelNCp",
"Default"));
470 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelNCn",
"Default"));
472 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelEMp",
"Default"));
474 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelEMn",
"Default"));
506 assert( std::getenv(
"GENIE") );
507 string base = std::getenv(
"GENIE") ;
509 string filename = base +
"/data/evgen/rein_sehgal/res/nutau_xsec_scaling_factors.dat";
511 <<
"Loading nu_tau xsec reduction spline from: " << filename;
514 filename = base +
"/data/evgen/rein_sehgal/res/nutaubar_xsec_scaling_factors.dat";
516 <<
"Loading bar{nu_tau} xsec reduction spline from: " << filename;
bool IsDelta(Resonance_t res)
is it a Delta resonance?
bool IsResonant(void) const
Cross Section Calculation Interface.
double W(bool selected=false) const
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
bool fNormBW
normalize resonance breit-wigner to 1?
bool IsWeakCC(void) const
static const double kSqrt2
bool IsNeutrino(int pdgc)
virtual ~ReinSehgalRESPXSec()
double J(double q0, double q3, double Enu, double ml)
Spline * fNuTauBarRdSpl
xsec reduction spline for nu_tau_bar
Cross Section Integrator Interface.
double Q2(const Interaction *const i)
bool fWghtBW
weight with resonance breit-wigner?
int HitNucPdg(void) const
const RSHelicityAmplModelI * fHAmplModelEMn
const RSHelicityAmplModelI * fHAmplModelNCp
double fVud2
|Vud|^2(square of magnitude ud-element of CKM-matrix)
virtual const RSHelicityAmpl & Compute(Resonance_t res, const FKR &fkr) const =0
bool KnownResonance(void) const
double HitNucMass(void) const
A numeric analysis tool class for interpolating 1-D functions.
static FermiMomentumTablePool * Instance(void)
Generated/set kinematical variables for an event.
bool IsAntiNuTau(int pdgc)
bool IsChargedLepton(int pdgc)
double Mass(Resonance_t res)
resonance mass (GeV)
A table of Fermi momentum constants.
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
double Width(Resonance_t res)
resonance width (GeV)
double fMv2
(vector mass)^2
double BreitWignerLGamma(double W, int L, double mass, double width0, double norm)
double Evaluate(double x) const
double BreitWignerL(double W, int L, double mass, double width0, double norm)
enum genie::EKinePhaseSpace KinePhaseSpace_t
const RSHelicityAmplModelI * fHAmplModelCC
double BWNorm(Resonance_t res, double N0ResMaxNWidths=6, double N2ResMaxNWidths=2, double GnResMaxNWidths=4)
breit-wigner normalization factor
enum genie::EResonance Resonance_t
const RSHelicityAmplModelI * fHAmplModelNCn
string AsString(void) const
Contains minimal information for tagging exclusive processes.
double Integral(const Interaction *i) const
const RSHelicityAmplModelI * fHAmplModelEMp
double W(const Interaction *const i)
double fZeta
FKR parameter Zeta.
bool IsPosChargedLepton(int pdgc)
Summary information for an interaction.
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
double q2(bool selected=false) const
A class holding the Rein-Sehgal's helicity amplitudes.
bool IsWeakNC(void) const
Singleton class to load & serve tables of Fermi momentum constants.
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
static constexpr double A
const FermiMomentumTable * GetTable(string name)
static const double kAem2
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
double fWcut
apply DIS/RES joining scheme < Wcut
bool IsAntiNeutrino(int pdgc)
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
const Algorithm * GetAlgorithm(const AlgId &algid)
int OrbitalAngularMom(Resonance_t res)
orbital angular momentum
Pure abstract base class. Defines the RSHelicityAmplModelI interface.
Resonance_t Resonance(void) const
bool IsNeutralLepton(int pdgc)
double FermiMomentumForIsoscalarNucleonParametrization(const Target &target)
const XSecIntegratorI * fXSecIntegrator
double fXSecScaleCC
external CC xsec scaling factor
static AlgFactory * Instance()
double fOmega
FKR parameter Omega.
bool fUseRFGParametrization
use parametrization for fermi momentum insted of table?
A registry. Provides the container for algorithm configuration parameters.
bool fUsingDisResJoin
use a DIS/RES joining scheme?
const UInt_t kIAssumeFreeNucleon
const XclsTag & ExclTag(void) const
double fXSecScaleEM
external EM xsec scaling factor
int IonPdgCode(int A, int Z)
double fSin48w
sin^4(Weingberg angle)
double fN0ResMaxNWidths
limits allowed phase space for n=0 res
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
const InitialState & InitState(void) const
const char * AsString(Resonance_t res)
resonance id -> string
double fGnResMaxNWidths
limits allowed phase space for other res
const ProcessInfo & ProcInfo(void) const
double FindClosestKF(int target_pdgc, int nucleon_pdgc) const
bool GetParamDef(const RgKey &name, T &p, const T &def) const
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
const Target & Tgt(void) const
void Configure(const Registry &config)
The GENIE Algorithm Factory.
double fXSecScaleNC
external NC xsec scaling factor
double fMa2
(axial mass)^2
bool fUsingNuTauScaling
use NeuGEN nutau xsec reduction factors?
string fKFTable
table of Fermi momentum (kF) constants for various nuclei
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...
bool IsNegChargedLepton(int pdgc)
const UInt_t kISkipProcessChk
if set, skip process validity checks
int ResonanceIndex(Resonance_t res)
resonance idx, quark model / SU(6)
bool fUsePauliBlocking
account for Pauli blocking?
Initial State information.
double fN2ResMaxNWidths
limits allowed phase space for n=2 res
Spline * fNuTauRdSpl
xsec reduction spline for nu_tau
static const double kPionMass2
const Algorithm * SubAlg(const RgKey ®istry_key) const