Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4INCL::NpiToSK2piChannel Class Reference

#include <G4INCLNpiToSK2piChannel.hh>

+ Inheritance diagram for G4INCL::NpiToSK2piChannel:

Public Member Functions

 NpiToSK2piChannel (Particle *, Particle *)
 
virtual ~NpiToSK2piChannel ()
 
void fillFinalState (FinalState *fs)
 
- Public Member Functions inherited from G4INCL::IChannel
 IChannel ()
 
virtual ~IChannel ()
 
FinalStategetFinalState ()
 
virtual void fillFinalState (FinalState *fs)=0
 

Detailed Description

Definition at line 47 of file G4INCLNpiToSK2piChannel.hh.

Constructor & Destructor Documentation

◆ NpiToSK2piChannel()

G4INCL::NpiToSK2piChannel::NpiToSK2piChannel ( Particle p1,
Particle p2 
)

Definition at line 51 of file G4INCLNpiToSK2piChannel.cc.

52 : particle1(p1), particle2(p2)
53 {}

◆ ~NpiToSK2piChannel()

G4INCL::NpiToSK2piChannel::~NpiToSK2piChannel ( )
virtual

Definition at line 55 of file G4INCLNpiToSK2piChannel.cc.

55{}

Member Function Documentation

◆ fillFinalState()

void G4INCL::NpiToSK2piChannel::fillFinalState ( FinalState fs)
virtual

Implements G4INCL::IChannel.

Definition at line 57 of file G4INCLNpiToSK2piChannel.cc.

57 {
58
59
60 // p pi+ -> S+ K+ pi+ pi- (1)
61 // p pi+ -> S+ K+ pi0 pi0 (1/4)
62 // p pi+ -> S0 K+ pi+ pi0 (1/2)
63 // p pi+ -> S- K+ pi+ pi+ (1/4)
64 // p pi+ -> S+ K0 pi+ pi0 (1)
65 // p pi+ -> S0 K0 pi+ pi+ (1/4)
66 //
67 // p pi0 -> S+ K+ pi0 pi- (1/2)
68 // p pi0 -> S0 K+ pi+ pi- (1/2)
69 // p pi0 -> S0 K+ pi0 pi0 (1/4)
70 // p pi0 -> S- K+ pi+ pi0 (1/4)
71 // p pi0 -> S+ K0 pi+ pi- (1)
72 // p pi0 -> S+ K0 pi0 pi0 (1/4)
73 // p pi0 -> S0 K0 pi+ pi0 (1/4)
74 // p pi0 -> S- K0 pi+ pi+ (1/2)
75 //
76 // p pi- -> S+ K+ pi- pi- (1/4)
77 // p pi- -> S0 K+ pi0 pi- (1/2)
78 // p pi- -> S- K+ pi+ pi- (1/4)
79 // p pi- -> S- K+ pi0 pi0 (1/4)
80 // p pi- -> S+ K0 pi0 pi- (1/2)
81 // p pi- -> S0 K0 pi+ pi- (1)
82 // p pi- -> S0 K0 pi0 pi0 (1/2)
83 // p pi- -> S- K0 pi+ pi0 (1/2)
84
85 Particle *nucleon;
86 Particle *pion;
87
88
89 if(particle1->isNucleon()){
90 nucleon = particle1;
91 pion = particle2;
92 }
93 else{
94 nucleon = particle2;
95 pion = particle1;
96 }
97
98 const G4double sqrtS = KinematicsUtils::totalEnergyInCM(nucleon, pion);
99
100 const G4int iso = ParticleTable::getIsospin(nucleon->getType()) + ParticleTable::getIsospin(pion->getType());
101 G4double rdm = Random::shoot();
102
103 ParticleType KaonType;
104 ParticleType PionType;
105
106 if(iso == 3 || iso == -3){
107 if(rdm*13. < 4.){
108 KaonType = ParticleTable::getKaonType(iso/3);
109 PionType = ParticleTable::getPionType(-2*iso/3);
110 nucleon->setType(ParticleTable::getSigmaType(2*iso/3));
111 }
112 else if(rdm*13. < 5.){
113 KaonType = ParticleTable::getKaonType(iso/3);
114 PionType = PiZero;
115 pion->setType(PiZero);
116 nucleon->setType(ParticleTable::getSigmaType(2*iso/3));
117 }
118 else if(rdm*13. < 7.){
119 KaonType = ParticleTable::getKaonType(iso/3);
120 PionType = PiZero;
121 nucleon->setType(SigmaZero);
122 }
123 else if(rdm*13. < 8.){
124 KaonType = ParticleTable::getKaonType(iso/3);
125 PionType = ParticleTable::getPionType(2*iso/3);
126 nucleon->setType(ParticleTable::getSigmaType(-2*iso/3));
127 }
128 else if(rdm*13. < 12.){
129 KaonType = ParticleTable::getKaonType(-iso/3);
130 PionType = PiZero;
131 nucleon->setType(ParticleTable::getSigmaType(2*iso/3));
132 }
133 else{
134 KaonType = ParticleTable::getKaonType(-iso/3);
135 PionType = ParticleTable::getPionType(2*iso/3);
136 nucleon->setType(SigmaZero);
137 }
138 }
139 else if(pion->getType() == PiZero){
140 if(rdm*14. < 2.){
141 KaonType = ParticleTable::getKaonType(iso);
142 PionType = ParticleTable::getPionType(-2*iso);
143 nucleon->setType(ParticleTable::getSigmaType(2*iso));
144 }
145 else if(rdm*14. < 4.){
146 KaonType = ParticleTable::getKaonType(iso);
147 PionType = ParticleTable::getPionType(-2*iso);
148 nucleon->setType(SigmaZero);
149 pion->setType(ParticleTable::getPionType(2*iso));
150 }
151 else if(rdm*14. < 5.){
152 KaonType = ParticleTable::getKaonType(iso);
153 PionType = PiZero;
154 nucleon->setType(SigmaZero);
155 }
156 else if(rdm*14. < 6.){
157 KaonType = ParticleTable::getKaonType(iso);
158 PionType = ParticleTable::getPionType(2*iso);
159 nucleon->setType(ParticleTable::getSigmaType(-2*iso));
160 }
161 else if(rdm*14. < 10.){
162 KaonType = ParticleTable::getKaonType(-iso);
163 PionType = ParticleTable::getPionType(-2*iso);
164 nucleon->setType(ParticleTable::getSigmaType(2*iso));
165 pion->setType(ParticleTable::getPionType(2*iso));
166 }
167 else if(rdm*14. < 11.){
168 KaonType = ParticleTable::getKaonType(-iso);
169 PionType = PiZero;
170 nucleon->setType(ParticleTable::getSigmaType(2*iso));
171 }
172 else if(rdm*14. < 12.){
173 KaonType = ParticleTable::getKaonType(-iso);
174 PionType = ParticleTable::getPionType(2*iso);
175 nucleon->setType(SigmaZero);
176 }
177 else{
178 KaonType = ParticleTable::getKaonType(-iso);
179 PionType = ParticleTable::getPionType(2*iso);
180 nucleon->setType(ParticleTable::getSigmaType(-2*iso));
181 pion->setType(ParticleTable::getPionType(2*iso));
182 }
183 }
184 else{
185 if(rdm*15. < 1.){
186 KaonType = ParticleTable::getKaonType(-iso);
187 PionType = ParticleTable::getPionType(2*iso);
188 nucleon->setType(ParticleTable::getSigmaType(-2*iso));
189 }
190 else if(rdm*15. < 3.){
191 KaonType = ParticleTable::getKaonType(-iso);
192 PionType = PiZero;
193 nucleon->setType(SigmaZero);
194 }
195 else if(rdm*15. < 4.){
196 KaonType = ParticleTable::getKaonType(-iso);
197 PionType = ParticleTable::getPionType(-2*iso);
198 nucleon->setType(ParticleTable::getSigmaType(2*iso));
199 }
200 else if(rdm*15. < 5.){
201 KaonType = ParticleTable::getKaonType(-iso);
202 PionType = PiZero;
203 nucleon->setType(ParticleTable::getSigmaType(2*iso));
204 pion->setType(PiZero);
205 }
206 else if(rdm*15. < 7.){
207 KaonType = ParticleTable::getKaonType(iso);
208 PionType = PiZero;
209 nucleon->setType(ParticleTable::getSigmaType(-2*iso));
210 }
211 else if(rdm*15. < 11.){
212 KaonType = ParticleTable::getKaonType(iso);
213 PionType = ParticleTable::getPionType(-2*iso);
214 nucleon->setType(SigmaZero);
215 }
216 else if(rdm*15. < 13.){
217 KaonType = ParticleTable::getKaonType(iso);
218 PionType = PiZero;
219 nucleon->setType(SigmaZero);
220 pion->setType(PiZero);
221 }
222 else{
223 KaonType = ParticleTable::getKaonType(iso);
224 PionType = ParticleTable::getPionType(-2*iso);
225 nucleon->setType(ParticleTable::getSigmaType(2*iso));
226 pion->setType(PiZero);
227 }
228 }
229
230 ParticleList list;
231 list.push_back(nucleon);
232 list.push_back(pion);
233 const ThreeVector &rcol1 = nucleon->getPosition();
234 const ThreeVector &rcol2 = pion->getPosition();
235 const ThreeVector zero;
236 Particle *kaon = new Particle(KaonType,zero,rcol1);
237 Particle *pion2 = new Particle(PionType,zero,rcol2);
238 list.push_back(kaon);
239 list.push_back(pion2);
240
241 PhaseSpaceGenerator::generateBiased(sqrtS, list, 0, angularSlope);
242
243 INCL_DEBUG("NpiToSK2pi " << (kaon->getMomentum().theta()) * 180. / G4INCL::Math::pi << '\n');
244
245 fs->addModifiedParticle(nucleon);
246 fs->addModifiedParticle(pion);
247 fs->addCreatedParticle(kaon);
248 fs->addCreatedParticle(pion2);
249
250 }
#define INCL_DEBUG(x)
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
G4bool isNucleon() const
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
const G4double pi
ParticleType getKaonType(const G4int isosp)
Get the type of kaon.
ParticleType getSigmaType(const G4int isosp)
Get the type of sigma.
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
ParticleType getPionType(const G4int isosp)
Get the type of pion.
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
G4bool pion(G4int ityp)
G4bool nucleon(G4int ityp)

The documentation for this class was generated from the following files: