17 #include "Framework/Conventions/GBuild.h"    38 using namespace genie;
    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;
   290   double xsec_scale = 1.;
   295 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__   297     << 
"\n d2xsec/dQ2dW"  << 
"[" << interaction->
AsString()
   298           << 
"](W=" << W << 
", q2=" << q2 << 
", E=" << E << 
") = " << xsec;
   317   int NNucl = (is_p) ? Z : N;
   337      double P_Fermi = 0.0;
   351         if(is_p) { P_Fermi *= TMath::Power( 2.*Z/A, 1./3); }
   352         else     { P_Fermi *= TMath::Power( 2.*N/A, 1./3); }
   355      double FactorPauli_RES = 1.0;
   357      double k0 = 0., q = 0., q0 = 0.;
   361         k0 = (W2-Mnuc2-
Q2)/(2*W);
   362         k = TMath::Sqrt(k0*k0+Q2);                  
   368         FactorPauli_RES = 1.0;
   369      if (2*P_Fermi >= k+q)
   370         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);
   371      if (2*P_Fermi >= k-q && 2*P_Fermi <= k+q)
   372         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);
   374      xsec *= FactorPauli_RES;
   400   if (!is_pn) 
return false;
   403   bool is_weak = proc_info.
IsWeak();
   404   bool is_em   = proc_info.
IsEM();
   408   if (!nu_weak && !l_em) 
return false;
   437   fMa2 = TMath::Power(ma,2);
   438   fMv2 = TMath::Power(mv,2);
   444   this->
GetParam( 
"WeinbergAngle", thw ) ;
   445   fSin48w = TMath::Power( TMath::Sin(thw), 4 );
   448   fVud2 = TMath::Power( Vud, 2 );
   464       algf->
GetAlgorithm(
"genie::RSHelicityAmplModelCC",
"Default"));
   466       algf->
GetAlgorithm(
"genie::RSHelicityAmplModelNCp",
"Default"));
   468       algf->
GetAlgorithm(
"genie::RSHelicityAmplModelNCn",
"Default"));
   470       algf->
GetAlgorithm(
"genie::RSHelicityAmplModelEMp",
"Default"));
   472       algf->
GetAlgorithm(
"genie::RSHelicityAmplModelEMn",
"Default"));
   507      string filename = base + 
"/data/evgen/rein_sehgal/res/nutau_xsec_scaling_factors.dat";
   509                 << 
"Loading nu_tau xsec reduction spline from: " << 
filename;
   512      filename = base + 
"/data/evgen/rein_sehgal/res/nutaubar_xsec_scaling_factors.dat";
   514            << 
"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. 
virtual const RSHelicityAmpl & Compute(Resonance_t res, const FKR &fkr) const  =0
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)
THE MAIN GENIE PROJECT NAMESPACE 
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) 
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 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...
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 
std::string getenv(std::string const &name)
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 
int IonPdgCode(int A, int Z)
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const  =0
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 
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