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
95 {
96
97
98
99
100
101
102
103
104
105
106
108
111
112
113 const ThreeVector &particle1Momentum = particle1->
getMomentum();
116
117 G4double xmdel = sampleDeltaMass(ecm);
118
120 if (pnorm <= 0.0) pnorm=0.000001;
124 if (rndm < 0.5) index=1;
125 if (isospin == 0) {
127 if (rndm < 0.5) index2=1;
128 }
129
130
131
133 if(x < 1.4) {
134 b=(5.287/(1.+std::exp((1.3-x)/0.05)))*1.e-6;
135 } else {
136 b=(4.65+0.706*(x-1.4))*1.e-6;
137 }
140 G4double ctet=1.0+std::log(1.-rndm*(1.-std::exp(-2.*xkh)))/xkh;
141 if(std::abs(ctet) > 1.0) ctet =
Math::sign(ctet);
142 G4double stet = std::sqrt(1.-ctet*ctet);
143
148
149
150 G4double xx = particle1Momentum.perp2();
151 const G4double particle1MomentumZ = particle1Momentum.getZ();
152 G4double zz = std::pow(particle1MomentumZ, 2);
154 if (xx >= zz*1.e-8) {
158 G4double p1 = particle1Momentum.getX();
159 G4double p2 = particle1Momentum.getY();
161 ez[0] = p1/pin;
162 ez[1] = p2/pin;
163 ez[2] = p3/pin;
164 ex[0] = p2/yn;
165 ex[1] = -p1/yn;
166 ex[2] = 0.0;
167 ey[0] = p1*p3/zn;
168 ey[1] = p2*p3/zn;
169 ey[2] = -xx/zn;
170 xp1 = (ex[0]*cfi*stet+ey[0]*sfi*stet+ez[0]*ctet)*pnorm;
171 xp2 = (ex[1]*cfi*stet+ey[1]*sfi*stet+ez[1]*ctet)*pnorm;
172 xp3 = (ex[2]*cfi*stet+ey[2]*sfi*stet+ez[2]*ctet)*pnorm;
173 }else {
174 xp1=pnorm*stet*cfi;
175 xp2=pnorm*stet*sfi;
176 xp3=pnorm*ctet;
177 }
178
179 G4double e3 = std::sqrt(xp1*xp1+xp2*xp2+xp3*xp3
181
182
183
184 if (index != 1) {
185 ThreeVector mom(xp1, xp2, xp3);
187
188 } else {
189 ThreeVector mom(-xp1, -xp2, -xp3);
191
192 }
193
197
198
199
200
201
204 if (isospin == 0) {
205 if(index2 == 1) {
207 is1=is2;
208 is2=isi;
209 }
211 } else {
213 if (rndm >= 0.25) {
214 is1=3*is1;
215 is2=-is2;
216 }
218 }
219
228 }
229
234 }
235
238
239 fs->addModifiedParticle(particle1);
240 fs->addModifiedParticle(particle2);
241 }
void setMass(G4double mass)
void setHelicity(G4double h)
const G4INCL::ThreeVector & getMomentum() const
virtual void setMomentum(const G4INCL::ThreeVector &momentum)
G4INCL::ParticleType getType() const
void setEnergy(G4double energy)
void setType(ParticleType t)
G4bool isDelta() const
Is it a Delta?
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