Public Member Functions | Private Attributes | List of all members
genie::utils::gsl::d3Xsec_dOmegaldThetapi Class Reference

#include <GSLXSecFunc.h>

Inheritance diagram for genie::utils::gsl::d3Xsec_dOmegaldThetapi:

Public Member Functions

 d3Xsec_dOmegaldThetapi (const XSecAlgorithmI *m, const Interaction *i)
 
 ~d3Xsec_dOmegaldThetapi ()
 
unsigned int NDim (void) const
 
double DoEval (const double *xin) const
 
d3Xsec_dOmegaldThetapiClone (void) const
 
void SetE_lep (double E_lepton) const
 

Private Attributes

const XSecAlgorithmIfModel
 
const InteractionfInteraction
 
double fElep
 

Detailed Description

.....................................................................................

genie::utils::gsl::d3Xsec_dOmegaldThetapi A 3-D cross section function (fixed E_nu) Steve Dennis - for the Alvarez-Russo cross-section

Definition at line 395 of file GSLXSecFunc.h.

Constructor & Destructor Documentation

genie::utils::gsl::d3Xsec_dOmegaldThetapi::d3Xsec_dOmegaldThetapi ( const XSecAlgorithmI m,
const Interaction i 
)

Definition at line 899 of file GSLXSecFunc.cxx.

900  :
901 ROOT::Math::IBaseFunctionMultiDim(),
902 fModel(m),
903 fInteraction(i),
904 fElep(-1)
905 {
906 
907 }
genie::utils::gsl::d3Xsec_dOmegaldThetapi::~d3Xsec_dOmegaldThetapi ( )

Definition at line 908 of file GSLXSecFunc.cxx.

909 {
910 
911 }

Member Function Documentation

genie::utils::gsl::d3Xsec_dOmegaldThetapi * genie::utils::gsl::d3Xsec_dOmegaldThetapi::Clone ( void  ) const

Definition at line 989 of file GSLXSecFunc.cxx.

double genie::utils::gsl::d3Xsec_dOmegaldThetapi::DoEval ( const double *  xin) const

Definition at line 916 of file GSLXSecFunc.cxx.

917 {
918 // inputs:
919 // theta l [rad]
920 // phi_l [rad]
921 // phi pi [rad]
922 // outputs:
923 // differential cross section [10^-38 cm^2]
924 //
925  Kinematics * kinematics = fInteraction->KinePtr();
926  const TLorentzVector * P4_nu = fInteraction->InitStatePtr()->GetProbeP4(kRfLab);
927  double E_nu = P4_nu->E();
928 
929  double E_l = fElep;
930 
931  double theta_l = xin[0];
932  double phi_l = xin[1];
933  double theta_pi = xin[2];
934  double phi_pi = 0;
935 
936  double sin_theta_l = TMath::Sin(theta_l);
937  double sin_theta_pi = TMath::Sin(theta_pi);
938 
939  double E_pi= E_nu-E_l;
940 
941  double y = E_pi/E_nu;
942 
943  double m_l = fInteraction->FSPrimLepton()->Mass();
944  if (E_l < m_l) {
945  return 0.;
946  }
947 
948  double m_pi;
949  if ( fInteraction->ProcInfo().IsWeakCC() ) {
950  m_pi = constants::kPionMass;
951  }
952  else {
953  m_pi = constants::kPi0Mass;
954  }
955 
956  double p_l = TMath::Sqrt(E_l*E_l - m_l*m_l);
957  TVector3 lepton_3vector = TVector3(0,0,0);
958  lepton_3vector.SetMagThetaPhi(p_l,theta_l,phi_l);
959  TLorentzVector P4_lep = TLorentzVector(lepton_3vector , E_l );
960 
961  double p_pi = TMath::Sqrt(E_pi*E_pi - m_pi*m_pi);
962  TVector3 pion_3vector = TVector3(0,0,0);
963  pion_3vector.SetMagThetaPhi(p_pi,theta_pi,phi_pi);
964  TLorentzVector P4_pion = TLorentzVector(pion_3vector , E_pi);
965 
966  double Q2 = -(*P4_nu-P4_lep).Mag2();
967 
968  double x = Q2/(2*E_pi*constants::kNucleonMass);
969 
971 
972  if ( x < xlim.min || x > xlim.max ) {
973  return 0.;
974  }
975 
976  kinematics->Setx(x);
977  kinematics->Sety(y);
979 
980  kinematics->SetFSLeptonP4(P4_lep );
981  kinematics->SetHadSystP4 (P4_pion); // use Hadronic System variable to store pion momentum
982 
983  delete P4_nu;
984 
985  double xsec = (sin_theta_l * sin_theta_pi) * fModel->XSec(fInteraction,kPSElOlTpifE);
986  return xsec/(1E-38 * units::cm2);
987 }
double m_pi
const KPhaseSpace & PhaseSpace(void) const
Definition: Interaction.h:73
bool IsWeakCC(void) const
static const double kNucleonMass
Definition: Constants.h:77
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1064
Kinematics * KinePtr(void) const
Definition: Interaction.h:76
virtual double XSec(const Interaction *i, KinePhaseSpace_t k=kPSfE) const =0
Compute the cross section for the input interaction.
A simple [min,max] interval for doubles.
Definition: Range1.h:42
static const double kPi0Mass
Definition: Constants.h:74
Generated/set kinematical variables for an event.
Definition: Kinematics.h:39
void SetFSLeptonP4(const TLorentzVector &p4)
Definition: Kinematics.cxx:297
static constexpr double cm2
Definition: Units.h:69
TParticlePDG * FSPrimLepton(void) const
final state primary lepton
void Setx(double x, bool selected=false)
Definition: Kinematics.cxx:231
void UpdateWQ2FromXY(const Interaction *in)
Definition: KineUtils.cxx:1277
double max
Definition: Range1.h:53
static const double kPionMass
Definition: Constants.h:73
void Sety(double y, bool selected=false)
Definition: Kinematics.cxx:243
void SetHadSystP4(const TLorentzVector &p4)
Definition: Kinematics.cxx:307
InitialState * InitStatePtr(void) const
Definition: Interaction.h:74
Range1D_t XLim(void) const
x limits
const ProcessInfo & ProcInfo(void) const
Definition: Interaction.h:70
list x
Definition: train.py:276
TLorentzVector * GetProbeP4(RefFrame_t rf=kRfHitNucRest) const
unsigned int genie::utils::gsl::d3Xsec_dOmegaldThetapi::NDim ( void  ) const

Definition at line 912 of file GSLXSecFunc.cxx.

913 {
914  return 3;
915 }
void genie::utils::gsl::d3Xsec_dOmegaldThetapi::SetE_lep ( double  E_lepton) const

Definition at line 996 of file GSLXSecFunc.cxx.

997 {
998  fElep = E_lepton;
999 }

Member Data Documentation

double genie::utils::gsl::d3Xsec_dOmegaldThetapi::fElep
mutableprivate

Definition at line 414 of file GSLXSecFunc.h.

const Interaction* genie::utils::gsl::d3Xsec_dOmegaldThetapi::fInteraction
private

Definition at line 413 of file GSLXSecFunc.h.

const XSecAlgorithmI* genie::utils::gsl::d3Xsec_dOmegaldThetapi::fModel
private

Definition at line 412 of file GSLXSecFunc.h.


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