AlvarezRusoCOHPiPDXSec.h
Go to the documentation of this file.
1 //____________________________________________________________________________
2 /*!
3 
4 \class genie::alvarezruso::AlvarezRusoCOHPiPDXsec
5 
6 \brief 5d differential cross section for Alvarez-Ruso Coherent Pion Production xsec
7 
8 \ref
9 
10 \author Steve Dennis
11  University of Warwick, Rutherford Appleton Laboratory
12 
13 \created 05/12/2013
14 
15 \cpright Copyright (c) 2003-2019, The GENIE Collaboration
16  For the full text of the license visit http://copyright.genie-mc.org
17  or see $GENIE/LICENSE
18 */
19 //____________________________________________________________________________
20 #ifndef _AR_COH_MULTIDIFF_H_
21 #define _AR_COH_MULTIDIFF_H_
22 
23 #include <TMath.h>
24 #include <Math/SMatrix.h>
25 #include <Math/SVector.h>
26 #include <Math/LorentzVector.h>
27 
32 
33 #include <complex>
34 
35 namespace genie
36 {
37 namespace alvarezruso
38 {
39 
40 class ARWFSolution;
41 
42 enum current_t{kCC, kNC};
43 enum flavour_t{kE, kMu, kTau};
46 
48 {
49  public:
50 
51  AlvarezRusoCOHPiPDXSec(unsigned int Z_, unsigned int A_, const current_t current_,
52  const flavour_t flavour_ = kE, const nutype_t nutype = kNu,
53  const formfactors_t ff_ = kNieves);
55 
56  // 5d cross section per nucleon
57  double DXSec(const double E_nu_, const double E_l_, const double theta_l_,
58  const double phi_l_, const double theta_pi_, const double phi_pi_);
59 
60  void SetDebug(bool debug) { debug_ = debug; };
61 
62  ARConstants & GetConstants(void);
64 
65  int GetSampling() const {
66  return fSampling;
67  }
68 
69  double GetPiMass() const {
70  return fM_pi;
71  }
72  double GetLeptonMass() const {
73  return fM_l;
74  }
75 
76  private:
77  // Fill the ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> >s based on the values from the kinematics
78  void SetKinematics();
79 
80  // Fill values based on the flavour
81  void SetFlavour();
82 
83  // Fill values based on the current
84  void SetCurrent();
85 
86  std::complex<double> DeltaCouplingInMed(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > delta_momentum,
87  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > pion_momentum, double density_cent);
88  double PiDecayVertex(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > pion_momentum, double mass);
89  std::complex<double> DeltaPropagatorInMed(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > delta_momentum);
90  double DeltaWidthPauliBlocked(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > delta_momentum, double density);
91  double DeltaWidthFree(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > delta_momentum);
92  std::complex<double> H(unsigned int i, unsigned int j) const;
93  double DifferentialCrossSection();
94  double PionMomentumCM(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > delta_momentum);
95  double PNVertexFactor(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > momentum, double mass);
96  double DeltaSelfEnergyRe(double density);
97  double DeltaSelfEnergyIm(double density);
98  double DeltaSelfEnergyConstant(double a, double b, double c, double E);
99  std::complex<double> NucleonPropagator(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > nucleon_momentum);
100 
101  void NuclearCurrent(ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > q, ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > pdir, ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > pcrs, ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > ppi, std::complex<double> *jPtr);
102 
103  // Fill the wavefunctions
104  void SolveWavefunctions();
105 
106  //______________________________________________________________
107  // Properties
108 
109  bool debug_;
110  // Nucleus
111  unsigned int fZ;
112  unsigned int fA;
113  unsigned int fSampling;
114  // Choice of current
116  // Choice of neutrino flavour
118  // Chocie of initial neutrino type
120  // Choice of form-factor approximation
122  // Constants
124  // Nuclear values
126  // Wavefunction calculator
128 
129  // Kinematics of the event
130  double fE_nu; // initial neutrino energy [GeV]
131  double fE_l; // scattered lepton energy [GeV]
132  double fTheta_l; // scattered lepton angle
133  double fTheta_pi; // pion angle
134  double fPhi; // angle between lepton and pion
135 
136  double fLastE_pi;
137 
138  // Four-momenta of particles and transfers involved
139  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fQ; // momentum-transfer
140  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_nu; // incoming neutrino
141  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_l; // outgoing lepton/neutrino
142  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_pi; // outgoing pion
143  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_n_i; // incoming (stationary) nucleon
144  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_n_o; // outgoing nucleon
145  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_direct; // intermediary particle (Delta/nucleon) in direct diagrams
146  ROOT::Math::LorentzVector<ROOT::Math::PxPyPzE4D<double> > fP_cross; // intermediary particle (Delta/nucleon) in crossed diagrams
147 
148  // Values and constants which will be used during the running
149  // Get set to one of the mass values above in the constructor
150  double fM_pi; // mass of the pion
151  double fM_l; // mass of the lepton
152  double fg_factor; // Current factor. if(NC) = 1/2 G^2. if(CC) = 1/2 G^2 cos^2(theta_c)
153 
154  // Form factors for PiNDelta decay vertex
159 
160  // Wavefunction
164 
165  std::complex<double> fJ_hadronic[4];
166 };
167 
168 } //namespace alvarezruso
169 } //namespace genie
170 #endif
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_n_i
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_nu
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fQ
Wave function class for AlvarezRuso Coherent pion production xsec.
THE MAIN GENIE PROJECT NAMESPACE
Definition: GeneratorBase.h:8
double DeltaWidthFree(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum)
std::complex< double > DeltaPropagatorInMed(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum)
AlvarezRusoCOHPiPDXSec(unsigned int Z_, unsigned int A_, const current_t current_, const flavour_t flavour_=kE, const nutype_t nutype=kNu, const formfactors_t ff_=kNieves)
double DeltaWidthPauliBlocked(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum, double density)
double PionMomentumCM(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > LorentzVector
std::complex< double > DeltaCouplingInMed(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > delta_momentum, ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > pion_momentum, double density_cent)
void NuclearCurrent(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > q, ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > pdir, ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > pcrs, ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > ppi, std::complex< double > *jPtr)
Abstract base class for Alvarez-Ruso wavefunction solution.
Definition: ARWFSolution.h:33
double PNVertexFactor(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > momentum, double mass)
double * A_
Definition: determinant.hpp:19
double DXSec(const double E_nu_, const double E_l_, const double theta_l_, const double phi_l_, const double theta_pi_, const double phi_pi_)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_n_o
Float_t E
Definition: plot.C:20
const double a
const double j
Definition: BetheBloch.cxx:29
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_l
double DeltaSelfEnergyConstant(double a, double b, double c, double E)
std::complex< double > H(unsigned int i, unsigned int j) const
Nucleus class for Alvarez-Ruso Coherent Pion Production xsec.
double PiDecayVertex(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > pion_momentum, double mass)
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_cross
const hit & b
Definition: hits.cxx:21
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_direct
tuple density
Definition: barite.py:33
ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > fP_pi
std::complex< double > NucleonPropagator(ROOT::Math::LorentzVector< ROOT::Math::PxPyPzE4D< double > > nucleon_momentum)