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

Fit to inelastic cross sections for A(e,e')X valid for all W<3 GeV and all Q2<10 GeV2. More...

#include <BostedChristyEMPXSec.h>

Inheritance diagram for genie::BostedChristyEMPXSec:
genie::XSecAlgorithmI genie::Algorithm

Public Member Functions

 BostedChristyEMPXSec ()
 
 BostedChristyEMPXSec (string config)
 
virtual ~BostedChristyEMPXSec ()
 
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...
 
bool ValidKinematics (const Interaction *i) const
 Is the input kinematical point a physically allowed one? More...
 
void Configure (const Registry &config)
 
void Configure (string config)
 
- Public Member Functions inherited from genie::XSecAlgorithmI
virtual ~XSecAlgorithmI ()
 
- 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. 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)
 
double sigmaR (int, double, double, bool) const
 
double sigmaNR (int, double, double, bool) const
 
void BranchingRatios (int, double &, double &) const
 
void FermiSmearingD (double, double, double &, double &, double &, double &, bool) const
 
void FermiSmearingA (double, double, double, double, double &, double &, double &, double &) const
 
double FitEMC (double, int) const
 
double MEC2009 (int, double, double) const
 

Private Attributes

bool fUseMEC
 account for MEC contribution? More...
 
double fPM
 mass parameter More...
 
double fMP
 mass parameter More...
 
double fAM
 mass parameter More...
 
double fMD
 deuterium mass More...
 
double fMpi0
 pion mass More...
 
double fMeta
 eta mass More...
 
double fWmin
 minimal W More...
 
double fWmax
 maximal W More...
 
double fQ2min
 minimal Q2 More...
 
double fQ2max
 maximal Q2 More...
 
std::array< std::array< double, 3 >, 7 > fBRp
 branching ratios of resonances for proton fit More...
 
std::array< std::array< double, 3 >, 7 > fBRD
 branching ratios of resonances for deterium fit More...
 
std::array< int, 7 > fAngRes
 resonance angular momentum More...
 
std::array< double, 7 > fMassRes
 resonance mass More...
 
std::array< double, 7 > fWidthRes
 resonance width More...
 
std::array< std::array< double, 4 >, 7 > fRescoefTp
 tunable parameters from Ref.1, Table III for resonance More...
 
std::array< std::array< double, 4 >, 7 > fRescoefTD
 tunable parameters from Ref.2, Table III for resonance More...
 
std::array< std::array< double, 3 >, 7 > fRescoefL
 tunable parameters from Ref.1, Table III for resonance More...
 
std::array< std::array< double, 5 >, 2 > fNRcoefTp
 tunable parameters from Ref.1, Table III for nonres bkg More...
 
std::array< std::array< double, 5 >, 2 > fNRcoefTD
 tunable parameters from Ref.1, Table IV for nonres bkg More...
 
std::array< double, 6 > fNRcoefL
 tunable parameters from Ref.1, Table III for nonres bkg More...
 
std::array< double, 6 > fMECcoef
 tunable parameters for Eqs.(20), (21) Ref.2 More...
 
std::array< double, 8 > fMEC2009coef
 tunable parameters for MEC2009 function More...
 
std::array< double, 13 > fAfitcoef
 tunable parameters for nuclei fit More...
 
std::array< double, 9 > fEMCalpha
 tunable parameters for EMC fit More...
 
std::array< double, 3 > fEMCc
 tunable parameters for EMC fit More...
 
map< int, double > fMEC2009p18
 
map< int, double > fKFTable
 
map< int, double > fNucRmvE
 
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)
 
- 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. More...
 
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. More...
 
int GetParamVectKeys (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 More...
 
int AddLowRegistry (Registry *rp, bool owns=true)
 add registry with lowest priority, also update ownership More...
 
int MergeTopRegistry (const Registry &r)
 
int AddTopRegisties (const vector< Registry * > &rs, bool owns=false)
 Add registries with top priority, also udated Ownerships. More...
 
- Protected Attributes inherited from genie::Algorithm
bool fAllowReconfig
 
bool fOwnsSubstruc
 true if it owns its substructure (sub-algs,...) More...
 
AlgId fID
 algorithm name and configuration set More...
 
vector< Registry * > fConfVect
 
vector< boolfOwnerships
 ownership for every registry in fConfVect More...
 
AlgStatus_t fStatus
 algorithm execution status More...
 
AlgMapfOwnedSubAlgMp
 local pool for owned sub-algs (taken out of the factory pool) More...
 

Detailed Description

Fit to inelastic cross sections for A(e,e')X valid for all W<3 GeV and all Q2<10 GeV2.

Author
Igor Kakorin kakor.nosp@m.in@j.nosp@m.inr.r.nosp@m.u Joint Institute for Nuclear Research based on fortran code provided on Peter Bosted's site: https://userweb.jlab.org/~bosted/fits.html

1. M.E. Christy, P.E.Bosted, "Empirical fit to precision inclusive electron-proton cross sections in the resonance region", PRC 81 (2010) 055213

  1. P.E.Bosted, M.E.Christy, "Empirical fit to inelastic electron-deuteron and electron-neutron resonance region transverse cross", PRC 77 (2008) 065206
  2. C. Maieron, T. W. Donnelly, and I. Sick, "Extended superscaling of electron scattering from nuclei", PRC 65 (2001) 025502

April 3, 2021

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

Definition at line 41 of file BostedChristyEMPXSec.h.

Constructor & Destructor Documentation

BostedChristyEMPXSec::BostedChristyEMPXSec ( )

Definition at line 35 of file BostedChristyEMPXSec.cxx.

35  :
36 XSecAlgorithmI("genie::BostedChristyEMPXSec")
37 {
38 }
BostedChristyEMPXSec::BostedChristyEMPXSec ( string  config)

Definition at line 40 of file BostedChristyEMPXSec.cxx.

40  :
41 XSecAlgorithmI("genie::BostedChristyEMPXSec", config)
42 {
43 }
static Config * config
Definition: config.cpp:1054
BostedChristyEMPXSec::~BostedChristyEMPXSec ( )
virtual

Definition at line 45 of file BostedChristyEMPXSec.cxx.

46 {
47 
48 }

Member Function Documentation

void BostedChristyEMPXSec::BranchingRatios ( int  respdg,
double &  brpi,
double &  breta 
) const
private

Definition at line 668 of file BostedChristyEMPXSec.cxx.

669 {
670  brpi = 0.;
671  breta = 0.;
672  PDGLibrary * pdglib = PDGLibrary::Instance();
673  TParticlePDG * res_pdg = pdglib->Find(respdg);
674  if (res_pdg != 0)
675  {
676  for (int nch = 0; nch < res_pdg->NDecayChannels(); nch++)
677  {
678  TDecayChannel * ch = res_pdg->DecayChannel(nch);
679  if (ch->NDaughters() == 2)
680  {
681  int first_daughter_pdg = ch->DaughterPdgCode (0);
682  int second_daughter_pdg = ch->DaughterPdgCode (1);
683  if ((genie::pdg::IsNucleon(first_daughter_pdg ) && genie::pdg::IsPion(second_daughter_pdg)) ||
684  (genie::pdg::IsNucleon(second_daughter_pdg) && genie::pdg::IsPion(first_daughter_pdg )))
685  brpi += ch->BranchingRatio();
686  if (first_daughter_pdg == kPdgEta || second_daughter_pdg == kPdgEta)
687  breta += ch->BranchingRatio();
688  }
689  }
690  }
691 }
bool IsPion(int pdgc)
Definition: PDGUtils.cxx:323
bool IsNucleon(int pdgc)
Definition: PDGUtils.cxx:343
const int kPdgEta
Definition: PDGCodes.h:161
static PDGLibrary * Instance(void)
Definition: PDGLibrary.cxx:57
Singleton class to load & serve a TDatabasePDG.
Definition: PDGLibrary.h:32
TParticlePDG * Find(int pdgc, bool must_exist=true)
Definition: PDGLibrary.cxx:75
void BostedChristyEMPXSec::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 656 of file BostedChristyEMPXSec.cxx.

657 {
658  Algorithm::Configure(config);
659  this->LoadConfig();
660 }
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:62
void BostedChristyEMPXSec::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 662 of file BostedChristyEMPXSec.cxx.

663 {
665  this->LoadConfig();
666 }
static Config * config
Definition: config.cpp:1054
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:62
void BostedChristyEMPXSec::FermiSmearingA ( double  Q2,
double  W,
double  pF,
double  Es,
double &  F1p,
double &  F1d,
double &  sigmaT,
double &  sigmaL 
) const
private

Definition at line 197 of file BostedChristyEMPXSec.cxx.

198 {
199  // The numbers in arrays bellow were not supposed to change in the original
200  // fortran code and therefore are not configurable
201  static constexpr std::array<double, 99> fyp
202  {0.0272,0.0326,0.0390,0.0464,0.0551,0.0651,0.0766,0.0898,0.1049,
203  0.1221,0.1416,0.1636,0.1883,0.2159,0.2466,0.2807,0.3182,0.3595,
204  0.4045,0.4535,0.5066,0.5637,0.6249,0.6901,0.7593,0.8324,0.9090,
205  0.9890,1.0720,1.1577,1.2454,1.3349,1.4254,1.5163,1.6070,1.6968,
206  1.7849,1.8705,1.9529,2.0313,2.1049,2.1731,2.2350,2.2901,2.3379,
207  2.3776,2.4090,2.4317,2.4454,2.4500,2.4454,2.4317,2.4090,2.3776,
208  2.3379,2.2901,2.2350,2.1731,2.1049,2.0313,1.9529,1.8705,1.7849,
209  1.6968,1.6070,1.5163,1.4254,1.3349,1.2454,1.1577,1.0720,0.9890,
210  0.9090,0.8324,0.7593,0.6901,0.6249,0.5637,0.5066,0.4535,0.4045,
211  0.3595,0.3182,0.2807,0.2466,0.2159,0.1883,0.1636,0.1416,0.1221,
212  0.1049,0.0898,0.0766,0.0651,0.0551,0.0464,0.0390,0.0326,0.0272};
213 
214  static constexpr std::array<double, 99> xxp
215  {-3.000,-2.939,-2.878,-2.816,-2.755,-2.694,-2.633,-2.571,-2.510,
216  -2.449,-2.388,-2.327,-2.265,-2.204,-2.143,-2.082,-2.020,-1.959,
217  -1.898,-1.837,-1.776,-1.714,-1.653,-1.592,-1.531,-1.469,-1.408,
218  -1.347,-1.286,-1.224,-1.163,-1.102,-1.041,-0.980,-0.918,-0.857,
219  -0.796,-0.735,-0.673,-0.612,-0.551,-0.490,-0.429,-0.367,-0.306,
220  -0.245,-0.184,-0.122,-0.061, 0.000, 0.061, 0.122, 0.184, 0.245,
221  0.306, 0.367, 0.429, 0.490, 0.551, 0.612, 0.673, 0.735, 0.796,
222  0.857, 0.918, 0.980, 1.041, 1.102, 1.163, 1.224, 1.286, 1.347,
223  1.408, 1.469, 1.531, 1.592, 1.653, 1.714, 1.776, 1.837, 1.898,
224  1.959, 2.020, 2.082, 2.143, 2.204, 2.265, 2.327, 2.388, 2.449,
225  2.510, 2.571, 2.633, 2.694, 2.755, 2.816, 2.878, 2.939, 3.000};
226 
227  double MN = fPM;
228  double MN2 = MN*MN;
229  double Mp = fMP;
230  double Mp2 = Mp*Mp;
231  double W2 = W*W;
232 
233  double nu = (W2 - MN2 + Q2)/2./MN;
234  double qv = TMath::Sqrt(nu*nu + Q2);
235  // assume this is 2*pf*qv
236  double dW2dpF = 2.*qv;
237  double dW2dEs = 2.*(nu + MN);
238  // switched to using 99 bins!
239 
240  for (int i=0; i<100; i++)
241  {
242  double fyuse = fyp[i+1]/100.;
243  double W2p = W2 + xxp[i+1]*pF*dW2dpF - Es*dW2dEs;
244  if(W2p>1.159)
245  {
246  //proton
247  double Wp = TMath::Sqrt(W2p);
248  double sigmaTp = sigmaR(0, Q2, Wp) + sigmaNR(0, Q2, Wp);
249  double sigmaLp = sigmaR(1, Q2, Wp) + sigmaNR(1, Q2, Wp);
250  double F1pp = sigmaTp*(W2p-Mp2)/8./kPi2/kAem;
251  //neutron
252  double sigmaTd = sigmaR(0, Q2, Wp, true) + sigmaNR(0, Q2, Wp, true);
253  double F1dp = sigmaTd*(W2p-Mp2)/8./kPi2/kAem;
254  F1d += F1dp*fyuse;
255  F1p += F1pp*fyuse;
256  sigmaT += sigmaTp*fyuse;
257  sigmaL += sigmaLp*fyuse;
258  }
259  }
260 
261 }
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1064
double sigmaR(int, double, double, bool) const
static const double kAem
Definition: Constants.h:56
static const double kPi2
Definition: Constants.h:38
double sigmaNR(int, double, double, bool) const
void BostedChristyEMPXSec::FermiSmearingD ( double  Q2,
double  W,
double &  F1,
double &  R,
double &  sigmaT,
double &  sigmaL,
bool  isDeuterium = false 
) const
private

Definition at line 264 of file BostedChristyEMPXSec.cxx.

265 {
266  // The numbers in arrays bellow were not supposed to change in the original
267  // fortran code and therefore are not configurable
268  static constexpr std::array<double, 20> fyd
269  {0.4965, 0.4988, 0.4958, 0.5008, 0.5027, 0.5041, 0.5029, 0.5034,
270  0.4993, 0.5147, 0.5140, 0.4975, 0.5007, 0.4992, 0.4994, 0.4977,
271  0.5023, 0.4964, 0.4966, 0.4767};
272 
273  static constexpr std::array<double, 20> avpz
274  {-0.1820,-0.0829,-0.0590,-0.0448,-0.0345,-0.0264,-0.0195, -0.0135,
275  -0.0079,-0.0025, 0.0029, 0.0083, 0.0139, 0.0199, 0.0268, 0.0349,
276  0.0453, 0.0598, 0.0844, 0.1853};
277 
278  static constexpr std::array<double, 20> avp2
279  {0.0938, 0.0219, 0.0137, 0.0101, 0.0081, 0.0068, 0.0060, 0.0054,
280  0.0051, 0.0049, 0.0050, 0.0051, 0.0055, 0.0060, 0.0069, 0.0081,
281  0.0102, 0.0140, 0.0225, 0.0964};
282 
283  // Look up tables for deuteron in fine bins for sub threshold
284  static constexpr std::array<double, 200> fydf
285  {0.00001,0.00002,0.00003,0.00005,0.00006,0.00009,0.00010,0.00013,
286  0.00015,0.00019,0.00021,0.00026,0.00029,0.00034,0.00038,0.00044,
287  0.00049,0.00057,0.00062,0.00071,0.00078,0.00089,0.00097,0.00109,
288  0.00119,0.00134,0.00146,0.00161,0.00176,0.00195,0.00211,0.00232,
289  0.00252,0.00276,0.00299,0.00326,0.00352,0.00383,0.00412,0.00447,
290  0.00482,0.00521,0.00560,0.00603,0.00648,0.00698,0.00747,0.00803,
291  0.00859,0.00921,0.00985,0.01056,0.01126,0.01205,0.01286,0.01376,
292  0.01467,0.01569,0.01671,0.01793,0.01912,0.02049,0.02196,0.02356,
293  0.02525,0.02723,0.02939,0.03179,0.03453,0.03764,0.04116,0.04533,
294  0.05004,0.05565,0.06232,0.07015,0.07965,0.09093,0.10486,0.12185,
295  0.14268,0.16860,0.20074,0.24129,0.29201,0.35713,0.44012,0.54757,
296  0.68665,0.86965,1.11199,1.43242,1.86532,2.44703,3.22681,4.24972,
297  5.54382,7.04016,8.48123,9.40627,9.40627,8.48123,7.04016,5.54382,
298  4.24972,3.22681,2.44703,1.86532,1.43242,1.11199,0.86965,0.68665,
299  0.54757,0.44012,0.35713,0.29201,0.24129,0.20074,0.16860,0.14268,
300  0.12185,0.10486,0.09093,0.07965,0.07015,0.06232,0.05565,0.05004,
301  0.04533,0.04116,0.03764,0.03453,0.03179,0.02939,0.02723,0.02525,
302  0.02356,0.02196,0.02049,0.01912,0.01793,0.01671,0.01569,0.01467,
303  0.01376,0.01286,0.01205,0.01126,0.01056,0.00985,0.00921,0.00859,
304  0.00803,0.00747,0.00698,0.00648,0.00603,0.00560,0.00521,0.00482,
305  0.00447,0.00412,0.00383,0.00352,0.00326,0.00299,0.00276,0.00252,
306  0.00232,0.00211,0.00195,0.00176,0.00161,0.00146,0.00134,0.00119,
307  0.00109,0.00097,0.00089,0.00078,0.00071,0.00062,0.00057,0.00049,
308  0.00044,0.00038,0.00034,0.00029,0.00026,0.00021,0.00019,0.00015,
309  0.00013,0.00010,0.00009,0.00006,0.00005,0.00003,0.00002,0.00001};
310 
311  static constexpr std::array<double, 200> avp2f
312  {1.0,0.98974,0.96975,0.96768,0.94782,0.94450,0.92494,0.92047,
313  0.90090,0.89563,0.87644,0.87018,0.85145,0.84434,0.82593,0.81841,
314  0.80021,0.79212,0.77444,0.76553,0.74866,0.73945,0.72264,0.71343,
315  0.69703,0.68740,0.67149,0.66182,0.64631,0.63630,0.62125,0.61154,
316  0.59671,0.58686,0.57241,0.56283,0.54866,0.53889,0.52528,0.51581,
317  0.50236,0.49291,0.47997,0.47063,0.45803,0.44867,0.43665,0.42744,
318  0.41554,0.40656,0.39511,0.38589,0.37488,0.36611,0.35516,0.34647,
319  0.33571,0.32704,0.31656,0.30783,0.29741,0.28870,0.27820,0.26945,
320  0.25898,0.25010,0.23945,0.23023,0.21943,0.20999,0.19891,0.18911,
321  0.17795,0.16793,0.15669,0.14667,0.13553,0.12569,0.11504,0.10550,
322  0.09557,0.08674,0.07774,0.06974,0.06184,0.05484,0.04802,0.04203,
323  0.03629,0.03129,0.02654,0.02247,0.01867,0.01545,0.01251,0.01015,
324  0.00810,0.00664,0.00541,0.00512,0.00512,0.00541,0.00664,0.00810,
325  0.01015,0.01251,0.01545,0.01867,0.02247,0.02654,0.03129,0.03629,
326  0.04203,0.04802,0.05484,0.06184,0.06974,0.07774,0.08674,0.09557,
327  0.10550,0.11504,0.12569,0.13553,0.14667,0.15669,0.16793,0.17795,
328  0.18911,0.19891,0.20999,0.21943,0.23023,0.23945,0.25010,0.25898,
329  0.26945,0.27820,0.28870,0.29741,0.30783,0.31656,0.32704,0.33571,
330  0.34647,0.35516,0.36611,0.37488,0.38589,0.39511,0.40656,0.41554,
331  0.42744,0.43665,0.44867,0.45803,0.47063,0.47997,0.49291,0.50236,
332  0.51581,0.52528,0.53889,0.54866,0.56283,0.57241,0.58686,0.59671,
333  0.61154,0.62125,0.63630,0.64631,0.66182,0.67149,0.68740,0.69703,
334  0.71343,0.72264,0.73945,0.74866,0.76553,0.77444,0.79212,0.80021,
335  0.81841,0.82593,0.84434,0.85145,0.87018,0.87644,0.89563,0.90090,
336  0.92047,0.92494,0.94450,0.94782,0.96768,0.96975,0.98974,1.0};
337 
338  double W2=W*W;
339  double MN = fAM;
340  double MN2 = MN*MN;
341  double MD = fMD;
342  double Mp = fMP;
343  double Mp2 = Mp*Mp;
344  double nu = (W2 - MN2 + Q2)/2./MN;
345  double qv = TMath::Sqrt(nu*nu + Q2);
346  F1 = 0.;
347  R = 0.;
348  sigmaT = 0.;
349  sigmaL = 0.;
350  // Do fast 20 bins if abvoe threshold
351  if(W2>1.30)
352  {
353  for (int ism = 0; ism<20; ism++)
354  {
355  double W2p = TMath::Power(MD + nu - sqrt(MN2 + avp2[ism]),2) - qv*qv + 2.*qv*avpz[ism] - avp2[ism];
356  if(W2p>1.155)
357  {
358  double Wp = TMath::Sqrt(W2p);
359  double sigtp = sigmaR(0, Q2, Wp, isDeuterium) + sigmaNR(0, Q2, Wp, isDeuterium);
360  double F1p = sigtp*(W2p-Mp2)/8./kPi2/kAem;
361  F1 += F1p*fyd[ism]/10.;
362  if (!isDeuterium)
363  {
364  double siglp = sigmaR(1, Q2, Wp) + sigmaNR(1, Q2, Wp);
365  sigmaL += siglp*fyd[ism]/10.;
366  sigmaT += sigtp*fyd[ism]/10.;
367  }
368  }
369  }
370  }
371  else
372  {
373  for (int ism = 0;ism<200;ism++)
374  {
375  double pz = -1. + 0.01*(ism + 0.5);
376  // Need avp2f term to get right behavior x>1!
377  double W2p = TMath::Power(MD + nu - sqrt(MN2 + avp2f[ism]),2) - qv*qv + 2.*qv*pz - avp2f[ism];
378  if(W2p>1.155)
379  {
380  double Wp = TMath::Sqrt(W2p);
381  double sigtp = sigmaR(0, Q2, Wp, isDeuterium) + sigmaNR(0, Q2, Wp, isDeuterium);
382  double F1p = sigtp*(W2p-Mp2)/8./kPi2/kAem;
383  F1 += F1p*fydf[ism]/100.;
384  if (!isDeuterium)
385  {
386  double siglp = sigmaR(1, Q2, Wp) + sigmaNR(1, Q2, Wp);
387  sigmaT += sigtp*fydf[ism]/100.;
388  sigmaL += siglp*fydf[ism]/100.;
389  }
390  }
391  }
392  }
393  if (isDeuterium && fUseMEC)
394  // Ref.2, Eq. (20)
395  F1 += fMECcoef[0]*TMath::Exp(-(W - fMECcoef[1])*(W - fMECcoef[1])/fMECcoef[2])/
396  TMath::Power(1. + TMath::Max(0.3,Q2)/fMECcoef[3],fMECcoef[4])*TMath::Power(nu, fMECcoef[5]);
397  if(!isDeuterium && sigmaT!=0.)
398  R = sigmaL/sigmaT;
399 
400 }
#define F1(x, y, z)
Definition: md5.c:175
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1064
double sigmaR(int, double, double, bool) const
std::array< double, 6 > fMECcoef
tunable parameters for Eqs.(20), (21) Ref.2
static const double kAem
Definition: Constants.h:56
bool fUseMEC
account for MEC contribution?
static const double kPi2
Definition: Constants.h:38
double sigmaNR(int, double, double, bool) const
double BostedChristyEMPXSec::FitEMC ( double  x,
int  A 
) const
private

Definition at line 581 of file BostedChristyEMPXSec.cxx.

582 {
583  double fitemc = 1.;
584  if(A<=2)
585  return fitemc;
586 
587  double x_u;
588  if (x>0.70 || x<0.0085)
589  //Out of range of fit
590  {
591  if(x<0.0085)
592  x_u = .0085;
593  if(x>0.70)
594  x_u = 0.70;
595  }
596  else
597  x_u = x;
598 
599  double ln_c = fEMCc[0];
600  for (int i = 1; i<=2; i++)
601  ln_c += fEMCc[i]*TMath::Power(TMath::Log(x_u), i);
602  double c = TMath::Exp(ln_c);
603 
604  double alpha = fEMCalpha[0];
605  for (int i = 1; i<=8; i++)
606  alpha += fEMCalpha[i]*TMath::Power(x_u, i);
607 
608  fitemc = c*TMath::Power(A, alpha);
609  return fitemc;
610 }
std::array< double, 9 > fEMCalpha
tunable parameters for EMC fit
std::array< double, 3 > fEMCc
tunable parameters for EMC fit
double alpha
Definition: doAna.cpp:15
#define A
Definition: memgrp.cpp:38
list x
Definition: train.py:276
double BostedChristyEMPXSec::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 612 of file BostedChristyEMPXSec.cxx.

613 {
614  double xsec = fXSecIntegrator->Integrate(this,interaction);
615  return xsec;
616 }
const XSecIntegratorI * fXSecIntegrator
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
void BostedChristyEMPXSec::LoadConfig ( void  )
private

Definition at line 693 of file BostedChristyEMPXSec.cxx.

694 {
695 
696  PDGLibrary * pdglib = PDGLibrary::Instance();
697  GetParamDef("BostedChristyFitEM-PM", fPM, pdglib->Find(kPdgProton)->Mass());
698  GetParamDef("BostedChristyFitEM-MP", fMP, pdglib->Find(kPdgProton)->Mass());
699  GetParamDef("BostedChristyFitEM-AM", fAM, pdglib->Find(kPdgProton)->Mass());
700  GetParamDef("BostedChristyFitEM-MD", fMD, pdglib->Find(kPdgTgtDeuterium)->Mass());
701  GetParamDef("BostedChristyFitEM-Mpi0", fMpi0, pdglib->Find(kPdgPi0)->Mass());
702  GetParamDef("BostedChristyFitEM-Meta", fMeta, pdglib->Find(kPdgEta)->Mass());
703  GetParamDef("BostedChristyFitEM-Wmin", fWmin, 0.0);
704  GetParamDef("BostedChristyFitEM-Wmax", fWmax, 3.0);
705  GetParamDef("BostedChristyFitEM-Q2min", fQ2min, 0.0);
706  GetParamDef("BostedChristyFitEM-Q2max", fQ2max, 10.0);
707  GetParamDef("BostedChristyFitEM-UseMEC", fUseMEC, true);
708 
709  double BRpi, BReta;
710  double brpi, breta;
711 
712  std::vector<double> vBRpi1;
713  std::vector<double> vBRpi2;
714  std::vector<double> vBReta;
715 
716  // load braching ratios for pi
717  bool useBRpi1Default = (GetParamVect("BostedChristyFitEM-PionBRp", vBRpi1, false)<7);
718  bool useBRpi2Default = (GetParamVect("BostedChristyFitEM-PionBRD", vBRpi2, false)<7);
719  // load braching ratios for eta
720  bool useBRetaDefault = (GetParamVect("BostedChristyFitEM-EtaBR", vBReta, false)<7);
721 
722  if (useBRpi1Default || useBRpi2Default || useBRetaDefault)
723  {
724  // use default branching ratios from PDG table
725  // P33(1232)
726  BRpi = 0.;
727  BReta = 0.;
728  BranchingRatios(kPdgP33m1232_DeltaM, brpi, breta);
729  BRpi += brpi;
730  BReta += breta;
731  BranchingRatios(kPdgP33m1232_Delta0, brpi, breta);
732  BRpi += brpi;
733  BReta += breta;
734  BranchingRatios(kPdgP33m1232_DeltaP, brpi, breta);
735  BRpi += brpi;
736  BReta += breta;
738  BRpi += brpi;
739  BReta += breta;
740  BRpi /= 4.;
741  BReta /= 4.;
742  fBRp[0][0] = BRpi;
743  fBRp[0][2] = BReta;
744  fBRD[0][0] = BRpi;
745 
746  // S11(1535)
747  BRpi = 0.;
748  BReta = 0.;
749  BranchingRatios(kPdgS11m1535_N0, brpi, breta);
750  BRpi += brpi;
751  BReta += breta;
752  BranchingRatios(kPdgS11m1535_NP, brpi, breta);
753  BRpi += brpi;
754  BReta += breta;
755  BRpi /= 2.;
756  BReta /= 2.;
757  fBRp[1][0] = BRpi;
758  fBRp[1][2] = BReta;
759  fBRD[1][0] = BRpi;
760 
761  // D13(1520)
762  BRpi = 0.;
763  BReta = 0.;
764  BranchingRatios(kPdgD13m1520_N0, brpi, breta);
765  BRpi += brpi;
766  BReta += breta;
767  BranchingRatios(kPdgD13m1520_NP, brpi, breta);
768  BRpi += brpi;
769  BReta += breta;
770  BRpi /= 2.;
771  BReta /= 2.;
772  fBRp[2][0] = BRpi;
773  fBRp[2][2] = BReta;
774  fBRD[2][0] = BRpi;
775 
776  // F15(1680)
777  BRpi = 0.;
778  BReta = 0.;
779  BranchingRatios(kPdgF15m1680_N0, brpi, breta);
780  BRpi += brpi;
781  BReta += breta;
782  BranchingRatios(kPdgF15m1680_NP, brpi, breta);
783  BRpi += brpi;
784  BReta += breta;
785  BRpi /= 2.;
786  BReta /= 2.;
787  fBRp[3][0] = BRpi;
788  fBRp[3][2] = BReta;
789  fBRD[3][0] = BRpi;
790 
791  // S11(1650)
792  BRpi = 0.;
793  BReta = 0.;
794  BranchingRatios(kPdgS11m1650_N0, brpi, breta);
795  BRpi += brpi;
796  BReta += breta;
797  BranchingRatios(kPdgS11m1650_NP, brpi, breta);
798  BRpi += brpi;
799  BReta += breta;
800  BRpi /= 2.;
801  BReta /= 2.;
802  fBRp[4][0] = BRpi;
803  fBRp[4][2] = BReta;
804  fBRD[4][0] = BRpi;
805 
806  // P11(1440)
807  BRpi = 0.;
808  BReta = 0.;
809  BranchingRatios(kPdgP11m1440_N0, brpi, breta);
810  BRpi += brpi;
811  BReta += breta;
812  BranchingRatios(kPdgP11m1440_NP, brpi, breta);
813  BRpi += brpi;
814  BReta += breta;
815  BRpi /= 2.;
816  BReta /= 2.;
817  fBRp[5][0] = BRpi;
818  fBRp[5][2] = BReta;
819  fBRD[5][0] = BRpi;
820 
821  // F37(1950)
822  BRpi = 0.;
823  BReta = 0.;
824  BranchingRatios(kPdgF37m1950_DeltaM , brpi, breta);
825  BRpi += brpi;
826  BReta += breta;
827  BranchingRatios(kPdgF37m1950_Delta0, brpi, breta);
828  BRpi += brpi;
829  BReta += breta;
830  BranchingRatios(kPdgF37m1950_DeltaP, brpi, breta);
831  BRpi += brpi;
832  BReta += breta;
834  BRpi += brpi;
835  BReta += breta;
836  BRpi /= 4.;
837  BReta /= 4.;
838  fBRp[6][0] = BRpi;
839  fBRp[6][2] = BReta;
840  fBRD[6][0] = BRpi;
841  }
842  if (!useBRpi1Default)
843  // single pion branching ratios from config file
844  for (int i=0; i<7; i++)
845  fBRp[i][0] = vBRpi1[i];
846  if (!useBRpi2Default)
847  // single pion branching ratios from config file
848  for (int i=0; i<7; i++)
849  fBRD[i][0] = vBRpi2[i];
850  if (!useBRetaDefault)
851  // eta branching ratios from config file
852  for (int i=0; i<7; i++)
853  fBRp[i][2] = vBReta[i];
854 
855  for (int i=0; i<7; i++)
856  fBRD[i][2] = 0.;
857 
858  if (useBRpi1Default || useBRpi2Default)
859  LOG("BostedChristyEMPXSec", pALERT) << "*** Use branching ratios for pion decay from PDG table";
860 
861  if (useBRetaDefault)
862  LOG("BostedChristyEMPXSec", pALERT) << "*** Use branching ratios for eta decay from PDG table";
863 
864  // 2-pion branching ratios
865  for (int i=0;i<7;i++)
866  {
867  fBRp[i][1] = 1.-fBRp[i][0]-fBRp[i][2];
868  fBRD[i][1] = 1.-fBRD[i][0]-fBRD[i][2];
869  }
870 
871  // Meson angular momentum
879 
880  std::vector<double> vResMass;
881  // load resonance masses
882  bool useResMassDefault = (GetParamVect("BostedChristyFitEM-ResMass", vResMass, false)<7);
883 
884  if (useResMassDefault)
885  {
886  LOG("BostedChristyEMPXSec", pALERT) << "*** Use resonance masses from PDG table";
887  // Resonance mass
893  fMassRes[5] = res::Mass(res::FromPdgCode(kPdgP11m1440_N0)); // P11(1440) roper
895  }
896  else
897  // eta branching ratios from config file
898  for (int i=0; i<7; i++)
899  fMassRes[i] = vResMass[i];
900 
901  std::vector<double> vResWidth;
902  // load resonance masses
903  bool useResWidthDefault = (GetParamVect("BostedChristyFitEM-ResWidth", vResWidth, false)<7);
904 
905  if (useResWidthDefault)
906  {
907  LOG("BostedChristyEMPXSec", pALERT) << "*** Use resonance widths from PDG table";
908  // Resonance width
914  fWidthRes[5] = res::Width(res::FromPdgCode(kPdgP11m1440_N0)); // P11(1440) roper
916  }
917  else
918  // eta branching ratios from config file
919  for (int i=0; i<7; i++)
920  fWidthRes[i] = vResWidth[i];
921 
922  int length;
923 
924  std::vector<double> vRescoef;
925  length = 7;
926  bool isOk = (GetParamVect("BostedChristyFitEM-ResAT0p", vRescoef)>=length);
927  if (!isOk)
928  {
929  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough proton AT(0)-parameters for xsec^R_T in the config file!";
930  exit(1);
931  }
932  // Ref.1, Table III, AT(0)
933  for (int i=0;i<length;i++)
934  fRescoefTp[i][0] = vRescoef[i];
935 
936  length = 7;
937  isOk = (GetParamVect("BostedChristyFitEM-Resap", vRescoef)>=length);
938  if (!isOk)
939  {
940  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough proton a-parameters for xsec^R_T in the config file!";
941  exit(1);
942  }
943  // Ref.1, Table III, a
944  for (int i=0;i<length;i++)
945  fRescoefTp[i][1] = vRescoef[i];
946 
947  length = 7;
948  isOk = (GetParamVect("BostedChristyFitEM-Resbp", vRescoef)>=length);
949  if (!isOk)
950  {
951  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough proton b-parameters parameters for xsec^R_T in the config file!";
952  exit(1);
953  }
954  // Ref.1, Table III, b
955  for (int i=0;i<length;i++)
956  fRescoefTp[i][2] = vRescoef[i];
957 
958  length = 7;
959  isOk = (GetParamVect("BostedChristyFitEM-Rescp", vRescoef)>=length);
960  if (!isOk)
961  {
962  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough proton c-parameters parameters for xsec^R_T in the config file!";
963  exit(1);
964  }
965  // Ref.1, Table III, c
966  for (int i=0;i<length;i++)
967  fRescoefTp[i][3] = vRescoef[i];
968 
969  length = 7;
970  isOk = (GetParamVect("BostedChristyFitEM-ResAT0D", vRescoef)>=length);
971  if (!isOk)
972  {
973  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough deuterium AT(0)-parameters for xsec^R_T in the config file!";
974  exit(1);
975  }
976  // Ref.2, Table III, AT(0)
977  for (int i=0;i<length;i++)
978  fRescoefTD[i][0] = vRescoef[i];
979 
980  length = 7;
981  isOk = (GetParamVect("BostedChristyFitEM-ResaD", vRescoef)>=length);
982  if (!isOk)
983  {
984  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough deuterium a-parameters for xsec^R_T in the config file!";
985  exit(1);
986  }
987  // Ref.2, Table III, a
988  for (int i=0;i<length;i++)
989  fRescoefTD[i][1] = vRescoef[i];
990 
991  length = 7;
992  isOk = (GetParamVect("BostedChristyFitEM-ResbD", vRescoef)>=length);
993  if (!isOk)
994  {
995  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough deuterium b-parameters parameters for xsec^R_T in the config file!";
996  exit(1);
997  }
998  // Ref.2, Table III, b
999  for (int i=0;i<length;i++)
1000  fRescoefTD[i][2] = vRescoef[i];
1001 
1002  length = 7;
1003  isOk = (GetParamVect("BostedChristyFitEM-RescD", vRescoef)>=length);
1004  if (!isOk)
1005  {
1006  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough deuterium c-parameters parameters for xsec^R_T in the config file!";
1007  exit(1);
1008  }
1009  // Ref.2, Table III, c
1010  for (int i=0;i<length;i++)
1011  fRescoefTD[i][3] = vRescoef[i];
1012 
1013  length = 7;
1014  isOk = (GetParamVect("BostedChristyFitEM-ResAL0", vRescoef)>=length);
1015  if (!isOk)
1016  {
1017  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough proton AL0-parameters parameters for xsec^R_T in the config file!";
1018  exit(1);
1019  }
1020  // Ref.1, Table III, AL(0)
1021  for (int i=0;i<length;i++)
1022  fRescoefL[i][0] = vRescoef[i];
1023 
1024  length = 7;
1025  isOk = (GetParamVect("BostedChristyFitEM-Resd", vRescoef)>=length);
1026  if (!isOk)
1027  {
1028  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough proton d-parameters parameters for xsec^R_L in the config file!";
1029  exit(1);
1030  }
1031  // Ref.1, Table III, d
1032  for (int i=0;i<length;i++)
1033  fRescoefL[i][1] = vRescoef[i];
1034 
1035  length = 7;
1036  isOk = (GetParamVect("BostedChristyFitEM-Rese", vRescoef)>=length);
1037  if (!isOk)
1038  {
1039  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough proton e-parameters parameters for xsec^R_L in the config file!";
1040  exit(1);
1041  }
1042  // Ref.1, Table III, e
1043  for (int i=0;i<length;i++)
1044  fRescoefL[i][2] = vRescoef[i];
1045 
1046 
1047  std::vector<double> vNRcoef;
1048  length = 5;
1049  isOk = (GetParamVect("BostedChristyFitEM-NRXSecT1p", vNRcoef)>=length);
1050  if (!isOk)
1051  {
1052  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough proton bkg parameters for xsec^NR_T in the config file!";
1053  exit(1);
1054  }
1055  // Ref.1, Table IV: \sigma^NR,1_T(0), aT_1, bT_1, cT_1, dT_1
1056  for (int i=0;i<length;i++)
1057  fNRcoefTp[0][i] = vNRcoef[i];
1058 
1059  length = 5;
1060  isOk = (GetParamVect("BostedChristyFitEM-NRXSecT2p", vNRcoef)>=length);
1061  if (!isOk)
1062  {
1063  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough proton bkg parameters for xsec^NR_T in the config file!";
1064  exit(1);
1065  }
1066  // Ref.1, Table IV: \sigma^NR,2_T(0), aT_2, bT_2, cT_2, dT_2
1067  for (int i=0;i<length;i++)
1068  fNRcoefTp[1][i] = vNRcoef[i];
1069 
1070  length = 5;
1071  isOk = (GetParamVect("BostedChristyFitEM-NRXSecT1D", vNRcoef)>=length);
1072  if (!isOk)
1073  {
1074  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough deuterium bkg parameters for xsec^NR_T in the config file!";
1075  exit(1);
1076  }
1077  // Ref.2, Table IV: \sigma^NR,1_T(0), aT_1, bT_1, cT_1, dT_1
1078  for (int i=0;i<length;i++)
1079  fNRcoefTD[0][i] = vNRcoef[i];
1080 
1081  length = 5;
1082  isOk = (GetParamVect("BostedChristyFitEM-NRXSecT2D", vNRcoef)>=length);
1083  if (!isOk)
1084  {
1085  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough deuterium bkg parameters for xsec^NR_T in the config file!";
1086  exit(1);
1087  }
1088  // Ref.2, Table IV: \sigma^NR,2_T(0), aT_2, bT_2, cT_2, dT_2
1089  for (int i=0;i<length;i++)
1090  fNRcoefTD[1][i] = vNRcoef[i];
1091 
1092  length = 6;
1093  isOk = (GetParamVect("BostedChristyFitEM-NRXSecL", vNRcoef)>=length);
1094  if (!isOk)
1095  {
1096  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough proton bkg parameters for xsec^NR_L in the config file!";
1097  exit(1);
1098  }
1099  // Ref.1, Table IV: \sigma^NR_L, aL, bL, cL, dL, eL
1100  for (int i=0;i<length;i++)
1101  fNRcoefL[i] = vNRcoef[i];
1102 
1103  length = 6;
1104  isOk = (GetParamVect("BostedChristyFitEM-MEC", vNRcoef)>=length);
1105  if (!isOk)
1106  {
1107  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough parameters for MEC in the config file!";
1108  exit(1);
1109  }
1110  for (int i=0;i<length;i++)
1111  fMECcoef[i] = vNRcoef[i];
1112 
1113  length = 8;
1114  isOk = (GetParamVect("BostedChristyFitEM-MEC2009", vNRcoef)>=length);
1115  if (!isOk)
1116  {
1117  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough parameters for MEC2009 in the config file!";
1118  exit(1);
1119  }
1120  for (int i=0;i<length;i++)
1121  fMEC2009coef[i] = vNRcoef[i];
1122 
1123  length = 13;
1124  isOk = (GetParamVect("BostedChristyFitEM-Afit", vNRcoef)>=length);
1125  if (!isOk)
1126  {
1127  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough parameters for nuclei fit (A-fit) in the config file!";
1128  exit(1);
1129  }
1130  for (int i=0;i<length;i++)
1131  fAfitcoef[i] = vNRcoef[i];
1132 
1133 
1134  length = 9;
1135  isOk = (GetParamVect("BostedChristyFitEM-EMCalpha", vNRcoef)>=length);
1136  if (!isOk)
1137  {
1138  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough alpha coefficients for EMC correction in the config file!";
1139  exit(1);
1140  }
1141  for (int i=0;i<length;i++)
1142  fEMCalpha[i] = vNRcoef[i];
1143 
1144  length = 3;
1145  isOk = (GetParamVect("BostedChristyFitEM-EMCc", vNRcoef)>=length);
1146  if (!isOk)
1147  {
1148  LOG("BostedChristyEMPXSec", pFATAL) << "*** Can't find enough c coefficients for EMC correction in the config file!";
1149  exit(1);
1150  }
1151  for (int i=0;i<length;i++)
1152  fEMCc[i] = vNRcoef[i];
1153 
1154 
1155  std::string keyStart = "BostedChristy-SeparationE@Pdg=";
1156  RgIMap entries = GetConfig().GetItemMap();
1157  for(RgIMap::const_iterator it = entries.begin(); it != entries.end(); ++it)
1158  {
1159  const std::string& key = it->first;
1160  int pdg = 0;
1161  int A = 0;
1162  if (0 == key.compare(0, keyStart.size(), keyStart.c_str()))
1163  {
1164  pdg = atoi(key.c_str() + keyStart.size());
1165  A = pdg::IonPdgCodeToA(pdg);
1166  }
1167  if (0 != pdg && A != 0)
1168  {
1169  std::ostringstream key_ss ;
1170  key_ss << keyStart << pdg;
1171  RgKey rgkey = key_ss.str();
1172  double eb;
1173  GetParam( rgkey, eb) ;
1174  eb = TMath::Max(eb, 0.);
1175  fNucRmvE.insert(map<int,double>::value_type(A,eb));
1176  }
1177  }
1178 
1179  keyStart = "BostedChristy-FermiMomentum@Pdg=";
1180  for(RgIMap::const_iterator it = entries.begin(); it != entries.end(); ++it)
1181  {
1182  const std::string& key = it->first;
1183  int pdg = 0;
1184  int A = 0;
1185  if (0 == key.compare(0, keyStart.size(), keyStart.c_str()))
1186  {
1187  pdg = atoi(key.c_str() + keyStart.size());
1188  A = pdg::IonPdgCodeToA(pdg);
1189  }
1190  if (0 != pdg && A != 0)
1191  {
1192  std::ostringstream key_ss ;
1193  key_ss << keyStart << pdg;
1194  RgKey rgkey = key_ss.str();
1195  double pf;
1196  GetParam( rgkey, pf) ;
1197  pf = TMath::Max(pf, 0.);
1198  fKFTable.insert(map<int,double>::value_type(A,pf));
1199  }
1200  }
1201 
1202  keyStart = "BostedChristy-p18@Pdg=";
1203  for(RgIMap::const_iterator it = entries.begin(); it != entries.end(); ++it)
1204  {
1205  const std::string& key = it->first;
1206  int pdg = 0;
1207  int A = 0;
1208  if (0 == key.compare(0, keyStart.size(), keyStart.c_str()))
1209  {
1210  pdg = atoi(key.c_str() + keyStart.size());
1211  A = pdg::IonPdgCodeToA(pdg);
1212  }
1213  if (0 != pdg && A != 0)
1214  {
1215  std::ostringstream key_ss ;
1216  key_ss << keyStart << pdg;
1217  RgKey rgkey = key_ss.str();
1218  double p18;
1219  GetParam( rgkey, p18) ;
1220  fMEC2009p18.insert(map<int,double>::value_type(A,p18));
1221  }
1222  }
1223 
1224 }
std::array< double, 7 > fMassRes
resonance mass
const int kPdgP33m1232_DeltaPP
Definition: PDGCodes.h:107
std::array< std::array< double, 4 >, 7 > fRescoefTp
tunable parameters from Ref.1, Table III for resonance
std::array< std::array< double, 5 >, 2 > fNRcoefTp
tunable parameters from Ref.1, Table III for nonres bkg
std::string string
Definition: nybbler.cc:12
std::array< double, 9 > fEMCalpha
tunable parameters for EMC fit
const int kPdgF15m1680_NP
Definition: PDGCodes.h:135
#define pFATAL
Definition: Messenger.h:56
std::array< double, 8 > fMEC2009coef
tunable parameters for MEC2009 function
int GetParamVect(const std::string &comm_name, std::vector< T > &v, bool is_top_call=true) const
Handle to load vectors of parameters.
int IonPdgCodeToA(int pdgc)
Definition: PDGUtils.cxx:60
std::array< double, 3 > fEMCc
tunable parameters for EMC fit
double Mass(Resonance_t res)
resonance mass (GeV)
const int kPdgS11m1650_N0
Definition: PDGCodes.h:112
std::array< std::array< double, 3 >, 7 > fBRD
branching ratios of resonances for deterium fit
double Width(Resonance_t res)
resonance width (GeV)
intermediate_table::const_iterator const_iterator
const int kPdgF37m1950_DeltaM
Definition: PDGCodes.h:148
const int kPdgF37m1950_DeltaP
Definition: PDGCodes.h:150
const int kPdgS11m1535_N0
Definition: PDGCodes.h:108
virtual const Registry & GetConfig(void) const
Definition: Algorithm.cxx:246
std::array< double, 6 > fMECcoef
tunable parameters for Eqs.(20), (21) Ref.2
const int kPdgP33m1232_DeltaP
Definition: PDGCodes.h:106
const int kPdgP33m1232_DeltaM
Definition: PDGCodes.h:104
#define pALERT
Definition: Messenger.h:57
std::array< double, 13 > fAfitcoef
tunable parameters for nuclei fit
const int kPdgF37m1950_Delta0
Definition: PDGCodes.h:149
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
const RgIMap & GetItemMap(void) const
Definition: Registry.h:161
def key(type, name=None)
Definition: graph.py:13
void BranchingRatios(int, double &, double &) const
const int kPdgEta
Definition: PDGCodes.h:161
const int kPdgPi0
Definition: PDGCodes.h:160
int OrbitalAngularMom(Resonance_t res)
orbital angular momentum
const int kPdgF37m1950_DeltaPP
Definition: PDGCodes.h:151
std::array< std::array< double, 3 >, 7 > fBRp
branching ratios of resonances for proton fit
const int kPdgD13m1520_NP
Definition: PDGCodes.h:111
const int kPdgF15m1680_N0
Definition: PDGCodes.h:134
std::array< double, 7 > fWidthRes
resonance width
const int kPdgS11m1650_NP
Definition: PDGCodes.h:113
Resonance_t FromPdgCode(int pdgc)
PDG code -> resonance id.
const int kPdgP33m1232_Delta0
Definition: PDGCodes.h:105
const int kPdgP11m1440_N0
Definition: PDGCodes.h:126
std::array< std::array< double, 5 >, 2 > fNRcoefTD
tunable parameters from Ref.1, Table IV for nonres bkg
const int kPdgD13m1520_N0
Definition: PDGCodes.h:110
const int kPdgP11m1440_NP
Definition: PDGCodes.h:127
static PDGLibrary * Instance(void)
Definition: PDGLibrary.cxx:57
bool fUseMEC
account for MEC contribution?
Singleton class to load & serve a TDatabasePDG.
Definition: PDGLibrary.h:32
string RgKey
std::array< std::array< double, 4 >, 7 > fRescoefTD
tunable parameters from Ref.2, Table III for resonance
#define A
Definition: memgrp.cpp:38
std::array< double, 6 > fNRcoefL
tunable parameters from Ref.1, Table III for nonres bkg
const int kPdgProton
Definition: PDGCodes.h:81
std::array< int, 7 > fAngRes
resonance angular momentum
TParticlePDG * Find(int pdgc, bool must_exist=true)
Definition: PDGLibrary.cxx:75
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 int kPdgS11m1535_NP
Definition: PDGCodes.h:109
const int kPdgTgtDeuterium
Definition: PDGCodes.h:201
std::array< std::array< double, 3 >, 7 > fRescoefL
tunable parameters from Ref.1, Table III for resonance
map< RgKey, RegistryItemI * > RgIMap
Definition: Registry.h:45
double BostedChristyEMPXSec::MEC2009 ( int  A,
double  Q2,
double  W 
) const
private

Definition at line 402 of file BostedChristyEMPXSec.cxx.

403 {
404  double F1 = 0.0;
405  double W2 = W*W;
406  double Mp = fAM;
407  double Mp2 = Mp*Mp;
408  if(W2<=0.0)
409  return F1;
410  double nu = (W2 - Mp2 + Q2)/2./Mp;
411  double x = Q2/2.0/Mp/nu;
412 
413  if(A<=2)
414  return F1;
415 
416  double p18;
417  for (const auto& kv : fMEC2009p18)
418  {
419  p18 = kv.second;
420  if (A<=kv.first)
421  break;
422  }
423 
424  F1 = fMEC2009coef[0]*TMath::Exp(-(W - fMEC2009coef[1])*(W - fMEC2009coef[1])/fMEC2009coef[2])/
425  TMath::Power(1. + TMath::Max(0.3,Q2)/fMEC2009coef[3],fMEC2009coef[4])*TMath::Power(nu, fMEC2009coef[5])*(1.0 +
426  p18*TMath::Power(A, fMEC2009coef[6] + fMEC2009coef[7]*x));
427 
428  if(F1<=1.0E-9)
429  F1 = 0.0;
430 
431  return F1;
432 }
#define F1(x, y, z)
Definition: md5.c:175
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1064
std::array< double, 8 > fMEC2009coef
tunable parameters for MEC2009 function
#define A
Definition: memgrp.cpp:38
list x
Definition: train.py:276
double BostedChristyEMPXSec::sigmaNR ( int  sf,
double  Q2,
double  W,
bool  isDeuterium = false 
) const
private

Definition at line 155 of file BostedChristyEMPXSec.cxx.

156 {
157  const std::array<std::array<double, 5>, 2> &fNRcoefT = !isDeuterium?fNRcoefTp:fNRcoefTD;
158  if (isDeuterium)
159  sf=0;
160  double W2 = W*W;
161  double Mp = fMP;
162  double Mpi = fMpi0;
163  double Mp2 = Mp*Mp;
164 
165  double Wdif = W - (Mp + Mpi);
166 
167  double m0 = 4.2802; // GeV
168  double Q20 = sf==0?0.05:0.125;
169  double xpr = 1./(1.+(W2-(Mp+Mpi)*(Mp+Mpi))/(Q2+Q20)); // Ref.1, Eq.(22)
170 
171  double xsec = 0.0;
172 
173 
174  if (sf==0)
175  {
176 
177  for (int i=0;i<2;i++)
178  {
179  double h_nr = fNRcoefT[i][0]/TMath::Power(Q2+fNRcoefT[i][1], fNRcoefT[i][2]+fNRcoefT[i][3]*Q2+fNRcoefT[i][4]*Q2*Q2); // Ref.1, Eq. (21)
180  xsec += h_nr*TMath::Power(Wdif, 1.5+i);
181  }
182 
183  xsec *= xpr;
184  }
185  else
186  {
187  double xb = Q2/(Q2+W2-Mp2);
188  double t = TMath::Log(TMath::Log((Q2+m0)/0.330/0.330)/TMath::Log(m0/0.330/0.330)); // Ref.1, Eq. (24)
189  xsec += fNRcoefL[0]*TMath::Power(1.-xpr, fNRcoefL[2]+fNRcoefL[1]*t)/(1.-xb)/(Q2+Q20)
190  *TMath::Power(Q2/(Q2+Q20), fNRcoefL[3])*TMath::Power(xpr, fNRcoefL[4]+fNRcoefL[5]*t); // Ref.1, Eq. (23)
191  }
192 
193  return xsec*units::ub;
194 }
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1064
std::array< std::array< double, 5 >, 2 > fNRcoefTp
tunable parameters from Ref.1, Table III for nonres bkg
static constexpr double ub
Definition: Units.h:80
std::array< std::array< double, 5 >, 2 > fNRcoefTD
tunable parameters from Ref.1, Table IV for nonres bkg
std::array< double, 6 > fNRcoefL
tunable parameters from Ref.1, Table III for nonres bkg
double BostedChristyEMPXSec::sigmaR ( int  sf,
double  Q2,
double  W,
bool  isDeuterium = false 
) const
private

Definition at line 53 of file BostedChristyEMPXSec.cxx.

54 {
55  const std::array<std::array<double, 3>, 7> &fBR = !isDeuterium?fBRp:fBRD;
56  const std::array<std::array<double, 4>, 7> &fRescoefT = !isDeuterium?fRescoefTp:fRescoefTD;
57  if (isDeuterium)
58  sf=0;
59 
60  double W2 = W*W;
61  // proton mass
62  double Mp = fMP;
63  // pion mass
64  double Mpi = fMpi0;
65  // eta-meson mass
66  double Meta = fMeta;
67 
68  double Mp2 = Mp*Mp;
69  double Mpi2 = Mpi*Mpi;
70  double Meta2 = Meta*Meta;
71 
72  // Calculate kinematics needed for threshold Relativistic B-W
73 
74  // Ref.1, Eq. (10)
75  double k = (W2 - Mp2)/2./Mp;
76  // Ref.1, Eq. (11)
77  double kcm = (W2 - Mp2)/2./W;
78  // mesons energy and momentim
79  double Epicm = (W2 + Mpi2 - Mp2)/2./W; // pion energy in CMS
80  double ppicm = TMath::Sqrt(TMath::Max(0.0, Epicm*Epicm - Mpi2)); // pion momentum in CMS
81  double Epi2cm = (W2 + 4*Mpi2 - Mp2)/2./W; // two pion energy in CMS
82  double ppi2cm = TMath::Sqrt(TMath::Max(0.0, Epi2cm*Epi2cm - 4*Mpi2)); // two pion energi n CMS
83  double Eetacm = (W2 + Meta2 - Mp2 )/2./W; // eta energy in CMS
84  double petacm = TMath::Sqrt(TMath::Max(0.0, Eetacm*Eetacm - Meta2)); // eta energy in CMS
85 
86  double xsec = 0.0;
87 
88  // going through seven resonances
89  for (int i=0;i<7;i++)
90  {
91  // resonance mass squared
92  double MassRes2 = fMassRes[i]*fMassRes[i];
93  // resonance damping parameter
94  double x0 = i!=0?0.215:!isDeuterium?0.14462:0.1446;
95  // Ref.1, Eq. (12)
96  double kr = (MassRes2-Mp2)/2./Mp;
97  // Ref.1, Eq. (13)
98  double kcmr = (MassRes2-Mp2)/2./fMassRes[i];
99 
100  // formulas analogous to the above with substitution W->MR_i
101  double Epicmr = (MassRes2 + Mpi2 - Mp2)/2./fMassRes[i];
102  double ppicmr = TMath::Sqrt(TMath::Max(0.0, Epicmr*Epicmr - Mpi2));
103  double Epi2cmr = (MassRes2 + 4.*Mpi2 - Mp2)/2./fMassRes[i];
104  double ppi2cmr = TMath::Sqrt(TMath::Max(0.0, Epi2cmr*Epi2cmr - 4.*Mpi2));
105  double Eetacmr = (MassRes2 + Meta2 - Mp2)/2./fMassRes[i];
106  double petacmr = TMath::Sqrt(TMath::Max(0.0, Eetacmr*Eetacmr - Meta2));
107 
108  // Calculate partial widths
109  // Ref.1, Eq. (15) for single pion
110  double pwid0 = fWidthRes[i]*TMath::Power(ppicm/ppicmr, 1.+2.*fAngRes[i])*
111  TMath::Power((ppicmr*ppicmr + x0*x0)/(ppicm*ppicm+x0*x0), fAngRes[i]); // 1-pion decay mode
112  // Ref.1, Eq. (16) for two pions
113  double pwid1 = 0;
114  if (!isDeuterium || (isDeuterium && i!=1))
115  pwid1 = W/fMassRes[i]*fWidthRes[i]*TMath::Power(ppi2cm/ppi2cmr, 4.+2.*fAngRes[i])*
116  TMath::Power((ppi2cmr*ppi2cmr + x0*x0)/(ppi2cm*ppi2cm + x0*x0), 2.+fAngRes[i]); // 2-pion decay mode
117  else
118  pwid1 = fWidthRes[i]*TMath::Power(petacm/petacmr, 1.+2.*fAngRes[i])*TMath::Power((ppi2cmr*ppi2cmr + x0*x0)/(ppi2cm*ppi2cm + x0*x0), fAngRes[i]);
119 
120 
121  double pwid2 = 0.; // eta decay mode
122  // Ref.1, Eq. (15) for eta
123  if(!isDeuterium && (i==1 || i==4))
124  pwid2 = fWidthRes[i]*TMath::Power(petacm/petacmr, 1.+2.*fAngRes[i])*TMath::Power((petacmr*petacmr + x0*x0)/(petacm*petacm + x0*x0), fAngRes[i]); // eta decay only for S11's
125 
126  // Ref.1, Eq. (17)
127  double pgam = fWidthRes[i]*(kcm/kcmr)*(kcm/kcmr)*(kcmr*kcmr+x0*x0)/(kcm*kcm+x0*x0);
128  // Ref.1, Eq. (14)
129  double width = fBR[i][0]*pwid0+fBR[i][1]*pwid1+fBR[i][2]*pwid2;
130 
131  // Begin resonance Q^2 dependence calculations
132  double A;
133 
134  if (sf==0)
135  // Ref.1, Eq. (18)
136  A = fRescoefT[i][0]*(1.+fRescoefT[i][1]*Q2/(1.+fRescoefT[i][2]*Q2))/TMath::Power(1.+Q2/0.91, fRescoefT[i][3]);
137  else
138  // Ref.1, Eq. (19)
139  A = fRescoefL[i][0]*Q2/(1.+fRescoefL[i][1]*Q2)*TMath::Exp(-1.*fRescoefL[i][2]*Q2);
140 
141 
142  // Ref.1, Eq. (9)
143  double BW = kr/k*kcmr/kcm/fWidthRes[i]*width*pgam/((W2 - MassRes2)*(W2 - MassRes2) + MassRes2*width*width);
144 
145  // Ref.1, Eq. (8) divided by W
146  xsec += BW*A*A;
147  }
148  // restore factor W in Ref.1, Eq. (8)
149  return W*xsec*units::ub;
150 }
std::array< double, 7 > fMassRes
resonance mass
std::array< std::array< double, 4 >, 7 > fRescoefTp
tunable parameters from Ref.1, Table III for resonance
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1064
std::array< std::array< double, 3 >, 7 > fBRD
branching ratios of resonances for deterium fit
static constexpr double ub
Definition: Units.h:80
double const Meta
Definition: includeROOT.h:184
std::array< std::array< double, 3 >, 7 > fBRp
branching ratios of resonances for proton fit
std::array< double, 7 > fWidthRes
resonance width
std::array< std::array< double, 4 >, 7 > fRescoefTD
tunable parameters from Ref.2, Table III for resonance
#define A
Definition: memgrp.cpp:38
std::array< int, 7 > fAngRes
resonance angular momentum
std::array< std::array< double, 3 >, 7 > fRescoefL
tunable parameters from Ref.1, Table III for resonance
bool BostedChristyEMPXSec::ValidKinematics ( const Interaction i) const
virtual

Is the input kinematical point a physically allowed one?

Reimplemented from genie::XSecAlgorithmI.

Definition at line 643 of file BostedChristyEMPXSec.cxx.

644 {
645  const Kinematics & kinematics = interaction -> Kine();
646  double W = kinematics.W();
647  double Q2 = kinematics.Q2();
648  if (W<fWmin || W>fWmax)
649  return false;
650  if (Q2<fQ2min || Q2>fQ2max)
651  return false;
652 
653  return true;
654 }
double W(bool selected=false) const
Definition: Kinematics.cxx:157
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1064
Generated/set kinematical variables for an event.
Definition: Kinematics.h:39
double Q2(bool selected=false) const
Definition: Kinematics.cxx:125
bool BostedChristyEMPXSec::ValidProcess ( const Interaction i) const
virtual

Can this cross section algorithm handle the input process?

Implements genie::XSecAlgorithmI.

Definition at line 618 of file BostedChristyEMPXSec.cxx.

619 {
620  if(interaction->TestBit(kISkipProcessChk)) return true;
621 
622  const InitialState & init_state = interaction->InitState();
623  const ProcessInfo & proc_info = interaction->ProcInfo();
624 
625  if(!proc_info.IsResonant() ) return false;
626 
627 
628  int hitnuc = init_state.Tgt().HitNucPdg();
629  bool is_pn = (pdg::IsProton(hitnuc) || pdg::IsNeutron(hitnuc));
630 
631  if (!is_pn) return false;
632 
633  int probe = init_state.ProbePdg();
634  bool is_em = proc_info.IsEM();
635 
636  bool l_em = (pdg::IsChargedLepton(probe) && is_em );
637 
638  if (!l_em) return false;
639 
640  return true;
641 }
bool IsResonant(void) const
Definition: ProcessInfo.cxx:94
int HitNucPdg(void) const
Definition: Target.cxx:304
bool IsChargedLepton(int pdgc)
Definition: PDGUtils.cxx:98
bool IsNeutron(int pdgc)
Definition: PDGUtils.cxx:338
bool IsProton(int pdgc)
Definition: PDGUtils.cxx:333
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
Definition: ProcessInfo.h:46
int ProbePdg(void) const
Definition: InitialState.h:64
bool IsEM(void) const
const Target & Tgt(void) const
Definition: InitialState.h:66
const UInt_t kISkipProcessChk
if set, skip process validity checks
Definition: Interaction.h:47
Initial State information.
Definition: InitialState.h:48
double BostedChristyEMPXSec::XSec ( const Interaction i,
KinePhaseSpace_t  k 
) const
virtual

Compute the cross section for the input interaction.

Implements genie::XSecAlgorithmI.

Definition at line 434 of file BostedChristyEMPXSec.cxx.

436 {
437  if(! this -> ValidProcess (interaction) ) return 0.;
438  if(! this -> ValidKinematics (interaction) ) return 0.;
439 
440  // Get kinematical parameters
441  const Kinematics & kinematics = interaction -> Kine();
442  const InitialState & init_state = interaction -> InitState();
443  const Target & target = init_state.Tgt();
444  int A = target.A();
445  int Z = target.Z();
446  double E = init_state.ProbeE(kRfHitNucRest);
447  double W = kinematics.W();
448  double Q2 = kinematics.Q2();
449  double W2 = W*W;
450  // Cross section for proton or neutron
451 
452  double Mp = fMP;
453  double Mp2 = Mp*Mp;
454  double MN = fPM;
455  double MN2 = MN*MN;
456 
457  double nu = (W2 - MN2 + Q2)/2./MN;
458  double x = Q2/2./MN/nu;
459 
460  double sigmaT, sigmaL, F1p, R, W1;
461  // Cross section for proton or neutron
462  if (A<2 && W2>1.155)
463  {
464  double xb = Q2/(W2+Q2-Mp2);
465  sigmaT = sigmaR(0, Q2, W) + sigmaNR(0, Q2, W);
466  sigmaL = sigmaR(1, Q2, W) + sigmaNR(1, Q2, W);
467  F1p = sigmaT*(W2-Mp2)/8./kPi2/kAem;
468  R = sigmaL/sigmaT;
469  // If neutron, subtract proton from deuteron. Factor of two to
470  // convert from per nucleon to per deuteron
471  if(Z==0)
472  {
473  sigmaT = sigmaR(0, Q2, W, true) + sigmaNR(0, Q2, W, true);
474  double F1d = sigmaT*(W2-Mp2)/8./kPi2/kAem;
475  F1p = 2.*F1d - F1p;
476  }
477  W1 = F1p/MN;
478  }
479 
480  // For deuteron
481  if(A==2)
482  {
483  double Rd, F1c, F1d;
484  //get Fermi-smeared R from Erics proton fit
485  FermiSmearingD(Q2, W, F1c, R, sigmaT, sigmaL);
486  //get fit to F1 in deuteron, per nucleon
487  FermiSmearingD(Q2, W, F1d, Rd, sigmaT, sigmaL, true);
488  //convert to W1 per deuteron
489  W1 = F1d/MN*2.0;
490  }
491 
492  //For nuclei
493  if (A>2)
494  {
495  // Modifed to use Superscaling from Ref. 3
496  double Es, pF, kF;
497  for (const auto& kv : fNucRmvE)
498  {
499  Es = kv.second;
500  if (A<=kv.first)
501  break;
502  }
503  for (const auto& kv : fKFTable)
504  {
505  kF = kv.second;
506  if (A<=kv.first)
507  break;
508  }
509  // adjust pf to give right width based on kf
510  pF = 0.5*kF;
511  double F1d;
512  FermiSmearingA(Q2, W, pF, Es, F1p, F1d, sigmaT, sigmaL);
513  if(sigmaT>0.)
514  R = sigmaL/sigmaT;
515  W1 = (2.*Z*F1d + (A - 2.*Z)*(2.*F1d - F1p))/MN;
516 
517  W1 *= (fAfitcoef[0] + x*(fAfitcoef[1] + x*(fAfitcoef[2] + x*(fAfitcoef[3] + x*(fAfitcoef[4] + x*fAfitcoef[5])))));
518 
519  if(W>0.)
520  W1 *= TMath::Power(fAfitcoef[6] + (fAfitcoef[7]*W + fAfitcoef[8]*W2)/(fAfitcoef[9] + fAfitcoef[10]*Q2),2);
521 
522  double F1M = MEC2009(A, Q2, W);
523 
524  W1 += F1M;
525  if(W2>0.)
526  R *= (fAfitcoef[11] + fAfitcoef[12]*A);
527  }
528 
529  double emcfac = FitEMC(x, A);
530 
531  double F1 = MN*W1*emcfac;
532 
533  double nu2 = nu*nu;
534  double K = (W2 - MN2)/2./MN;
535  double Eprime = E - nu;
536  double sin2theta_2 = Q2/4/E/Eprime;
537  double cos2theta_2 = 1 - sin2theta_2;
538  double tan2theta_2 = sin2theta_2/cos2theta_2;
539  double eps = 1./(1. + 2*(1+nu2/Q2)*tan2theta_2); // Ref.1, Eq. (4)
540  double Gamma = kAem*Eprime*K/Q2/E/(1-eps)/2/kPi2; // Ref.1, Eq. (5)
541  sigmaT = 4*kPi2*kAem*F1/K/MN;
542  sigmaL = R*sigmaT;
543  double xsec = Gamma*(sigmaT+eps*sigmaL); // Ref.1, Eq. (3) d2xsec/dOmegadEprime
544  double jacobian = W*kPi/E/Eprime/MN;
545  xsec*= jacobian; // d2xsec/dOmegadEprime-> d2xsec/dWdQ2
546 
547  // The algorithm computes d^2xsec/dWdQ2
548  // Check whether variable tranformation is needed
549  if(kps!=kPSWQ2fE) {
551  xsec *= J;
552  }
553 
554  return xsec;
555 
556 }
double W(bool selected=false) const
Definition: Kinematics.cxx:157
double J(double q0, double q3, double Enu, double ml)
Definition: MECUtils.cxx:147
#define F1(x, y, z)
Definition: md5.c:175
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1064
int A(void) const
Definition: Target.h:70
double sigmaR(int, double, double, bool) const
Generated/set kinematical variables for an event.
Definition: Kinematics.h:39
void FermiSmearingA(double, double, double, double, double &, double &, double &, double &) const
static const double kAem
Definition: Constants.h:56
std::array< double, 13 > fAfitcoef
tunable parameters for nuclei fit
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
Definition: Target.h:40
int Z(void) const
Definition: Target.h:68
#define A
Definition: memgrp.cpp:38
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
Definition: KineUtils.cxx:130
double FitEMC(double, int) const
list x
Definition: train.py:276
double MEC2009(int, double, double) const
double Q2(bool selected=false) const
Definition: Kinematics.cxx:125
const Target & Tgt(void) const
Definition: InitialState.h:66
void FermiSmearingD(double, double, double &, double &, double &, double &, bool) const
bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
double ProbeE(RefFrame_t rf) const
static const double kPi
Definition: Constants.h:37
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
static const double kPi2
Definition: Constants.h:38
double sigmaNR(int, double, double, bool) const
Initial State information.
Definition: InitialState.h:48

Member Data Documentation

std::array<double, 13> genie::BostedChristyEMPXSec::fAfitcoef
private

tunable parameters for nuclei fit

Definition at line 100 of file BostedChristyEMPXSec.h.

double genie::BostedChristyEMPXSec::fAM
private

mass parameter

Definition at line 73 of file BostedChristyEMPXSec.h.

std::array<int, 7> genie::BostedChristyEMPXSec::fAngRes
private

resonance angular momentum

Definition at line 85 of file BostedChristyEMPXSec.h.

std::array<std::array<double, 3>, 7> genie::BostedChristyEMPXSec::fBRD
private

branching ratios of resonances for deterium fit

Definition at line 83 of file BostedChristyEMPXSec.h.

std::array<std::array<double, 3>, 7> genie::BostedChristyEMPXSec::fBRp
private

branching ratios of resonances for proton fit

Definition at line 82 of file BostedChristyEMPXSec.h.

std::array<double, 9> genie::BostedChristyEMPXSec::fEMCalpha
private

tunable parameters for EMC fit

Definition at line 102 of file BostedChristyEMPXSec.h.

std::array<double, 3> genie::BostedChristyEMPXSec::fEMCc
private

tunable parameters for EMC fit

Definition at line 103 of file BostedChristyEMPXSec.h.

map<int, double> genie::BostedChristyEMPXSec::fKFTable
private

Definition at line 106 of file BostedChristyEMPXSec.h.

std::array<double, 7> genie::BostedChristyEMPXSec::fMassRes
private

resonance mass

Definition at line 87 of file BostedChristyEMPXSec.h.

double genie::BostedChristyEMPXSec::fMD
private

deuterium mass

Definition at line 74 of file BostedChristyEMPXSec.h.

std::array<double, 8> genie::BostedChristyEMPXSec::fMEC2009coef
private

tunable parameters for MEC2009 function

Definition at line 99 of file BostedChristyEMPXSec.h.

map<int, double> genie::BostedChristyEMPXSec::fMEC2009p18
private

Definition at line 105 of file BostedChristyEMPXSec.h.

std::array<double, 6> genie::BostedChristyEMPXSec::fMECcoef
private

tunable parameters for Eqs.(20), (21) Ref.2

Definition at line 98 of file BostedChristyEMPXSec.h.

double genie::BostedChristyEMPXSec::fMeta
private

eta mass

Definition at line 76 of file BostedChristyEMPXSec.h.

double genie::BostedChristyEMPXSec::fMP
private

mass parameter

Definition at line 72 of file BostedChristyEMPXSec.h.

double genie::BostedChristyEMPXSec::fMpi0
private

pion mass

Definition at line 75 of file BostedChristyEMPXSec.h.

std::array<double, 6> genie::BostedChristyEMPXSec::fNRcoefL
private

tunable parameters from Ref.1, Table III for nonres bkg

Definition at line 97 of file BostedChristyEMPXSec.h.

std::array<std::array<double, 5>, 2> genie::BostedChristyEMPXSec::fNRcoefTD
private

tunable parameters from Ref.1, Table IV for nonres bkg

Definition at line 96 of file BostedChristyEMPXSec.h.

std::array<std::array<double, 5>, 2> genie::BostedChristyEMPXSec::fNRcoefTp
private

tunable parameters from Ref.1, Table III for nonres bkg

Definition at line 95 of file BostedChristyEMPXSec.h.

map<int, double> genie::BostedChristyEMPXSec::fNucRmvE
private

Definition at line 107 of file BostedChristyEMPXSec.h.

double genie::BostedChristyEMPXSec::fPM
private

mass parameter

Definition at line 71 of file BostedChristyEMPXSec.h.

double genie::BostedChristyEMPXSec::fQ2max
private

maximal Q2

Definition at line 80 of file BostedChristyEMPXSec.h.

double genie::BostedChristyEMPXSec::fQ2min
private

minimal Q2

Definition at line 79 of file BostedChristyEMPXSec.h.

std::array<std::array<double, 3>, 7> genie::BostedChristyEMPXSec::fRescoefL
private

tunable parameters from Ref.1, Table III for resonance

Definition at line 93 of file BostedChristyEMPXSec.h.

std::array<std::array<double, 4>, 7> genie::BostedChristyEMPXSec::fRescoefTD
private

tunable parameters from Ref.2, Table III for resonance

Definition at line 92 of file BostedChristyEMPXSec.h.

std::array<std::array<double, 4>, 7> genie::BostedChristyEMPXSec::fRescoefTp
private

tunable parameters from Ref.1, Table III for resonance

Definition at line 91 of file BostedChristyEMPXSec.h.

bool genie::BostedChristyEMPXSec::fUseMEC
private

account for MEC contribution?

Definition at line 70 of file BostedChristyEMPXSec.h.

std::array<double, 7> genie::BostedChristyEMPXSec::fWidthRes
private

resonance width

Definition at line 89 of file BostedChristyEMPXSec.h.

double genie::BostedChristyEMPXSec::fWmax
private

maximal W

Definition at line 78 of file BostedChristyEMPXSec.h.

double genie::BostedChristyEMPXSec::fWmin
private

minimal W

Definition at line 77 of file BostedChristyEMPXSec.h.

const XSecIntegratorI* genie::BostedChristyEMPXSec::fXSecIntegrator
private

Definition at line 109 of file BostedChristyEMPXSec.h.


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