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
86
87 if(rdm < 0.35){
88
89 nucleon_initial->setType(
Lambda);
90 available_iso = 1;
91 min_pions = 3;
93 }
94 else if((iso == 0 && rdm < 0.55) || rdm < 0.5){
95
96
97 available_iso = 3;
98 min_pions = 1;
100 }
101 else{
102
103 available_iso = 3;
104 min_pions = 3;
106 }
107
109 nbr_pions = std::min(max_pions,std::max(min_pions,
G4int(intermediaire )));
110
111 available_iso += nbr_pions*2;
112#ifdef INCLXX_IN_GEANT4_MODE
113
118#endif
119
120
121 ParticleList list;
123 const ThreeVector &rcol1 = pion_initial->getPosition();
124 const ThreeVector zero;
125
126
127
128
129 G4bool pip_p = (std::abs(iso) == 3);
130
132
133 G4bool pim_p = (!pip_p && !piz_p);
134
135 for(
Int_t i=0; i<nbr_pions; i++){
136 Particle *
pion =
new Particle(PionType,zero,rcol1);
137 if(available_iso-std::abs(iso-iso_system) >= 4){
139 if((pip_p && rdm < 0.54) || (piz_p && rdm < 0.32) || (pim_p && rdm < 0.45)){
142 available_iso -= 2;
143 }
144 else if((pip_p && rdm < 0.80) || (piz_p && rdm < 0.77) || (pim_p && rdm < 0.82)){
146 available_iso -= 2;
147 }
148 else{
151 available_iso -= 2;
152 }
153 }
154 else if(available_iso-std::abs(iso-iso_system) == 2){
160 available_iso -= 2;
161 }
162 else{
165 available_iso -= 2;
166 }
167 }
168 else if(available_iso-std::abs(iso-iso_system) == 0){
171 available_iso -= 2;
172 }
173 else INCL_ERROR(
"Pion Generation Problem in NpiToMissingStrangenessChannel" <<
'\n');
174 list.push_back(pion);
175 }
176
177 if(nucleon_initial->isLambda()){
178
180 }
181 else if(min_pions == 1){
182
183 Particle *antikaon =
new Particle(
KMinus,zero,rcol1);
184 if(std::abs(iso-iso_system) == 3){
188 }
189 else if(std::abs(iso-iso_system) == 1){
194 }
195 else INCL_ERROR(
"Isospin non-conservation in NNToMissingStrangenessChannel" <<
'\n');
196 list.push_back(antikaon);
197 nbr_pions += 1;
198 }
199 else{
200
201 if(std::abs(iso-iso_system) == 3){
204 }
205 else if(std::abs(iso-iso_system) == 1){
207 if((pip_p && rdm < 0.73) || (piz_p && rdm < 0.32) || (pim_p && rdm < 0.45)){
210 }
211 else{
214 }
215 }
216 else INCL_ERROR(
"Isospin non-conservation in NNToMissingStrangenessChannel" <<
'\n');
217 }
218
219 list.push_back(pion_initial);
220 list.push_back(nucleon_initial);
221
223
224 fs->addModifiedParticle(pion_initial);
225 fs->addModifiedParticle(nucleon_initial);
226 for(
Int_t i=0; i<nbr_pions; i++) fs->addCreatedParticle(list[i]);
227
228 }
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.)