ReinSehgalRESPXSec.cxx
Go to the documentation of this file.
1 //____________________________________________________________________________
2 /*
3  Copyright (c) 2003-2020, The GENIE Collaboration
4  For the full text of the license visit http://copyright.genie-mc.org
5 
6  Costas Andreopoulos <constantinos.andreopoulos \at cern.ch>
7  University of Liverpool & STFC Rutherford Appleton Laboratory
8 */
9 //____________________________________________________________________________
10 
11 #include <TMath.h>
12 #include <TSystem.h>
13 
17 #include "Framework/Conventions/GBuild.h"
28 #include "Framework/Utils/Range1.h"
29 #include "Framework/Utils/BWFunc.h"
37 
38 using namespace genie;
39 using namespace genie::constants;
40 
41 //____________________________________________________________________________
43 XSecAlgorithmI("genie::ReinSehgalRESPXSec")
44 {
45  fNuTauRdSpl = 0;
46  fNuTauBarRdSpl = 0;
47 }
48 //____________________________________________________________________________
50 XSecAlgorithmI("genie::ReinSehgalRESPXSec", config)
51 {
52  fNuTauRdSpl = 0;
53  fNuTauBarRdSpl = 0;
54 }
55 //____________________________________________________________________________
57 {
58  if(fNuTauRdSpl) delete fNuTauRdSpl;
59  if(fNuTauBarRdSpl) delete fNuTauBarRdSpl;
60 }
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
78  if(fUsingDisResJoin) {
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  // For EM interaction replace G_{Fermi} with :
212  // a_{em} * pi / ( sqrt(2) * sin^2(theta_weinberg) * Mass_{W}^2 }
213  // See C.Quigg, Gauge Theories of the Strong, Weak and E/M Interactions,
214  // ISBN 0-8053-6021-2, p.112 (6.3.57)
215  // Also, take int account that the photon propagator is 1/p^2 but the
216  // W propagator is 1/(p^2-Mass_{W}^2), so weight the EM case with
217  // Mass_{W}^4 / q^4
218  // So, overall:
219  // G_{Fermi}^2 --> a_{em}^2 * pi^2 / (2 * sin^4(theta_weinberg) * q^{4})
220  //
221  if(is_EM) {
222  double q4 = q2*q2;
223  g2 = kAem2 * kPi2 / (2.0 * fSin48w * q4);
224  }
225 
226  // Compute the cross section
227 
228  double sig0 = 0.125*(g2/kPi)*(-q2/Q2)*(W/Mnuc);
229  double scLR = W/Mnuc;
230  double scS = (Mnuc/W)*(-Q2/q2);
231  double sigL = scLR* (hampl.Amp2Plus3 () + hampl.Amp2Plus1 ());
232  double sigR = scLR* (hampl.Amp2Minus3() + hampl.Amp2Minus1());
233  double sigS = scS * (hampl.Amp20Plus () + hampl.Amp20Minus());
234 
235 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
236  LOG("ReinSehgalRes", pDEBUG) << "sig_{0} = " << sig0;
237  LOG("ReinSehgalRes", pDEBUG) << "sig_{L} = " << sigL;
238  LOG("ReinSehgalRes", pDEBUG) << "sig_{R} = " << sigR;
239  LOG("ReinSehgalRes", pDEBUG) << "sig_{S} = " << sigS;
240 #endif
241 
242  double xsec = 0.0;
243  if (is_nu || is_lminus) {
244  xsec = sig0*(V2*sigR + U2*sigL + 2*UV*sigS);
245  }
246  else
247  if (is_nubar || is_lplus) {
248  xsec = sig0*(U2*sigR + V2*sigL + 2*UV*sigS);
249  }
250  xsec = TMath::Max(0.,xsec);
251 
252  double mult = 1.0;
253  if(is_CC && is_delta) {
254  if((is_nu && is_p) || (is_nubar && is_n)) mult=3.0;
255  }
256  xsec *= mult;
257 
258  // Check whether the cross section is to be weighted with a
259  // Breit-Wigner distribution (default: true)
260  double bw = 1.0;
261  if(fWghtBW) {
262  //different Delta photon decay branch
263  if(is_delta){
264  bw = utils::bwfunc::BreitWignerLGamma(W,LR,MR,WR,NR);
265  }
266  else{
267  bw = utils::bwfunc::BreitWignerL(W,LR,MR,WR,NR);
268  }
269  }
270 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
271  LOG("ReinSehgalRes", pDEBUG)
272  << "BreitWigner(RES=" << resname << ", W=" << W << ") = " << bw;
273 #endif
274  xsec *= bw;
275 
276  // Apply NeuGEN nutau cross section reduction factors
277  double rf = 1.0;
278  Spline * spl = 0;
279  if (is_CC && fUsingNuTauScaling) {
280  if (pdg::IsNuTau (probepdgc)) spl = fNuTauRdSpl;
281  else if (pdg::IsAntiNuTau(probepdgc)) spl = fNuTauBarRdSpl;
282 
283  if(spl) {
284  if(E <spl->XMax()) rf = spl->Evaluate(E);
285  }
286  }
287  xsec *= rf;
288 
289  // Apply given scaling factor
290  double xsec_scale = 1.;
291  if (is_CC) { xsec_scale = fXSecScaleCC; }
292  else if (is_NC) { xsec_scale = fXSecScaleNC; }
293  xsec *= xsec_scale;
294 
295 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
296  LOG("ReinSehgalRes", pINFO)
297  << "\n d2xsec/dQ2dW" << "[" << interaction->AsString()
298  << "](W=" << W << ", q2=" << q2 << ", E=" << E << ") = " << xsec;
299 #endif
300 
301  // The algorithm computes d^2xsec/dWdQ2
302  // Check whether variable tranformation is needed
303  if(kps!=kPSWQ2fE) {
304  double J = utils::kinematics::Jacobian(interaction,kPSWQ2fE,kps);
305  xsec *= J;
306  }
307 
308  // If requested return the free nucleon xsec even for input nuclear tgt
309  if( interaction->TestBit(kIAssumeFreeNucleon) ) return xsec;
310 
311 
312  int Z = target.Z();
313  int A = target.A();
314  int N = A-Z;
315 
316  // Take into account the number of scattering centers in the target
317  int NNucl = (is_p) ? Z : N;
318 
319  xsec*=NNucl; // nuclear xsec (no nuclear suppression factor)
320 
321  if (fUsePauliBlocking && A!=1)
322  {
323  // Calculation of Pauli blocking according references:
324  //
325  // [1] S.L. Adler, S. Nussinov, and E.A. Paschos, "Nuclear
326  // charge exchange corrections to leptonic pion production
327  // in the (3,3) resonance region," Phys. Rev. D 9 (1974)
328  // 2125-2143 [Erratum Phys. Rev. D 10 (1974) 1669].
329  // [2] J.Y. Yu, "Neutrino interactions and nuclear effects in
330  // oscillation experiments and the nonperturbative disper-
331  // sive sector in strong (quasi-)abelian fields," Ph. D.
332  // Thesis, Dortmund U., Dortmund, 2002 (unpublished).
333  // [3] E.A. Paschos, J.Y. Yu, and M. Sakuda, "Neutrino pro-
334  // duction of resonances," Phys. Rev. D 69 (2004) 014013
335  // [arXiv: hep-ph/0308130].
336 
337  double P_Fermi = 0.0;
338 
339  // Maximum value of Fermi momentum of target nucleon (GeV)
340  if (A<6 || !fUseRFGParametrization)
341  {
342  // Look up the Fermi momentum for this target
344  const FermiMomentumTable * kft = kftp->GetTable(fKFTable);
345  P_Fermi = kft->FindClosestKF(pdg::IonPdgCode(A, Z), nucpdgc);
346  }
347  else {
348  // Define the Fermi momentum for this target
350  // Correct the Fermi momentum for the struck nucleon
351  if(is_p) { P_Fermi *= TMath::Power( 2.*Z/A, 1./3); }
352  else { P_Fermi *= TMath::Power( 2.*N/A, 1./3); }
353  }
354 
355  double FactorPauli_RES = 1.0;
356 
357  double k0 = 0., q = 0., q0 = 0.;
358 
359  if (P_Fermi > 0.)
360  {
361  k0 = (W2-Mnuc2-Q2)/(2*W);
362  k = TMath::Sqrt(k0*k0+Q2); // previous value of k is overridden
363  q0 = (W2-Mnuc2+kPionMass2)/(2*W);
364  q = TMath::Sqrt(q0*q0-kPionMass2);
365  }
366 
367  if (2*P_Fermi < k-q)
368  FactorPauli_RES = 1.0;
369  if (2*P_Fermi >= k+q)
370  FactorPauli_RES = ((3*k*k+q*q)/(2*P_Fermi)-(5*TMath::Power(k,4)+TMath::Power(q,4)+10*k*k*q*q)/(40*TMath::Power(P_Fermi,3)))/(2*k);
371  if (2*P_Fermi >= k-q && 2*P_Fermi <= k+q)
372  FactorPauli_RES = ((q+k)*(q+k)-4*P_Fermi*P_Fermi/5-TMath::Power(k-q, 3)/(2*P_Fermi)+TMath::Power(k-q, 5)/(40*TMath::Power(P_Fermi, 3)))/(4*q*k);
373 
374  xsec *= FactorPauli_RES;
375  }
376 
377  return xsec;
378 }
379 //____________________________________________________________________________
381 {
382  double xsec = fXSecIntegrator->Integrate(this,interaction);
383  return xsec;
384 }
385 //____________________________________________________________________________
387 {
388  if(interaction->TestBit(kISkipProcessChk)) return true;
389 
390  const InitialState & init_state = interaction->InitState();
391  const ProcessInfo & proc_info = interaction->ProcInfo();
392  const XclsTag & xcls = interaction->ExclTag();
393 
394  if(!proc_info.IsResonant()) return false;
395  if(!xcls.KnownResonance()) return false;
396 
397  int hitnuc = init_state.Tgt().HitNucPdg();
398  bool is_pn = (pdg::IsProton(hitnuc) || pdg::IsNeutron(hitnuc));
399 
400  if (!is_pn) return false;
401 
402  int probe = init_state.ProbePdg();
403  bool is_weak = proc_info.IsWeak();
404  bool is_em = proc_info.IsEM();
405  bool nu_weak = (pdg::IsNeutralLepton(probe) && is_weak);
406  bool l_em = (pdg::IsChargedLepton(probe) && is_em );
407 
408  if (!nu_weak && !l_em) return false;
409 
410  return true;
411 }
412 //____________________________________________________________________________
414 {
415  Algorithm::Configure(config);
416  this->LoadConfig();
417 }
418 //____________________________________________________________________________
420 {
421  Algorithm::Configure(config);
422  this->LoadConfig();
423 }
424 //____________________________________________________________________________
426 {
427  // Cross section scaling factors
428  this->GetParam( "RES-CC-XSecScale", fXSecScaleCC ) ;
429  this->GetParam( "RES-NC-XSecScale", fXSecScaleNC ) ;
430 
431  this->GetParam( "RES-Zeta", fZeta ) ;
432  this->GetParam( "RES-Omega", fOmega ) ;
433 
434  double ma, mv ;
435  this->GetParam( "RES-Ma", ma ) ;
436  this->GetParam( "RES-Mv", mv ) ;
437  fMa2 = TMath::Power(ma,2);
438  fMv2 = TMath::Power(mv,2);
439 
440  this->GetParamDef( "BreitWignerWeight", fWghtBW, true ) ;
441  this->GetParamDef( "BreitWignerNorm", fNormBW, true);
442 
443  double thw ;
444  this->GetParam( "WeinbergAngle", thw ) ;
445  fSin48w = TMath::Power( TMath::Sin(thw), 4 );
446  double Vud;
447  this->GetParam("CKM-Vud", Vud );
448  fVud2 = TMath::Power( Vud, 2 );
449  this->GetParam("FermiMomentumTable", fKFTable);
450  this->GetParam("RFG-UseParametrization", fUseRFGParametrization);
451  this->GetParam("UsePauliBlockingForRES", fUsePauliBlocking);
452 
453  // Load all the sub-algorithms needed
454 
455  fHAmplModelCC = 0;
456  fHAmplModelNCp = 0;
457  fHAmplModelNCn = 0;
458  fHAmplModelEMp = 0;
459  fHAmplModelEMn = 0;
460 
461  AlgFactory * algf = AlgFactory::Instance();
462 
463  fHAmplModelCC = dynamic_cast<const RSHelicityAmplModelI *> (
464  algf->GetAlgorithm("genie::RSHelicityAmplModelCC","Default"));
465  fHAmplModelNCp = dynamic_cast<const RSHelicityAmplModelI *> (
466  algf->GetAlgorithm("genie::RSHelicityAmplModelNCp","Default"));
467  fHAmplModelNCn = dynamic_cast<const RSHelicityAmplModelI *> (
468  algf->GetAlgorithm("genie::RSHelicityAmplModelNCn","Default"));
469  fHAmplModelEMp = dynamic_cast<const RSHelicityAmplModelI *> (
470  algf->GetAlgorithm("genie::RSHelicityAmplModelEMp","Default"));
471  fHAmplModelEMn = dynamic_cast<const RSHelicityAmplModelI *> (
472  algf->GetAlgorithm("genie::RSHelicityAmplModelEMn","Default"));
473 
474  assert( fHAmplModelCC );
475  assert( fHAmplModelNCp );
476  assert( fHAmplModelNCn );
477  assert( fHAmplModelEMp );
478  assert( fHAmplModelEMn );
479 
480  // Use algorithm within a DIS/RES join scheme. If yes get Wcut
481  this->GetParam( "UseDRJoinScheme", fUsingDisResJoin ) ;
482  fWcut = 999999;
483  if(fUsingDisResJoin) {
484  this->GetParam( "Wcut", fWcut ) ;
485  }
486 
487  // NeuGEN limits in the allowed resonance phase space:
488  // W < min{ Wmin(physical), (res mass) + x * (res width) }
489  // It limits the integration area around the peak and avoids the
490  // problem with huge xsec increase at low Q2 and high W.
491  // In correspondence with Hugh, Rein said that the underlying problem
492  // are unphysical assumptions in the model.
493  this->GetParamDef( "MaxNWidthForN2Res", fN2ResMaxNWidths, 2.0 ) ;
494  this->GetParamDef( "MaxNWidthForN0Res", fN0ResMaxNWidths, 6.0 ) ;
495  this->GetParamDef( "MaxNWidthForGNRes", fGnResMaxNWidths, 4.0 ) ;
496 
497  // NeuGEN reduction factors for nu_tau: a gross estimate of the effect of
498  // neglected form factors in the R/S model
499  this->GetParamDef( "UseNuTauScalingFactors", fUsingNuTauScaling, true ) ;
500  if(fUsingNuTauScaling) {
501  if(fNuTauRdSpl) delete fNuTauRdSpl;
502  if(fNuTauBarRdSpl) delete fNuTauBarRdSpl;
503 
504  assert( std::getenv( "GENIE") );
505  string base = std::getenv( "GENIE") ;
506 
507  string filename = base + "/data/evgen/rein_sehgal/res/nutau_xsec_scaling_factors.dat";
508  LOG("ReinSehgalRes", pNOTICE)
509  << "Loading nu_tau xsec reduction spline from: " << filename;
510  fNuTauRdSpl = new Spline(filename);
511 
512  filename = base + "/data/evgen/rein_sehgal/res/nutaubar_xsec_scaling_factors.dat";
513  LOG("ReinSehgalRes", pNOTICE)
514  << "Loading bar{nu_tau} xsec reduction spline from: " << filename;
515  fNuTauBarRdSpl = new Spline(filename);
516  }
517 
518  // load the differential cross section integrator
520  dynamic_cast<const XSecIntegratorI *> (this->SubAlg("XSec-Integrator"));
521  assert(fXSecIntegrator);
522 }
523 //____________________________________________________________________________
bool IsDelta(Resonance_t res)
is it a Delta resonance?
bool IsResonant(void) const
Definition: ProcessInfo.cxx:94
Cross Section Calculation Interface.
virtual const RSHelicityAmpl & Compute(Resonance_t res, const FKR &fkr) const =0
double W(bool selected=false) const
Definition: Kinematics.cxx:157
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
bool IsNuTau(int pdgc)
Definition: PDGUtils.cxx:165
Basic constants.
bool fNormBW
normalize resonance breit-wigner to 1?
bool IsWeak(void) const
bool IsWeakCC(void) const
static const double kSqrt2
Definition: Constants.h:115
bool IsNeutrino(int pdgc)
Definition: PDGUtils.cxx:107
double J(double q0, double q3, double Enu, double ml)
Definition: MECUtils.cxx:147
THE MAIN GENIE PROJECT NAMESPACE
Definition: AlgCmp.h:25
double Rminus
Definition: FKR.h:50
Spline * fNuTauBarRdSpl
xsec reduction spline for nu_tau_bar
Cross Section Integrator Interface.
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1064
bool fWghtBW
weight with resonance breit-wigner?
int HitNucPdg(void) const
Definition: Target.cxx:304
const RSHelicityAmplModelI * fHAmplModelEMn
const RSHelicityAmplModelI * fHAmplModelNCp
double Ra
Definition: FKR.h:42
double fVud2
|Vud|^2(square of magnitude ud-element of CKM-matrix)
int A(void) const
Definition: Target.h:70
bool KnownResonance(void) const
Definition: XclsTag.h:68
double HitNucMass(void) const
Definition: Target.cxx:233
A numeric analysis tool class for interpolating 1-D functions.
Definition: Spline.h:46
static FermiMomentumTablePool * Instance(void)
Generated/set kinematical variables for an event.
Definition: Kinematics.h:39
bool IsAntiNuTau(int pdgc)
Definition: PDGUtils.cxx:180
double Lamda
Definition: FKR.h:37
bool IsChargedLepton(int pdgc)
Definition: PDGUtils.cxx:98
double Mass(Resonance_t res)
resonance mass (GeV)
double R
Definition: FKR.h:45
A table of Fermi momentum constants.
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
double Width(Resonance_t res)
resonance width (GeV)
double fMv2
(vector mass)^2
double BreitWignerLGamma(double W, int L, double mass, double width0, double norm)
Definition: BWFunc.cxx:22
double Evaluate(double x) const
Definition: Spline.cxx:361
double BreitWignerL(double W, int L, double mass, double width0, double norm)
Definition: BWFunc.cxx:99
enum genie::EKinePhaseSpace KinePhaseSpace_t
const RSHelicityAmplModelI * fHAmplModelCC
string filename
Definition: train.py:213
double BWNorm(Resonance_t res, double N0ResMaxNWidths=6, double N2ResMaxNWidths=2, double GnResMaxNWidths=4)
breit-wigner normalization factor
enum genie::EResonance Resonance_t
const RSHelicityAmplModelI * fHAmplModelNCn
string AsString(void) const
Contains minimal information for tagging exclusive processes.
Definition: XclsTag.h:39
double Integral(const Interaction *i) const
const RSHelicityAmplModelI * fHAmplModelEMp
bool IsNeutron(int pdgc)
Definition: PDGUtils.cxx:338
double fZeta
FKR parameter Zeta.
bool IsPosChargedLepton(int pdgc)
Definition: PDGUtils.cxx:145
Summary information for an interaction.
Definition: Interaction.h:56
double Tv
Definition: FKR.h:38
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
double q2(bool selected=false) const
Definition: Kinematics.cxx:141
A class holding the Rein-Sehgal&#39;s helicity amplitudes.
bool IsProton(int pdgc)
Definition: PDGUtils.cxx:333
bool IsWeakNC(void) const
Singleton class to load & serve tables of Fermi momentum constants.
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
const FermiMomentumTable * GetTable(string name)
static Config * config
Definition: config.cpp:1054
static const double kAem2
Definition: Constants.h:57
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
Definition: ProcessInfo.h:46
double fWcut
apply DIS/RES joining scheme < Wcut
std::string getenv(std::string const &name)
Definition: getenv.cc:15
double T
Definition: FKR.h:46
double Rv
Definition: FKR.h:39
bool IsAntiNeutrino(int pdgc)
Definition: PDGUtils.cxx:115
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
Definition: Target.h:40
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:62
int ProbePdg(void) const
Definition: InitialState.h:64
const Algorithm * GetAlgorithm(const AlgId &algid)
Definition: AlgFactory.cxx:75
int OrbitalAngularMom(Resonance_t res)
orbital angular momentum
int Z(void) const
Definition: Target.h:68
#define pINFO
Definition: Messenger.h:62
Pure abstract base class. Defines the RSHelicityAmplModelI interface.
Resonance_t Resonance(void) const
Definition: XclsTag.h:69
bool IsEM(void) const
bool IsNeutralLepton(int pdgc)
Definition: PDGUtils.cxx:92
double C
Definition: FKR.h:44
double FermiMomentumForIsoscalarNucleonParametrization(const Target &target)
double Tplus
Definition: FKR.h:47
const XSecIntegratorI * fXSecIntegrator
double fXSecScaleCC
external CC xsec scaling factor
static AlgFactory * Instance()
Definition: AlgFactory.cxx:64
double B
Definition: FKR.h:43
double fOmega
FKR parameter Omega.
double Rplus
Definition: FKR.h:49
bool fUseRFGParametrization
use parametrization for fermi momentum insted of table?
A registry. Provides the container for algorithm configuration parameters.
Definition: Registry.h:65
bool fUsingDisResJoin
use a DIS/RES joining scheme?
const UInt_t kIAssumeFreeNucleon
Definition: Interaction.h:49
const XclsTag & ExclTag(void) const
Definition: Interaction.h:72
double Tminus
Definition: FKR.h:48
int IonPdgCode(int A, int Z)
Definition: PDGUtils.cxx:68
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
double fSin48w
sin^4(Weingberg angle)
double fN0ResMaxNWidths
limits allowed phase space for n=0 res
#define A
Definition: memgrp.cpp:38
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
Definition: KineUtils.cxx:130
const InitialState & InitState(void) const
Definition: Interaction.h:69
const char * AsString(Resonance_t res)
resonance id -> string
double fGnResMaxNWidths
limits allowed phase space for other res
const ProcessInfo & ProcInfo(void) const
Definition: Interaction.h:70
double FindClosestKF(int target_pdgc, int nucleon_pdgc) const
#define pNOTICE
Definition: Messenger.h:61
bool GetParamDef(const RgKey &name, T &p, const T &def) const
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
const Target & Tgt(void) const
Definition: InitialState.h:66
void Configure(const Registry &config)
The GENIE Algorithm Factory.
Definition: AlgFactory.h:39
double fXSecScaleNC
external NC xsec scaling factor
double fMa2
(axial mass)^2
bool fUsingNuTauScaling
use NeuGEN nutau xsec reduction factors?
static const double kGF2
Definition: Constants.h:59
string fKFTable
table of Fermi momentum (kF) constants for various nuclei
double ProbeE(RefFrame_t rf) const
static const double kPi
Definition: Constants.h:37
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
bool IsNegChargedLepton(int pdgc)
Definition: PDGUtils.cxx:136
static const double kPi2
Definition: Constants.h:38
double S
Definition: FKR.h:40
double Ta
Definition: FKR.h:41
const UInt_t kISkipProcessChk
if set, skip process validity checks
Definition: Interaction.h:47
int ResonanceIndex(Resonance_t res)
resonance idx, quark model / SU(6)
bool fUsePauliBlocking
account for Pauli blocking?
Initial State information.
Definition: InitialState.h:48
#define pDEBUG
Definition: Messenger.h:63
double fN2ResMaxNWidths
limits allowed phase space for n=2 res
Spline * fNuTauRdSpl
xsec reduction spline for nu_tau
static const double kPionMass2
Definition: Constants.h:86
const Algorithm * SubAlg(const RgKey &registry_key) const
Definition: Algorithm.cxx:345