57 {
58
61
62
64
66 G4int available_iso = 0;
70
72
73 if(rdm < 0.35){
74
76 available_iso = 2;
77 min_pions = 3;
79 }
80 else if((iso == 0 && rdm < 0.55) || rdm < 0.5){
81
82 available_iso = 4;
83 min_pions = 1;
85 }
86 else{
87
88 available_iso = 4;
89 min_pions = 3;
91 }
92
94 nbr_pions = std::min(max_pions,std::max(min_pions,
G4int(intermediaire )));
95
96 available_iso += nbr_pions*2;
97
98 ParticleList list;
100 const ThreeVector &rcol1 = particle1->
getPosition();
101 const ThreeVector zero;
102 Particle *kaon =
new Particle(
KPlus,zero,rcol1);
103
104 for(
Int_t i=0; i<nbr_pions; i++){
105 Particle *
pion =
new Particle(PionType,zero,rcol1);
106 if(available_iso-std::abs(iso-iso_system) >= 4){
108 if(((iso == 0) && rdm < 0.3) || ((iso == -2) && rdm < 0.40) || rdm < 0.25){
110 iso_system -= 2;
111 available_iso -= 2;
112 }
113 else if(((iso == 0) && rdm < 0.7) || ((iso == -2) && rdm < 0.75) || rdm < 0.60){
115 available_iso -= 2;
116 }
117 else{
119 iso_system += 2;
120 available_iso -= 2;
121 }
122 }
123 else if(available_iso-std::abs(iso-iso_system) == 2){
125
126 if(((iso == 0) && (rdm*0.7 < 0.3)) || ((rdm*0.60 < 0.25) && (
Math::sign(iso-iso_system)*2-iso != 0)) || ((rdm*0.75 < 0.40) && (
Math::sign(iso-iso_system)*2+iso != 0) && (iso != 0))){
129 available_iso -= 2;
130 }
131 else{
133 available_iso -= 2;
134 }
135 }
136 else if(available_iso-std::abs(iso-iso_system) == 0){
139 available_iso -= 2;
140 }
141 else INCL_ERROR(
"Pion Generation Problem in NNToMissingStrangenessChannel" <<
'\n');
142 list.push_back(pion);
143 }
144
146
147 if(std::abs(iso-iso_system) == 2){
150 }
151 else if(std::abs(iso-iso_system) == 0){
155 }
156 else INCL_ERROR(
"Isospin non-conservation in NNToMissingStrangenessChannel" <<
'\n');
157 }
158 else if(min_pions == 1){
159
160 Particle *antikaon =
new Particle(
KMinus,zero,rcol1);
161 if(std::abs(iso-iso_system) == 4){
166 }
167 else if(std::abs(iso-iso_system) == 2){
173 }
174 else if(std::abs(iso-iso_system) == 0){
181 }
182 else INCL_ERROR(
"Isospin non-conservation in NNToMissingStrangenessChannel" <<
'\n');
183 list.push_back(antikaon);
184 nbr_pions += 1;
185 }
186 else{
187
188 if(std::abs(iso-iso_system) == 4){
192 }
193 else if(std::abs(iso-iso_system) == 2){
195
196 if(((iso == 0) && (rdm*0.77 < 0.23)) || ((rdm*0.58 < 0.07) && (
Math::sign(iso-iso_system)*2-iso != 0)) || ((rdm*0.93 < 0.42) && (
Math::sign(iso-iso_system)*2+iso != 0) && (iso != 0))){
201 }
202 else{
206 }
207 }
208 else if(std::abs(iso-iso_system) == 0){
209 if(((iso == 0) && rdm < 0.23) || ((iso == 2) && rdm < 0.42) || rdm < 0.07){
212 kaon->setType(
KZero);
213 }
214 else if(((iso == 0) && rdm < 0.77) || ((iso == 2) && rdm < 0.93) || rdm < 0.58){
219 }
220 else{
223 kaon->setType(
KPlus);
224 }
225 }
226 else INCL_ERROR(
"Isospin non-conservation in NNToMissingStrangenessChannel" <<
'\n');
227 }
228
229 list.push_back(particle1);
230 list.push_back(particle2);
231 list.push_back(kaon);
232
234
235 fs->addModifiedParticle(particle1);
236 fs->addModifiedParticle(particle2);
237 fs->addCreatedParticle(kaon);
238 for(
Int_t i=0; i<nbr_pions; i++) fs->addCreatedParticle(list[i]);
239
240 }
G4bool isLambda() const
Is this a Lambda?
const G4INCL::ThreeVector & getPosition() const
G4INCL::ParticleType getType() const
void setType(ParticleType t)
G4double totalEnergyInCM(Particle const *const p1, Particle const *const p2)
G4double momentumInLab(Particle const *const p1, Particle const *const p2)
gives the momentum in the lab frame of two particles.
ParticleType getKaonType(const G4int isosp)
Get the type of kaon.
ParticleType getSigmaType(const G4int isosp)
Get the type of sigma.
G4double getINCLMass(const G4int A, const G4int Z, const G4int S)
Get INCL nuclear mass (in MeV/c^2)
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
ParticleType getNucleonType(const G4int isosp)
Get the type of nucleon.
ParticleType getPionType(const G4int isosp)
Get the type of pion.
ParticleType getAntiKaonType(const G4int isosp)
Get the type of antikaon.
void generateBiased(const G4double sqrtS, ParticleList &particles, const size_t index, const G4double slope)
Generate a biased event in the CM system.
G4double gauss(G4double sigma=1.)