H3AMNuGammaPXSec.cxx
Go to the documentation of this file.
1 //____________________________________________________________________________
2 /*
3  Copyright (c) 2003-2019, The GENIE Collaboration
4  For the full text of the license visit http://copyright.genie-mc.org
5  or see $GENIE/LICENSE
6 
7  Author: Costas Andreopoulos <costas.andreopoulos \at stfc.ac.uk>
8  University of Liverpool & STFC Rutherford Appleton Lab - February 15, 2008
9 
10  For the class documentation see the corresponding header file.
11 
12  Important revisions after version 2.0.0 :
13  @ Feb 15, 2008 - CB
14  This cross section algorithm was added in 2.3.1. The differential cross
15  section is not yet implemented - only the integrated cross section.
16  Energy dependence (6-th power) increases the cross section rapidly for
17  energies > ~ nucleon mass which is outside the model validity range.
18  Currently preventing that by frozing E-dependence at ~1 GeV.
19 */
20 //____________________________________________________________________________
21 
30 
31 using namespace genie;
32 using namespace genie::constants;
33 
34 //____________________________________________________________________________
36 XSecAlgorithmI("genie::H3AMNuGammaPXSec")
37 {
38 
39 }
40 //____________________________________________________________________________
42 XSecAlgorithmI("genie::H3AMNuGammaPXSec", config)
43 {
44 
45 }
46 //____________________________________________________________________________
48 {
49 
50 }
51 //____________________________________________________________________________
53  const Interaction * interaction, KinePhaseSpace_t /*kps*/) const
54 {
55  if(! this -> ValidProcess (interaction) ) return 0.;
56  if(! this -> ValidKinematics (interaction) ) return 0.;
57 
58  LOG("AMNuGamma", pWARN)
59  << "*** No differential cross section calculation is implemented yet";
60 
61  return 1;
62 }
63 //____________________________________________________________________________
64 double H3AMNuGammaPXSec::Integral(const Interaction * interaction) const
65 {
66  // Compute the cross section for a free nucleon target
67  const InitialState & init_state = interaction -> InitState();
68  const Target & target = init_state.Tgt();
69  double Ev = init_state.ProbeE(kRfHitNucRest);
70 
71  double Ecutoff = kNucleonMass / 2;
72 
73  if(Ev > Ecutoff) return 0;
74 
75  double xsec0 = 2.2E-41 * units::cm2;
76  double xsec = xsec0 * TMath::Power(Ev,6.) * TMath::Power(0.1*fGw,4.);
77 
78  LOG("AMNuGamma", pNOTICE)
79  << "*** xsec(vN->vNgamma) [free nuc](Ev="<< Ev << ") = "<< xsec;
80 
81 #ifdef __GENIE_LOW_LEVEL_MESG_ENABLED__
82  LOG("AMNuGamma", pDEBUG)
83  << "*** xsec(vN->vNgamma) [free nuc](Ev="<< Ev << ") = "<< xsec;
84 #endif
85 
86  // If requested return the free xsec even for nuclear target
87  if( interaction->TestBit(kIAssumeFreeNucleon) ) return xsec;
88 
89  // Scale for the number of scattering centers at the target
90  int nucpdgc = target.HitNucPdg();
91  int NNucl = (pdg::IsProton(nucpdgc)) ? target.Z() : target.N();
92  xsec*=NNucl;
93 
94  return xsec;
95 }
96 //____________________________________________________________________________
97 bool H3AMNuGammaPXSec::ValidProcess(const Interaction * interaction) const
98 {
99  if(interaction->TestBit(kISkipProcessChk)) return true;
100 
101  if(interaction->ProcInfo().IsAMNuGamma()) return true;
102  return false;
103 }
104 //____________________________________________________________________________
105 bool H3AMNuGammaPXSec::ValidKinematics(const Interaction* interaction) const
106 {
107  if(interaction->TestBit(kISkipKinematicChk)) return true;
108  return true;
109 }
110 //____________________________________________________________________________
112 {
113  Algorithm::Configure(config);
114  this->LoadConfig();
115 }
116 //____________________________________________________________________________
118 {
119  Algorithm::Configure(config);
120  this->LoadConfig();
121 }
122 //____________________________________________________________________________
124 {
125 
126  GetParam( "AMNuGamma-Gw", fGw ) ;
127 
128 }
129 //____________________________________________________________________________
130 
Cross Section Calculation Interface.
Basic constants.
const XML_Char * target
Definition: expat.h:268
THE MAIN GENIE PROJECT NAMESPACE
Definition: GeneratorBase.h:8
static const double kNucleonMass
Definition: Constants.h:78
int HitNucPdg(void) const
Definition: Target.cxx:321
Definition: config.py:1
enum genie::EKinePhaseSpace KinePhaseSpace_t
static const double cm2
Definition: Units.h:77
Summary information for an interaction.
Definition: Interaction.h:56
bool IsProton(int pdgc)
Definition: PDGUtils.cxx:299
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:97
bool ValidKinematics(const Interaction *i) const
Is the input kinematical point a physically allowed one?
bool IsAMNuGamma(void) const
void Configure(const Registry &config)
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
Definition: Target.h:41
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:70
int Z(void) const
Definition: Target.h:69
Double_t xsec[nknots]
Definition: testXsec.C:47
#define pWARN
Definition: Messenger.h:61
const UInt_t kISkipKinematicChk
if set, skip kinematic validity checks
Definition: Interaction.h:48
bool ValidProcess(const Interaction *i) const
Can this cross section algorithm handle the input process?
int N(void) const
Definition: Target.h:70
double XSec(const Interaction *i, KinePhaseSpace_t k) const
Compute the cross section for the input interaction.
A registry. Provides the container for algorithm configuration parameters.
Definition: Registry.h:66
const UInt_t kIAssumeFreeNucleon
Definition: Interaction.h:49
const ProcessInfo & ProcInfo(void) const
Definition: Interaction.h:70
#define pNOTICE
Definition: Messenger.h:62
bool GetParam(const RgKey &name, T &p, bool is_top_call=true) const
const Target & Tgt(void) const
Definition: InitialState.h:67
double Integral(const Interaction *i) const
double ProbeE(RefFrame_t rf) const
const UInt_t kISkipProcessChk
if set, skip process validity checks
Definition: Interaction.h:47
Initial State information.
Definition: InitialState.h:49
#define pDEBUG
Definition: Messenger.h:64