17#include "Framework/Conventions/GBuild.h"
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;
164 fFKR.Lamda = sq2omg * mq_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;
218 double sig0 = 0.125*(g2/
kPi)*(-q2/Q2)*(W/Mnuc);
219 double scLR = W/Mnuc;
220 double scS = (Mnuc/W)*(-Q2/q2);
225#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
226 LOG(
"ReinSehgalRes",
pDEBUG) <<
"sig_{0} = " << sig0;
227 LOG(
"ReinSehgalRes",
pDEBUG) <<
"sig_{L} = " << sigL;
228 LOG(
"ReinSehgalRes",
pDEBUG) <<
"sig_{R} = " << sigR;
229 LOG(
"ReinSehgalRes",
pDEBUG) <<
"sig_{S} = " << sigS;
233 if (is_nu || is_lminus) {
234 xsec = sig0*(V2*sigR + U2*sigL + 2*UV*sigS);
237 if (is_nubar || is_lplus) {
238 xsec = sig0*(U2*sigR + V2*sigL + 2*UV*sigS);
240 xsec = TMath::Max(0.,xsec);
243 if(is_CC && is_delta) {
244 if((is_nu && is_p) || (is_nubar && is_n)) mult=3.0;
260#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
262 <<
"BreitWigner(RES=" << resname <<
", W=" << W <<
") = " << bw;
274 if(E <spl->XMax()) rf = spl->
Evaluate(E);
280 double xsec_scale = 1.;
286#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
288 <<
"\n d2xsec/dQ2dW" <<
"[" << interaction->
AsString()
289 <<
"](W=" << W <<
", q2=" << q2 <<
", E=" << E <<
") = " << xsec;
308 int NNucl = (is_p) ? Z : N;
328 double P_Fermi = 0.0;
342 if(is_p) { P_Fermi *= TMath::Power( 2.*Z/A, 1./3); }
343 else { P_Fermi *= TMath::Power( 2.*N/A, 1./3); }
346 double FactorPauli_RES = 1.0;
348 double k0 = 0., q = 0., q0 = 0.;
352 k0 = (W2-Mnuc2-Q2)/(2*W);
353 k = TMath::Sqrt(k0*k0+Q2);
359 FactorPauli_RES = 1.0;
360 if (2*P_Fermi >= k+q)
361 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);
362 if (2*P_Fermi >= k-q && 2*P_Fermi <= k+q)
363 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);
365 xsec *= FactorPauli_RES;
391 if (!is_pn)
return false;
394 bool is_weak = proc_info.
IsWeak();
395 bool is_em = proc_info.
IsEM();
399 if (!nu_weak && !l_em)
return false;
429 fMa2 = TMath::Power(ma,2);
430 fMv2 = TMath::Power(mv,2);
436 this->
GetParam(
"WeinbergAngle", thw ) ;
437 fSin48w = TMath::Power( TMath::Sin(thw), 4 );
440 fVud2 = TMath::Power( Vud, 2 );
456 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelCC",
"Default"));
458 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelNCp",
"Default"));
460 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelNCn",
"Default"));
462 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelEMp",
"Default"));
464 algf->
GetAlgorithm(
"genie::RSHelicityAmplModelEMn",
"Default"));
496 assert( std::getenv(
"GENIE") );
497 string base = std::getenv(
"GENIE") ;
499 string filename = base +
"/data/evgen/rein_sehgal/res/nutau_xsec_scaling_factors.dat";
501 <<
"Loading nu_tau xsec reduction spline from: " << filename;
504 filename = base +
"/data/evgen/rein_sehgal/res/nutaubar_xsec_scaling_factors.dat";
506 <<
"Loading bar{nu_tau} xsec reduction spline from: " << filename;
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils.
The GENIE Algorithm Factory.
const Algorithm * GetAlgorithm(const AlgId &algid)
static AlgFactory * Instance()
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
virtual void Configure(const Registry &config)
bool GetParamDef(const RgKey &name, T &p, const T &def) const
const Algorithm * SubAlg(const RgKey ®istry_key) const
Singleton class to load & serve tables of Fermi momentum constants.
const FermiMomentumTable * GetTable(string name)
static FermiMomentumTablePool * Instance(void)
A table of Fermi momentum constants.
double FindClosestKF(int target_pdgc, int nucleon_pdgc) const
Initial State information.
const Target & Tgt(void) const
double ProbeE(RefFrame_t rf) const
Summary information for an interaction.
string AsString(void) const
const XclsTag & ExclTag(void) const
const ProcessInfo & ProcInfo(void) const
const InitialState & InitState(void) const
Generated/set kinematical variables for an event.
double W(bool selected=false) const
double q2(bool selected=false) const
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
bool IsWeakNC(void) const
bool IsWeakCC(void) const
bool IsResonant(void) const
Pure abstract base class. Defines the RSHelicityAmplModelI interface.
virtual const RSHelicityAmpl & Compute(Resonance_t res, const FKR &fkr) const =0
A class holding the Rein-Sehgal's helicity amplitudes.
double Amp2Minus3(void) const
double Amp2Minus1(void) const
return |helicity amplitude|^2
double Amp2Plus3(void) const
double Amp20Minus(void) const
double Amp20Plus(void) const
double Amp2Plus1(void) const
A registry. Provides the container for algorithm configuration parameters.
bool fUsingNuTauScaling
use NeuGEN nutau xsec reduction factors?
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
double fXSecScaleCC
external CC xsec scaling factor
Spline * fNuTauRdSpl
xsec reduction spline for nu_tau
bool fUseRFGParametrization
use parametrization for fermi momentum insted of table?
const RSHelicityAmplModelI * fHAmplModelEMp
Spline * fNuTauBarRdSpl
xsec reduction spline for nu_tau_bar
double fWcut
apply DIS/RES joining scheme < Wcut
double fSin48w
sin^4(Weingberg angle)
bool fUsingDisResJoin
use a DIS/RES joining scheme?
bool fUsePauliBlocking
account for Pauli blocking?
double fMa2
(axial mass)^2
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
double fVud2
|Vud|^2(square of magnitude ud-element of CKM-matrix)
const RSHelicityAmplModelI * fHAmplModelNCn
double fN0ResMaxNWidths
limits allowed phase space for n=0 res
const RSHelicityAmplModelI * fHAmplModelEMn
const RSHelicityAmplModelI * fHAmplModelNCp
double fOmega
FKR parameter Omega.
string fKFTable
table of Fermi momentum (kF) constants for various nuclei
bool fNormBW
normalize resonance breit-wigner to 1?
double Integral(const Interaction *i) const
double fN2ResMaxNWidths
limits allowed phase space for n=2 res
double fGnResMaxNWidths
limits allowed phase space for other res
void Configure(const Registry &config)
const XSecIntegratorI * fXSecIntegrator
const RSHelicityAmplModelI * fHAmplModelCC
bool fWghtBW
weight with resonance breit-wigner?
double fMv2
(vector mass)^2
double fXSecScaleNC
external NC xsec scaling factor
double fZeta
FKR parameter Zeta.
virtual ~ReinSehgalRESPXSec()
double fXSecScaleEM
external EM xsec scaling factor
A numeric analysis tool class for interpolating 1-D functions.
double Evaluate(double x) const
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
int HitNucPdg(void) const
double HitNucMass(void) const
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
Cross Section Integrator Interface.
Contains minimal information for tagging exclusive processes.
Resonance_t Resonance(void) const
bool KnownResonance(void) const
static const double kPionMass2
static const double kAem2
static const double kSqrt2
bool IsAntiNuTau(int pdgc)
bool IsNegChargedLepton(int pdgc)
bool IsNeutrino(int pdgc)
int IonPdgCode(int A, int Z)
bool IsPosChargedLepton(int pdgc)
bool IsChargedLepton(int pdgc)
bool IsNeutralLepton(int pdgc)
bool IsAntiNeutrino(int pdgc)
double BreitWignerLGamma(double W, int L, double mass, double width0, double norm)
double BreitWignerL(double W, int L, double mass, double width0, double norm)
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
double FermiMomentumForIsoscalarNucleonParametrization(const Target &target)
bool IsDelta(Resonance_t res)
is it a Delta resonance?
double BWNorm(Resonance_t res, double N0ResMaxNWidths=6, double N2ResMaxNWidths=2, double GnResMaxNWidths=4)
breit-wigner normalization factor
double Width(Resonance_t res)
resonance width (GeV)
double Mass(Resonance_t res)
resonance mass (GeV)
int OrbitalAngularMom(Resonance_t res)
orbital angular momentum
int ResonanceIndex(Resonance_t res)
resonance idx, quark model / SU(6)
const char * AsString(Resonance_t res)
resonance id -> string
THE MAIN GENIE PROJECT NAMESPACE
enum genie::EResonance Resonance_t
enum genie::EKinePhaseSpace KinePhaseSpace_t
const UInt_t kISkipProcessChk
if set, skip process validity checks
const UInt_t kIAssumeFreeNucleon