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

#include <G4INCLNDeltaToDeltaSKChannel.hh>

+ Inheritance diagram for G4INCL::NDeltaToDeltaSKChannel:

Public Member Functions

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

Detailed Description

Definition at line 47 of file G4INCLNDeltaToDeltaSKChannel.hh.

Constructor & Destructor Documentation

◆ NDeltaToDeltaSKChannel()

G4INCL::NDeltaToDeltaSKChannel::NDeltaToDeltaSKChannel ( Particle * p1,
Particle * p2 )

Definition at line 51 of file G4INCLNDeltaToDeltaSKChannel.cc.

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

◆ ~NDeltaToDeltaSKChannel()

G4INCL::NDeltaToDeltaSKChannel::~NDeltaToDeltaSKChannel ( )
virtual

Definition at line 55 of file G4INCLNDeltaToDeltaSKChannel.cc.

55{}

Member Function Documentation

◆ fillFinalState()

void G4INCL::NDeltaToDeltaSKChannel::fillFinalState ( FinalState * fs)
virtual

Implements G4INCL::IChannel.

Definition at line 95 of file G4INCLNDeltaToDeltaSKChannel.cc.

95 {
96 //
97 // D++ p -> S+ K+ D+ (2)
98 // D++ p -> S0 K+ D++ (1)
99 // D++ p -> S+ K0 D++ (6)
100 //
101 // D++ n -> S+ K+ D0 (2)
102 // D++ n -> S0 K+ D+ (4)
103 // D++ n -> S- K+ D++ (6)
104 // D++ n -> S+ K0 D+ (2)
105 // D++ n -> S0 K0 D++ (1)
106 //
107 // D+ p -> S+ K+ D0 (2)
108 // D+ p -> S0 K+ D+ (1)
109 // D+ p -> S- K+ D++ (2)
110 // D+ p -> S+ K0 D+ (2)
111 // D+ p -> S0 K0 D++ (4)
112 //
113 // D+ n -> S+ K+ D- (2)
114 // D+ n -> S0 K+ D0 (4)
115 // D+ n -> S- K+ D+ (2)
116 // D+ n -> S+ K0 D0 (2)
117 // D+ n -> S0 K0 D+ (1)
118 // D+ n -> S- K0 D++ (2)
119
120
121 Particle *delta;
122
123 if (particle1->isResonance()) {
124 delta = particle1;
125 }
126 else {
127 delta = particle2;
128 }
129
130 const G4double sqrtS = KinematicsUtils::totalEnergyInCM(particle1, particle2);
131
132 const G4int iso = ParticleTable::getIsospin(particle1->getType()) + ParticleTable::getIsospin(particle2->getType());
133 const G4int iso_d = ParticleTable::getIsospin(delta->getType());
134
135 ParticleType KaonType;
136 ParticleType DeltaType;
137 ParticleType SigmaType;
138
139 const G4double rdm = Random::shoot();
140
141 if(std::abs(iso) == 4){// D++ p
142 if(rdm*9 < 2){
143 KaonType = ParticleTable::getKaonType(iso/4);
144 DeltaType = ParticleTable::getDeltaType(iso/4);
145 SigmaType = ParticleTable::getSigmaType(iso/2);
146 }
147 else if(rdm*9 < 3){
148 KaonType = ParticleTable::getKaonType(iso/4);
149 DeltaType = ParticleTable::getDeltaType(3*iso/4);
150 SigmaType = SigmaZero;
151 }
152 else{
153 KaonType = ParticleTable::getKaonType(-iso/4);
154 DeltaType = ParticleTable::getDeltaType(3*iso/4);
155 SigmaType = ParticleTable::getSigmaType(iso/2);
156 }
157 }
158 else if(iso == 0){// D+ n
159 if(rdm*13 < 2){
160 KaonType = ParticleTable::getKaonType(iso_d);
161 DeltaType = ParticleTable::getDeltaType(-3*iso_d);
162 SigmaType = ParticleTable::getSigmaType(2*iso_d);
163 }
164 else if(rdm*13 < 6){
165 KaonType = ParticleTable::getKaonType(iso_d);
166 DeltaType = ParticleTable::getDeltaType(-iso_d);
167 SigmaType = SigmaZero;
168 }
169 else if(rdm*13 < 8){
170 KaonType = ParticleTable::getKaonType(iso_d);
171 DeltaType = ParticleTable::getDeltaType(iso_d);
172 SigmaType = ParticleTable::getSigmaType(-2*iso_d);
173 }
174 else if(rdm*13 < 10){
175 KaonType = ParticleTable::getKaonType(-iso_d);
176 DeltaType = ParticleTable::getDeltaType(-iso_d);
177 SigmaType = ParticleTable::getSigmaType(2*iso_d);
178 }
179 else if(rdm*13 < 11){
180 KaonType = ParticleTable::getKaonType(-iso_d);
181 DeltaType = ParticleTable::getDeltaType(iso_d);
182 SigmaType = SigmaZero;
183 }
184 else{
185 KaonType = ParticleTable::getKaonType(-iso_d);
186 DeltaType = ParticleTable::getDeltaType(3*iso_d);
187 SigmaType = ParticleTable::getSigmaType(-2*iso_d);
188 }
189 }
190 else if(ParticleTable::getIsospin(particle1->getType()) == ParticleTable::getIsospin(particle2->getType())){// D+ p
191 if(rdm*11 < 2){
192 KaonType = ParticleTable::getKaonType(iso/2);
193 DeltaType = ParticleTable::getDeltaType(-iso/2);
194 SigmaType = ParticleTable::getSigmaType(iso);
195 }
196 else if(rdm*11 < 3){
197 KaonType = ParticleTable::getKaonType(iso/2);
198 DeltaType = ParticleTable::getDeltaType(iso/2);
199 SigmaType = SigmaZero;
200 }
201 else if(rdm*11 < 5){
202 KaonType = ParticleTable::getKaonType(iso/2);
203 DeltaType = ParticleTable::getDeltaType(3*iso/2);
204 SigmaType = ParticleTable::getSigmaType(-iso);
205 }
206 else if(rdm*11 < 7){
207 KaonType = ParticleTable::getKaonType(-iso/2);
208 DeltaType = ParticleTable::getDeltaType(iso/2);
209 SigmaType = ParticleTable::getSigmaType(iso);
210 }
211 else{
212 KaonType = ParticleTable::getKaonType(-iso/2);
213 DeltaType = ParticleTable::getDeltaType(3*iso/2);
214 SigmaType = SigmaZero;
215 }
216 }
217 else{// D++ n
218 if(rdm*15 < 2){
219 KaonType = ParticleTable::getKaonType(iso/2);
220 DeltaType = ParticleTable::getDeltaType(-iso/2);
221 SigmaType = ParticleTable::getSigmaType(iso);
222 }
223 else if(rdm*15 < 6){
224 KaonType = ParticleTable::getKaonType(iso/2);
225 DeltaType = ParticleTable::getDeltaType(iso/2);
226 SigmaType = SigmaZero;
227 }
228 else if(rdm*15 < 12){
229 KaonType = ParticleTable::getKaonType(iso/2);
230 DeltaType = ParticleTable::getDeltaType(3*iso/2);
231 SigmaType = ParticleTable::getSigmaType(-iso);
232 }
233 else if(rdm*15 < 14){
234 KaonType = ParticleTable::getKaonType(-iso/2);
235 DeltaType = ParticleTable::getDeltaType(iso/2);
236 SigmaType = ParticleTable::getSigmaType(iso);
237 }
238 else{
239 KaonType = ParticleTable::getKaonType(-iso/2);
240 DeltaType = ParticleTable::getDeltaType(3*iso/2);
241 SigmaType = SigmaZero;
242 }
243 }
244
245
246 particle1->setType(DeltaType);
247 particle1->setMass(sampleDeltaMass(sqrtS));
248 particle2->setType(SigmaType);
249
250 ParticleList list;
251 list.push_back(particle1);
252 list.push_back(particle2);
253 const ThreeVector &rcol = particle2->getPosition();
254 const ThreeVector zero;
255 Particle *kaon = new Particle(KaonType,zero,rcol);
256 list.push_back(kaon);
257
258 if(Random::shoot()<0.5) PhaseSpaceGenerator::generateBiased(sqrtS, list, 0, angularSlope);
259 else PhaseSpaceGenerator::generateBiased(sqrtS, list, 1, angularSlope);
260
261 fs->addModifiedParticle(particle1);
262 fs->addModifiedParticle(particle2);
263 fs->addCreatedParticle(kaon);
264
265 }
double G4double
Definition G4Types.hh:83
int G4int
Definition G4Types.hh:85
void setMass(G4double mass)
const G4INCL::ThreeVector & getPosition() const
G4INCL::ParticleType getType() const
G4bool isResonance() const
Is it a resonance?
void setType(ParticleType t)
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
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 getDeltaType(const G4int isosp)
Get the type of delta.
void generateBiased(const G4double sqrtS, ParticleList &particles, const size_t index, const G4double slope)
Generate a biased event in the CM system.
G4double shoot()

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