GENIEGenerator
Loading...
Searching...
No Matches
LwlynSmithQELCCPXSec.cxx
Go to the documentation of this file.
1//____________________________________________________________________________
2/*
3 Copyright (c) 2003-2025, The GENIE Collaboration
4 For the full text of the license visit http://copyright.genie-mc.org
5
6 Costas Andreopoulos <c.andreopoulos \at cern.ch>
7 University of Liverpool
8*/
9//____________________________________________________________________________
10
11#include <TMath.h>
12
17#include "Framework/Conventions/GBuild.h"
25
35
36using namespace genie;
37using namespace genie::constants;
38using namespace genie::utils;
39
40//____________________________________________________________________________
42XSecAlgorithmI("genie::LwlynSmithQELCCPXSec")
43{
44
45}
46//____________________________________________________________________________
48XSecAlgorithmI("genie::LwlynSmithQELCCPXSec", config)
49{
50
51}
52//____________________________________________________________________________
57//____________________________________________________________________________
59 const Interaction * interaction, KinePhaseSpace_t kps) const
60{
61 if(! this -> ValidProcess (interaction) ) {LOG("LwlynSmith",pWARN) << "not a valid process"; return 0.;}
62 if(! this -> ValidKinematics (interaction) ) {LOG("LwlynSmith",pWARN) << "not valid kinematics"; return 0.;}
63
64 // If computing the full differential cross section, then all four momentum
65 // four-vectors (probe, hit nucleon, final lepton, and final nucleon) should
66 // have been set already, with the hit nucleon off-shell as appropriate.
67 if (kps == kPSQELEvGen) {
68 return this->FullDifferentialXSec(interaction);
69 }
70
71 // Get kinematics & init-state parameters
72 const Kinematics & kinematics = interaction -> Kine();
73 const InitialState & init_state = interaction -> InitState();
74 const Target & target = init_state.Tgt();
75
76 double E = init_state.ProbeE(kRfHitNucRest);
77 double E2 = TMath::Power(E,2);
78 double ml = interaction->FSPrimLepton()->Mass();
79 double M = target.HitNucMass();
80 double q2 = kinematics.q2();
81
82 // One of the xsec terms changes sign for antineutrinos
83 bool is_neutrino = pdg::IsNeutrino(init_state.ProbePdg());
84 int sign = (is_neutrino) ? -1 : 1;
85
86 // Calculate the QEL form factors
87 fFormFactors.Calculate(interaction);
88
89 double F1V = fFormFactors.F1V();
90 double xiF2V = fFormFactors.xiF2V();
91 double FA = fFormFactors.FA();
92 double Fp = fFormFactors.Fp();
93
94#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
95 LOG("LwlynSmith", pDEBUG) << "\n" << fFormFactors;
96#endif
97
98 // Calculate auxiliary parameters
99 double ml2 = TMath::Power(ml, 2);
100 double M2 = TMath::Power(M, 2);
101 double M4 = TMath::Power(M2, 2);
102 double FA2 = TMath::Power(FA, 2);
103 double Fp2 = TMath::Power(Fp, 2);
104 double F1V2 = TMath::Power(F1V, 2);
105 double xiF2V2 = TMath::Power(xiF2V, 2);
106 double Gfactor = M2*kGF2*fCos8c2 / (8*kPi*E2);
107 double s_u = 4*E*M + q2 - ml2;
108 double q2_M2 = q2/M2;
109
110 // Compute free nucleon differential cross section
111 double A = (0.25*(ml2-q2)/M2) * (
112 (4-q2_M2)*FA2 - (4+q2_M2)*F1V2 - q2_M2*xiF2V2*(1+0.25*q2_M2)
113 -4*q2_M2*F1V*xiF2V - (ml2/M2)*(
114 (F1V2+xiF2V2+2*F1V*xiF2V)+(FA2+4*Fp2+4*FA*Fp)+(q2_M2-4)*Fp2));
115 double B = -1 * q2_M2 * FA*(F1V+xiF2V);
116 double C = 0.25*(FA2 + F1V2 - 0.25*q2_M2*xiF2V2);
117
118 double xsec = Gfactor * (A + sign*B*s_u/M2 + C*s_u*s_u/M4);
119
120 // Apply given scaling factor
121 double xsec_scale = 1 ;
122 const ProcessInfo& proc_info = interaction->ProcInfo();
123
124 if( proc_info.IsWeakCC() ) xsec_scale = fXSecCCScale;
125 else if( proc_info.IsWeakNC() ) xsec_scale = fXSecNCScale;
126 xsec *= xsec_scale ;
127
128#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
129 LOG("LwlynSmith", pDEBUG)
130 << "dXSec[QEL]/dQ2 [FreeN](E = "<< E << ", Q2 = "<< -q2 << ") = "<< xsec;
131 LOG("LwlynSmith", pDEBUG)
132 << "A(Q2) = " << A << ", B(Q2) = " << B << ", C(Q2) = " << C;
133#endif
134
135 //----- The algorithm computes dxsec/dQ2
136 // Check whether variable tranformation is needed
137 if(kps!=kPSQ2fE) {
138 double J = utils::kinematics::Jacobian(interaction,kPSQ2fE,kps);
139
140#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
141 LOG("LwlynSmith", pDEBUG)
142 << "Jacobian for transformation to: "
143 << KinePhaseSpace::AsString(kps) << ", J = " << J;
144#endif
145 xsec *= J;
146 }
147
148 //----- if requested return the free nucleon xsec even for input nuclear tgt
149 if( interaction->TestBit(kIAssumeFreeNucleon) ) return xsec;
150
151 //----- compute nuclear suppression factor
152 // (R(Q2) is adapted from NeuGEN - see comments therein)
153 double R = nuclear::NuclQELXSecSuppression("Default", 0.5, interaction);
154
155 //----- number of scattering centers in the target
156 int nucpdgc = target.HitNucPdg();
157 int NNucl = (pdg::IsProton(nucpdgc)) ? target.Z() : target.N();
158
159#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
160 LOG("LwlynSmith", pDEBUG)
161 << "Nuclear suppression factor R(Q2) = " << R << ", NNucl = " << NNucl;
162#endif
163
164 xsec *= (R*NNucl); // nuclear xsec
165
166 return xsec;
167}
168//____________________________________________________________________________
170 const
171{
172 // First we need access to all of the particles in the interaction
173 // The particles were stored in the lab frame
174 const Kinematics& kinematics = interaction -> Kine();
175 const InitialState& init_state = interaction -> InitState();
176
177 const Target& tgt = init_state.Tgt();
178
179 const TLorentzVector leptonMom = kinematics.FSLeptonP4();
180 const TLorentzVector outNucleonMom = kinematics.HadSystP4();
181
182 // Apply Pauli blocking if enabled
183 if ( fDoPauliBlocking && tgt.IsNucleus() && !interaction->TestBit(kIAssumeFreeNucleon) ) {
184 int final_nucleon_pdg = interaction->RecoilNucleonPdg();
185 double kF = fPauliBlocker->GetFermiMomentum(tgt, final_nucleon_pdg,
186 tgt.HitNucPosition());
187 double pNf = outNucleonMom.P();
188 if ( pNf < kF ) return 0.;
189 }
190
191 // Note that GetProbeP4 defaults to returning the probe 4-momentum in the
192 // struck nucleon rest frame, so we have to explicitly ask for the lab frame
193 // here
194 TLorentzVector * tempNeutrino = init_state.GetProbeP4(kRfLab);
195 TLorentzVector neutrinoMom = *tempNeutrino;
196 delete tempNeutrino;
197 TLorentzVector * inNucleonMom = init_state.TgtPtr()->HitNucP4Ptr();
198
199 // *** CALCULATION OF "q" and "qTilde" ***
200 // According to the de Forest prescription for handling the off-shell
201 // initial struck nucleon, the cross section calculation should proceed
202 // as if for a free nucleon, except that an effective value of the 4-momentum
203 // transfer qTilde should be used in which the difference between the on-
204 // and off-shell energies of the hit nucleon has been subtracted from the
205 // energy transfer q0.
206
207 // HitNucMass() looks up the PDGLibrary (on-shell) value for the initial
208 // struck nucleon
209 double mNi = init_state.Tgt().HitNucMass();
210
211 // Hadronic matrix element for CC neutrino interactions should really use
212 // the "nucleon mass," i.e., the mean of the proton and neutrino masses.
213 // This expression would also work for NC and EM scattering (since the
214 // initial and final on-shell nucleon masses would be the same)
215 double mNucleon = ( mNi + interaction->RecoilNucleon()->Mass() ) / 2.;
216
217 // Ordinary 4-momentum transfer
218 TLorentzVector qP4 = neutrinoMom - leptonMom;
219
220 // Initial struck nucleon 4-momentum in which it is forced to be on-shell
221 double inNucleonOnShellEnergy = std::sqrt( std::pow(mNi, 2)
222 + std::pow(inNucleonMom->P(), 2) );
223 TLorentzVector inNucleonMomOnShell( inNucleonMom->Vect(), inNucleonOnShellEnergy );
224
225 // Effective 4-momentum transfer (according to the deForest prescription) for
226 // use in computing the hadronic tensor
227 TLorentzVector qTildeP4 = outNucleonMom - inNucleonMomOnShell;
228
229 double Q2 = -1. * qP4.Mag2();
230 double Q2tilde = -1. * qTildeP4.Mag2();
231
232 // If the binding energy correction causes an unphysical value
233 // of q0Tilde or Q2tilde, just return 0.
234 if ( qTildeP4.E() <= 0. && init_state.Tgt().IsNucleus() &&
235 !interaction->TestBit(kIAssumeFreeNucleon) ) return 0.;
236 if ( Q2tilde <= 0. ) return 0.;
237
238 // Store Q2tilde in the kinematic variable representing Q2.
239 // This will ensure that the form factors are calculated correctly
240 // using the de Forest prescription (Q2tilde instead of Q2).
241 interaction->KinePtr()->SetQ2(Q2tilde);
242
243 // Calculate the QEL form factors
244 fFormFactors.Calculate(interaction);
245
246 double F1V = fFormFactors.F1V();
247 double xiF2V = fFormFactors.xiF2V();
248 double FA = fFormFactors.FA();
249 double Fp = fFormFactors.Fp();
250
251 // Restore Q2 in the interaction's kinematic variables
252 // now that the form factors have been computed
253 interaction->KinePtr()->SetQ2( Q2 );
254
255 // Overall factor in the differential cross section
256 double Gfactor = kGF2*fCos8c2 / ( 8. * kPi * kPi * inNucleonOnShellEnergy
257 * neutrinoMom.E() * outNucleonMom.E() * leptonMom.E() );
258
259 // Now, we can calculate the cross section
260 double tau = Q2tilde / (4 * std::pow(mNucleon, 2));
261 double h1 = FA*FA*(1 + tau) + tau*(F1V + xiF2V)*(F1V + xiF2V);
262 double h2 = FA*FA + F1V*F1V + tau*xiF2V*xiF2V;
263 double h3 = 2.0 * FA * (F1V + xiF2V);
264 double h4 = 0.25 * xiF2V*xiF2V *(1-tau) + 0.5*F1V*xiF2V + FA*Fp - tau*Fp*Fp;
265
266 bool is_neutrino = pdg::IsNeutrino(init_state.ProbePdg());
267 int sign = (is_neutrino) ? -1 : 1;
268 double l1 = 2*neutrinoMom.Dot(leptonMom)*std::pow(mNucleon, 2);
269 double l2 = 2*(neutrinoMom.Dot(inNucleonMomOnShell)) * (inNucleonMomOnShell.Dot(leptonMom)) - neutrinoMom.Dot(leptonMom)*std::pow(mNucleon, 2);
270 double l3 = (neutrinoMom.Dot(inNucleonMomOnShell) * qTildeP4.Dot(leptonMom)) - (neutrinoMom.Dot(qTildeP4) * leptonMom.Dot(inNucleonMomOnShell));
271 l3 *= sign;
272 double l4 = neutrinoMom.Dot(leptonMom) * qTildeP4.Dot(qTildeP4) - 2*neutrinoMom.Dot(qTildeP4)*leptonMom.Dot(qTildeP4);
273 double l5 = neutrinoMom.Dot(inNucleonMomOnShell) * leptonMom.Dot(qTildeP4) + leptonMom.Dot(inNucleonMomOnShell)*neutrinoMom.Dot(qTildeP4) - neutrinoMom.Dot(leptonMom)*inNucleonMomOnShell.Dot(qTildeP4);
274
275 double LH = 2 *(l1*h1 + l2*h2 + l3*h3 + l4*h4 + l5*h2);
276
277 double xsec = Gfactor * LH;
278
279 // Apply the factor that arises from elimination of the energy-conserving
280 // delta function
281 xsec *= genie::utils::EnergyDeltaFunctionSolutionQEL( *interaction );
282
283 const ProcessInfo& proc_info = interaction->ProcInfo();
284
285 // Apply given scaling factor
286 double xsec_scale = 1 ;
287 if( proc_info.IsWeakCC() ) xsec_scale = fXSecCCScale;
288 else if( proc_info.IsWeakNC() ) xsec_scale = fXSecNCScale;
289
290 xsec *= xsec_scale ;
291
292 // Number of scattering centers in the target
293 const Target & target = init_state.Tgt();
294 int nucpdgc = target.HitNucPdg();
295 int NNucl = (pdg::IsProton(nucpdgc)) ? target.Z() : target.N();
296
297#ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
298 LOG("LwlynSmith", pDEBUG)
299 << "Nuclear suppression factor R(Q2) = " << R << ", NNucl = " << NNucl;
300#endif
301
302 xsec *= NNucl; // nuclear xsec
303
304 return xsec;
305
306}
307//____________________________________________________________________________
309{
310 // If we're using the new spline generation method (which integrates
311 // over the kPSQELEvGen phase space used by QELEventGenerator) then
312 // let the cross section integrator do all of the work. It's smart
313 // enough to handle free nucleon vs. nuclear targets, different
314 // nuclear models (including the local Fermi gas model), etc.
315 // TODO: think about doing this in a better way
316 if ( fXSecIntegrator->Id().Name() == "genie::NewQELXSec" ) {
317 return fXSecIntegrator->Integrate(this, in);
318 }
319
320 // Otherwise, use the old integration method (kept for use with
321 // the historical default G18_00x series of tunes)
322 bool nuclear_target = in->InitState().Tgt().IsNucleus();
323 if(!nuclear_target || !fDoAvgOverNucleonMomentum) {
324 return fXSecIntegrator->Integrate(this,in);
325 }
326
327 double E = in->InitState().ProbeE(kRfHitNucRest);
328 if(fLFG || E < fEnergyCutOff) {
329 // clone the input interaction so as to tweak the
330 // hit nucleon 4-momentum in the averaging loop
331 Interaction in_curr(*in);
332
333 // hit target
334 Target * tgt = in_curr.InitState().TgtPtr();
335
336 // get nuclear masses (init & final state nucleus)
337 int nucleon_pdgc = tgt->HitNucPdg();
338 bool is_p = pdg::IsProton(nucleon_pdgc);
339 int Zi = tgt->Z();
340 int Ai = tgt->A();
341 int Zf = (is_p) ? Zi-1 : Zi;
342 int Af = Ai-1;
343 PDGLibrary * pdglib = PDGLibrary::Instance();
344 TParticlePDG * nucl_i = pdglib->Find( pdg::IonPdgCode(Ai, Zi) );
345 TParticlePDG * nucl_f = pdglib->Find( pdg::IonPdgCode(Af, Zf) );
346 if(!nucl_f) {
347 LOG("LwlynSmith", pFATAL)
348 << "Unknwown nuclear target! No target with code: "
349 << pdg::IonPdgCode(Af, Zf) << " in PDGLibrary!";
350 exit(1);
351 }
352 double Mi = nucl_i -> Mass(); // initial nucleus mass
353 double Mf = nucl_f -> Mass(); // remnant nucleus mass
354
355 // throw nucleons with fermi momenta and binding energies
356 // generated according to the current nuclear model for the
357 // input target and average the cross section
358 double xsec_sum = 0.;
359 const int nnuc = 2000;
360 // VertexGenerator for generating a position before generating
361 // each nucleon
362 VertexGenerator * vg = new VertexGenerator();
363 vg->Configure("Default");
364 for(int inuc=0;inuc<nnuc;inuc++){
365 // Generate a position in the nucleus
366 TVector3 nucpos = vg->GenerateVertex(&in_curr,tgt->A());
367 tgt->SetHitNucPosition(nucpos.Mag());
368
369 // Generate a nucleon
370 fNuclModel->GenerateNucleon(*tgt, nucpos.Mag());
371 TVector3 p3N = fNuclModel->Momentum3();
372 double EN = Mi - TMath::Sqrt(p3N.Mag2() + Mf*Mf);
373 TLorentzVector* p4N = tgt->HitNucP4Ptr();
374 p4N->SetPx (p3N.Px());
375 p4N->SetPy (p3N.Py());
376 p4N->SetPz (p3N.Pz());
377 p4N->SetE (EN);
378
379 double xsec = fXSecIntegrator->Integrate(this,&in_curr);
380 xsec_sum += xsec;
381 }
382 double xsec_avg = xsec_sum / nnuc;
383 delete vg;
384 return xsec_avg;
385 }else{
386 return fXSecIntegrator->Integrate(this,in);
387 }
388}
389//____________________________________________________________________________
390bool LwlynSmithQELCCPXSec::ValidProcess(const Interaction * interaction) const
391{
392 if(interaction->TestBit(kISkipProcessChk)) return true;
393
394 const InitialState & init_state = interaction->InitState();
395 const ProcessInfo & proc_info = interaction->ProcInfo();
396
397 if(!proc_info.IsQuasiElastic()) return false;
398
399 int nuc = init_state.Tgt().HitNucPdg();
400 int nu = init_state.ProbePdg();
401
402 bool isP = pdg::IsProton(nuc);
403 bool isN = pdg::IsNeutron(nuc);
404 bool isnu = pdg::IsNeutrino(nu);
405 bool isnub = pdg::IsAntiNeutrino(nu);
406
407 bool prcok = proc_info.IsWeakCC() && ((isP&&isnub) || (isN&&isnu));
408 if(!prcok) return false;
409
410 return true;
411}
412//____________________________________________________________________________
418//____________________________________________________________________________
424//____________________________________________________________________________
426{
427 // Cross section scaling factor
428 GetParam( "QEL-CC-XSecScale", fXSecCCScale ) ;
429 GetParam( "QEL-NC-XSecScale", fXSecNCScale ) ;
430
431 double thc ;
432 GetParam( "CabibboAngle", thc ) ;
433 fCos8c2 = TMath::Power(TMath::Cos(thc), 2);
434
435 // load QEL form factors model
436 fFormFactorsModel = dynamic_cast<const QELFormFactorsModelI *> (
437 this->SubAlg("FormFactorsAlg"));
438 assert(fFormFactorsModel);
439 fFormFactors.SetModel(fFormFactorsModel); // <-- attach algorithm
440
441 // load XSec Integrator
443 dynamic_cast<const XSecIntegratorI *> (this->SubAlg("XSec-Integrator"));
444 assert(fXSecIntegrator);
445
446 // Get nuclear model for use in Integral()
447 RgKey nuclkey = "IntegralNuclearModel";
448 fNuclModel = dynamic_cast<const NuclearModelI *> (this->SubAlg(nuclkey));
449 assert(fNuclModel);
450
451 fLFG = fNuclModel->ModelType(Target()) == kNucmLocalFermiGas;
452
453 bool average_over_nuc_mom ;
454 GetParamDef( "IntegralAverageOverNucleonMomentum", average_over_nuc_mom, false ) ;
455 // Always average over initial nucleons if the nuclear model is LFG
456 fDoAvgOverNucleonMomentum = fLFG || average_over_nuc_mom ;
457
458 fEnergyCutOff = 0.;
459
460 // Get averaging cutoff energy
461 GetParamDef("IntegralNuclearInfluenceCutoffEnergy", fEnergyCutOff, 2.0 ) ;
462
463 // Method to use to calculate the binding energy of the initial hit nucleon when
464 // generating splines
465 std::string temp_binding_mode;
466 GetParamDef( "IntegralNucleonBindingMode", temp_binding_mode, std::string("UseNuclearModel") );
468
469 // Get PauliBlocker for possible use in FullDifferentialXSec()
470 GetParamDef( "IntegralNucleonBindingMode", temp_binding_mode, std::string("UseNuclearModel") );
471 fPauliBlocker = dynamic_cast<const PauliBlocker*>( this->SubAlg("PauliBlockerAlg") );
472 assert( fPauliBlocker );
473
474 // Decide whether or not it should be used in FullDifferentialXSec
475 GetParamDef( "DoPauliBlocking", fDoPauliBlocking, true );
476}
#define pFATAL
Definition Messenger.h:56
#define pDEBUG
Definition Messenger.h:63
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Definition Messenger.h:96
#define pWARN
Definition Messenger.h:60
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils.
string RgKey
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
virtual void Configure(const Registry &config)
Definition Algorithm.cxx:62
bool GetParamDef(const RgKey &name, T &p, const T &def) const
const Algorithm * SubAlg(const RgKey &registry_key) const
Initial State information.
TLorentzVector * GetProbeP4(RefFrame_t rf=kRfHitNucRest) const
const Target & Tgt(void) const
int ProbePdg(void) const
double ProbeE(RefFrame_t rf) const
Target * TgtPtr(void) const
Summary information for an interaction.
Definition Interaction.h:56
TParticlePDG * RecoilNucleon(void) const
recoil nucleon
int RecoilNucleonPdg(void) const
recoil nucleon pdg
const ProcessInfo & ProcInfo(void) const
Definition Interaction.h:70
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
const InitialState & InitState(void) const
Definition Interaction.h:69
Kinematics * KinePtr(void) const
Definition Interaction.h:76
static string AsString(KinePhaseSpace_t kps)
Generated/set kinematical variables for an event.
Definition Kinematics.h:39
void SetQ2(double Q2, bool selected=false)
bool fDoAvgOverNucleonMomentum
Average cross section over hit nucleon monentum?
const NuclearModelI * fNuclModel
double fCos8c2
cos^2(cabibbo angle)
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
double fXSecNCScale
external xsec scaling factor for NC
void Configure(const Registry &config)
bool fDoPauliBlocking
Whether to apply Pauli blocking in FullDifferentialXSec.
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
const XSecIntegratorI * fXSecIntegrator
double fXSecCCScale
external xsec scaling factor for CC
double Integral(const Interaction *i) const
QELEvGen_BindingMode_t fIntegralNucleonBindingMode
const genie::PauliBlocker * fPauliBlocker
The PauliBlocker instance to use to apply that correction.
const QELFormFactorsModelI * fFormFactorsModel
double FullDifferentialXSec(const Interaction *i) const
bool fLFG
If the nuclear model is lfg alway average over nucleons.
Pure abstract base class. Defines the NuclearModelI interface to be implemented by any physics model ...
Singleton class to load & serve a TDatabasePDG.
Definition PDGLibrary.h:36
static PDGLibrary * Instance(void)
TParticlePDG * Find(int pdgc, bool must_exist=true)
Examines whether the generated event should be Pauli blocked. Is a concerete implementation of the Ev...
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
Definition ProcessInfo.h:46
bool IsWeakNC(void) const
bool IsWeakCC(void) const
bool IsQuasiElastic(void) const
Pure abstract base class. Defines the QELFormFactorsModelI interface to be implemented by any algorit...
A registry. Provides the container for algorithm configuration parameters.
Definition Registry.h:65
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
Definition Target.h:40
int HitNucPdg(void) const
Definition Target.cxx:304
void SetHitNucPosition(double r)
Definition Target.cxx:210
int N(void) const
Definition Target.h:69
int Z(void) const
Definition Target.h:68
TLorentzVector * HitNucP4Ptr(void) const
Definition Target.cxx:247
int A(void) const
Definition Target.h:70
double HitNucPosition(void) const
Definition Target.h:89
double HitNucMass(void) const
Definition Target.cxx:233
bool IsNucleus(void) const
Definition Target.cxx:272
void Configure(const Registry &config)
TVector3 GenerateVertex(const Interaction *in, double A) const
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
Cross Section Integrator Interface.
Basic constants.
bool IsNeutrino(int pdgc)
Definition PDGUtils.cxx:110
int IonPdgCode(int A, int Z)
Definition PDGUtils.cxx:71
bool IsProton(int pdgc)
Definition PDGUtils.cxx:336
bool IsNeutron(int pdgc)
Definition PDGUtils.cxx:341
bool IsAntiNeutrino(int pdgc)
Definition PDGUtils.cxx:118
Simple functions for loading and reading nucleus dependent keys from config files.
Kinematical utilities.
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
double NuclQELXSecSuppression(string kftable, double pmax, const Interaction *in)
Root of GENIE utility namespaces.
QELEvGen_BindingMode_t StringToQELBindingMode(const std::string &mode_str)
Definition QELUtils.cxx:194
double EnergyDeltaFunctionSolutionQEL(const Interaction &inter)
Definition QELUtils.cxx:50
THE MAIN GENIE PROJECT NAMESPACE
Definition AlgCmp.h:25
enum genie::EKinePhaseSpace KinePhaseSpace_t
@ kRfHitNucRest
Definition RefFrame.h:30
@ kRfLab
Definition RefFrame.h:26
@ kNucmLocalFermiGas
const UInt_t kISkipProcessChk
if set, skip process validity checks
Definition Interaction.h:47
const UInt_t kIAssumeFreeNucleon
Definition Interaction.h:49