Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4INCLNNToNLK2piChannel.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 NNToNLK2piChannel::angularSlope = 2.; // What is the exact effect? Sould be check
50
52 : particle1(p1), particle2(p2)
53 {}
54
56
58
59 /* Equipartition in all channel with factor N(pi)!
60 */
61
62 const G4double sqrtS = KinematicsUtils::totalEnergyInCM(particle1, particle2);
63
64 const G4int iso = ParticleTable::getIsospin(particle1->getType()) + ParticleTable::getIsospin(particle2->getType());
65
66 ParticleType KaonType;
67 ParticleType Pion1Type;
68 ParticleType Pion2Type;
69
70 G4double rdm = Random::shoot();
71 particle2->setType(Lambda);
72
73 if(iso == 2){
74 if(rdm*7. < 2.){
75 particle1->setType(Neutron);
76 KaonType = KZero;
77 Pion1Type = PiPlus;
78 Pion2Type = PiPlus;
79 }
80 else if(rdm*7. < 3.){
81 particle1->setType(Neutron);
82 KaonType = KPlus;
83 Pion1Type = PiZero;
84 Pion2Type = PiPlus;
85 }
86 else if(rdm*7. < 4.){
87 particle1->setType(Proton);
88 KaonType = KZero;
89 Pion1Type = PiZero;
90 Pion2Type = PiPlus;
91 }
92 else if(rdm*7. < 5.){
93 particle1->setType(Proton);
94 KaonType = KPlus;
95 Pion1Type = PiMinus;
96 Pion2Type = PiPlus;
97 }
98 else{
99 particle1->setType(Proton);
100 KaonType = KPlus;
101 Pion1Type = PiZero;
102 Pion2Type = PiZero;
103 }
104
105 }if(iso == -2){
106 if(rdm*7. < 1.){
107 particle1->setType(Neutron);
108 KaonType = KZero;
109 Pion1Type = PiMinus;
110 Pion2Type = PiPlus;
111 }
112 else if(rdm*7. < 3.){
113 particle1->setType(Neutron);
114 KaonType = KZero;
115 Pion1Type = PiZero;
116 Pion2Type = PiZero;
117 }
118 else if(rdm*7. < 4.){
119 particle1->setType(Neutron);
120 KaonType = KPlus;
121 Pion1Type = PiMinus;
122 Pion2Type = PiZero;
123 }
124 else if(rdm*7. < 5.){
125 particle1->setType(Proton);
126 KaonType = KZero;
127 Pion1Type = PiMinus;
128 Pion2Type = PiZero;
129 }
130 else{
131 particle1->setType(Proton);
132 KaonType = KPlus;
133 Pion1Type = PiMinus;
134 Pion2Type = PiMinus;
135 }
136 }
137 else{
138 if(rdm*8. < 1.){
139 particle1->setType(Neutron);
140 KaonType = KZero;
141 Pion1Type = PiZero;
142 Pion2Type = PiPlus;
143 }
144 else if(rdm*8. < 2.){
145 particle1->setType(Neutron);
146 KaonType = KPlus;
147 Pion1Type = PiMinus;
148 Pion2Type = PiPlus;
149 }
150 else if(rdm*8. < 4.){
151 particle1->setType(Neutron);
152 KaonType = KPlus;
153 Pion1Type = PiZero;
154 Pion2Type = PiZero;
155 }
156 else if(rdm*8. < 5.){
157 particle1->setType(Proton);
158 KaonType = KZero;
159 Pion1Type = PiMinus;
160 Pion2Type = PiPlus;
161 }
162 else if(rdm*8. < 7.){
163 particle1->setType(Proton);
164 KaonType = KZero;
165 Pion1Type = PiZero;
166 Pion2Type = PiZero;
167 }
168 else{
169 particle1->setType(Proton);
170 KaonType = KPlus;
171 Pion1Type = PiMinus;
172 Pion2Type = PiZero;
173 }
174 }
175
176
177 ParticleList list;
178 list.push_back(particle1);
179 list.push_back(particle2);
180 const ThreeVector &rcol1 = particle1->getPosition();
181 const ThreeVector &rcol2 = particle2->getPosition();
182 const ThreeVector zero;
183 Particle *pion1 = new Particle(Pion1Type,zero,rcol1);
184 Particle *pion2 = new Particle(Pion2Type,zero,rcol1);
185 Particle *kaon = new Particle(KaonType,zero,rcol2);
186 list.push_back(kaon);
187 list.push_back(pion1);
188 list.push_back(pion2);
189
190 if(Random::shoot()<0.5) PhaseSpaceGenerator::generateBiased(sqrtS, list, 0, angularSlope);
191 else PhaseSpaceGenerator::generateBiased(sqrtS, list, 1, angularSlope);
192
193 fs->addModifiedParticle(particle1);
194 fs->addModifiedParticle(particle2);
195 fs->addCreatedParticle(kaon);
196 fs->addCreatedParticle(pion1);
197 fs->addCreatedParticle(pion2);
198
199 }
200}
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
void addModifiedParticle(Particle *p)
void addCreatedParticle(Particle *p)
NNToNLK2piChannel(Particle *, Particle *)
void fillFinalState(FinalState *fs)
const G4INCL::ThreeVector & getPosition() const
G4INCL::ParticleType getType() const
void setType(ParticleType t)
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
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()
Definition: G4INCLRandom.cc:93