43 using namespace genie;
46 using std::ostringstream;
105 bool prcok = proc_info.
IsWeakCC() && ((isP&&isnub) || (isN&&isnu));
106 if(!prcok)
return false;
121 Registry r(
"SmithMonizQELCCPXSec_specific",
false ) ;
122 r.
Set(
"sm_utils_algo",
RgAlg(
"genie::SmithMonizUtils",
"Default") ) ;
137 fVud2 = TMath::Power( Vud, 2 );
141 this->
SubAlg(
"FormFactorsAlg"));
152 this ->
SubAlg(
"sm_utils_algo" ) ) ) ;
163 double P_Fermi, E_nuBIN;
174 double FV_SM = 4.0*TMath::Pi()/3*TMath::Power(P_Fermi, 3);
178 double a3 = a2*cosT_p*cosT_p;
185 double k4 = (3*a3-
a2)/
fqqv;
190 double T_3 = k5*
fW_3;
210 const InitialState & init_state = interaction -> InitState();
216 fn_NT = (is_neutrino) ? +1 : -1;
220 fmm_ini = TMath::Power(m_ini, 2);
222 TParticlePDG * nucl_fin = pdglib->
Find( nucl_pdg_fin );
223 double m_fin = nucl_fin ->
Mass();
224 fmm_fin = TMath::Power(m_fin, 2);
231 double mm_lep = m_lep*m_lep;
234 double cosT_lep= (
fE_lep-k6)/P_lep;
243 fk7 = P_lep*cosT_lep;
264 double R[48]= { 0.16276744849602969579e-1,0.48812985136049731112e-1,
265 0.81297495464425558994e-1,1.13695850110665920911e-1,
266 1.45973714654896941989e-1,1.78096882367618602759e-1,
267 2.10031310460567203603e-1,2.41743156163840012328e-1,
268 2.73198812591049141487e-1,3.04364944354496353024e-1,
269 3.35208522892625422616e-1,3.65696861472313635031e-1,
270 3.95797649828908603285e-1,4.25478988407300545365e-1,
271 4.54709422167743008636e-1,4.83457973920596359768e-1,
272 5.11694177154667673586e-1,5.39388108324357436227e-1,
273 5.66510418561397168404e-1,5.93032364777572080684e-1,
274 6.18925840125468570386e-1,6.44163403784967106798e-1,
275 6.68718310043916153953e-1,6.92564536642171561344e-1,
276 7.15676812348967626225e-1,7.38030643744400132851e-1,
277 7.59602341176647498703e-1,7.80369043867433217604e-1,
278 8.00308744139140817229e-1,8.19400310737931675539e-1,
279 8.37623511228187121494e-1,8.54959033434601455463e-1,
280 8.71388505909296502874e-1,8.86894517402420416057e-1,
281 9.01460635315852341319e-1,9.15071423120898074206e-1,
282 9.27712456722308690965e-1,9.39370339752755216932e-1,
283 9.50032717784437635756e-1,9.59688291448742539300e-1,
284 9.68326828463264212174e-1,9.75939174585136466453e-1,
285 9.82517263563014677447e-1,9.88054126329623799481e-1,
286 9.92543900323762624572e-1,9.95981842987209290650e-1,
287 9.98364375863181677724e-1,9.99689503883230766828e-1};
289 double W[48]= { 0.00796792065552012429e-1,0.01853960788946921732e-1,
290 0.02910731817934946408e-1,0.03964554338444686674e-1,
291 0.05014202742927517693e-1,0.06058545504235961683e-1,
292 0.07096470791153865269e-1,0.08126876925698759217e-1,
293 0.09148671230783386633e-1,0.10160770535008415758e-1,
294 0.11162102099838498591e-1,0.12151604671088319635e-1,
295 0.13128229566961572637e-1,0.14090941772314860916e-1,
296 0.15038721026994938006e-1,0.15970562902562291381e-1,
297 0.16885479864245172450e-1,0.17782502316045260838e-1,
298 0.18660679627411467395e-1,0.19519081140145022410e-1,
299 0.20356797154333324595e-1,0.21172939892191298988e-1,
300 0.21966644438744349195e-1,0.22737069658329374001e-1,
301 0.23483399085926219842e-1,0.24204841792364691282e-1,
302 0.24900633222483610288e-1,0.25570036005349361499e-1,
303 0.26212340735672413913e-1,0.26826866725591762198e-1,
304 0.27412962726029242823e-1,0.27970007616848334440e-1,
305 0.28497411065085385646e-1,0.28994614150555236543e-1,
306 0.29461089958167905970e-1,0.29896344136328385984e-1,
307 0.30299915420827593794e-1,0.30671376123669149014e-1,
308 0.31010332586313837423e-1,0.31316425596861355813e-1,
309 0.31589330770727168558e-1,0.31828758894411006535e-1,
310 0.32034456231992663218e-1,0.32206204794030250669e-1,
311 0.32343822568575928429e-1,0.32447163714064269364e-1,
312 0.32516118713868835987e-1,0.32550614492363166242e-1};
315 for(
int i = 0;
i<48;
i++)
343 const InitialState & init_state = interaction -> InitState();
347 double E2 = TMath::Power(E,2);
350 double q2 = kinematics.
q2();
354 int sign = (is_neutrino) ? -1 : 1;
366 double ml2 = TMath::Power(ml, 2);
367 double M2 = TMath::Power(M, 2);
368 double M4 = TMath::Power(M2, 2);
369 double FA2 = TMath::Power(FA, 2);
370 double Fp2 = TMath::Power(Fp, 2);
371 double F1V2 = TMath::Power(F1V, 2);
372 double xiF2V2 = TMath::Power(xiF2V, 2);
374 double s_u = 4*E*M + q2 - ml2;
375 double q2_M2 = q2/M2;
378 double A = (0.25*(ml2-
q2)/M2) * (
379 (4-q2_M2)*FA2 - (4+q2_M2)*F1V2 - q2_M2*xiF2V2*(1+0.25*q2_M2)
380 -4*q2_M2*F1V*xiF2V - (ml2/M2)*(
381 (F1V2+xiF2V2+2*F1V*xiF2V)+(FA2+4*Fp2+4*FA*Fp)+(q2_M2-4)*Fp2));
382 double B = -1 * q2_M2 * FA*(F1V+xiF2V);
383 double C = 0.25*(FA2 + F1V2 - 0.25*q2_M2*xiF2V2);
385 double xsec = Gfactor * (A + sign*B*s_u/M2 + C*s_u*s_u/M4);
391 if (target.
A()>1 && target.
A()<4)
394 double fQES_Pauli = 1.0-0.529*TMath::Exp((Q2*(228.0-531.0*Q2)-48.0)*Q2);
415 const double Ee = E + ( (q2 - mn2 + mp2) / 2.0 / mp );
417 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)
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
double q2(bool selected=false) const
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. Is a concrete implementation of the XSecAlgorit...
static double rho(double P_Fermi, double T_Fermi, double p)
Singleton class to load & serve a TDatabasePDG.
Var Sqrt(const Var &v)
Use to take sqrt of a var.
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)
TParticlePDG * Find(int pdgc)
virtual double Integrate(const XSecAlgorithmI *model, const Interaction *interaction) const =0
assert(nhit_max >=nhit_nbins)
const InitialState & InitState(void) const
const ProcessInfo & ProcInfo(void) const
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