Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCLNNToNSKpiChannel.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// INCL++ intra-nuclear cascade model
27// Alain Boudard, CEA-Saclay, France
28// Joseph Cugnon, University of Liege, Belgium
29// Jean-Christophe David, CEA-Saclay, France
30// Pekka Kaitaniemi, CEA-Saclay, France, and Helsinki Institute of Physics, Finland
31// Sylvie Leray, CEA-Saclay, France
32// Davide Mancusi, CEA-Saclay, France
33//
34#define INCLXX_IN_GEANT4_MODE 1
35
36#include "globals.hh"
37
41#include "G4INCLRandom.hh"
42#include "G4INCLGlobals.hh"
43#include "G4INCLLogger.hh"
44#include <algorithm>
46
47namespace G4INCL {
48
49 const G4double NNToNSKpiChannel::angularSlope = 2.; // What is the exact effect? Sould be check
50
52 : particle1(p1), particle2(p2)
53 {}
54
56
58
59 // pp (36) pn (36)
60 //
61 // pp -> p pi+ S- K+ (9)
62 // pp -> p pi+ S0 K0 (9)
63 // pp -> p pi0 S+ K0 (4)
64 // pp -> n pi+ S+ K0 (2)
65 // pp -> p pi0 S0 K+ (4)
66 // pp -> n pi+ S0 K+ (2)
67 // pp -> p pi- S+ K+ (2)
68 // pp -> n pi0 S+ K+ (4)
69
70 // pn -> p pi0 S- K+ (4)
71 // pn -> n pi+ S- K+ (2)
72 // pn -> p pi0 S0 K0 (2)
73 // pn -> n pi+ S0 K0 (1)
74 // pn -> p pi+ S- K0 (9)
75
76 const G4double sqrtS = KinematicsUtils::totalEnergyInCM(particle1, particle2);
77
78 const G4int iso = ParticleTable::getIsospin(particle1->getType()) + ParticleTable::getIsospin(particle2->getType());
79
80 ParticleType KaonType;
81 ParticleType PionType;
82
83 G4double rdm = Random::shoot();
84
85 if(iso == 2){
86 if(rdm * 36. < 9.){
87 KaonType = KPlus;
88 PionType = PiPlus;
89 particle2->setType(SigmaMinus);
90 }
91 else if(rdm * 36. < 18.){
92 KaonType = KZero;
93 PionType = PiPlus;
94 particle2->setType(SigmaZero);
95 }
96 else if(rdm * 36. < 22.){
97 KaonType = KZero;
98 PionType = PiZero;
99 particle2->setType(SigmaPlus);
100 }
101 else if(rdm * 36. < 24.){
102 KaonType = KZero;
103 PionType = PiPlus;
104 particle1->setType(Neutron);
105 particle2->setType(SigmaPlus);
106 }
107 else if(rdm * 36. < 28.){
108 KaonType = KPlus;
109 PionType = PiZero;
110 particle2->setType(SigmaZero);
111 }
112 else if(rdm * 36. < 30.){
113 KaonType = KPlus;
114 PionType = PiPlus;
115 particle1->setType(Neutron);
116 particle2->setType(SigmaZero);
117 }
118 else if(rdm * 36. < 32.){
119 KaonType = KPlus;
120 PionType = PiMinus;
121 particle2->setType(SigmaPlus);
122 }
123 else{
124 KaonType = KPlus;
125 PionType = PiZero;
126 particle1->setType(Neutron);
127 particle2->setType(SigmaPlus);
128 }
129
130 }
131 else if(iso == -2){
132 if(rdm * 36. < 9.){
133 KaonType = KZero;
134 PionType = PiMinus;
135 particle2->setType(SigmaPlus);
136 }
137 else if(rdm * 36. < 18.){
138 KaonType = KPlus;
139 PionType = PiMinus;
140 particle2->setType(SigmaZero);
141 }
142 else if(rdm * 36. < 22.){
143 KaonType = KPlus;
144 PionType = PiZero;
145 particle2->setType(SigmaMinus);
146 }
147 else if(rdm * 36. < 24.){
148 KaonType = KPlus;
149 PionType = PiMinus;
150 particle1->setType(Proton);
151 particle2->setType(SigmaMinus);
152 }
153 else if(rdm * 36. < 28.){
154 KaonType = KZero;
155 PionType = PiZero;
156 particle2->setType(SigmaZero);
157 }
158 else if(rdm * 36. < 30.){
159 KaonType = KZero;
160 PionType = PiMinus;
161 particle1->setType(Proton);
162 particle2->setType(SigmaZero);
163 }
164 else if(rdm * 36. < 32.){
165 KaonType = KZero;
166 PionType = PiPlus;
167 particle2->setType(SigmaMinus);
168 }
169 else{
170 KaonType = KZero;
171 PionType = PiZero;
172 particle1->setType(Proton);
173 particle2->setType(SigmaMinus);
174 }
175
176 }
177 else if(rdm*36. < 4.){
178 KaonType = KPlus;
179 PionType = PiZero;
180 particle1->setType(Proton);
181 particle2->setType(SigmaMinus);
182 }
183 else if(rdm*36. < 6.){
184 KaonType = KZero;
185 PionType = PiZero;
186 particle1->setType(Neutron);
187 particle2->setType(SigmaPlus);
188 }
189 else if(rdm*36. < 8.){
190 KaonType = KPlus;
191 PionType = PiPlus;
192 particle1->setType(Neutron);
193 particle2->setType(SigmaMinus);
194 }
195 else if(rdm*36. < 9.){
196 KaonType = KZero;
197 PionType = PiMinus;
198 particle1->setType(Proton);
199 particle2->setType(SigmaPlus);
200 }
201 else if(rdm*36. < 18.){
202 KaonType = KZero;
203 PionType = PiZero;
204 particle1->setType(Proton);
205 particle2->setType(SigmaZero);
206 }
207 else if(rdm*36. < 27.){
208 KaonType = KPlus;
209 PionType = PiZero;
210 particle1->setType(Neutron);
211 particle2->setType(SigmaZero);
212 }
213 else if(rdm*36. < 28.){
214 KaonType = KZero;
215 PionType = PiPlus;
216 particle1->setType(Neutron);
217 particle2->setType(SigmaZero);
218 }
219 else if(rdm*36. < 30.){
220 KaonType = KPlus;
221 PionType = PiMinus;
222 particle1->setType(Proton);
223 particle2->setType(SigmaZero);
224 }
225 else if(rdm*36. < 32.){
226 KaonType = KZero;
227 PionType = PiPlus;
228 particle1->setType(Proton);
229 particle2->setType(SigmaMinus);
230 }
231 else{
232 KaonType = KPlus;
233 PionType = PiMinus;
234 particle1->setType(Neutron);
235 particle2->setType(SigmaPlus);
236 }
237
238 ParticleList list;
239 list.push_back(particle1);
240 list.push_back(particle2);
241 const ThreeVector &rcol1 = particle1->getPosition();
242 const ThreeVector &rcol2 = particle2->getPosition();
243 const ThreeVector zero;
244 Particle *pion = new Particle(PionType,zero,rcol1);
245 Particle *kaon = new Particle(KaonType,zero,rcol2);
246 list.push_back(kaon);
247 list.push_back(pion);
248
249 if(Random::shoot()<0.5) PhaseSpaceGenerator::generateBiased(sqrtS, list, 0, angularSlope);
250 else PhaseSpaceGenerator::generateBiased(sqrtS, list, 1, angularSlope);
251
252 INCL_DEBUG("NNToNSKpi " << (kaon->getMomentum().theta()) * 180. / G4INCL::Math::pi << '\n');
253
254 fs->addModifiedParticle(particle1);
255 fs->addModifiedParticle(particle2);
256 fs->addCreatedParticle(kaon);
257 fs->addCreatedParticle(pion);
258
259 }
260}
#define INCL_DEBUG(x)
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
void addModifiedParticle(Particle *p)
void addCreatedParticle(Particle *p)
NNToNSKpiChannel(Particle *, Particle *)
void fillFinalState(FinalState *fs)
const G4INCL::ThreeVector & getPosition() const
const G4INCL::ThreeVector & getMomentum() const
G4INCL::ParticleType getType() const
void setType(ParticleType t)
G4double theta() const
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
const G4double pi
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
void generateBiased(const G4double sqrtS, ParticleList &particles, const size_t index, const G4double slope)
Generate a biased event in the CM system.
G4double shoot()