57 {
58
60
61
63
65 G4int available_iso = 0;
69
70 Particle *pion_initial;
71 Particle *nucleon_initial;
72
74 pion_initial = particle1;
75 nucleon_initial = particle2;
76 }
77 else{
78 pion_initial = particle2;
79 nucleon_initial = particle1;
80 }
82
84
85 if(rdm < 0.35){
86
87 nucleon_initial->setType(
Lambda);
88 available_iso = 1;
89 min_pions = 3;
91 }
92 else if((iso == 0 && rdm < 0.55) || rdm < 0.5){
93
94 available_iso = 3;
95 min_pions = 1;
97 }
98 else{
99
100 available_iso = 3;
101 min_pions = 3;
103 }
104
106 nbr_pions = std::min(max_pions,std::max(min_pions,
G4int(intermediaire )));
107
108 available_iso += nbr_pions*2;
109
110
115
116 ParticleList list;
118 const ThreeVector &rcol1 = pion_initial->getPosition();
119 const ThreeVector zero;
120
121
122
123
124 G4bool pip_p = (std::abs(iso) == 3);
125
127
128 G4bool pim_p = (!pip_p && !piz_p);
129
130 for(
Int_t i=0; i<nbr_pions; i++){
131 Particle *
pion =
new Particle(PionType,zero,rcol1);
132 if(available_iso-std::abs(iso-iso_system) >= 4){
134 if((pip_p && rdm < 0.54) || (piz_p && rdm < 0.32) || (pim_p && rdm < 0.45)){
137 available_iso -= 2;
138 }
139 else if((pip_p && rdm < 0.80) || (piz_p && rdm < 0.77) || (pim_p && rdm < 0.82)){
141 available_iso -= 2;
142 }
143 else{
146 available_iso -= 2;
147 }
148 }
149 else if(available_iso-std::abs(iso-iso_system) == 2){
155 available_iso -= 2;
156 }
157 else{
160 available_iso -= 2;
161 }
162 }
163 else if(available_iso-std::abs(iso-iso_system) == 0){
166 available_iso -= 2;
167 }
168 else INCL_ERROR(
"Pion Generation Problem in NpiToMissingStrangenessChannel" <<
'\n');
169 list.push_back(pion);
170 }
171
172 if(nucleon_initial->isLambda()){
173
175 }
176 else if(min_pions == 1){
177
178 Particle *antikaon =
new Particle(
KMinus,zero,rcol1);
179 if(std::abs(iso-iso_system) == 3){
183 }
184 else if(std::abs(iso-iso_system) == 1){
189 }
190 else INCL_ERROR(
"Isospin non-conservation in NNToMissingStrangenessChannel" <<
'\n');
191 list.push_back(antikaon);
192 nbr_pions += 1;
193 }
194 else{
195
196 if(std::abs(iso-iso_system) == 3){
199 }
200 else if(std::abs(iso-iso_system) == 1){
202 if((pip_p && rdm < 0.73) || (piz_p && rdm < 0.32) || (pim_p && rdm < 0.45)){
205 }
206 else{
209 }
210 }
211 else INCL_ERROR(
"Isospin non-conservation in NNToMissingStrangenessChannel" <<
'\n');
212 }
213
214 list.push_back(pion_initial);
215 list.push_back(nucleon_initial);
216
218
219 fs->addModifiedParticle(pion_initial);
220 fs->addModifiedParticle(nucleon_initial);
221 for(
Int_t i=0; i<nbr_pions; i++) fs->addCreatedParticle(list[i]);
222
223 }
void setParentResonancePDGCode(const G4int parentPDGCode)
void setParentResonanceID(const G4int parentID)
G4bool isPion() const
Is this a pion?
G4INCL::ParticleType getType() const
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.)