36 #include "Framework/Conventions/GBuild.h" 49 using namespace genie;
52 using std::ostringstream;
78 int kpsdim = 1 +
std::count(s.begin(), s.end(),
',');
82 LOG(
"SmithMoniz",
pWARN) <<
"not a valid process";
90 LOG(
"SmithMoniz",
pWARN) <<
"not valid kinematics";
110 else if (kpsdim == 2)
142 bool prcok = proc_info.
IsWeakCC() && ((isP&&isnub) || (isN&&isnu));
143 if(!prcok)
return false;
158 Registry r(
"SmithMonizQELCCPXSec_specific",
false ) ;
159 r.
Set(
"sm_utils_algo",
RgAlg(
"genie::SmithMonizUtils",
"Default") ) ;
174 fVud2 = TMath::Power( Vud, 2 );
178 this->
SubAlg(
"FormFactorsAlg"));
189 this ->
SubAlg(
"sm_utils_algo" ) ) ) ;
196 const Kinematics & kinematics = interaction -> Kine();
200 double P_Fermi, E_nuBIN;
204 double E_p = TMath::Sqrt(
fmm_ini+kkF)-E_nuBIN;
206 if (cosT_p < -1.0 || cosT_p > 1.0 )
return 0.0;
207 double pF = TMath::Sqrt(kkF+(2*kF*fqv)*cosT_p+
fqqv);
212 double FV_SM = 4.0*TMath::Pi()/3*TMath::Power(P_Fermi, 3);
216 double a3 = a2*cosT_p*cosT_p;
223 double k4 = (3*a3-
a2)/
fqqv;
228 double T_3 = k5*
fW_3;
242 Kinematics * kinematics = interaction -> KinePtr();
244 const InitialState & init_state = interaction -> InitState();
246 if (fE_nu < sm_utils->E_nu_thr_SM())
return 0;
256 fn_NT = (is_neutrino) ? +1 : -1;
260 fmm_ini = TMath::Power(m_ini, 2);
262 TParticlePDG * nucl_fin = pdglib->
Find( nucl_pdg_fin );
263 double m_fin = nucl_fin ->
Mass();
264 fmm_fin = TMath::Power(m_fin, 2);
270 double mm_lep = m_lep*m_lep;
271 if (
fE_lep < m_lep)
return 0.0;
274 double cosT_lep= (
fE_lep-k6)/P_lep;
275 if (cosT_lep < -1.0 || cosT_lep > 1.0 )
return 0.0;
280 if (fcosT_k < -1.0 || fcosT_k > 1.0 )
return 0.0;
284 fk7 = P_lep*cosT_lep;
305 double R[48]= { 0.16276744849602969579e-1,0.48812985136049731112e-1,
306 0.81297495464425558994e-1,1.13695850110665920911e-1,
307 1.45973714654896941989e-1,1.78096882367618602759e-1,
308 2.10031310460567203603e-1,2.41743156163840012328e-1,
309 2.73198812591049141487e-1,3.04364944354496353024e-1,
310 3.35208522892625422616e-1,3.65696861472313635031e-1,
311 3.95797649828908603285e-1,4.25478988407300545365e-1,
312 4.54709422167743008636e-1,4.83457973920596359768e-1,
313 5.11694177154667673586e-1,5.39388108324357436227e-1,
314 5.66510418561397168404e-1,5.93032364777572080684e-1,
315 6.18925840125468570386e-1,6.44163403784967106798e-1,
316 6.68718310043916153953e-1,6.92564536642171561344e-1,
317 7.15676812348967626225e-1,7.38030643744400132851e-1,
318 7.59602341176647498703e-1,7.80369043867433217604e-1,
319 8.00308744139140817229e-1,8.19400310737931675539e-1,
320 8.37623511228187121494e-1,8.54959033434601455463e-1,
321 8.71388505909296502874e-1,8.86894517402420416057e-1,
322 9.01460635315852341319e-1,9.15071423120898074206e-1,
323 9.27712456722308690965e-1,9.39370339752755216932e-1,
324 9.50032717784437635756e-1,9.59688291448742539300e-1,
325 9.68326828463264212174e-1,9.75939174585136466453e-1,
326 9.82517263563014677447e-1,9.88054126329623799481e-1,
327 9.92543900323762624572e-1,9.95981842987209290650e-1,
328 9.98364375863181677724e-1,9.99689503883230766828e-1};
330 double W[48]= { 0.00796792065552012429e-1,0.01853960788946921732e-1,
331 0.02910731817934946408e-1,0.03964554338444686674e-1,
332 0.05014202742927517693e-1,0.06058545504235961683e-1,
333 0.07096470791153865269e-1,0.08126876925698759217e-1,
334 0.09148671230783386633e-1,0.10160770535008415758e-1,
335 0.11162102099838498591e-1,0.12151604671088319635e-1,
336 0.13128229566961572637e-1,0.14090941772314860916e-1,
337 0.15038721026994938006e-1,0.15970562902562291381e-1,
338 0.16885479864245172450e-1,0.17782502316045260838e-1,
339 0.18660679627411467395e-1,0.19519081140145022410e-1,
340 0.20356797154333324595e-1,0.21172939892191298988e-1,
341 0.21966644438744349195e-1,0.22737069658329374001e-1,
342 0.23483399085926219842e-1,0.24204841792364691282e-1,
343 0.24900633222483610288e-1,0.25570036005349361499e-1,
344 0.26212340735672413913e-1,0.26826866725591762198e-1,
345 0.27412962726029242823e-1,0.27970007616848334440e-1,
346 0.28497411065085385646e-1,0.28994614150555236543e-1,
347 0.29461089958167905970e-1,0.29896344136328385984e-1,
348 0.30299915420827593794e-1,0.30671376123669149014e-1,
349 0.31010332586313837423e-1,0.31316425596861355813e-1,
350 0.31589330770727168558e-1,0.31828758894411006535e-1,
351 0.32034456231992663218e-1,0.32206204794030250669e-1,
352 0.32343822568575928429e-1,0.32447163714064269364e-1,
353 0.32516118713868835987e-1,0.32550614492363166242e-1};
356 for(
int i = 0;i<48;i++)
358 double kF = 0.5*(-R[i]*(rkF.
max-rkF.
min)+rkF.
min+rkF.
max);
366 double xsec = 0.5*Sum*(rkF.
max-rkF.
min);
383 const Kinematics & kinematics = interaction -> Kine();
384 const InitialState & init_state = interaction -> InitState();
388 double E2 = TMath::Power(E,2);
391 double q2 = kinematics.
q2();
395 int sign = (is_neutrino) ? -1 : 1;
407 double ml2 = TMath::Power(ml, 2);
408 double M2 = TMath::Power(M, 2);
409 double M4 = TMath::Power(M2, 2);
410 double FA2 = TMath::Power(FA, 2);
411 double Fp2 = TMath::Power(Fp, 2);
412 double F1V2 = TMath::Power(F1V, 2);
413 double xiF2V2 = TMath::Power(xiF2V, 2);
415 double s_u = 4*E*M + q2 - ml2;
416 double q2_M2 = q2/M2;
419 double A = (0.25*(ml2-q2)/M2) * (
420 (4-q2_M2)*FA2 - (4+q2_M2)*F1V2 - q2_M2*xiF2V2*(1+0.25*q2_M2)
421 -4*q2_M2*F1V*xiF2V - (ml2/M2)*(
422 (F1V2+xiF2V2+2*F1V*xiF2V)+(FA2+4*Fp2+4*FA*Fp)+(q2_M2-4)*Fp2));
423 double B = -1 * q2_M2 * FA*(F1V+xiF2V);
424 double C = 0.25*(FA2 + F1V2 - 0.25*q2_M2*xiF2V2);
426 double xsec = Gfactor * (A + sign*B*s_u/M2 + C*s_u*s_u/M4);
432 if (target.
A()>1 && target.
A()<4)
435 double fQES_Pauli = 1.0-0.529*TMath::Exp((Q2*(228.0-531.0*Q2)-48.0)*Q2);
456 const double Ee = E + ( (q2 - mn2 + mp2) / 2.0 / mp );
458 rc = 6.0 + (1.5 * TMath::Log(
kProtonMass / 2.0 / Ee));
void SetInteraction(const Interaction *i)
Cross Section Calculation Interface.
bool IsWeakCC(void) const
bool IsNeutrino(int pdgc)
double J(double q0, double q3, double Enu, double ml)
THE MAIN GENIE PROJECT NAMESPACE
QELFormFactors fFormFactors
Cross Section Integrator Interface.
static const double kNucleonMass
double Q2(const Interaction *const i)
int HitNucPdg(void) const
void Configure(const Registry &config)
bool IsNeutron(void) const
double Integral(const Interaction *i) const
double fXSecScale
external xsec scaling factor
A simple [min,max] interval for doubles.
bool IsQuasiElastic(void) const
double HitNucMass(void) const
double d2sQES_dQ2dv_SM(const Interaction *i) const
Generated/set kinematical variables for an event.
int SwitchProtonNeutron(int pdgc)
double d3sQES_dQ2dvdkF_SM(const Interaction *interaction) const
double Mass(Resonance_t res)
resonance mass (GeV)
enum genie::EKinePhaseSpace KinePhaseSpace_t
static const double kElectronMass
double GetBindingEnergy(void) const
Summary information for an interaction.
Range1D_t kFQES_SM_lim(double nu, double Q2) const
virtual bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
double q2(bool selected=false) const
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
static string AsString(KinePhaseSpace_t kps)
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
bool IsAntiNeutrino(int pdgc)
const QELFormFactorsModelI * fFormFactorsModel
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
virtual void Configure(const Registry &config)
double GetKV(KineVar_t kv) const
double XSec(const Interaction *i, KinePhaseSpace_t kps) const
Compute the cross section for the input interaction.
static const double kNucleonMass2
SmithMonizUtils * sm_utils
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
virtual ~SmithMonizQELCCPXSec()
void SetKV(KineVar_t kv, double value)
const XSecIntegratorI * fXSecIntegrator
static PDGLibrary * Instance(void)
Contains auxiliary functions for Smith-Moniz model. .
static double rho(double P_Fermi, double T_Fermi, double p)
Singleton class to load & serve a TDatabasePDG.
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
A registry. Provides the container for algorithm configuration parameters.
double fVud2
|Vud|^2(square of magnitude ud-element of CKM-matrix)
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
double Jacobian(const Interaction *const i, KinePhaseSpace_t f, KinePhaseSpace_t t)
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) const
TParticlePDG * Find(int pdgc, bool must_exist=true)
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
double dsQES_dQ2_SM(const Interaction *interaction) const
static const double kProtonMass2
static const double kNeutronMass2
void Set(RgIMapPair entry)
bool IsProton(void) const
double ProbeE(RefFrame_t rf) const
static const double kProtonMass
Root of GENIE utility namespaces.
const UInt_t kISkipProcessChk
if set, skip process validity checks
double GetFermiMomentum(void) const
Initial State information.
const Algorithm * SubAlg(const RgKey ®istry_key) const