GENIEGenerator
Loading...
Searching...
No Matches
genie::ReinSehgalRESPXSec Class Reference

Computes the double differential cross section for resonance electro- or neutrino-production according to the Rein-Sehgal model. More...

#include <ReinSehgalRESPXSec.h>

Inheritance diagram for genie::ReinSehgalRESPXSec:
[legend]
Collaboration diagram for genie::ReinSehgalRESPXSec:
[legend]

Public Member Functions

 ReinSehgalRESPXSec ()
 ReinSehgalRESPXSec (string config)
virtual ~ReinSehgalRESPXSec ()
double XSec (const Interaction *i, KinePhaseSpace_t k) const
 Compute the cross section for the input interaction.
double Integral (const Interaction *i) const
bool ValidProcess (const Interaction *i) const
 Can this cross section algorithm handle the input process?
void Configure (const Registry &config)
void Configure (string config)
Public Member Functions inherited from genie::XSecAlgorithmI
virtual ~XSecAlgorithmI ()
virtual bool ValidKinematics (const Interaction *i) const
 Is the input kinematical point a physically allowed one?
Public Member Functions inherited from genie::Algorithm
virtual ~Algorithm ()
virtual void FindConfig (void)
virtual const RegistryGetConfig (void) const
RegistryGetOwnedConfig (void)
virtual const AlgIdId (void) const
 Get algorithm ID.
virtual AlgStatus_t GetStatus (void) const
 Get algorithm status.
virtual bool AllowReconfig (void) const
virtual AlgCmp_t Compare (const Algorithm *alg) const
 Compare with input algorithm.
virtual void SetId (const AlgId &id)
 Set algorithm ID.
virtual void SetId (string name, string config)
const AlgorithmSubAlg (const RgKey &registry_key) const
void AdoptConfig (void)
void AdoptSubstructure (void)
virtual void Print (ostream &stream) const
 Print algorithm info.

Private Member Functions

void LoadConfig (void)

Private Attributes

FKR fFKR
const RSHelicityAmplModelIfHAmplModelCC
const RSHelicityAmplModelIfHAmplModelNCp
const RSHelicityAmplModelIfHAmplModelNCn
const RSHelicityAmplModelIfHAmplModelEMp
const RSHelicityAmplModelIfHAmplModelEMn
bool fWghtBW
 weight with resonance breit-wigner?
bool fNormBW
 normalize resonance breit-wigner to 1?
double fZeta
 FKR parameter Zeta.
double fOmega
 FKR parameter Omega.
double fMa2
 (axial mass)^2
double fMv2
 (vector mass)^2
double fSin48w
 sin^4(Weingberg angle)
double fVud2
 |Vud|^2(square of magnitude ud-element of CKM-matrix)
bool fUsingDisResJoin
 use a DIS/RES joining scheme?
bool fUsingNuTauScaling
 use NeuGEN nutau xsec reduction factors?
double fWcut
 apply DIS/RES joining scheme < Wcut
double fN2ResMaxNWidths
 limits allowed phase space for n=2 res
double fN0ResMaxNWidths
 limits allowed phase space for n=0 res
double fGnResMaxNWidths
 limits allowed phase space for other res
string fKFTable
 table of Fermi momentum (kF) constants for various nuclei
bool fUseRFGParametrization
 use parametrization for fermi momentum insted of table?
bool fUsePauliBlocking
 account for Pauli blocking?
SplinefNuTauRdSpl
 xsec reduction spline for nu_tau
SplinefNuTauBarRdSpl
 xsec reduction spline for nu_tau_bar
double fXSecScaleCC
 external CC xsec scaling factor
double fXSecScaleNC
 external NC xsec scaling factor
double fXSecScaleEM
 external EM xsec scaling factor
const XSecIntegratorIfXSecIntegrator

Additional Inherited Members

Static Public Member Functions inherited from genie::Algorithm
static string BuildParamVectKey (const std::string &comm_name, unsigned int i)
static string BuildParamVectSizeKey (const std::string &comm_name)
static string BuildParamMatKey (const std::string &comm_name, unsigned int i, unsigned int j)
static string BuildParamMatRowSizeKey (const std::string &comm_name)
static string BuildParamMatColSizeKey (const std::string &comm_name)
Protected Member Functions inherited from genie::XSecAlgorithmI
 XSecAlgorithmI ()
 XSecAlgorithmI (string name)
 XSecAlgorithmI (string name, string config)
Protected Member Functions inherited from genie::Algorithm
 Algorithm ()
 Algorithm (string name)
 Algorithm (string name, string config)
void Initialize (void)
void DeleteConfig (void)
void DeleteSubstructure (void)
RegistryExtractLocalConfig (const Registry &in) const
RegistryExtractLowerConfig (const Registry &in, const string &alg_key) const
 Split an incoming configuration Registry into a block valid for the sub-algo identified by alg_key.
template<class T>
bool GetParam (const RgKey &name, T &p, bool is_top_call=true) const
template<class T>
bool GetParamDef (const RgKey &name, T &p, const T &def) const
template<class T>
int GetParamVect (const std::string &comm_name, std::vector< T > &v, bool is_top_call=true) const
 Handle to load vectors of parameters.
int GetParamVectKeys (const std::string &comm_name, std::vector< RgKey > &k, bool is_top_call=true) const
template<class T>
int GetParamMat (const std::string &comm_name, TMatrixT< T > &mat, bool is_top_call=true) const
 Handle to load matrix of parameters.
template<class T>
int GetParamMatSym (const std::string &comm_name, TMatrixTSym< T > &mat, bool is_top_call=true) const
int GetParamMatKeys (const std::string &comm_name, std::vector< RgKey > &k, bool is_top_call=true) const
int AddTopRegistry (Registry *rp, bool owns=true)
 add registry with top priority, also update ownership
int AddLowRegistry (Registry *rp, bool owns=true)
 add registry with lowest priority, also update ownership
int MergeTopRegistry (const Registry &r)
int AddTopRegisties (const vector< Registry * > &rs, bool owns=false)
 Add registries with top priority, also udated Ownerships.
Protected Attributes inherited from genie::Algorithm
bool fAllowReconfig
bool fOwnsSubstruc
 true if it owns its substructure (sub-algs,...)
AlgId fID
 algorithm name and configuration set
vector< Registry * > fConfVect
vector< bool > fOwnerships
 ownership for every registry in fConfVect
AlgStatus_t fStatus
 algorithm execution status
AlgMapfOwnedSubAlgMp
 local pool for owned sub-algs (taken out of the factory pool)

Detailed Description

Computes the double differential cross section for resonance electro- or neutrino-production according to the Rein-Sehgal model.

The computed cross section is the d^2 xsec/ dQ^2 dW
where

  • Q^2 : momentum transfer ^ 2
  • W : invariant mass of the final state hadronic system

Is a concrete implementation of the XSecAlgorithmI interface.

References:\n D.Rein and L.M.Sehgal, Neutrino Excitation of Baryon Resonances
and Single Pion Production, Ann.Phys.133, 79 (1981)
Author
Costas Andreopoulos <c.andreopoulos \at cern.ch> University of Liverpool
Created:\n May 05, 2004
License:\n Copyright (c) 2003-2025, The GENIE Collaboration
For the full text of the license visit http://copyright.genie-mc.org

Definition at line 43 of file ReinSehgalRESPXSec.h.

Constructor & Destructor Documentation

◆ ReinSehgalRESPXSec() [1/2]

ReinSehgalRESPXSec::ReinSehgalRESPXSec ( )

Definition at line 42 of file ReinSehgalRESPXSec.cxx.

42 :
43XSecAlgorithmI("genie::ReinSehgalRESPXSec")
44{
45 fNuTauRdSpl = 0;
47}
Spline * fNuTauRdSpl
xsec reduction spline for nu_tau
Spline * fNuTauBarRdSpl
xsec reduction spline for nu_tau_bar

References fNuTauBarRdSpl, fNuTauRdSpl, and genie::XSecAlgorithmI::XSecAlgorithmI().

◆ ReinSehgalRESPXSec() [2/2]

ReinSehgalRESPXSec::ReinSehgalRESPXSec ( string config)

Definition at line 49 of file ReinSehgalRESPXSec.cxx.

49 :
50XSecAlgorithmI("genie::ReinSehgalRESPXSec", config)
51{
52 fNuTauRdSpl = 0;
54}

References fNuTauBarRdSpl, fNuTauRdSpl, and genie::XSecAlgorithmI::XSecAlgorithmI().

◆ ~ReinSehgalRESPXSec()

ReinSehgalRESPXSec::~ReinSehgalRESPXSec ( )
virtual

Definition at line 56 of file ReinSehgalRESPXSec.cxx.

57{
58 if(fNuTauRdSpl) delete fNuTauRdSpl;
60}

References fNuTauBarRdSpl, and fNuTauRdSpl.

Member Function Documentation

◆ Configure() [1/2]

void ReinSehgalRESPXSec::Configure ( const Registry & config)
virtual

Configure the algorithm with an external registry The registry is merged with the top level registry if it is owned, Otherwise a copy of it is added with the highest priority

Reimplemented from genie::Algorithm.

Definition at line 404 of file ReinSehgalRESPXSec.cxx.

405{
406 Algorithm::Configure(config);
407 this->LoadConfig();
408}
virtual void Configure(const Registry &config)
Definition Algorithm.cxx:62

References genie::Algorithm::Configure(), and LoadConfig().

◆ Configure() [2/2]

void ReinSehgalRESPXSec::Configure ( string config)
virtual

Configure the algorithm from the AlgoConfigPool based on param_set string given in input An algorithm contains a vector of registries coming from different xml configuration files, which are loaded according a very precise prioriy This methods will load a number registries in order of priority: 1) "Tunable" parameter set from CommonParametes. This is loaded with the highest prioriry and it is designed to be used for tuning procedure Usage not expected from the user. 2) For every string defined in "CommonParame" the corresponding parameter set will be loaded from CommonParameter.xml 3) parameter set specified by the config string and defined in the xml file of the algorithm 4) if config is not "Default" also the Default parameter set from the same xml file will be loaded Effectively this avoids the repetion of a parameter when it is not changed in the requested configuration

Reimplemented from genie::Algorithm.

Definition at line 410 of file ReinSehgalRESPXSec.cxx.

411{
412 Algorithm::Configure(config);
413 this->LoadConfig();
414}

References genie::Algorithm::Configure(), and LoadConfig().

◆ Integral()

double ReinSehgalRESPXSec::Integral ( const Interaction * i) const
virtual

Integrate the model over the kinematic phase space available to the input interaction (kinematical cuts can be included)

Implements genie::XSecAlgorithmI.

Definition at line 371 of file ReinSehgalRESPXSec.cxx.

372{
373 double xsec = fXSecIntegrator->Integrate(this,interaction);
374 return xsec;
375}
const XSecIntegratorI * fXSecIntegrator

References fXSecIntegrator.

◆ LoadConfig()

void ReinSehgalRESPXSec::LoadConfig ( void )
private

Definition at line 416 of file ReinSehgalRESPXSec.cxx.

417{
418 // Cross section scaling factors
419 this->GetParam( "RES-CC-XSecScale", fXSecScaleCC ) ;
420 this->GetParam( "RES-NC-XSecScale", fXSecScaleNC ) ;
421 this->GetParam( "RES-EM-XSecScale", fXSecScaleEM ) ;
422
423 this->GetParam( "RES-Zeta", fZeta ) ;
424 this->GetParam( "RES-Omega", fOmega ) ;
425
426 double ma, mv ;
427 this->GetParam( "RES-Ma", ma ) ;
428 this->GetParam( "RES-Mv", mv ) ;
429 fMa2 = TMath::Power(ma,2);
430 fMv2 = TMath::Power(mv,2);
431
432 this->GetParamDef( "BreitWignerWeight", fWghtBW, true ) ;
433 this->GetParamDef( "BreitWignerNorm", fNormBW, true);
434
435 double thw ;
436 this->GetParam( "WeinbergAngle", thw ) ;
437 fSin48w = TMath::Power( TMath::Sin(thw), 4 );
438 double Vud;
439 this->GetParam("CKM-Vud", Vud );
440 fVud2 = TMath::Power( Vud, 2 );
441 this->GetParam("FermiMomentumTable", fKFTable);
442 this->GetParam("RFG-UseParametrization", fUseRFGParametrization);
443 this->GetParam("UsePauliBlockingForRES", fUsePauliBlocking);
444
445 // Load all the sub-algorithms needed
446
447 fHAmplModelCC = 0;
448 fHAmplModelNCp = 0;
449 fHAmplModelNCn = 0;
450 fHAmplModelEMp = 0;
451 fHAmplModelEMn = 0;
452
453 AlgFactory * algf = AlgFactory::Instance();
454
455 fHAmplModelCC = dynamic_cast<const RSHelicityAmplModelI *> (
456 algf->GetAlgorithm("genie::RSHelicityAmplModelCC","Default"));
457 fHAmplModelNCp = dynamic_cast<const RSHelicityAmplModelI *> (
458 algf->GetAlgorithm("genie::RSHelicityAmplModelNCp","Default"));
459 fHAmplModelNCn = dynamic_cast<const RSHelicityAmplModelI *> (
460 algf->GetAlgorithm("genie::RSHelicityAmplModelNCn","Default"));
461 fHAmplModelEMp = dynamic_cast<const RSHelicityAmplModelI *> (
462 algf->GetAlgorithm("genie::RSHelicityAmplModelEMp","Default"));
463 fHAmplModelEMn = dynamic_cast<const RSHelicityAmplModelI *> (
464 algf->GetAlgorithm("genie::RSHelicityAmplModelEMn","Default"));
465
466 assert( fHAmplModelCC );
467 assert( fHAmplModelNCp );
468 assert( fHAmplModelNCn );
469 assert( fHAmplModelEMp );
470 assert( fHAmplModelEMn );
471
472 // Use algorithm within a DIS/RES join scheme. If yes get Wcut
473 this->GetParam( "UseDRJoinScheme", fUsingDisResJoin ) ;
474 fWcut = 999999;
475 if(fUsingDisResJoin) {
476 this->GetParam( "Wcut", fWcut ) ;
477 }
478
479 // NeuGEN limits in the allowed resonance phase space:
480 // W < min{ Wmin(physical), (res mass) + x * (res width) }
481 // It limits the integration area around the peak and avoids the
482 // problem with huge xsec increase at low Q2 and high W.
483 // In correspondence with Hugh, Rein said that the underlying problem
484 // are unphysical assumptions in the model.
485 this->GetParamDef( "MaxNWidthForN2Res", fN2ResMaxNWidths, 2.0 ) ;
486 this->GetParamDef( "MaxNWidthForN0Res", fN0ResMaxNWidths, 6.0 ) ;
487 this->GetParamDef( "MaxNWidthForGNRes", fGnResMaxNWidths, 4.0 ) ;
488
489 // NeuGEN reduction factors for nu_tau: a gross estimate of the effect of
490 // neglected form factors in the R/S model
491 this->GetParamDef( "UseNuTauScalingFactors", fUsingNuTauScaling, true ) ;
493 if(fNuTauRdSpl) delete fNuTauRdSpl;
495
496 assert( std::getenv( "GENIE") );
497 string base = std::getenv( "GENIE") ;
498
499 string filename = base + "/data/evgen/rein_sehgal/res/nutau_xsec_scaling_factors.dat";
500 LOG("ReinSehgalRes", pNOTICE)
501 << "Loading nu_tau xsec reduction spline from: " << filename;
502 fNuTauRdSpl = new Spline(filename);
503
504 filename = base + "/data/evgen/rein_sehgal/res/nutaubar_xsec_scaling_factors.dat";
505 LOG("ReinSehgalRes", pNOTICE)
506 << "Loading bar{nu_tau} xsec reduction spline from: " << filename;
507 fNuTauBarRdSpl = new Spline(filename);
508 }
509
510 // load the differential cross section integrator
512 dynamic_cast<const XSecIntegratorI *> (this->SubAlg("XSec-Integrator"));
513 assert(fXSecIntegrator);
514}
#define pNOTICE
Definition Messenger.h:61
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Definition Messenger.h:96
const Algorithm * GetAlgorithm(const AlgId &algid)
static AlgFactory * Instance()
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
bool GetParamDef(const RgKey &name, T &p, const T &def) const
const Algorithm * SubAlg(const RgKey &registry_key) const
bool fUsingNuTauScaling
use NeuGEN nutau xsec reduction factors?
double fXSecScaleCC
external CC xsec scaling factor
bool fUseRFGParametrization
use parametrization for fermi momentum insted of table?
const RSHelicityAmplModelI * fHAmplModelEMp
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 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 fN2ResMaxNWidths
limits allowed phase space for n=2 res
double fGnResMaxNWidths
limits allowed phase space for other res
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.
double fXSecScaleEM
external EM xsec scaling factor

References fGnResMaxNWidths, fHAmplModelCC, fHAmplModelEMn, fHAmplModelEMp, fHAmplModelNCn, fHAmplModelNCp, fKFTable, fMa2, fMv2, fN0ResMaxNWidths, fN2ResMaxNWidths, fNormBW, fNuTauBarRdSpl, fNuTauRdSpl, fOmega, fSin48w, fUsePauliBlocking, fUseRFGParametrization, fUsingDisResJoin, fUsingNuTauScaling, fVud2, fWcut, fWghtBW, fXSecIntegrator, fXSecScaleCC, fXSecScaleEM, fXSecScaleNC, fZeta, genie::AlgFactory::GetAlgorithm(), genie::Algorithm::GetParam(), genie::Algorithm::GetParamDef(), genie::AlgFactory::Instance(), LOG, pNOTICE, and genie::Algorithm::SubAlg().

Referenced by Configure(), and Configure().

◆ ValidProcess()

bool ReinSehgalRESPXSec::ValidProcess ( const Interaction * i) const
virtual

Can this cross section algorithm handle the input process?

Implements genie::XSecAlgorithmI.

Definition at line 377 of file ReinSehgalRESPXSec.cxx.

378{
379 if(interaction->TestBit(kISkipProcessChk)) return true;
380
381 const InitialState & init_state = interaction->InitState();
382 const ProcessInfo & proc_info = interaction->ProcInfo();
383 const XclsTag & xcls = interaction->ExclTag();
384
385 if(!proc_info.IsResonant()) return false;
386 if(!xcls.KnownResonance()) return false;
387
388 int hitnuc = init_state.Tgt().HitNucPdg();
389 bool is_pn = (pdg::IsProton(hitnuc) || pdg::IsNeutron(hitnuc));
390
391 if (!is_pn) return false;
392
393 int probe = init_state.ProbePdg();
394 bool is_weak = proc_info.IsWeak();
395 bool is_em = proc_info.IsEM();
396 bool nu_weak = (pdg::IsNeutralLepton(probe) && is_weak);
397 bool l_em = (pdg::IsChargedLepton(probe) && is_em );
398
399 if (!nu_weak && !l_em) return false;
400
401 return true;
402}
const Target & Tgt(void) const
int ProbePdg(void) const
bool IsEM(void) const
bool IsWeak(void) const
bool IsResonant(void) const
int HitNucPdg(void) const
Definition Target.cxx:304
bool KnownResonance(void) const
Definition XclsTag.h:68
bool IsProton(int pdgc)
Definition PDGUtils.cxx:336
bool IsChargedLepton(int pdgc)
Definition PDGUtils.cxx:101
bool IsNeutralLepton(int pdgc)
Definition PDGUtils.cxx:95
bool IsNeutron(int pdgc)
Definition PDGUtils.cxx:341
const UInt_t kISkipProcessChk
if set, skip process validity checks
Definition Interaction.h:47

References genie::Interaction::ExclTag(), genie::Target::HitNucPdg(), genie::Interaction::InitState(), genie::pdg::IsChargedLepton(), genie::ProcessInfo::IsEM(), genie::pdg::IsNeutralLepton(), genie::pdg::IsNeutron(), genie::pdg::IsProton(), genie::ProcessInfo::IsResonant(), genie::ProcessInfo::IsWeak(), genie::kISkipProcessChk, genie::XclsTag::KnownResonance(), genie::InitialState::ProbePdg(), genie::Interaction::ProcInfo(), and genie::InitialState::Tgt().

Referenced by XSec().

◆ XSec()

double ReinSehgalRESPXSec::XSec ( const Interaction * i,
KinePhaseSpace_t k ) const
virtual

Compute the cross section for the input interaction.

Implements genie::XSecAlgorithmI.

Definition at line 62 of file ReinSehgalRESPXSec.cxx.

64{
65 if(! this -> ValidProcess (interaction) ) return 0.;
66 if(! this -> ValidKinematics (interaction) ) return 0.;
67
68 const InitialState & init_state = interaction -> InitState();
69 const ProcessInfo & proc_info = interaction -> ProcInfo();
70 const Target & target = init_state.Tgt();
71
72 // Get kinematical parameters
73 const Kinematics & kinematics = interaction -> Kine();
74 double W = kinematics.W();
75 double q2 = kinematics.q2();
76
77 // Under the DIS/RES joining scheme, xsec(RES)=0 for W>=Wcut
79 if(W>=fWcut) {
80#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
81 LOG("ReinSehgalRes", pDEBUG)
82 << "RES/DIS Join Scheme: XSec[RES, W=" << W
83 << " >= Wcut=" << fWcut << "] = 0";
84#endif
85 return 0;
86 }
87 }
88
89 // Get the input baryon resonance
90 Resonance_t resonance = interaction->ExclTag().Resonance();
91 string resname = utils::res::AsString(resonance);
92 bool is_delta = utils::res::IsDelta (resonance);
93
94 // Get the neutrino, hit nucleon & weak current
95 int nucpdgc = target.HitNucPdg();
96 int probepdgc = init_state.ProbePdg();
97 bool is_nu = pdg::IsNeutrino (probepdgc);
98 bool is_nubar = pdg::IsAntiNeutrino (probepdgc);
99 bool is_lplus = pdg::IsPosChargedLepton (probepdgc);
100 bool is_lminus = pdg::IsNegChargedLepton (probepdgc);
101 bool is_p = pdg::IsProton (nucpdgc);
102 bool is_n = pdg::IsNeutron (nucpdgc);
103 bool is_CC = proc_info.IsWeakCC();
104 bool is_NC = proc_info.IsWeakNC();
105 bool is_EM = proc_info.IsEM();
106
107 if(is_CC && !is_delta) {
108 if((is_nu && is_p) || (is_nubar && is_n)) return 0;
109 }
110
111 // Get baryon resonance parameters
112 int IR = utils::res::ResonanceIndex (resonance);
113 int LR = utils::res::OrbitalAngularMom (resonance);
114 double MR = utils::res::Mass (resonance);
115 double WR = utils::res::Width (resonance);
117
118 // Following NeuGEN, avoid problems with underlying unphysical
119 // model assumptions by restricting the allowed W phase space
120 // around the resonance peak
121 if (fNormBW) {
122 if (W > MR + fN0ResMaxNWidths * WR && IR==0) return 0.;
123 else if (W > MR + fN2ResMaxNWidths * WR && IR==2) return 0.;
124 else if (W > MR + fGnResMaxNWidths * WR) return 0.;
125 }
126
127 // Compute auxiliary & kinematical factors
128 double E = init_state.ProbeE(kRfHitNucRest);
129 double Mnuc = target.HitNucMass();
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);
135 double Q2 = v2 - q2;
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);
142 double UV = U*V;
143
144#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
145 LOG("ReinSehgalRes", pDEBUG)
146 << "Kinematical params V = " << V << ", U = " << U;
147#endif
148
149 // Calculate the Feynman-Kislinger-Ravndall parameters
150
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);
154
155 if(is_EM) {
156 GA = 0.; // zero the axial term for EM scattering
157 }
158
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;
163
164 fFKR.Lamda = sq2omg * mq_w;
165 fFKR.Tv = GV / (3.*W*sq2omg);
166 fFKR.Rv = kSqrt2 * mq_w*(W+Mnuc)*GV / d;
167 fFKR.S = (-q2/Q2) * (3*W*Mnuc + q2 - Mnuc2) * GV / (6*Mnuc2);
168 fFKR.Ta = (2./3.) * (fZeta/sq2omg) * mq_w * GA / d;
169 fFKR.Ra = (kSqrt2/6.) * fZeta * (GA/W) * (W+Mnuc + 2*nomg*W/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);
172 fFKR.R = fFKR.Rv;
173 fFKR.Rplus = - (fFKR.Rv + fFKR.Ra);
174 fFKR.Rminus = - (fFKR.Rv - fFKR.Ra);
175 fFKR.T = fFKR.Tv;
176 fFKR.Tplus = - (fFKR.Tv + fFKR.Ta);
177 fFKR.Tminus = - (fFKR.Tv - fFKR.Ta);
178
179#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
180 LOG("FKR", pDEBUG)
181 << "FKR params for RES = " << resname << " : " << fFKR;
182#endif
183
184 // Calculate the Rein-Sehgal Helicity Amplitudes
185
186 const RSHelicityAmplModelI * hamplmod = 0;
187 if(is_CC) {
188 hamplmod = fHAmplModelCC;
189 }
190 else
191 if(is_NC) {
192 if (is_p) { hamplmod = fHAmplModelNCp;}
193 else { hamplmod = fHAmplModelNCn;}
194 }
195 else
196 if(is_EM) {
197 if (is_p) { hamplmod = fHAmplModelEMp;}
198 else { hamplmod = fHAmplModelEMn;}
199 }
200 assert(hamplmod);
201
202 const RSHelicityAmpl & hampl = hamplmod->Compute(resonance, fFKR);
203
204#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
205 LOG("RSHAmpl", pDEBUG)
206 << "Helicity Amplitudes for RES = " << resname << " : " << hampl;
207#endif
208
209 double g2 = kGF2;
210 if(is_CC) g2 = kGF2*fVud2;
211 if(is_EM) {
212 double q4 = q2*q2;
213 g2 = 8*kAem2*kPi2/q4;
214 }
215
216 // Compute the cross section
217
218 double sig0 = 0.125*(g2/kPi)*(-q2/Q2)*(W/Mnuc);
219 double scLR = W/Mnuc;
220 double scS = (Mnuc/W)*(-Q2/q2);
221 double sigL = scLR* (hampl.Amp2Plus3 () + hampl.Amp2Plus1 ());
222 double sigR = scLR* (hampl.Amp2Minus3() + hampl.Amp2Minus1());
223 double sigS = scS * (hampl.Amp20Plus () + hampl.Amp20Minus());
224
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;
230#endif
231
232 double xsec = 0.0;
233 if (is_nu || is_lminus) {
234 xsec = sig0*(V2*sigR + U2*sigL + 2*UV*sigS);
235 }
236 else
237 if (is_nubar || is_lplus) {
238 xsec = sig0*(U2*sigR + V2*sigL + 2*UV*sigS);
239 }
240 xsec = TMath::Max(0.,xsec);
241
242 double mult = 1.0;
243 if(is_CC && is_delta) {
244 if((is_nu && is_p) || (is_nubar && is_n)) mult=3.0;
245 }
246 xsec *= mult;
247
248 // Check whether the cross section is to be weighted with a
249 // Breit-Wigner distribution (default: true)
250 double bw = 1.0;
251 if(fWghtBW) {
252 //different Delta photon decay branch
253 if(is_delta){
254 bw = utils::bwfunc::BreitWignerLGamma(W,LR,MR,WR,NR);
255 }
256 else{
257 bw = utils::bwfunc::BreitWignerL(W,LR,MR,WR,NR);
258 }
259 }
260#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
261 LOG("ReinSehgalRes", pDEBUG)
262 << "BreitWigner(RES=" << resname << ", W=" << W << ") = " << bw;
263#endif
264 xsec *= bw;
265
266 // Apply NeuGEN nutau cross section reduction factors
267 double rf = 1.0;
268 Spline * spl = 0;
269 if (is_CC && fUsingNuTauScaling) {
270 if (pdg::IsNuTau (probepdgc)) spl = fNuTauRdSpl;
271 else if (pdg::IsAntiNuTau(probepdgc)) spl = fNuTauBarRdSpl;
272
273 if(spl) {
274 if(E <spl->XMax()) rf = spl->Evaluate(E);
275 }
276 }
277 xsec *= rf;
278
279 // Apply given scaling factor
280 double xsec_scale = 1.;
281 if (is_CC) { xsec_scale = fXSecScaleCC; }
282 else if (is_NC) { xsec_scale = fXSecScaleNC; }
283 else if (is_EM) { xsec_scale = fXSecScaleEM; }
284 xsec *= xsec_scale;
285
286#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
287 LOG("ReinSehgalRes", pINFO)
288 << "\n d2xsec/dQ2dW" << "[" << interaction->AsString()
289 << "](W=" << W << ", q2=" << q2 << ", E=" << E << ") = " << xsec;
290#endif
291
292 // The algorithm computes d^2xsec/dWdQ2
293 // Check whether variable tranformation is needed
294 if(kps!=kPSWQ2fE) {
295 double J = utils::kinematics::Jacobian(interaction,kPSWQ2fE,kps);
296 xsec *= J;
297 }
298
299 // If requested return the free nucleon xsec even for input nuclear tgt
300 if( interaction->TestBit(kIAssumeFreeNucleon) ) return xsec;
301
302
303 int Z = target.Z();
304 int A = target.A();
305 int N = A-Z;
306
307 // Take into account the number of scattering centers in the target
308 int NNucl = (is_p) ? Z : N;
309
310 xsec*=NNucl; // nuclear xsec (no nuclear suppression factor)
311
312 if (fUsePauliBlocking && A!=1)
313 {
314 // Calculation of Pauli blocking according references:
315 //
316 // [1] S.L. Adler, S. Nussinov, and E.A. Paschos, "Nuclear
317 // charge exchange corrections to leptonic pion production
318 // in the (3,3) resonance region," Phys. Rev. D 9 (1974)
319 // 2125-2143 [Erratum Phys. Rev. D 10 (1974) 1669].
320 // [2] J.Y. Yu, "Neutrino interactions and nuclear effects in
321 // oscillation experiments and the nonperturbative disper-
322 // sive sector in strong (quasi-)abelian fields," Ph. D.
323 // Thesis, Dortmund U., Dortmund, 2002 (unpublished).
324 // [3] E.A. Paschos, J.Y. Yu, and M. Sakuda, "Neutrino pro-
325 // duction of resonances," Phys. Rev. D 69 (2004) 014013
326 // [arXiv: hep-ph/0308130].
327
328 double P_Fermi = 0.0;
329
330 // Maximum value of Fermi momentum of target nucleon (GeV)
331 if (A<6 || !fUseRFGParametrization)
332 {
333 // Look up the Fermi momentum for this target
334 FermiMomentumTablePool * kftp = FermiMomentumTablePool::Instance();
335 const FermiMomentumTable * kft = kftp->GetTable(fKFTable);
336 P_Fermi = kft->FindClosestKF(pdg::IonPdgCode(A, Z), nucpdgc);
337 }
338 else {
339 // Define the Fermi momentum for this target
341 // Correct the Fermi momentum for the struck nucleon
342 if(is_p) { P_Fermi *= TMath::Power( 2.*Z/A, 1./3); }
343 else { P_Fermi *= TMath::Power( 2.*N/A, 1./3); }
344 }
345
346 double FactorPauli_RES = 1.0;
347
348 double k0 = 0., q = 0., q0 = 0.;
349
350 if (P_Fermi > 0.)
351 {
352 k0 = (W2-Mnuc2-Q2)/(2*W);
353 k = TMath::Sqrt(k0*k0+Q2); // previous value of k is overridden
354 q0 = (W2-Mnuc2+kPionMass2)/(2*W);
355 q = TMath::Sqrt(q0*q0-kPionMass2);
356 }
357
358 if (2*P_Fermi < k-q)
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);
364
365 xsec *= FactorPauli_RES;
366 }
367
368 return xsec;
369}
#define pINFO
Definition Messenger.h:62
#define pDEBUG
Definition Messenger.h:63
const FermiMomentumTable * GetTable(string name)
static FermiMomentumTablePool * Instance(void)
double FindClosestKF(int target_pdgc, int nucleon_pdgc) const
double ProbeE(RefFrame_t rf) const
double W(bool selected=false) const
double q2(bool selected=false) const
bool IsWeakNC(void) const
bool IsWeakCC(void) const
virtual const RSHelicityAmpl & Compute(Resonance_t res, const FKR &fkr) const =0
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
double Evaluate(double x) const
Definition Spline.cxx:363
int Z(void) const
Definition Target.h:68
int A(void) const
Definition Target.h:70
double HitNucMass(void) const
Definition Target.cxx:233
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
bool IsAntiNuTau(int pdgc)
Definition PDGUtils.cxx:183
bool IsNegChargedLepton(int pdgc)
Definition PDGUtils.cxx:139
bool IsNeutrino(int pdgc)
Definition PDGUtils.cxx:110
int IonPdgCode(int A, int Z)
Definition PDGUtils.cxx:71
bool IsPosChargedLepton(int pdgc)
Definition PDGUtils.cxx:148
bool IsNuTau(int pdgc)
Definition PDGUtils.cxx:168
bool IsAntiNeutrino(int pdgc)
Definition PDGUtils.cxx:118
double BreitWignerLGamma(double W, int L, double mass, double width0, double norm)
Definition BWFunc.cxx:22
double BreitWignerL(double W, int L, double mass, double width0, double norm)
Definition BWFunc.cxx:99
double W(const Interaction *const i)
double Q2(const Interaction *const i)
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
double J(double q0, double q3, double Enu, double ml)
Definition MECUtils.cxx:147
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
enum genie::EResonance Resonance_t
@ kRfHitNucRest
Definition RefFrame.h:30
const UInt_t kIAssumeFreeNucleon
Definition Interaction.h:49

References genie::Target::A(), genie::RSHelicityAmpl::Amp20Minus(), genie::RSHelicityAmpl::Amp20Plus(), genie::RSHelicityAmpl::Amp2Minus1(), genie::RSHelicityAmpl::Amp2Minus3(), genie::RSHelicityAmpl::Amp2Plus1(), genie::RSHelicityAmpl::Amp2Plus3(), genie::Interaction::AsString(), genie::utils::res::AsString(), genie::utils::bwfunc::BreitWignerL(), genie::utils::bwfunc::BreitWignerLGamma(), genie::utils::res::BWNorm(), genie::RSHelicityAmplModelI::Compute(), genie::Spline::Evaluate(), genie::Interaction::ExclTag(), genie::utils::nuclear::FermiMomentumForIsoscalarNucleonParametrization(), fFKR, fGnResMaxNWidths, fHAmplModelCC, fHAmplModelEMn, fHAmplModelEMp, fHAmplModelNCn, fHAmplModelNCp, genie::FermiMomentumTable::FindClosestKF(), fKFTable, fMa2, fMv2, fN0ResMaxNWidths, fN2ResMaxNWidths, fNormBW, fNuTauBarRdSpl, fNuTauRdSpl, fOmega, fUsePauliBlocking, fUseRFGParametrization, fUsingDisResJoin, fUsingNuTauScaling, fVud2, fWcut, fWghtBW, fXSecScaleCC, fXSecScaleEM, fXSecScaleNC, fZeta, genie::FermiMomentumTablePool::GetTable(), genie::Target::HitNucMass(), genie::Target::HitNucPdg(), genie::FermiMomentumTablePool::Instance(), genie::pdg::IonPdgCode(), genie::pdg::IsAntiNeutrino(), genie::pdg::IsAntiNuTau(), genie::utils::res::IsDelta(), genie::ProcessInfo::IsEM(), genie::pdg::IsNegChargedLepton(), genie::pdg::IsNeutrino(), genie::pdg::IsNeutron(), genie::pdg::IsNuTau(), genie::pdg::IsPosChargedLepton(), genie::pdg::IsProton(), genie::ProcessInfo::IsWeakCC(), genie::ProcessInfo::IsWeakNC(), genie::utils::kinematics::Jacobian(), genie::constants::kAem2, genie::constants::kGF2, genie::kIAssumeFreeNucleon, genie::constants::kPi, genie::constants::kPi2, genie::constants::kPionMass2, genie::kPSWQ2fE, genie::kRfHitNucRest, genie::constants::kSqrt2, LOG, genie::utils::res::Mass(), genie::utils::res::OrbitalAngularMom(), pDEBUG, pINFO, genie::InitialState::ProbeE(), genie::InitialState::ProbePdg(), genie::Kinematics::q2(), genie::XclsTag::Resonance(), genie::utils::res::ResonanceIndex(), genie::InitialState::Tgt(), genie::XSecAlgorithmI::ValidKinematics(), ValidProcess(), genie::Kinematics::W(), genie::utils::res::Width(), and genie::Target::Z().

Member Data Documentation

◆ fFKR

FKR genie::ReinSehgalRESPXSec::fFKR
mutableprivate

Definition at line 64 of file ReinSehgalRESPXSec.h.

Referenced by XSec().

◆ fGnResMaxNWidths

double genie::ReinSehgalRESPXSec::fGnResMaxNWidths
private

limits allowed phase space for other res

Definition at line 86 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fHAmplModelCC

const RSHelicityAmplModelI* genie::ReinSehgalRESPXSec::fHAmplModelCC
private

Definition at line 66 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fHAmplModelEMn

const RSHelicityAmplModelI* genie::ReinSehgalRESPXSec::fHAmplModelEMn
private

Definition at line 70 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fHAmplModelEMp

const RSHelicityAmplModelI* genie::ReinSehgalRESPXSec::fHAmplModelEMp
private

Definition at line 69 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fHAmplModelNCn

const RSHelicityAmplModelI* genie::ReinSehgalRESPXSec::fHAmplModelNCn
private

Definition at line 68 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fHAmplModelNCp

const RSHelicityAmplModelI* genie::ReinSehgalRESPXSec::fHAmplModelNCp
private

Definition at line 67 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fKFTable

string genie::ReinSehgalRESPXSec::fKFTable
private

table of Fermi momentum (kF) constants for various nuclei

Definition at line 87 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fMa2

double genie::ReinSehgalRESPXSec::fMa2
private

(axial mass)^2

Definition at line 77 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fMv2

double genie::ReinSehgalRESPXSec::fMv2
private

(vector mass)^2

Definition at line 78 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fN0ResMaxNWidths

double genie::ReinSehgalRESPXSec::fN0ResMaxNWidths
private

limits allowed phase space for n=0 res

Definition at line 85 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fN2ResMaxNWidths

double genie::ReinSehgalRESPXSec::fN2ResMaxNWidths
private

limits allowed phase space for n=2 res

Definition at line 84 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fNormBW

bool genie::ReinSehgalRESPXSec::fNormBW
private

normalize resonance breit-wigner to 1?

Definition at line 74 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fNuTauBarRdSpl

Spline* genie::ReinSehgalRESPXSec::fNuTauBarRdSpl
private

xsec reduction spline for nu_tau_bar

Definition at line 91 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), ReinSehgalRESPXSec(), ReinSehgalRESPXSec(), XSec(), and ~ReinSehgalRESPXSec().

◆ fNuTauRdSpl

Spline* genie::ReinSehgalRESPXSec::fNuTauRdSpl
private

xsec reduction spline for nu_tau

Definition at line 90 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), ReinSehgalRESPXSec(), ReinSehgalRESPXSec(), XSec(), and ~ReinSehgalRESPXSec().

◆ fOmega

double genie::ReinSehgalRESPXSec::fOmega
private

FKR parameter Omega.

Definition at line 76 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fSin48w

double genie::ReinSehgalRESPXSec::fSin48w
private

sin^4(Weingberg angle)

Definition at line 79 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig().

◆ fUsePauliBlocking

bool genie::ReinSehgalRESPXSec::fUsePauliBlocking
private

account for Pauli blocking?

Definition at line 89 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fUseRFGParametrization

bool genie::ReinSehgalRESPXSec::fUseRFGParametrization
private

use parametrization for fermi momentum insted of table?

Definition at line 88 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fUsingDisResJoin

bool genie::ReinSehgalRESPXSec::fUsingDisResJoin
private

use a DIS/RES joining scheme?

Definition at line 81 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fUsingNuTauScaling

bool genie::ReinSehgalRESPXSec::fUsingNuTauScaling
private

use NeuGEN nutau xsec reduction factors?

Definition at line 82 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fVud2

double genie::ReinSehgalRESPXSec::fVud2
private

|Vud|^2(square of magnitude ud-element of CKM-matrix)

Definition at line 80 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fWcut

double genie::ReinSehgalRESPXSec::fWcut
private

apply DIS/RES joining scheme < Wcut

Definition at line 83 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fWghtBW

bool genie::ReinSehgalRESPXSec::fWghtBW
private

weight with resonance breit-wigner?

Definition at line 73 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fXSecIntegrator

const XSecIntegratorI* genie::ReinSehgalRESPXSec::fXSecIntegrator
private

Definition at line 96 of file ReinSehgalRESPXSec.h.

Referenced by Integral(), and LoadConfig().

◆ fXSecScaleCC

double genie::ReinSehgalRESPXSec::fXSecScaleCC
private

external CC xsec scaling factor

Definition at line 92 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fXSecScaleEM

double genie::ReinSehgalRESPXSec::fXSecScaleEM
private

external EM xsec scaling factor

Definition at line 94 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fXSecScaleNC

double genie::ReinSehgalRESPXSec::fXSecScaleNC
private

external NC xsec scaling factor

Definition at line 93 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().

◆ fZeta

double genie::ReinSehgalRESPXSec::fZeta
private

FKR parameter Zeta.

Definition at line 75 of file ReinSehgalRESPXSec.h.

Referenced by LoadConfig(), and XSec().


The documentation for this class was generated from the following files: