The production is not isotropic in this version it has the same exp(b*t) structure as the nn elastic scattering (formula 2.3 of j.cugnon et al, nucl phys a352(1981)505) parametrization of b taken from ref. prc56(1997)2431
96 {
97
98
99
100
101
102
103
104
105
106
107
109
110
113
114
115
116
119
120
121 const ThreeVector &particle1Momentum = particle1->getMomentum();
122 G4double pin = particle1Momentum.mag();
124
125 G4double xmdel = sampleDeltaMass(ecm);
126
128 if (pnorm <= 0.0) pnorm=0.000001;
132 if (rndm < 0.5) index=1;
133 if (isospin == 0) {
135 if (rndm < 0.5) index2=1;
136 }
137
138
139
141 if(x < 1.4) {
142 b=(5.287/(1.+std::exp((1.3-x)/0.05)))*1.e-6;
143 } else {
144 b=(4.65+0.706*(x-1.4))*1.e-6;
145 }
148 G4double ctet=1.0+std::log(1.-rndm*(1.-std::exp(-2.*xkh)))/xkh;
149 if(std::abs(ctet) > 1.0) ctet =
Math::sign(ctet);
150 G4double stet = std::sqrt(1.-ctet*ctet);
151
156
157
158 G4double xx = particle1Momentum.perp2();
159 const G4double particle1MomentumZ = particle1Momentum.getZ();
160 G4double zz = std::pow(particle1MomentumZ, 2);
162 if (xx >= zz*1.e-8) {
166 G4double p1 = particle1Momentum.getX();
167 G4double p2 = particle1Momentum.getY();
169 ez[0] = p1/pin;
170 ez[1] = p2/pin;
171 ez[2] = p3/pin;
172 ex[0] = p2/yn;
173 ex[1] = -p1/yn;
174 ex[2] = 0.0;
175 ey[0] = p1*p3/zn;
176 ey[1] = p2*p3/zn;
177 ey[2] = -xx/zn;
178 xp1 = (ex[0]*cfi*stet+ey[0]*sfi*stet+ez[0]*ctet)*pnorm;
179 xp2 = (ex[1]*cfi*stet+ey[1]*sfi*stet+ez[1]*ctet)*pnorm;
180 xp3 = (ex[2]*cfi*stet+ey[2]*sfi*stet+ez[2]*ctet)*pnorm;
181 }else {
182 xp1=pnorm*stet*cfi;
183 xp2=pnorm*stet*sfi;
184 xp3=pnorm*ctet;
185 }
186
187 G4double e3 = std::sqrt(xp1*xp1+xp2*xp2+xp3*xp3
189
190
191
192 if (index != 1) {
193 ThreeVector mom(xp1, xp2, xp3);
194 particle1->setMomentum(mom);
195
196 } else {
197 ThreeVector mom(-xp1, -xp2, -xp3);
198 particle1->setMomentum(mom);
199
200 }
201
202 particle1->setEnergy(ecm - e3);
203 particle2->setEnergy(e3);
204 particle2->setMomentum(-particle1->getMomentum());
205
206
207
208
209
212 if (isospin == 0) {
213 if(index2 == 1) {
215 is1=is2;
216 is2=isi;
217 }
218 particle1->setHelicity(0.0);
219 } else {
221 if (rndm >= 0.25) {
222 is1=3*is1;
223 is2=-is2;
224 }
225 particle1->setHelicity(ctet*ctet);
226 }
227
236 }
237
239 particle2->setType(
Proton);
242 }
243
244 if (particle1->isDelta())
245 particle1->setMass(xmdel);
246 if (particle2->isDelta())
247 particle2->setMass(xmdel);
248
249 if (thenucleus) {
250
251
252
253 srcChannel = new SrcChannel(particle1, particle2, thenucleus);
254 srcChannel->fillFinalState(fs, p1TypeOld, p2TypeOld);
255 delete srcChannel;
256 } else {
257 fs->addModifiedParticle(particle1);
258 fs->addModifiedParticle(particle2);
259 }
260 }
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.
G4double momentumInCM(Particle const *const p1, Particle const *const p2)
gives the momentum in the CM frame of two particles.
const G4double effectiveNucleonMass2
G4int getIsospin(const ParticleType t)
Get the isospin of a particle.
const G4double effectiveNucleonMass