GENIEGenerator
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Member Functions | Private Attributes | List of all members
genie::utils::gsl::d5Xsec_dEldOmegaldOmegapi Class Reference

#include <GSLXSecFunc.h>

Inheritance diagram for genie::utils::gsl::d5Xsec_dEldOmegaldOmegapi:
Inheritance graph
[legend]
Collaboration diagram for genie::utils::gsl::d5Xsec_dEldOmegaldOmegapi:
Collaboration graph
[legend]

Public Member Functions

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

Private Attributes

const XSecAlgorithmIfModel
 
const InteractionfInteraction
 

Detailed Description

Definition at line 348 of file GSLXSecFunc.h.

Constructor & Destructor Documentation

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

Definition at line 699 of file GSLXSecFunc.cxx.

700  :
701 ROOT::Math::IBaseFunctionMultiDim(),
702 fModel(m),
703 fInteraction(i)
704 {
705 
706 }
genie::utils::gsl::d5Xsec_dEldOmegaldOmegapi::~d5Xsec_dEldOmegaldOmegapi ( )

Definition at line 707 of file GSLXSecFunc.cxx.

708 {
709 
710 }

Member Function Documentation

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

Definition at line 715 of file GSLXSecFunc.cxx.

References genie::units::cm2, genie::constants::kNucleonMass, genie::constants::kPi0Mass, genie::constants::kPionMass, genie::kRfLab, genie::Range1D_t::max, genie::utils::kinematics::Q2(), genie::Kinematics::SetFSLeptonP4(), genie::Kinematics::SetHadSystP4(), genie::Kinematics::Setx(), genie::Kinematics::Sety(), and genie::utils::kinematics::UpdateWQ2FromXY().

716 {
717 // inputs:
718 // x [-]
719 // y [-]
720 // outputs:
721 // differential cross section [10^-38 cm^2]
722 //
723  Kinematics * kinematics = fInteraction->KinePtr();
724  const TLorentzVector * P4_nu = fInteraction->InitStatePtr()->GetProbeP4(kRfLab);
725  double E_nu = P4_nu->E();
726 
727  double E_l = xin[0];
728  double theta_l = xin[1];
729  double phi_l = xin[2];
730  double theta_pi = xin[3];
731  double phi_pi = xin[4];
732 
733  double E_pi= E_nu-E_l;
734 
735  double y = E_pi/E_nu;
736 
737  double m_l = fInteraction->FSPrimLepton()->Mass();
738  if (E_l < m_l) {
739  return 0.;
740  }
741 
742  double m_pi;
743  if ( fInteraction->ProcInfo().IsWeakCC() ) {
744  m_pi = constants::kPionMass;
745  }
746  else {
747  m_pi = constants::kPi0Mass;
748  }
749 
750  double p_l = TMath::Sqrt(E_l*E_l - m_l*m_l);
751  TVector3 lepton_3vector = TVector3(0,0,0);
752  lepton_3vector.SetMagThetaPhi(p_l,theta_l,phi_l);
753  TLorentzVector P4_lep = TLorentzVector(lepton_3vector , E_l );
754 
755  double p_pi = TMath::Sqrt(E_pi*E_pi - m_pi*m_pi);
756  TVector3 pion_3vector = TVector3(0,0,0);
757  pion_3vector.SetMagThetaPhi(p_pi,theta_pi,phi_pi);
758  TLorentzVector P4_pion = TLorentzVector(pion_3vector , E_pi);
759 
760  double Q2 = -(*P4_nu-P4_lep).Mag2();
761 
762  double x = Q2/(2*E_pi*constants::kNucleonMass);
763 
765 
766  if ( x < xlim.min || x > xlim.max ) {
767  return 0.;
768  }
769 
770  kinematics->Setx(x);
771  kinematics->Sety(y);
773 
774  kinematics->SetFSLeptonP4(P4_lep );
775  kinematics->SetHadSystP4 (P4_pion); // use Hadronic System variable to store pion momentum
776 
777  delete P4_nu;
778 
779  double xsec = fModel->XSec(fInteraction)*TMath::Sin(theta_l)*TMath::Sin(theta_pi);
780  return xsec/(1E-38 * units::cm2);
781 }
const KPhaseSpace & PhaseSpace(void) const
Definition: Interaction.h:73
bool IsWeakCC(void) const
static const double kNucleonMass
double Q2(const Interaction *const i)
Definition: KineUtils.cxx:1077
Kinematics * KinePtr(void) const
Definition: Interaction.h:76
A simple [min,max] interval for doubles.
Definition: Range1.h:42
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
virtual double XSec(const Interaction *i, KinePhaseSpace_t k=kPSfE) const =0
Compute the cross section for the input interaction.
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:1290
double max
Definition: Range1.h:53
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
TLorentzVector * GetProbeP4(RefFrame_t rf=kRfHitNucRest) const
unsigned int genie::utils::gsl::d5Xsec_dEldOmegaldOmegapi::NDim ( void  ) const

Definition at line 711 of file GSLXSecFunc.cxx.

712 {
713  return 5;
714 }

Member Data Documentation

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

Definition at line 361 of file GSLXSecFunc.h.

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

Definition at line 360 of file GSLXSecFunc.h.


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