59 p4[0].
set(
mass[0], 0.0, 0.0, 0.0 );
93 double pm[5][30], to[4], pmin, pmax, psum, rnd[30];
94 double ran, wt, pa, costh, sinth, phi, p[4][30], be[4], bep, temp;
95 int i, il, ilr, i1, il1u, il1, il2r, ilu;
98 for ( i = 0; i < ndaug; i++ )
116 for ( i = 1; i < ndaug + 1; i++ ) { psum = psum +
mass[i - 1]; }
118 pm[4][ndaug - 1] =
mass[ndaug - 1];
123 case 1: wtmax = 1.0 / 16.0;
break;
124 case 2: wtmax = 1.0 / 150.0;
break;
125 case 3: wtmax = 1.0 / 2.0;
break;
126 case 4: wtmax = 1.0 / 5.0;
break;
127 case 5: wtmax = 1.0 / 15.0;
break;
128 case 6: wtmax = 1.0 / 15.0;
break;
129 case 7: wtmax = 1.0 / 15.0;
break;
130 case 8: wtmax = 1.0 / 15.0;
break;
131 case 9: wtmax = 1.0 / 15.0;
break;
132 case 10: wtmax = 1.0 / 15.0;
break;
133 case 11: wtmax = 1.0 / 15.0;
break;
134 case 12: wtmax = 1.0 / 15.0;
break;
135 case 13: wtmax = 1.0 / 15.0;
break;
136 case 14: wtmax = 1.0 / 15.0;
break;
137 case 15: wtmax = 1.0 / 15.0;
break;
139 report(
ERROR,
"EvtGen" ) <<
"too many daughters for phase space..." << ndaug <<
" "
145 pmax =
mp - psum +
mass[ndaug - 1];
149 for ( ilr = 2; ilr < ndaug + 1; ilr++ )
151 il = ndaug + 1 - ilr;
152 pmax = pmax +
mass[il - 1];
153 pmin = pmin +
mass[il + 1 - 1];
154 wtmax = wtmax *
EvtPawt( pmax, pmin,
mass[il - 1] );
164 for ( il1 = 2; il1 < il1u + 1; il1++ )
167 for ( il2r = 2; il2r < il1 + 1; il2r++ )
169 il2 = il1 + 1 - il2r;
170 if ( ran <= rnd[il2 - 1] )
goto two39;
171 rnd[il2 + 1 - 1] = rnd[il2 - 1];
174 rnd[il2 + 1 - 1] = ran;
177 rnd[ndaug - 1] = 0.0;
179 for ( ilr = 2; ilr < ndaug + 1; ilr++ )
181 il = ndaug + 1 - ilr;
182 pm[4][il - 1] = pm[4][il + 1 - 1] +
mass[il - 1] +
183 ( rnd[il - 1] - rnd[il + 1 - 1] ) * (
mp - psum );
184 wt = wt *
EvtPawt( pm[4][il - 1], pm[4][il + 1 - 1],
mass[il - 1] );
189 <<
"wtmax to small in EvtPhaseSpace with " << ndaug <<
" daughters" << endl;
196 for ( il = 1; il < ilu + 1; il++ )
198 pa =
EvtPawt( pm[4][il - 1], pm[4][il + 1 - 1],
mass[il - 1] );
200 sinth = sqrt( 1.0 - costh * costh );
202 p[1][il - 1] = pa * sinth *
cos( phi );
203 p[2][il - 1] = pa * sinth *
sin( phi );
204 p[3][il - 1] = pa * costh;
205 pm[1][il + 1 - 1] = -p[1][il - 1];
206 pm[2][il + 1 - 1] = -p[2][il - 1];
207 pm[3][il + 1 - 1] = -p[3][il - 1];
208 p[0][il - 1] = sqrt( pa * pa +
mass[il - 1] *
mass[il - 1] );
209 pm[0][il + 1 - 1] = sqrt( pa * pa + pm[4][il + 1 - 1] * pm[4][il + 1 - 1] );
212 p[0][ndaug - 1] = pm[0][ndaug - 1];
213 p[1][ndaug - 1] = pm[1][ndaug - 1];
214 p[2][ndaug - 1] = pm[2][ndaug - 1];
215 p[3][ndaug - 1] = pm[3][ndaug - 1];
217 for ( ilr = 2; ilr < ndaug + 1; ilr++ )
219 il = ndaug + 1 - ilr;
220 be[0] = pm[0][il - 1] / pm[4][il - 1];
221 be[1] = pm[1][il - 1] / pm[4][il - 1];
222 be[2] = pm[2][il - 1] / pm[4][il - 1];
223 be[3] = pm[3][il - 1] / pm[4][il - 1];
225 for ( i1 = il; i1 < ndaug + 1; i1++ )
227 bep = be[1] * p[1][i1 - 1] + be[2] * p[2][i1 - 1] + be[3] * p[3][i1 - 1] +
228 be[0] * p[0][i1 - 1];
229 temp = ( p[0][i1 - 1] + bep ) / ( be[0] + 1.0 );
230 p[1][i1 - 1] = p[1][i1 - 1] + temp * be[1];
231 p[2][i1 - 1] = p[2][i1 - 1] + temp * be[2];
232 p[3][i1 - 1] = p[3][i1 - 1] + temp * be[3];
237 for ( ilr = 0; ilr < ndaug; ilr++ )
238 { p4[ilr].
set( p[0][ilr], p[1][ilr], p[2][ilr], p[3][ilr] ); }
256 double m12sqmax = ( M - m3 ) * ( M - m3 );
257 double m12sqmin = (
m1 +
m2 ) * (
m1 +
m2 );
259 double m13sqmax = ( M -
m2 ) * ( M -
m2 );
260 double m13sqmin = (
m1 + m3 ) * (
m1 + m3 );
262 double v1 = ( m12sqmax - m12sqmin ) * ( m13sqmax - m13sqmin );
263 double v2 = a * ( 1.0 / m12sqmin - 1.0 / m12sqmax ) * ( m13sqmax - m13sqmin );
267 double r = v1 / ( v1 + v2 );
271 double m13min, m13max;
281 1.0 / ( 1.0 / m12sqmin -
EvtRandom::Flat() * ( 1.0 / m12sqmin - 1.0 / m12sqmax ) );
285 double E3star = ( M * M - m12sq - m3 * m3 ) / sqrt( 4 * m12sq );
286 double E1star = ( m12sq +
m1 *
m1 -
m2 *
m2 ) / sqrt( 4 * m12sq );
287 double p3star = sqrt( E3star * E3star - m3 * m3 );
288 double p1star = sqrt( E1star * E1star -
m1 *
m1 );
290 ( E3star + E1star ) * ( E3star + E1star ) - ( p3star - p1star ) * ( p3star - p1star );
292 ( E3star + E1star ) * ( E3star + E1star ) - ( p3star + p1star ) * ( p3star + p1star );
294 }
while ( m13sq < m13min || m13sq > m13max );
296 double E2 = ( M * M +
m2 *
m2 - m13sq ) / ( 2.0 * M );
297 double E3 = ( M * M + m3 * m3 - m12sq ) / ( 2.0 * M );
298 double E1 = M - E2 - E3;
299 double p1mom = sqrt( E1 * E1 -
m1 *
m1 );
300 double p3mom = sqrt( E3 * E3 - m3 * m3 );
301 double cost13 = ( 2.0 * E1 * E3 +
m1 *
m1 + m3 * m3 - m13sq ) / ( 2.0 * p1mom * p3mom );
312 p4[2].
set( E3, 0.0, 0.0, p3mom );
313 p4[0].
set( E1, p1mom * sqrt( 1.0 - cost13 * cost13 ), 0.0, p1mom * cost13 );
314 p4[1].
set( E2, -p1mom * sqrt( 1.0 - cost13 * cost13 ), 0.0, -p1mom * cost13 - p3mom );
326 return 1.0 + a / ( m12sq * m12sq );