GENIEGenerator
Loading...
Searching...
No Matches
ReinSehgalRESPXSec.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#include <TSystem.h>
13
17#include "Framework/Conventions/GBuild.h"
37
38using namespace genie;
39using namespace genie::constants;
40
41//____________________________________________________________________________
43XSecAlgorithmI("genie::ReinSehgalRESPXSec")
44{
45 fNuTauRdSpl = 0;
47}
48//____________________________________________________________________________
50XSecAlgorithmI("genie::ReinSehgalRESPXSec", config)
51{
52 fNuTauRdSpl = 0;
54}
55//____________________________________________________________________________
61//____________________________________________________________________________
63 const Interaction * interaction, KinePhaseSpace_t kps) const
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
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}
370//____________________________________________________________________________
371double ReinSehgalRESPXSec::Integral(const Interaction * interaction) const
372{
373 double xsec = fXSecIntegrator->Integrate(this,interaction);
374 return xsec;
375}
376//____________________________________________________________________________
377bool ReinSehgalRESPXSec::ValidProcess(const Interaction * interaction) const
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}
403//____________________________________________________________________________
405{
406 Algorithm::Configure(config);
407 this->LoadConfig();
408}
409//____________________________________________________________________________
411{
412 Algorithm::Configure(config);
413 this->LoadConfig();
414}
415//____________________________________________________________________________
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
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}
515//____________________________________________________________________________
#define pNOTICE
Definition Messenger.h:61
#define pINFO
Definition Messenger.h:62
#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
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils.
The GENIE Algorithm Factory.
Definition AlgFactory.h:39
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)
Definition Algorithm.cxx:62
bool GetParamDef(const RgKey &name, T &p, const T &def) const
const Algorithm * SubAlg(const RgKey &registry_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
int ProbePdg(void) const
double ProbeE(RefFrame_t rf) const
Summary information for an interaction.
Definition Interaction.h:56
string AsString(void) const
const XclsTag & ExclTag(void) const
Definition Interaction.h:72
const ProcessInfo & ProcInfo(void) const
Definition Interaction.h:70
const InitialState & InitState(void) const
Definition Interaction.h:69
Generated/set kinematical variables for an event.
Definition Kinematics.h:39
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...
Definition ProcessInfo.h:46
bool IsWeakNC(void) const
bool IsWeakCC(void) const
bool IsEM(void) const
bool IsWeak(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.
Definition Registry.h:65
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.
double fXSecScaleEM
external EM xsec scaling factor
A numeric analysis tool class for interpolating 1-D functions.
Definition Spline.h:58
double Evaluate(double x) const
Definition Spline.cxx:363
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
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?
Cross Section Integrator Interface.
Contains minimal information for tagging exclusive processes.
Definition XclsTag.h:39
Resonance_t Resonance(void) const
Definition XclsTag.h:69
bool KnownResonance(void) const
Definition XclsTag.h:68
Basic constants.
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 IsProton(int pdgc)
Definition PDGUtils.cxx:336
bool IsPosChargedLepton(int pdgc)
Definition PDGUtils.cxx:148
bool IsChargedLepton(int pdgc)
Definition PDGUtils.cxx:101
bool IsNeutralLepton(int pdgc)
Definition PDGUtils.cxx:95
bool IsNeutron(int pdgc)
Definition PDGUtils.cxx:341
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 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
Definition AlgCmp.h:25
enum genie::EResonance Resonance_t
enum genie::EKinePhaseSpace KinePhaseSpace_t
@ kRfHitNucRest
Definition RefFrame.h:30
const UInt_t kISkipProcessChk
if set, skip process validity checks
Definition Interaction.h:47
const UInt_t kIAssumeFreeNucleon
Definition Interaction.h:49