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
G4INCLNDeltaToNSKChannel.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 NDeltaToNSKChannel::angularSlope = 2.;
50
52 : particle1(p1), particle2(p2)
53 {}
54
56
58 // D++ p -> p S+ K+ (6)
59 //
60 // D++ n -> p S+ K0 (3)
61 // D++ n -> p S0 K+ (3)
62 // D++ n -> n S+ K+ (3)
63 //
64 // D+ p -> p S+ K0 (2)
65 // D+ p -> p S0 K+ (2)
66 // D+ p -> n S+ K+ (3)
67 //
68 // D+ n -> p S0 K0 (3)
69 // D+ n -> p S- K+ (2)
70 // D+ n -> n S+ K0 (2)
71 // D+ n -> n S0 K+ (2)
72
73
74 Particle *delta;
75
76 if (particle1->isResonance()) {
77 delta = particle1;
78 }
79 else {
80 delta = particle2;
81 }
82
83 const G4double sqrtS = KinematicsUtils::totalEnergyInCM(particle1, particle2);
84
85 const G4int iso = ParticleTable::getIsospin(particle1->getType()) + ParticleTable::getIsospin(particle2->getType());
86 const G4int iso_d = ParticleTable::getIsospin(delta->getType());
87
88 ParticleType KaonType;
89 ParticleType NucleonType;
90 ParticleType SigmaType;
91
92 const G4double rdm = Random::shoot();
93
94 if(std::abs(iso) == 4){// D++ p
95 KaonType = ParticleTable::getKaonType(iso/4);
96 NucleonType = ParticleTable::getNucleonType(iso/4);
97 SigmaType = ParticleTable::getSigmaType(iso/2);
98 }
99 else if(iso == 0){// D+ n
100 if(rdm*9 < 3){
101 KaonType = ParticleTable::getKaonType(-iso_d);
102 NucleonType = ParticleTable::getNucleonType(iso_d);
103 SigmaType = SigmaZero;
104 }
105 else if(rdm*9 < 5){
106 KaonType = ParticleTable::getKaonType(iso_d);
107 NucleonType = ParticleTable::getNucleonType(iso_d);
108 SigmaType = ParticleTable::getSigmaType(-2*iso_d);
109 }
110 else if(rdm*9 < 7){
111 KaonType = ParticleTable::getKaonType(-iso_d);
112 NucleonType = ParticleTable::getNucleonType(-iso_d);
113 SigmaType = ParticleTable::getSigmaType(2*iso_d);
114 }
115 else{
116 KaonType = ParticleTable::getKaonType(iso_d);
117 NucleonType = ParticleTable::getNucleonType(-iso_d);
118 SigmaType = SigmaZero;
119 }
120 }
121 else if(ParticleTable::getIsospin(particle1->getType()) == ParticleTable::getIsospin(particle2->getType())){// D+ p
122 if(rdm*7 < 2){
123 KaonType = ParticleTable::getKaonType(-iso/2);
124 NucleonType = ParticleTable::getNucleonType(iso/2);
125 SigmaType = ParticleTable::getSigmaType(iso);
126 }
127 else if(rdm*7 < 4){
128 KaonType = ParticleTable::getKaonType(iso/2);
129 NucleonType = ParticleTable::getNucleonType(iso/2);
130 SigmaType = SigmaZero;
131 }
132 else{
133 KaonType = ParticleTable::getKaonType(iso/2);
134 NucleonType = ParticleTable::getNucleonType(-iso/2);
135 SigmaType = ParticleTable::getSigmaType(iso);
136 }
137 }
138 else{// D++ n
139 if(rdm*3 < 1){
140 KaonType = ParticleTable::getKaonType(-iso/2);
141 NucleonType = ParticleTable::getNucleonType(iso/2);
142 SigmaType = ParticleTable::getSigmaType(iso);
143 }
144 else if(rdm*3 < 2){
145 KaonType = ParticleTable::getKaonType(iso/2);
146 NucleonType = ParticleTable::getNucleonType(iso/2);
147 SigmaType = SigmaZero;
148 }
149 else{
150 KaonType = ParticleTable::getKaonType(iso/2);
151 NucleonType = ParticleTable::getNucleonType(-iso/2);
152 SigmaType = ParticleTable::getSigmaType(iso);
153 }
154 }
155
156 particle1->setType(NucleonType);
157 particle2->setType(SigmaType);
158
159 ParticleList list;
160 list.push_back(particle1);
161 list.push_back(particle2);
162 const ThreeVector &rcol = particle2->getPosition();
163 const ThreeVector zero;
164 Particle *kaon = new Particle(KaonType,zero,rcol);
165 list.push_back(kaon);
166
167 if(Random::shoot()<0.5) PhaseSpaceGenerator::generateBiased(sqrtS, list, 0, angularSlope);
168 else PhaseSpaceGenerator::generateBiased(sqrtS, list, 1, angularSlope);
169
170 fs->addModifiedParticle(particle1);
171 fs->addModifiedParticle(particle2);
172 fs->addCreatedParticle(kaon);
173
174 }
175}
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
void addModifiedParticle(Particle *p)
void addCreatedParticle(Particle *p)
NDeltaToNSKChannel(Particle *, Particle *)
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 getNucleonType(const G4int isosp)
Get the type of nucleon.
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