176 {
177
178
179
182 EvtVector4R pP = pB + pC;
183
184 EvtHelSys angles( pP, pB );
185 double theta = angles.getHelAng( 1 );
186 double phi = angles.getHelAng( 2 );
187
188
189
191
192 int ia, ib, ic;
193
194 double prob1 = 0.0;
195
196 for ( ia = 0; ia < _nA; ia++ )
197 {
198 for ( ib = 0; ib < _nB; ib++ )
199 {
200 for ( ic = 0; ic < _nC; ic++ )
201 {
202 _amp[ia][ib][ic] = 0.0;
203 if (
abs( _lambdaB2[ib] - _lambdaC2[ic] ) <= _JA2 )
204 {
205 double dfun =
206 EvtdFunction::d( _JA2, _lambdaA2[ia], _lambdaB2[ib] - _lambdaC2[ic], theta );
207
208 _amp[ia][ib][ic] =
209 c * _HBC[ib][ic] *
210 exp( EvtComplex( 0.0, phi * 0.5 *
211 ( _lambdaA2[ia] - _lambdaB2[ib] + _lambdaC2[ic] ) ) ) *
212 dfun;
213 }
214 prob1 +=
real( _amp[ia][ib][ic] *
conj( _amp[ia][ib][ic] ) );
215 }
216 }
217 }
218
219 setUpRotationMatrices( p, theta, phi );
220
221 applyRotationMatrices();
222
223 double prob2 = 0.0;
224
225 for ( ia = 0; ia < _nA; ia++ )
226 {
227 for ( ib = 0; ib < _nB; ib++ )
228 {
229 for ( ic = 0; ic < _nC; ic++ )
230 {
231 prob2 +=
real( _amp[ia][ib][ic] *
conj( _amp[ia][ib][ic] ) );
232 if ( _nA == 1 )
233 {
234 if ( _nB == 1 )
235 {
236 if ( _nC == 1 ) { amp.
vertex( _amp[ia][ib][ic] ); }
237 else { amp.
vertex( ic, _amp[ia][ib][ic] ); }
238 }
239 else
240 {
241 if ( _nC == 1 ) { amp.
vertex( ib, _amp[ia][ib][ic] ); }
242 else
243 {
244 amp.
vertex( ib, ic, _amp[ia][ib][ic] );
245
246 }
247 }
248 }
249 else
250 {
251 if ( _nB == 1 )
252 {
253 if ( _nC == 1 ) { amp.
vertex( ia, _amp[ia][ib][ic] ); }
254 else { amp.
vertex( ia, ic, _amp[ia][ib][ic] ); }
255 }
256 else
257 {
258 if ( _nC == 1 ) { amp.
vertex( ia, ib, _amp[ia][ib][ic] ); }
259 else { amp.
vertex( ia, ib, ic, _amp[ia][ib][ic] ); }
260 }
261 }
262 }
263 }
264 }
265
266 if ( fabs( prob1 - prob2 ) > 0.000001 * prob1 )
267 {
268 report(
INFO,
"EvtGen" ) <<
"prob1,prob2:" << prob1 <<
" " << prob2 << endl;
269 ::abort();
270 }
271
272 return;
273}
Evt3Rank3C conj(const Evt3Rank3C &t2)
EvtComplex exp(const EvtComplex &c)
ostream & report(Severity severity, const char *facility)
void vertex(const EvtComplex &)
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
static double d(int j, int m1, int m2, double theta)