DFRInteractionListGenerator.cxx
Go to the documentation of this file.
1 //____________________________________________________________________________
2 /*
3  Copyright (c) 2003-2020, The GENIE Collaboration
4  For the full text of the license visit http://copyright.genie-mc.org
5 
6  Costas Andreopoulos <constantinos.andreopoulos \at cern.ch>
7  University of Liverpool & STFC Rutherford Appleton Laboratory
8 */
9 //____________________________________________________________________________
10 
17 
18 using namespace genie;
19 
20 //___________________________________________________________________________
22 InteractionListGeneratorI("genie::DFRInteractionListGenerator")
23 {
24 
25 }
26 //___________________________________________________________________________
28 InteractionListGeneratorI("genie::DFRInteractionListGenerator", config)
29 {
30 
31 }
32 //___________________________________________________________________________
34 {
35 
36 }
37 //___________________________________________________________________________
39  const InitialState & init_state) const
40 {
41  LOG("IntLst", pINFO)
42  << "InitialState = " << init_state.AsString();
43 
44  LOG("IntLst", pINFO)
45  << "InitialState = " << init_state.AsString();
46 
47  InteractionType_t inttype;
48  if (fIsCC) inttype = kIntWeakCC;
49  else if (fIsNC) inttype = kIntWeakNC;
50  else {
51  LOG("IntLst", pWARN)
52  << "Unknown InteractionType! Returning NULL InteractionList "
53  << "for init-state: " << init_state.AsString();
54  return 0;
55  }
56 
57  int nupdg = init_state.ProbePdg();
58  if( !pdg::IsNeutrino(nupdg) && !pdg::IsAntiNeutrino(nupdg) ) {
59  LOG("IntLst", pWARN)
60  << "Can not handle probe! Returning NULL InteractionList "
61  << "for init-state: " << init_state.AsString();
62  return 0;
63  }
64 
65  // at least for now, we don't have any models
66  // that provide diffractive scattering from nuclear targets--
67  // just free protons
68  const Target & target = init_state.Tgt();
69  if( !target.IsProton() ) {
70  LOG("IntLst", pINFO)
71  << "Target is not free proton -- Returning NULL InteractionList "
72  << "for init-state: " << init_state.AsString();
73  return 0;
74  }
75 
76 
77  // The code below does way more work than necessary
78  // to assign the final state when scattering
79  // is just for free protons (as ensured by the checks above).
80  // However, it does the correct thing,
81  // and we leave it here in the event that someday we
82  // introduce a diffractive model that can handle other targets.
83  InteractionList * intlist = new InteractionList;
84 
85  ProcessInfo proc_info(kScDiffractive, inttype);
86 
87  bool hasP = (init_state.Tgt().Z() > 0);
88  bool hasN = (init_state.Tgt().N() > 0);
89 
90  int hit_nucleon[2] = {kPdgProton, kPdgNeutron};
91 
92  for(int i=0; i<2; i++) {
93 
94  Interaction * interaction = new Interaction(init_state, proc_info);
95 
96  int nuc = hit_nucleon[i];
97 
98  if(nuc == kPdgProton && !hasP) continue;
99  if(nuc == kPdgNeutron && !hasN) continue;
100 
101  if(fIsCC) {
102  if(pdg::IsNeutrino(nupdg)) {
103  //v N -> l- N pi+
104  interaction->ExclTagPtr()->SetNPions(1,0,0);
105  } else {
106  //vbar N -> l+ N pi-
107  interaction->ExclTagPtr()->SetNPions(0,0,1);
108  }
109  }
110  else {
111  //v N -> v N pi0
112  interaction->ExclTagPtr()->SetNPions(0,1,0);
113  }
114 
115  if (nuc == kPdgProton)
116  interaction->ExclTagPtr()->SetNProtons(1);
117  else if (nuc == kPdgNeutron)
118  interaction->ExclTagPtr()->SetNNeutrons(1);
119 
120  interaction->InitStatePtr()->TgtPtr()->SetHitNucPdg(nuc);
121  intlist->push_back(interaction);
122  }
123 
124  return intlist;
125 }
126 //___________________________________________________________________________
128 {
129  Algorithm::Configure(config);
130  this->LoadConfigData();
131 }
132 //____________________________________________________________________________
134 {
135  Algorithm::Configure(config);
136  this->LoadConfigData();
137 }
138 //____________________________________________________________________________
140 {
141  GetParamDef( "is-CC",fIsCC, false ) ;
142  GetParamDef( "is-NC",fIsNC, false ) ;
143 }
144 //____________________________________________________________________________
void SetNPions(int npi_plus, int npi_0, int npi_minus)
Definition: XclsTag.cxx:88
bool IsNeutrino(int pdgc)
Definition: PDGUtils.cxx:107
THE MAIN GENIE PROJECT NAMESPACE
Definition: AlgCmp.h:25
Defines the InteractionListGeneratorI interface. Concrete implementations of this interface generate ...
InteractionList * CreateInteractionList(const InitialState &init) const
Summary information for an interaction.
Definition: Interaction.h:56
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE...
Definition: Messenger.h:96
static Config * config
Definition: config.cpp:1054
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
Definition: ProcessInfo.h:46
bool IsAntiNeutrino(int pdgc)
Definition: PDGUtils.cxx:115
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
Definition: Target.h:40
virtual void Configure(const Registry &config)
Definition: Algorithm.cxx:62
int ProbePdg(void) const
Definition: InitialState.h:64
void SetNNeutrons(int nn)
Definition: XclsTag.h:82
string AsString(void) const
int Z(void) const
Definition: Target.h:68
#define pINFO
Definition: Messenger.h:62
#define pWARN
Definition: Messenger.h:60
XclsTag * ExclTagPtr(void) const
Definition: Interaction.h:77
int N(void) const
Definition: Target.h:69
A registry. Provides the container for algorithm configuration parameters.
Definition: Registry.h:65
void SetHitNucPdg(int pdgc)
Definition: Target.cxx:171
Target * TgtPtr(void) const
Definition: InitialState.h:67
A vector of Interaction objects.
InitialState * InitStatePtr(void) const
Definition: Interaction.h:74
const int kPdgProton
Definition: PDGCodes.h:81
bool GetParamDef(const RgKey &name, T &p, const T &def) const
const Target & Tgt(void) const
Definition: InitialState.h:66
bool IsProton(void) const
Definition: Target.cxx:262
const int kPdgNeutron
Definition: PDGCodes.h:83
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils...
enum genie::EInteractionType InteractionType_t
void SetNProtons(int np)
Definition: XclsTag.h:81
Initial State information.
Definition: InitialState.h:48