GENIEGenerator
Loading...
Searching...
No Matches
DMDISInteractionListGenerator.cxx
Go to the documentation of this file.
1//____________________________________________________________________________
2/*
3
4 Copyright (c) 2003-2025, The GENIE Collaboration
5 For the full text of the license visit http://copyright.genie-mc.org
6
7
8 Author: Joshua Berger <jberger \at physics.wisc.edu>
9 University of Wisconsin-Madison
10
11 Costas Andreopoulos <c.andreopoulos \at cern.ch>
12 University of Liverpool
13*/
14//____________________________________________________________________________
15
22
23using namespace genie;
24
25//___________________________________________________________________________
27InteractionListGeneratorI("genie::DMDISInteractionListGenerator")
28{
29
30}
31//___________________________________________________________________________
33InteractionListGeneratorI("genie::DMDISInteractionListGenerator", config)
34{
35
36}
37//___________________________________________________________________________
42//___________________________________________________________________________
44 const InitialState & init_state) const
45{
46 LOG("IntLst", pINFO)
47 << "InitialState = " << init_state.AsString();
48
49 InteractionType_t inttype;
50 // Only accept DM scattering here
51 if (fIsDM) inttype = kIntDarkMatter;
52 else {
53 LOG("IntLst", pWARN)
54 << "Unknown InteractionType! Returning NULL InteractionList "
55 << "for init-state: " << init_state.AsString();
56 return 0;
57 }
58
59 int ppdg = init_state.ProbePdg();
60 if( !pdg::IsDarkMatter(ppdg)) {
61 LOG("IntLst", pWARN)
62 << "Can not handle probe! Returning NULL InteractionList "
63 << "for init-state: " << init_state.AsString();
64 return 0;
65 }
66
67 bool hasP = (init_state.Tgt().Z() > 0);
68 bool hasN = (init_state.Tgt().N() > 0);
69
70 InteractionList * intlist = new InteractionList;
71
72 int nuclpdg[2] = { kPdgProton, kPdgNeutron };
73
74 for(int inucl=0; inucl<2; inucl++) {
75
76 int struck_nucleon = nuclpdg[inucl];
77
78 if( (struck_nucleon == kPdgProton && hasP) ||
79 (struck_nucleon == kPdgNeutron && hasN) ) {
80
81 ProcessInfo proc_info(kScDarkMatterDeepInelastic, inttype);
82
83 Interaction * interaction = new Interaction(init_state, proc_info);
84 Target * target = interaction->InitStatePtr()->TgtPtr();
85 target->SetHitNucPdg(struck_nucleon);
86
87 if(fIsCharm) {
88 XclsTag exclusive_tag;
89 exclusive_tag.SetCharm();
90 interaction->SetExclTag(exclusive_tag);
91 }
92
93 if(fSetHitQuark) {
94 // Add interactions for all possible hit (valence or sea) quarks
95
96 multimap<int,bool> hq = this->GetHitQuarks(interaction);
97 multimap<int,bool>::const_iterator hqi = hq.begin();
98
99 for( ; hqi != hq.end(); ++hqi) {
100
101 int quark_code = hqi->first;
102 bool from_sea = hqi->second;
103
104 target->SetHitQrkPdg(quark_code);
105 target->SetHitSeaQrk(from_sea);
106
107 Interaction * intq = new Interaction(*interaction);
108 intlist->push_back(intq);
109 }
110 delete interaction;
111 }
112 else {
113 intlist->push_back(interaction);
114 }//set hit quark?
115
116 }//current N exists in nuclear target
117 }//N
118
119 if(intlist->size() == 0) {
120 LOG("IntLst", pERROR)
121 << "Returning NULL InteractionList for init-state: "
122 << init_state.AsString();
123 delete intlist;
124 return 0;
125 }
126 return intlist;
127}
128//___________________________________________________________________________
130{
131 Algorithm::Configure(config);
132 this->LoadConfigData();
133}
134//____________________________________________________________________________
136{
137 Algorithm::Configure(config);
138 this->LoadConfigData();
139}
140//____________________________________________________________________________
142{
143 GetParamDef( "is-DM", fIsDM, false ) ;
144 GetParamDef( "is-Charm", fIsCharm, false ) ;
145 GetParamDef( "set-hit-quark", fSetHitQuark, false ) ;
146
147}
148//____________________________________________________________________________
150 const Interaction * interaction) const
151{
152// Set (PDG code, from-sea flag) for all possible hit quarks for the input
153// interaction
154
155 multimap<int,bool> hq;
156
157 const ProcessInfo & proc = interaction->ProcInfo();
158
159 if(!fIsCharm) {
160 hq.insert(pair<int,bool>(kPdgUQuark, false));
161 hq.insert(pair<int,bool>(kPdgUQuark, true ));
162 hq.insert(pair<int,bool>(kPdgAntiUQuark, true ));
163 hq.insert(pair<int,bool>(kPdgDQuark, false));
164 hq.insert(pair<int,bool>(kPdgDQuark, true ));
165 hq.insert(pair<int,bool>(kPdgAntiDQuark, true ));
166 hq.insert(pair<int,bool>(kPdgSQuark, true ));
167 hq.insert(pair<int,bool>(kPdgAntiSQuark, true ));
168 }
169
170 return hq;
171}
172//____________________________________________________________________________
173
#define pINFO
Definition Messenger.h:62
#define pERROR
Definition Messenger.h:59
#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
multimap< int, bool > GetHitQuarks(const Interaction *interaction) 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
const ProcessInfo & ProcInfo(void) const
Definition Interaction.h:70
void SetExclTag(const XclsTag &xcls)
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 SetHitSeaQrk(bool tf)
Definition Target.cxx:195
void SetHitQrkPdg(int pdgc)
Definition Target.cxx:184
void SetHitNucPdg(int pdgc)
Definition Target.cxx:171
Contains minimal information for tagging exclusive processes.
Definition XclsTag.h:39
void SetCharm(int charm_pdgc=0)
Definition XclsTag.cxx:59
bool IsDarkMatter(int pdgc)
Definition PDGUtils.cxx:127
THE MAIN GENIE PROJECT NAMESPACE
Definition AlgCmp.h:25
const int kPdgUQuark
Definition PDGCodes.h:42
const int kPdgDQuark
Definition PDGCodes.h:44
const int kPdgAntiUQuark
Definition PDGCodes.h:43
const int kPdgAntiSQuark
Definition PDGCodes.h:47
const int kPdgAntiDQuark
Definition PDGCodes.h:45
const int kPdgProton
Definition PDGCodes.h:81
enum genie::EInteractionType InteractionType_t
const int kPdgNeutron
Definition PDGCodes.h:83
const int kPdgSQuark
Definition PDGCodes.h:46
@ kScDarkMatterDeepInelastic