Public Member Functions | Private Member Functions | Private Attributes | List of all members
genie::GiBUURESPXSec Class Reference

Computes the double differential resonance neutrino-production cross section according to the GiBUU model. Is a concrete implementation of the XSecAlgorithmI interface. More...

#include <GiBUURESPXSec.h>

Inheritance diagram for genie::GiBUURESPXSec:
genie::XSecAlgorithmI genie::Algorithm

Public Member Functions

 GiBUURESPXSec ()
 
 GiBUURESPXSec (string config)
 
virtual ~GiBUURESPXSec ()
 
double XSec (const Interaction *i, KinePhaseSpace_t k) const
 Compute the cross section for the input interaction. More...
 
double Integral (const Interaction *i) const
 
bool ValidProcess (const Interaction *i) const
 Can this cross section algorithm handle the input process? More...
 
void Configure (const Registry &config)
 Configure the algorithm. More...
 
void Configure (string config)
 Configure the algorithm. More...
 
- 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? More...
 
- Public Member Functions inherited from genie::Algorithm
virtual ~Algorithm ()
 
virtual void FindConfig (void)
 Lookup configuration from the config pool. More...
 
virtual const RegistryGetConfig (void) const
 Get configuration registry. More...
 
RegistryGetOwnedConfig (void)
 Get a writeable version of an owned configuration Registry. More...
 
virtual const AlgIdId (void) const
 Get algorithm ID. More...
 
virtual AlgStatus_t GetStatus (void) const
 Get algorithm status. More...
 
virtual bool AllowReconfig (void) const
 
virtual AlgCmp_t Compare (const Algorithm *alg) const
 Compare with input algorithm. More...
 
virtual void SetId (const AlgId &id)
 Set algorithm ID. More...
 
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. More...
 

Private Member Functions

void LoadConfig (void)
 

Private Attributes

double fMa2
 (axial mass)^2 More...
 
double fMv2
 (vector mass)^2 More...
 
bool fUsingDisResJoin
 use a DIS/RES joining scheme? More...
 
double fWcut
 apply DIS/RES joining scheme < Wcut More...
 
const XSecIntegratorIfXSecIntegrator
 

Additional Inherited Members

- 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)
 
- Protected Attributes inherited from genie::Algorithm
bool fAllowReconfig
 
bool fOwnsConfig
 true if it owns its config. registry More...
 
bool fOwnsSubstruc
 true if it owns its substructure (sub-algs,...) More...
 
AlgId fID
 algorithm name and configuration set More...
 
RegistryfConfig
 config. (either owned or pointing to config pool) More...
 
AlgStatus_t fStatus
 algorithm execution status More...
 
AlgMapfOwnedSubAlgMp
 local pool for owned sub-algs (taken out of the factory pool) More...
 

Detailed Description

Computes the double differential resonance neutrino-production cross section according to the GiBUU model. Is a concrete implementation of the XSecAlgorithmI interface.

T.Leitner, O.Buss, U.Mosel, L.Alvarez-Ruso, Phys. Rev. C 79, 034601 (2009).

Author
Costas Andreopoulos <costas.andreopoulos stfc.ac.uk> University of Liverpool & STFC Rutherford Appleton Lab

Jun 03, 2009

Copyright (c) 2003-2017, GENIE Neutrino MC Generator Collaboration For the full text of the license visit http://copyright.genie-mc.org or see $GENIE/LICENSE

Definition at line 33 of file GiBUURESPXSec.h.

Constructor & Destructor Documentation

GiBUURESPXSec::GiBUURESPXSec ( )

Definition at line 46 of file GiBUURESPXSec.cxx.

46  :
47 XSecAlgorithmI("genie::GiBUURESPXSec")
48 {
49 
50 }
GiBUURESPXSec::GiBUURESPXSec ( string  config)

Definition at line 52 of file GiBUURESPXSec.cxx.

52  :
53 XSecAlgorithmI("genie::GiBUURESPXSec", config)
54 {
55 
56 }
GiBUURESPXSec::~GiBUURESPXSec ( )
virtual

Definition at line 58 of file GiBUURESPXSec.cxx.

59 {
60 
61 }

Member Function Documentation

void GiBUURESPXSec::Configure ( const Registry config)
virtual

Configure the algorithm.

Reimplemented from genie::Algorithm.

Definition at line 217 of file GiBUURESPXSec.cxx.

218 {
219  Algorithm::Configure(config);
220  this->LoadConfig();
221 }
virtual void Configure(const Registry &config)
Configure the algorithm.
Definition: Algorithm.cxx:70
void GiBUURESPXSec::Configure ( string  config)
virtual

Configure the algorithm.

Reimplemented from genie::Algorithm.

Definition at line 223 of file GiBUURESPXSec.cxx.

224 {
226  this->LoadConfig();
227 }
virtual void Configure(const Registry &config)
Configure the algorithm.
Definition: Algorithm.cxx:70
double GiBUURESPXSec::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 189 of file GiBUURESPXSec.cxx.

190 {
191  double xsec = fXSecIntegrator->Integrate(this,interaction);
192  return xsec;
193 }
const XSecIntegratorI * fXSecIntegrator
Definition: GiBUURESPXSec.h:61
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
void GiBUURESPXSec::LoadConfig ( void  )
private

Definition at line 229 of file GiBUURESPXSec.cxx.

230 {
232  const Registry * gc = confp->GlobalParameterList();
233 
234  // Load all configuration data or set defaults
235 
236  double ma = fConfig->GetDoubleDef( "Ma", gc->GetDouble("RES-Ma") );
237  double mv = fConfig->GetDoubleDef( "Mv", gc->GetDouble("RES-Mv") );
238 
239  fMa2 = TMath::Power(ma,2);
240  fMv2 = TMath::Power(mv,2);
241 
242  //-- Use algorithm within a DIS/RES join scheme. If yes get Wcut
244  "UseDRJoinScheme", gc->GetBool("UseDRJoinScheme"));
245  fWcut = 999999;
246  if(fUsingDisResJoin) {
247  fWcut = fConfig->GetDoubleDef("Wcut",gc->GetDouble("Wcut"));
248  }
249 
250  //-- load the differential cross section integrator
252  dynamic_cast<const XSecIntegratorI *> (this->SubAlg("XSec-Integrator"));
253  assert(fXSecIntegrator);
254 }
RgDbl GetDoubleDef(RgKey key, RgDbl def_opt, bool set_def=true)
Definition: Registry.cxx:549
Cross Section Integrator Interface.
A singleton class holding all configuration registries built while parsing all loaded XML configurati...
Definition: AlgConfigPool.h:41
RgDbl GetDouble(RgKey key) const
Definition: Registry.cxx:488
bool fUsingDisResJoin
use a DIS/RES joining scheme?
Definition: GiBUURESPXSec.h:58
double fMa2
(axial mass)^2
Definition: GiBUURESPXSec.h:56
Registry * GlobalParameterList(void) const
const XSecIntegratorI * fXSecIntegrator
Definition: GiBUURESPXSec.h:61
A registry. Provides the container for algorithm configuration parameters.
Definition: Registry.h:66
RgBool GetBool(RgKey key) const
Definition: Registry.cxx:474
Registry * fConfig
config. (either owned or pointing to config pool)
Definition: Algorithm.h:122
double fWcut
apply DIS/RES joining scheme < Wcut
Definition: GiBUURESPXSec.h:59
RgBool GetBoolDef(RgKey key, RgBool def_opt, bool set_def=true)
Definition: Registry.cxx:539
static AlgConfigPool * Instance()
double fMv2
(vector mass)^2
Definition: GiBUURESPXSec.h:57
const Algorithm * SubAlg(const RgKey &registry_key) const
Definition: Algorithm.cxx:230
bool GiBUURESPXSec::ValidProcess ( const Interaction i) const
virtual

Can this cross section algorithm handle the input process?

Implements genie::XSecAlgorithmI.

Definition at line 195 of file GiBUURESPXSec.cxx.

196 {
197  if(interaction->TestBit(kISkipProcessChk)) return true;
198 
199  const InitialState & init_state = interaction->InitState();
200  const ProcessInfo & proc_info = interaction->ProcInfo();
201  const XclsTag & xcls = interaction->ExclTag();
202 
203  if(!proc_info.IsResonant()) return false;
204  if(!proc_info.IsWeak()) return false;
205 
206  int nuc = init_state.Tgt().HitNucPdg();
207  int nu = init_state.ProbePdg();
208 
209  if (!pdg::IsProton(nuc) && !pdg::IsNeutron(nuc)) return false;
210  if (!pdg::IsNeutrino(nu) && !pdg::IsAntiNeutrino(nu)) return false;
211 
212  if(!xcls.KnownResonance()) return false;
213 
214  return true;
215 }
bool IsResonant(void) const
bool IsWeak(void) const
bool IsNeutrino(int pdgc)
Definition: PDGUtils.cxx:121
int HitNucPdg(void) const
Definition: Target.cxx:311
bool KnownResonance(void) const
Definition: XclsTag.h:61
Contains minimal information for tagging exclusive processes.
Definition: XclsTag.h:37
bool IsNeutron(int pdgc)
Definition: PDGUtils.cxx:311
bool IsProton(int pdgc)
Definition: PDGUtils.cxx:306
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
Definition: ProcessInfo.h:41
bool IsAntiNeutrino(int pdgc)
Definition: PDGUtils.cxx:129
int ProbePdg(void) const
Definition: InitialState.h:54
const Target & Tgt(void) const
Definition: InitialState.h:56
const UInt_t kISkipProcessChk
if set, skip process validity checks
Definition: Interaction.h:44
Initial State information.
Definition: InitialState.h:42
double GiBUURESPXSec::XSec ( const Interaction i,
KinePhaseSpace_t  k 
) const
virtual

Compute the cross section for the input interaction.

Implements genie::XSecAlgorithmI.

Definition at line 63 of file GiBUURESPXSec.cxx.

65 {
66  if(! this -> ValidProcess (interaction) ) return 0.;
67  if(! this -> ValidKinematics (interaction) ) return 0.;
68 
69  double xsec = 0;
70 
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
78  if(fUsingDisResJoin) {
79  if(W>=fWcut) {
80 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
81  LOG("GiBUURes", pDEBUG)
82  << "RES/DIS Join Scheme: XSec[RES, W=" << W
83  << " >= Wcut=" << fWcut << "] = 0";
84 #endif
85  return 0;
86  }
87  }
88 
89  // Get info about the initial state, and procces type
90  const InitialState & init_state = interaction -> InitState();
91  const ProcessInfo & proc_info = interaction -> ProcInfo();
92  const Target & target = init_state.Tgt();
93 
94  double E = init_state.ProbeE(kRfHitNucRest);
95  double Mnuc = target.HitNucMass();
96  int nucpdgc = target.HitNucPdg();
97  int nupdgc = init_state.ProbePdg();
98  bool is_nu = pdg::IsNeutrino (nupdgc);
99  bool is_nubar = pdg::IsAntiNeutrino (nupdgc);
100  bool is_p = pdg::IsProton (nucpdgc);
101  InteractionType_t itype = proc_info.InteractionTypeId();
102 
103  // Get the input baryon resonance
104  Resonance_t resonance = interaction->ExclTag().Resonance();
105  string resname = utils::res::AsString(resonance);
106  bool is_delta = utils::res::IsDelta (resonance);
107 
108 // bool is_CC = proc_info.IsWeakCC();
109 // if(is_CC && !is_delta) {
110 // if((is_nu && is_p) || (is_nubar && is_n)) return 0;
111 // }
112 
113 
114  // Get baryon resonance parameters
115 // fBRP.RetrieveData(resonance);
116 // double Mres = fBRP.Mass();
117 // double Gres = fBRP.Width();
118 // int Nres = fBRP.ResonanceIndex();
119 
120  // Get the GiBUU form factor data
121  GiBUUData * gibuu_data = GiBUUData::Instance();
122 
123  // Calculate the double differential cross section d2sigma/dWdQ2
124 
125  const GiBUUData::FormFactors & ff = gibuu_data->FF();
126  if(is_delta) {
127  //
128  // Delta resonances
129  //
130  double F1V = ff.F1V(Q2, resonance, nucpdgc, itype);
131  double F2V = ff.F2V(Q2, resonance, nucpdgc, itype);
132  double FA = ff.FA (Q2, resonance, nucpdgc, itype);
133  double FP = ff.FP (Q2, resonance, nucpdgc, itype);
134 
135 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
136  LOG("GiBUURes", pINFO)
137  << "\n F1V = " << F1V << ", F2V = " << F2V
138  << ", FA = " << FA << ", FP = " << FP;
139 #endif
140 
141  }
142  else {
143  //
144  // N resonances
145  //
146  double C3V = ff.C3V(Q2, resonance, nucpdgc, itype);
147  double C4V = ff.C4V(Q2, resonance, nucpdgc, itype);
148  double C5V = ff.C5V(Q2, resonance, nucpdgc, itype);
149  double C6V = ff.C6V(Q2, resonance, nucpdgc, itype);
150  double C3A = ff.C3A(Q2, resonance, nucpdgc, itype);
151  double C4A = ff.C4A(Q2, resonance, nucpdgc, itype);
152  double C5A = ff.C5A(Q2, resonance, nucpdgc, itype);
153  double C6A = ff.C6A(Q2, resonance, nucpdgc, itype);
154 
155 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
156  LOG("GiBUURes", pINFO)
157  << "\n C3V = " << C3V << ", C4V = " << C4V
158  << ", C5V = " << C5V << ", C6V = " << C6V
159  << "\n C3A = " << C3A << ", C4A = " << C4A
160  << ", C5A = " << C5A << ", C6A = " << C6A;
161 #endif
162 
163  } // Delta or N
164 
165 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
166  LOG("GiBUURes", pINFO)
167  << "\n d2xsec/dQ2dW" << "[" << interaction->AsString()
168  << "](W=" << W << ", Q2=" << Q2 << ", E=" << E << ") = " << xsec;
169 #endif
170 
171  // The algorithm computes d^2xsec/dWdQ2
172  // Check whether variable tranformation is needed
173  if(kps!=kPSWQ2fE) {
174  double J = utils::kinematics::Jacobian(interaction,kPSWQ2fE,kps);
175  xsec *= J;
176  }
177 
178  // If requested return the free nucleon xsec even for input nuclear tgt
179  if( interaction->TestBit(kIAssumeFreeNucleon) ) return xsec;
180 
181  // Number of scattering centers in the target
182  int NNucl = (is_p) ? target.Z() : target.N();
183  xsec*=NNucl; // nuclear xsec (no nuclear suppression factor)
184 */
185 
186  return xsec;
187 }
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?

Member Data Documentation

double genie::GiBUURESPXSec::fMa2
private

(axial mass)^2

Definition at line 56 of file GiBUURESPXSec.h.

double genie::GiBUURESPXSec::fMv2
private

(vector mass)^2

Definition at line 57 of file GiBUURESPXSec.h.

bool genie::GiBUURESPXSec::fUsingDisResJoin
private

use a DIS/RES joining scheme?

Definition at line 58 of file GiBUURESPXSec.h.

double genie::GiBUURESPXSec::fWcut
private

apply DIS/RES joining scheme < Wcut

Definition at line 59 of file GiBUURESPXSec.h.

const XSecIntegratorI* genie::GiBUURESPXSec::fXSecIntegrator
private

Definition at line 61 of file GiBUURESPXSec.h.


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