57 {
58
61
62
64
66 G4int available_iso = 0;
70
72
73 G4int nbr_particle = 3;
74
75 if(rdm < 0.35){
76
78 available_iso = 2;
79 min_pions = 3;
81 }
82 else if((iso == 0 && rdm < 0.55) || rdm < 0.5){
83
84 nbr_particle++;
85 available_iso = 4;
86 min_pions = 1;
88 }
89 else{
90
91 available_iso = 4;
92 min_pions = 3;
94 }
95
97 nbr_pions = std::min(max_pions,std::max(min_pions,
G4int(intermediaire )));
98
99 available_iso += nbr_pions*2;
100 nbr_particle += nbr_pions;
101
102 ParticleList list;
104 const ThreeVector &rcol1 = particle1->
getPosition();
105 const ThreeVector zero;
106 Particle *kaon =
new Particle(
KPlus,zero,rcol1);
107
108 for(
Int_t i=0; i<nbr_pions; i++){
109 Particle *
pion =
new Particle(PionType,zero,rcol1);
110 if(available_iso-std::abs(iso-iso_system) >= 4){
112 if(((iso == 0) && rdm < 0.3) || ((iso == -2) && rdm < 0.40) || rdm < 0.25){
114 iso_system -= 2;
115 available_iso -= 2;
116 }
117 else if(((iso == 0) && rdm < 0.7) || ((iso == -2) && rdm < 0.75) || rdm < 0.60){
119 available_iso -= 2;
120 }
121 else{
123 iso_system += 2;
124 available_iso -= 2;
125 }
126 }
127 else if(available_iso-std::abs(iso-iso_system) == 2){
129
130 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))){
133 available_iso -= 2;
134 }
135 else{
137 available_iso -= 2;
138 }
139 }
140 else if(available_iso-std::abs(iso-iso_system) == 0){
143 available_iso -= 2;
144 }
145 else INCL_ERROR(
"Pion Generation Problem in NNToMissingStrangenessChannel" <<
'\n');
146 list.push_back(pion);
147 }
148
150
151 if(std::abs(iso-iso_system) == 2){
154 }
155 else if(std::abs(iso-iso_system) == 0){
159 }
160 else INCL_ERROR(
"Isospin non-conservation in NNToMissingStrangenessChannel" <<
'\n');
161 }
162 else if(min_pions == 1){
163
164 Particle *antikaon =
new Particle(
KMinus,zero,rcol1);
165 if(std::abs(iso-iso_system) == 4){
170 }
171 else if(std::abs(iso-iso_system) == 2){
177 }
178 else if(std::abs(iso-iso_system) == 0){
185 }
186 else INCL_ERROR(
"Isospin non-conservation in NNToMissingStrangenessChannel" <<
'\n');
187 list.push_back(antikaon);
188 nbr_pions += 1;
189 }
190 else{
191
192 if(std::abs(iso-iso_system) == 4){
196 }
197 else if(std::abs(iso-iso_system) == 2){
199
200 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))){
205 }
206 else{
210 }
211 }
212 else if(std::abs(iso-iso_system) == 0){
213 if(((iso == 0) && rdm < 0.23) || ((iso == 2) && rdm < 0.42) || rdm < 0.07){
216 kaon->setType(
KZero);
217 }
218 else if(((iso == 0) && rdm < 0.77) || ((iso == 2) && rdm < 0.93) || rdm < 0.58){
223 }
224 else{
227 kaon->setType(
KPlus);
228 }
229 }
230 else INCL_ERROR(
"Isospin non-conservation in NNToMissingStrangenessChannel" <<
'\n');
231 }
232
233 list.push_back(particle1);
234 list.push_back(particle2);
235 list.push_back(kaon);
236
238
239 fs->addModifiedParticle(particle1);
240 fs->addModifiedParticle(particle2);
241 fs->addCreatedParticle(kaon);
242 for(
Int_t i=0; i<nbr_pions; i++) fs->addCreatedParticle(list[i]);
243
244 }
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.)