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

#include <GSLXSecFunc.h>

Inheritance diagram for genie::utils::gsl::d4Xsec_dEldThetaldOmegapi:

Public Member Functions

 d4Xsec_dEldThetaldOmegapi (const XSecAlgorithmI *m, const Interaction *i)
 
 ~d4Xsec_dEldThetaldOmegapi ()
 
unsigned int NDim (void) const
 
double DoEval (const double *xin) const
 
ROOT::Math::IBaseFunctionMultiDim * Clone (void) const
 
double GetFactor () const
 
void SetFactor (double factor)
 

Private Attributes

const XSecAlgorithmIfModel
 
const InteractionfInteraction
 
double fFactor
 

Detailed Description

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

genie::utils::gsl::d4Xsec_dEldThetaldOmegapi A 4-D cross section function (fixed E_nu) DANIEL - for the Alvarez-Russo cross-section

Definition at line 370 of file GSLXSecFunc.h.

Constructor & Destructor Documentation

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

Definition at line 796 of file GSLXSecFunc.cxx.

797  :
798 ROOT::Math::IBaseFunctionMultiDim(),
799 fModel(m),
800 fInteraction(i)
801 {
802 
803 }
genie::utils::gsl::d4Xsec_dEldThetaldOmegapi::~d4Xsec_dEldThetaldOmegapi ( )

Definition at line 804 of file GSLXSecFunc.cxx.

805 {
806 
807 }

Member Function Documentation

ROOT::Math::IBaseFunctionMultiDim * genie::utils::gsl::d4Xsec_dEldThetaldOmegapi::Clone ( void  ) const
double genie::utils::gsl::d4Xsec_dEldThetaldOmegapi::DoEval ( const double *  xin) const

Definition at line 812 of file GSLXSecFunc.cxx.

813 {
814 // inputs:
815 // El [GeV]
816 // theta l [rad]
817 // theta pi [rad]
818 // phi pi [rad]
819 // outputs:
820 // differential cross section [10^-38 cm^2]
821 //
822  Kinematics * kinematics = fInteraction->KinePtr();
823  const TLorentzVector * P4_nu = fInteraction->InitStatePtr()->GetProbeP4(kRfLab);
824  double E_nu = P4_nu->E();
825 
826  double E_l = xin[0];
827  double theta_l = xin[1];
828  double phi_l = 0.0;
829  double theta_pi = xin[2];
830  double phi_pi = xin[3];
831 
832  double sin_theta_l = TMath::Sin(theta_l);
833  double sin_theta_pi = TMath::Sin(theta_pi);
834 
835  double E_pi= E_nu-E_l;
836 
837  double y = E_pi/E_nu;
838 
839  double m_l = fInteraction->FSPrimLepton()->Mass();
840  if (E_l < m_l) {
841  return 0.;
842  }
843 
844  double m_pi;
845  if ( fInteraction->ProcInfo().IsWeakCC() ) {
846  m_pi = constants::kPionMass;
847  }
848  else {
849  m_pi = constants::kPi0Mass;
850  }
851 
852  double p_l = TMath::Sqrt(E_l*E_l - m_l*m_l);
853  TVector3 lepton_3vector = TVector3(0,0,0);
854  lepton_3vector.SetMagThetaPhi(p_l,theta_l,phi_l);
855  TLorentzVector P4_lep = TLorentzVector(lepton_3vector , E_l );
856 
857  double p_pi = TMath::Sqrt(E_pi*E_pi - m_pi*m_pi);
858  TVector3 pion_3vector = TVector3(0,0,0);
859  pion_3vector.SetMagThetaPhi(p_pi,theta_pi,phi_pi);
860  TLorentzVector P4_pion = TLorentzVector(pion_3vector , E_pi);
861 
862  double Q2 = -(*P4_nu-P4_lep).Mag2();
863 
864  double x = Q2/(2*E_pi*constants::kNucleonMass);
865 
867 
868  if ( x < xlim.min || x > xlim.max ) {
869  return 0.;
870  }
871 
872  kinematics->Setx(x);
873  kinematics->Sety(y);
875 
876  kinematics->SetFSLeptonP4(P4_lep );
877  kinematics->SetHadSystP4 (P4_pion); // use Hadronic System variable to store pion momentum
878 
879  delete P4_nu;
880 
881  double xsec = sin_theta_l * sin_theta_pi * fModel->XSec(fInteraction,kPSElOlTpifE);
882  return fFactor * xsec/(1E-38 * units::cm2);
883 }
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
double genie::utils::gsl::d4Xsec_dEldThetaldOmegapi::GetFactor ( void  ) const

Definition at line 894 of file GSLXSecFunc.cxx.

895 {
896  return fFactor;
897 }
unsigned int genie::utils::gsl::d4Xsec_dEldThetaldOmegapi::NDim ( void  ) const

Definition at line 808 of file GSLXSecFunc.cxx.

809 {
810  return 4;
811 }
void genie::utils::gsl::d4Xsec_dEldThetaldOmegapi::SetFactor ( double  factor)

Definition at line 890 of file GSLXSecFunc.cxx.

891 {
892  fFactor = factor;
893 }

Member Data Documentation

double genie::utils::gsl::d4Xsec_dEldThetaldOmegapi::fFactor
private

Definition at line 387 of file GSLXSecFunc.h.

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

Definition at line 386 of file GSLXSecFunc.h.

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

Definition at line 385 of file GSLXSecFunc.h.


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