GENIEGenerator
Loading...
Searching...
No Matches
DFRInteractionListGenerator.cxx
Go to the documentation of this file.
1//____________________________________________________________________________
2/*
3 Copyright (c) 2003-2025, The GENIE Collaboration
4 For the full text of the license visit http://copyright.genie-mc.org
5
6 Costas Andreopoulos <c.andreopoulos \at cern.ch>
7 University of Liverpool
8*/
9//____________________________________________________________________________
10
17
18using namespace genie;
19
20//___________________________________________________________________________
22InteractionListGeneratorI("genie::DFRInteractionListGenerator")
23{
24
25}
26//___________________________________________________________________________
28InteractionListGeneratorI("genie::DFRInteractionListGenerator", config)
29{
30
31}
32//___________________________________________________________________________
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//____________________________________________________________________________
#define pINFO
Definition Messenger.h:62
#define LOG(stream, priority)
A macro that returns the requested log4cpp::Category appending a string (using the FILE,...
Definition Messenger.h:96
#define pWARN
Definition Messenger.h:60
Most commonly used PDG codes. A set of utility functions to handle PDG codes is provided in PDGUtils.
virtual void Configure(const Registry &config)
Definition Algorithm.cxx:62
bool GetParamDef(const RgKey &name, T &p, const T &def) const
InteractionList * CreateInteractionList(const InitialState &init) const
Initial State information.
const Target & Tgt(void) const
string AsString(void) const
int ProbePdg(void) const
Target * TgtPtr(void) const
A vector of Interaction objects.
Summary information for an interaction.
Definition Interaction.h:56
InitialState * InitStatePtr(void) const
Definition Interaction.h:74
XclsTag * ExclTagPtr(void) const
Definition Interaction.h:77
A class encapsulating an enumeration of interaction types (EM, Weak-CC, Weak-NC) and scattering types...
Definition ProcessInfo.h:46
A registry. Provides the container for algorithm configuration parameters.
Definition Registry.h:65
A Neutrino Interaction Target. Is a transparent encapsulation of quite different physical systems suc...
Definition Target.h:40
void SetHitNucPdg(int pdgc)
Definition Target.cxx:171
bool IsProton(void) const
Definition Target.cxx:262
void SetNNeutrons(int nn)
Definition XclsTag.h:82
void SetNPions(int npi_plus, int npi_0, int npi_minus)
Definition XclsTag.cxx:88
void SetNProtons(int np)
Definition XclsTag.h:81
bool IsNeutrino(int pdgc)
Definition PDGUtils.cxx:110
bool IsAntiNeutrino(int pdgc)
Definition PDGUtils.cxx:118
THE MAIN GENIE PROJECT NAMESPACE
Definition AlgCmp.h:25
const int kPdgProton
Definition PDGCodes.h:81
enum genie::EInteractionType InteractionType_t
const int kPdgNeutron
Definition PDGCodes.h:83
@ kScDiffractive