BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtDalitzReso.cc
Go to the documentation of this file.
1#include "EvtPatches.hh"
2/*****************************************************************************
3 * Project: BaBar detector at the SLAC PEP-II B-factory
4 * Package: EvtGenBase
5 * File: $Id: EvtDalitzReso.cc,v 1.1 2009/05/08 01:59:56 pingrg Exp $
6 *
7 * Description:
8 * Class to compute Dalitz amplitudes based on many models that cannot be
9 * handled with EvtResonance.
10 *
11 * Modification history:
12 * Jordi Garra Tic� 2008/07/03 File created
13 *****************************************************************************/
14
15#include <assert.h>
16#include <cmath>
17#include <iostream>
18
19#include "EvtDalitzReso.hh"
20#include "EvtGenKine.hh"
21#include "EvtMatrix.hh"
22#include "EvtPDL.hh"
23#include "EvtParticle.hh"
24#include "EvtReport.hh"
25#include <stdlib.h>
26
27#include "EvtCyclic3.hh"
28#include "EvtdFunction.hh"
29
30#define PRECISION ( 1.e-3 )
31
34
35// single Breit-Wigner
37 EvtSpinType::spintype spin, double m0, double g0, NumType typeN )
38 : _dp( dp )
39 , _pairAng( pairAng )
40 , _pairRes( pairRes )
41 , _spin( spin )
42 , _typeN( typeN )
43 , _m0( m0 )
44 , _g0( g0 )
45 , _massFirst( dp.m( first( pairRes ) ) )
46 , _massSecond( dp.m( second( pairRes ) ) )
47 , _m0_mix( -1. )
48 , _g0_mix( 0. )
49 , _delta_mix( 0. )
50 , _amp_mix( 0., 0. )
51 , _g1( -1. )
52 , _g2( -1. )
53 , _coupling2( Undefined )
54 , _kmatrix_index( -1 )
55 , _fr12prod( 0., 0. )
56 , _fr13prod( 0., 0. )
57 , _fr14prod( 0., 0. )
58 , _fr15prod( 0., 0. )
59 , _s0prod( 0. )
60 , _a( 0. )
61 , _r( 0. )
62 , _Blass( 0. )
63 , _phiB( 0. )
64 , _R( 0. )
65 , _phiR( 0. ) {
66 _vb = EvtTwoBodyVertex( _m0, _dp.m( EvtCyclic3::other( _pairRes ) ), _dp.bigM(), _spin );
67 _vd = EvtTwoBodyVertex( _massFirst, _massSecond, _m0, _spin );
68 _vb.set_f( 0.0 ); // Default values for Blatt-Weisskopf factors.
69 _vd.set_f( 1.5 );
70 assert( _typeN != K_MATRIX && _typeN != K_MATRIX_I &&
71 _typeN != K_MATRIX_II ); // single BW cannot be K-matrix
72}
73
74// Breit-Wigner with electromagnetic mass mixing
76 EvtSpinType::spintype spin, double m0, double g0, NumType typeN,
77 double m0_mix, double g0_mix, double delta_mix,
78 EvtComplex amp_mix )
79 : _dp( dp )
80 , _pairAng( pairAng )
81 , _pairRes( pairRes )
82 , _spin( spin )
83 , _typeN( typeN )
84 , _m0( m0 )
85 , _g0( g0 )
86 , _massFirst( dp.m( first( pairRes ) ) )
87 , _massSecond( dp.m( second( pairRes ) ) )
88 , _m0_mix( m0_mix )
89 , _g0_mix( g0_mix )
90 , _delta_mix( delta_mix )
91 , _amp_mix( amp_mix )
92 , _g1( -1. )
93 , _g2( -1. )
94 , _coupling2( Undefined )
95 , _kmatrix_index( -1 )
96 , _fr12prod( 0., 0. )
97 , _fr13prod( 0., 0. )
98 , _fr14prod( 0., 0. )
99 , _fr15prod( 0., 0. )
100 , _s0prod( 0. )
101 , _a( 0. )
102 , _r( 0. )
103 , _Blass( 0. )
104 , _phiB( 0. )
105 , _R( 0. )
106 , _phiR( 0. ) {
107 _vb = EvtTwoBodyVertex( _m0, _dp.m( EvtCyclic3::other( _pairRes ) ), _dp.bigM(), _spin );
108 _vd = EvtTwoBodyVertex( _massFirst, _massSecond, _m0, _spin );
109 _vb.set_f( 0.0 ); // Default values for Blatt-Weisskopf factors.
110 _vd.set_f( 1.5 );
111 // single BW (with electromagnetic mixing) cannot be K-matrix
112 assert( _typeN != K_MATRIX && _typeN != K_MATRIX_I && _typeN != K_MATRIX_II );
113}
114
115// coupled Breit-Wigner
117 EvtSpinType::spintype spin, double m0, NumType typeN, double g1,
118 double g2, CouplingType coupling2 )
119 : _dp( dp )
120 , _pairAng( pairAng )
121 , _pairRes( pairRes )
122 , _spin( spin )
123 , _typeN( typeN )
124 , _m0( m0 )
125 , _g0( -1. )
126 , _massFirst( dp.m( first( pairRes ) ) )
127 , _massSecond( dp.m( second( pairRes ) ) )
128 , _m0_mix( -1. )
129 , _g0_mix( 0. )
130 , _delta_mix( 0. )
131 , _amp_mix( 0., 0. )
132 , _g1( g1 )
133 , _g2( g2 )
134 , _coupling2( coupling2 )
135 , _kmatrix_index( -1 )
136 , _fr12prod( 0., 0. )
137 , _fr13prod( 0., 0. )
138 , _fr14prod( 0., 0. )
139 , _fr15prod( 0., 0. )
140 , _s0prod( 0. )
141 , _a( 0. )
142 , _r( 0. )
143 , _Blass( 0. )
144 , _phiB( 0. )
145 , _R( 0. )
146 , _phiR( 0. ) {
147 _vb = EvtTwoBodyVertex( _m0, _dp.m( EvtCyclic3::other( _pairRes ) ), _dp.bigM(), _spin );
148 _vd = EvtTwoBodyVertex( _massFirst, _massSecond, _m0, _spin );
149 _vb.set_f( 0.0 ); // Default values for Blatt-Weisskopf factors.
150 _vd.set_f( 1.5 );
151 assert( _coupling2 != Undefined );
152 assert( _typeN != K_MATRIX && _typeN != K_MATRIX_I &&
153 _typeN != K_MATRIX_II ); // coupled BW cannot be K-matrix
154 assert( _typeN != LASS ); // coupled BW cannot be LASS
155 assert( _typeN != NBW ); // for coupled BW, only relativistic BW
156}
157
158// K-Matrix (A&S)
159EvtDalitzReso::EvtDalitzReso( const EvtDalitzPlot& dp, Pair pairRes, std::string nameIndex,
160 NumType typeN, EvtComplex fr12prod, EvtComplex fr13prod,
161 EvtComplex fr14prod, EvtComplex fr15prod, double s0prod )
162 : _dp( dp )
163 , _pairRes( pairRes )
164 , _typeN( typeN )
165 , _m0( 0. )
166 , _g0( 0. )
167 , _massFirst( dp.m( first( pairRes ) ) )
168 , _massSecond( dp.m( second( pairRes ) ) )
169 , _m0_mix( -1. )
170 , _g0_mix( 0. )
171 , _delta_mix( 0. )
172 , _amp_mix( 0., 0. )
173 , _g1( -1. )
174 , _g2( -1. )
175 , _coupling2( Undefined )
176 , _kmatrix_index( -1 )
177 , _fr12prod( fr12prod )
178 , _fr13prod( fr13prod )
179 , _fr14prod( fr14prod )
180 , _fr15prod( fr15prod )
181 , _s0prod( s0prod )
182 , _a( 0. )
183 , _r( 0. )
184 , _Blass( 0. )
185 , _phiB( 0. )
186 , _R( 0. )
187 , _phiR( 0. ) {
188 assert( _typeN == K_MATRIX || _typeN == K_MATRIX_I || _typeN == K_MATRIX_II );
189 _spin = EvtSpinType::SCALAR;
190 if ( nameIndex == "Pole1" ) _kmatrix_index = 1;
191 else if ( nameIndex == "Pole2" ) _kmatrix_index = 2;
192 else if ( nameIndex == "Pole3" ) _kmatrix_index = 3;
193 else if ( nameIndex == "Pole4" ) _kmatrix_index = 4;
194 else if ( nameIndex == "Pole5" ) _kmatrix_index = 5;
195 else if ( nameIndex == "f11prod" ) _kmatrix_index = 6;
196 else assert( 0 );
197}
198
199// LASS parameterization
200EvtDalitzReso::EvtDalitzReso( const EvtDalitzPlot& dp, Pair pairRes, double m0, double g0,
201 double a, double r, double B, double phiB, double R,
202 double phiR )
203 : _dp( dp )
204 , _pairRes( pairRes )
205 , _typeN( LASS )
206 , _m0( m0 )
207 , _g0( g0 )
208 , _massFirst( dp.m( first( pairRes ) ) )
209 , _massSecond( dp.m( second( pairRes ) ) )
210 , _m0_mix( -1. )
211 , _g0_mix( 0. )
212 , _delta_mix( 0. )
213 , _amp_mix( 0., 0. )
214 , _g1( -1. )
215 , _g2( -1. )
216 , _coupling2( Undefined )
217 , _kmatrix_index( -1 )
218 , _fr12prod( 0., 0. )
219 , _fr13prod( 0., 0. )
220 , _fr14prod( 0., 0. )
221 , _fr15prod( 0., 0. )
222 , _s0prod( 0. )
223 , _a( a )
224 , _r( r )
225 , _Blass( B )
226 , _phiB( phiB )
227 , _R( R )
228 , _phiR( phiR ) {
229 _spin = EvtSpinType::SCALAR;
230 _vd = EvtTwoBodyVertex( _massFirst, _massSecond, _m0, _spin );
231 _vd.set_f( 1.5 ); // Default values for Blatt-Weisskopf factors.
232}
233
235 : _dp( other._dp )
236 , _pairAng( other._pairAng )
237 , _pairRes( other._pairRes )
238 , _spin( other._spin )
239 , _typeN( other._typeN )
240 , _m0( other._m0 )
241 , _g0( other._g0 )
242 , _vb( other._vb )
243 , _vd( other._vd )
244 , _massFirst( other._massFirst )
245 , _massSecond( other._massSecond )
246 , _m0_mix( other._m0_mix )
247 , _g0_mix( other._g0_mix )
248 , _delta_mix( other._delta_mix )
249 , _amp_mix( other._amp_mix )
250 , _g1( other._g1 )
251 , _g2( other._g2 )
252 , _coupling2( other._coupling2 )
253 , _kmatrix_index( other._kmatrix_index )
254 , _fr12prod( other._fr12prod )
255 , _fr13prod( other._fr13prod )
256 , _fr14prod( other._fr14prod )
257 , _fr15prod( other._fr15prod )
258 , _s0prod( other._s0prod )
259 , _a( other._a )
260 , _r( other._r )
261 , _Blass( other._Blass )
262 , _phiB( other._phiB )
263 , _R( other._R )
264 , _phiR( other._phiR ) {}
265
267
269 double m = sqrt( x.q( _pairRes ) );
270
271 // do use always hash table (speed up fitting)
272 if ( _typeN == K_MATRIX || _typeN == K_MATRIX_I || _typeN == K_MATRIX_II )
273 return Fvector( m * m, _kmatrix_index );
274
275 if ( _typeN == LASS ) return lass( m * m );
276
277 EvtComplex amp( 1.0, 0.0 );
278
279 if ( _dp.bigM() != x.bigM() )
280 _vb = EvtTwoBodyVertex( _m0, _dp.m( EvtCyclic3::other( _pairRes ) ), x.bigM(), _spin );
281 EvtTwoBodyKine vb( m, x.m( EvtCyclic3::other( _pairRes ) ), x.bigM() );
282 EvtTwoBodyKine vd( _massFirst, _massSecond, m );
283
284 EvtComplex prop( 0, 0 );
285 if ( _typeN == NBW ) { prop = propBreitWigner( _m0, _g0, m ); }
286 else if ( _typeN == GAUSS_CLEO || _typeN == GAUSS_CLEO_ZEMACH )
287 { prop = propGauss( _m0, _g0, m ); }
288 else
289 {
290 if ( _coupling2 == Undefined )
291 {
292 // single BW
293 double g =
294 ( _g0 <= 0. || _vd.pD() <= 0. ) ? -_g0 : _g0 * _vd.widthFactor( vd ); // running
295 // width
296 if ( _typeN == GS_CLEO || _typeN == GS_CLEO_ZEMACH )
297 {
298 // Gounaris-Sakurai (GS)
299 assert( _massFirst == _massSecond );
300 prop = propGounarisSakurai( _m0, fabs( _g0 ), _vd.pD(), m, g, vd.p() );
301 }
302 else
303 {
304 // standard relativistic BW
305 prop = propBreitWignerRel( _m0, g, m );
306 }
307 }
308 else
309 {
310 // coupled width BW
311 EvtComplex G1, G2;
312 switch ( _coupling2 )
313 {
314 case PicPic: {
315 G1 = _g1 * _g1 * psFactor( _massFirst, _massSecond, m );
316 static double mPic = EvtPDL::getMass( EvtPDL::getId( "pi+" ) );
317 G2 = _g2 * _g2 * psFactor( mPic, mPic, m );
318 break;
319 }
320 case PizPiz: {
321 G1 = _g1 * _g1 * psFactor( _massFirst, _massSecond, m );
322 static double mPiz = EvtPDL::getMass( EvtPDL::getId( "pi0" ) );
323 G2 = _g2 * _g2 * psFactor( mPiz, mPiz, m );
324 break;
325 }
326 case PiPi: {
327 G1 = _g1 * _g1 * psFactor( _massFirst, _massSecond, m );
328 static double mPic = EvtPDL::getMass( EvtPDL::getId( "pi+" ) );
329 static double mPiz = EvtPDL::getMass( EvtPDL::getId( "pi0" ) );
330 G2 = _g2 * _g2 * psFactor( mPic, mPic, mPiz, mPiz, m );
331 break;
332 }
333 case KcKc: {
334 G1 = _g1 * _g1 * psFactor( _massFirst, _massSecond, m );
335 static double mKc = EvtPDL::getMass( EvtPDL::getId( "K+" ) );
336 G2 = _g2 * _g2 * psFactor( mKc, mKc, m );
337 break;
338 }
339 case KzKz: {
340 G1 = _g1 * _g1 * psFactor( _massFirst, _massSecond, m );
341 static double mKz = EvtPDL::getMass( EvtPDL::getId( "K0" ) );
342 G2 = _g2 * _g2 * psFactor( mKz, mKz, m );
343 break;
344 }
345 case KK: {
346 G1 = _g1 * _g1 * psFactor( _massFirst, _massSecond, m );
347 static double mKc = EvtPDL::getMass( EvtPDL::getId( "K+" ) );
348 static double mKz = EvtPDL::getMass( EvtPDL::getId( "K0" ) );
349 G2 = _g2 * _g2 * psFactor( mKc, mKc, mKz, mKz, m );
350 break;
351 }
352 case EtaPic: {
353 G1 = _g1 * _g1 * psFactor( _massFirst, _massSecond, m );
354 static double mEta = EvtPDL::getMass( EvtPDL::getId( "eta" ) );
355 static double mPic = EvtPDL::getMass( EvtPDL::getId( "pi+" ) );
356 G2 = _g2 * _g2 * psFactor( mEta, mPic, m );
357 break;
358 }
359 case EtaPiz: {
360 G1 = _g1 * _g1 * psFactor( _massFirst, _massSecond, m );
361 static double mEta = EvtPDL::getMass( EvtPDL::getId( "eta" ) );
362 static double mPiz = EvtPDL::getMass( EvtPDL::getId( "pi0" ) );
363 G2 = _g2 * _g2 * psFactor( mEta, mPiz, m );
364 break;
365 }
366 case PicPicKK: {
367 static double mPic = EvtPDL::getMass( EvtPDL::getId( "pi+" ) );
368 // G1 = _g1*_g1*psFactor(mPic,mPic,m);
369 G1 = _g1 * psFactor( mPic, mPic, m );
370 static double mKc = EvtPDL::getMass( EvtPDL::getId( "K+" ) );
371 static double mKz = EvtPDL::getMass( EvtPDL::getId( "K0" ) );
372 // G2 = _g2*_g2*psFactor(mKc,mKc,mKz,mKz,m);
373 G2 = _g2 * psFactor( mKc, mKc, mKz, mKz, m );
374 break;
375 }
376 default:
377 std::cout << "EvtDalitzReso:evaluate(): PANIC, wrong coupling2 state." << std::endl;
378 assert( 0 );
379 break;
380 }
381 // calculate standard couple BW propagator
382 if ( _coupling2 != WA76 ) prop = _g1 * propBreitWignerRelCoupled( _m0, G1, G2, m );
383 }
384 }
385 amp *= prop;
386
387 // Compute form-factors (Blatt-Weisskopf penetration factor)
388 amp *= _vb.formFactor( vb );
389 amp *= _vd.formFactor( vd );
390
391 // Compute numerator (angular distribution)
392 amp *= numerator( x, vb, vd );
393
394 // Compute electromagnetic mass mixing factor
395 if ( _m0_mix > 0. )
396 {
397 EvtComplex prop_mix;
398 if ( _typeN == NBW ) { prop_mix = propBreitWigner( _m0_mix, _g0_mix, m ); }
399 else
400 {
401 assert( _g1 < 0. ); // running width only
402 double g_mix = _g0_mix * _vd.widthFactor( vd );
403 prop_mix = propBreitWignerRel( _m0_mix, g_mix, m );
404 }
405 amp *= mixFactor( prop, prop_mix );
406 }
407
408 return amp;
409}
410
411EvtComplex EvtDalitzReso::psFactor( double& ma, double& mb, double& m ) {
412 if ( m > ( ma + mb ) )
413 {
414 EvtTwoBodyKine vd( ma, mb, m );
415 return EvtComplex( 0, 2 * vd.p() / m );
416 }
417 else
418 {
419 // analytical continuation
420 double s = m * m;
421 double phaseFactor_analyticalCont =
422 -0.5 * ( sqrt( 4 * ma * ma / s - 1 ) + sqrt( 4 * mb * mb / s - 1 ) );
423 return EvtComplex( phaseFactor_analyticalCont, 0 );
424 }
425}
426
427EvtComplex EvtDalitzReso::psFactor( double& ma1, double& mb1, double& ma2, double& mb2,
428 double& m ) {
429 return 0.5 * ( psFactor( ma1, mb1, m ) + psFactor( ma2, mb2, m ) );
430}
431
432EvtComplex EvtDalitzReso::propGauss( const double& m0, const double& s0, const double& m ) {
433 // Gaussian
434 double gauss =
435 1. / sqrt( EvtConst::twoPi ) / s0 * exp( -( m - m0 ) * ( m - m0 ) / 2. / ( s0 * s0 ) );
436 return EvtComplex( gauss, 0. );
437}
438
439EvtComplex EvtDalitzReso::propBreitWigner( const double& m0, const double& g0,
440 const double& m ) {
441 // non-relativistic BW
442 return sqrt( g0 / EvtConst::twoPi ) / ( m - m0 - EvtComplex( 0.0, g0 / 2. ) );
443}
444
445EvtComplex EvtDalitzReso::propBreitWignerRel( const double& m0, const double& g0,
446 const double& m ) {
447 // relativistic BW with real width
448 return 1. / ( m0 * m0 - m * m - EvtComplex( 0., m0 * g0 ) );
449}
450
451EvtComplex EvtDalitzReso::propBreitWignerRel( const double& m0, const EvtComplex& g0,
452 const double& m ) {
453 // relativistic BW with complex width
454 return 1. / ( m0 * m0 - m * m - EvtComplex( 0., m0 ) * g0 );
455}
456
457EvtComplex EvtDalitzReso::propBreitWignerRelCoupled( const double& m0, const EvtComplex& g1,
458 const EvtComplex& g2, const double& m ) {
459 // relativistic coupled BW
460 return 1. / ( m0 * m0 - m * m - ( g1 + g2 ) );
461}
462
463EvtComplex EvtDalitzReso::propGounarisSakurai( const double& m0, const double& g0,
464 const double& k0, const double& m,
465 const double& g, const double& k ) {
466 // Gounaris-Sakurai parameterization of pi+pi- P wave. PRD, Vol61, 112002. PRL, Vol21, 244.
467 // Expressions taken from BAD637v4, after fixing the imaginary part of the BW denominator: i
468 // M_R Gamma_R(s) --> i sqrt(s) Gamma_R(s)
469 return ( 1. + GS_d( m0, k0 ) * g0 / m0 ) /
470 ( m0 * m0 - m * m - EvtComplex( 0., m * g ) + GS_f( m0, g0, k0, m, k ) );
471}
472
473inline double EvtDalitzReso::GS_f( const double& m0, const double& g0, const double& k0,
474 const double& m, const double& k ) {
475 // m: sqrt(s)
476 // m0: nominal resonance mass
477 // k: momentum of pion in resonance rest frame (at m)
478 // k0: momentum of pion in resonance rest frame (at nominal resonance mass)
479 return g0 * m0 * m0 / ( k0 * k0 * k0 ) *
480 ( k * k * ( GS_h( m, k ) - GS_h( m0, k0 ) ) +
481 ( m0 * m0 - m * m ) * k0 * k0 * GS_dhods( m0, k0 ) );
482}
483
484inline double EvtDalitzReso::GS_h( const double& m, const double& k ) {
485 return 2. / EvtConst::pi * k / m * log( ( m + 2. * k ) / ( 2. * _massFirst ) );
486}
487
488inline double EvtDalitzReso::GS_dhods( const double& m0, const double& k0 ) {
489 return GS_h( m0, k0 ) * ( 0.125 / ( k0 * k0 ) - 0.5 / ( m0 * m0 ) ) +
490 0.5 / ( EvtConst::pi * m0 * m0 );
491}
492
493inline double EvtDalitzReso::GS_d( const double& m0, const double& k0 ) {
494 return 3. / EvtConst::pi * _massFirst * _massFirst / ( k0 * k0 ) *
495 log( ( m0 + 2. * k0 ) / ( 2. * _massFirst ) ) +
496 m0 / ( 2. * EvtConst::pi * k0 ) -
497 _massFirst * _massFirst * m0 / ( EvtConst::pi * k0 * k0 * k0 );
498}
499
500EvtComplex EvtDalitzReso::numerator( const EvtDalitzPoint& x, const EvtTwoBodyKine& vb,
501 const EvtTwoBodyKine& vd ) {
502 EvtComplex ret( 0., 0. );
503
504 // Non-relativistic Breit-Wigner
505 if ( NBW == _typeN ) { ret = angDep( x ); }
506
507 // Standard relativistic Zemach propagator
508 else if ( RBW_ZEMACH == _typeN )
509 { ret = _vd.phaseSpaceFactor( vd, EvtTwoBodyKine::AB ) * angDep( x ); }
510
511 // Standard relativistic Zemach propagator
512 else if ( RBW_ZEMACH2 == _typeN )
513 {
514 ret = _vd.phaseSpaceFactor( vd, EvtTwoBodyKine::AB ) *
515 _vb.phaseSpaceFactor( vb, EvtTwoBodyKine::AB ) * angDep( x );
516 if ( _spin == EvtSpinType::VECTOR ) { ret *= -4.; }
517 else if ( _spin == EvtSpinType::TENSOR ) { ret *= 16. / 3.; }
518 else if ( _spin != EvtSpinType::SCALAR ) assert( 0 );
519 }
520
521 // Kuehn-Santamaria normalization:
522 else if ( RBW_KUEHN == _typeN ) { ret = _m0 * _m0 * angDep( x ); }
523
524 // CLEO amplitude
525 else if ( ( RBW_CLEO == _typeN ) || ( GS_CLEO == _typeN ) || ( RBW_CLEO_ZEMACH == _typeN ) ||
526 ( GS_CLEO_ZEMACH == _typeN ) || ( GAUSS_CLEO == _typeN ) ||
527 ( GAUSS_CLEO_ZEMACH == _typeN ) )
528 {
529
530 Index iA = other( _pairAng ); // A = other(BC)
531 Index iB = common( _pairRes, _pairAng ); // B = common(AB,BC)
532 Index iC = other( _pairRes ); // C = other(AB)
533
534 double M = x.bigM();
535 double mA = x.m( iA );
536 double mB = x.m( iB );
537 double mC = x.m( iC );
538 double qAB = x.q( combine( iA, iB ) );
539 double qBC = x.q( combine( iB, iC ) );
540 double qCA = x.q( combine( iC, iA ) );
541
542 double M2 = M * M;
543 double m02 = ( ( RBW_CLEO_ZEMACH == _typeN ) || ( GS_CLEO_ZEMACH == _typeN ) ||
544 ( GAUSS_CLEO_ZEMACH == _typeN ) )
545 ? qAB
546 : _m0 * _m0;
547 double mA2 = mA * mA;
548 double mB2 = mB * mB;
549 double mC2 = mC * mC;
550
551 if ( _spin == EvtSpinType::SCALAR ) ret = EvtComplex( 1., 0. );
552 else if ( _spin == EvtSpinType::VECTOR )
553 { ret = qCA - qBC + ( M2 - mC2 ) * ( mB2 - mA2 ) / m02; }
554 else if ( _spin == EvtSpinType::TENSOR )
555 {
556 double x1 = qBC - qCA + ( M2 - mC2 ) * ( mA2 - mB2 ) / m02;
557 double x2 = M2 - mC2;
558 double x3 = qAB - 2 * M2 - 2 * mC2 + x2 * x2 / m02;
559 double x4 = mA2 - mB2;
560 double x5 = qAB - 2 * mB2 - 2 * mA2 + x4 * x4 / m02;
561 ret = x1 * x1 - x3 * x5 / 3.;
562 }
563 else assert( 0 );
564 }
565
566 return ret;
567}
568
569double EvtDalitzReso::angDep( const EvtDalitzPoint& x ) {
570 // Angular dependece for factorizable amplitudes
571 // unphysical cosines indicate we are in big trouble
572 double cosTh =
573 x.cosTh( _pairAng, _pairRes ); // angle between common(reso,ang) and other(reso)
574 if ( fabs( cosTh ) > 1. )
575 {
576 report( INFO, "EvtGen" ) << "cosTh " << cosTh << std::endl;
577 assert( 0 );
578 }
579
580 // in units of half-spin
581 return EvtdFunction::d( EvtSpinType::getSpin2( _spin ), 2 * 0, 2 * 0, acos( cosTh ) );
582}
583
584EvtComplex EvtDalitzReso::mixFactor( EvtComplex prop, EvtComplex prop_mix ) {
585 double Delta = _delta_mix * ( _m0 + _m0_mix );
586 return 1 / ( 1 - Delta * Delta * prop * prop_mix ) * ( 1 + _amp_mix * Delta * prop_mix );
587}
588
589EvtComplex EvtDalitzReso::Fvector( double s, int index ) {
590 assert( index >= 1 && index <= 6 );
591
592 // Define the complex coupling constant
593 // The convection is as follow
594 // i=0 --> pi+ pi-
595 // i=1 --> KK
596 // i=2 --> 4pi
597 // i=3 --> eta eta
598 // i=4 --> eta eta'
599 // The first index is the resonace-pole index
600
601 double g[5][5]; // Coupling constants. The first index is the pole index. The second index is
602 // the decay channel
603 double ma[5]; // Pole masses. The unit is in GeV
604
605 int solution =
606 ( _typeN == K_MATRIX )
607 ? 3
608 : ( ( _typeN == K_MATRIX_I ) ? 1 : ( ( _typeN == K_MATRIX_II ) ? 2 : 0 ) );
609 if ( solution == 0 )
610 {
611 std::cout << "EvtDalitzReso::Fvector() error. Kmatrix solution incorrectly chosen ! "
612 << std::endl;
613 abort();
614 }
615
616 if ( solution == 3 )
617 {
618
619 // coupling constants
620 // pi+pi- channel
621 g[0][0] = 0.22889;
622 g[1][0] = 0.94128;
623 g[2][0] = 0.36856;
624 g[3][0] = 0.33650;
625 g[4][0] = 0.18171;
626 // K+K- channel
627 g[0][1] = -0.55377;
628 g[1][1] = 0.55095;
629 g[2][1] = 0.23888;
630 g[3][1] = 0.40907;
631 g[4][1] = -0.17558;
632 // 4pi channel
633 g[0][2] = 0;
634 g[1][2] = 0;
635 g[2][2] = 0.55639;
636 g[3][2] = 0.85679;
637 g[4][2] = -0.79658;
638 // eta eta channel
639 g[0][3] = -0.39899;
640 g[1][3] = 0.39065;
641 g[2][3] = 0.18340;
642 g[3][3] = 0.19906;
643 g[4][3] = -0.00355;
644 // eta eta' channel
645 g[0][4] = -0.34639;
646 g[1][4] = 0.31503;
647 g[2][4] = 0.18681;
648 g[3][4] = -0.00984;
649 g[4][4] = 0.22358;
650
651 // Pole masses
652 ma[0] = 0.651;
653 ma[1] = 1.20360;
654 ma[2] = 1.55817;
655 ma[3] = 1.21000;
656 ma[4] = 1.82206;
657 }
658 else if ( solution == 1 )
659 { // solnI.txt
660
661 // coupling constants
662 // pi+pi- channel
663 g[0][0] = 0.31896;
664 g[1][0] = 0.85963;
665 g[2][0] = 0.47993;
666 g[3][0] = 0.45121;
667 g[4][0] = 0.39391;
668 // K+K- channel
669 g[0][1] = -0.49998;
670 g[1][1] = 0.52402;
671 g[2][1] = 0.40254;
672 g[3][1] = 0.42769;
673 g[4][1] = -0.30860;
674 // 4pi channel
675 g[0][2] = 0;
676 g[1][2] = 0;
677 g[2][2] = 1.0;
678 g[3][2] = 1.15088;
679 g[4][2] = 0.33999;
680 // eta eta channel
681 g[0][3] = -0.21554;
682 g[1][3] = 0.38093;
683 g[2][3] = 0.21811;
684 g[3][3] = 0.22925;
685 g[4][3] = 0.06919;
686 // eta eta' channel
687 g[0][4] = -0.18294;
688 g[1][4] = 0.23788;
689 g[2][4] = 0.05454;
690 g[3][4] = 0.06444;
691 g[4][4] = 0.32620;
692
693 // Pole masses
694 ma[0] = 0.7369;
695 ma[1] = 1.24347;
696 ma[2] = 1.62681;
697 ma[3] = 1.21900;
698 ma[4] = 1.74932;
699 }
700 else if ( solution == 2 )
701 { // solnIIa.txt
702
703 // coupling constants
704 // pi+pi- channel
705 g[0][0] = 0.26014;
706 g[1][0] = 0.95289;
707 g[2][0] = 0.46244;
708 g[3][0] = 0.41848;
709 g[4][0] = 0.01804;
710 // K+K- channel
711 g[0][1] = -0.57849;
712 g[1][1] = 0.55887;
713 g[2][1] = 0.31712;
714 g[3][1] = 0.49910;
715 g[4][1] = -0.28430;
716 // 4pi channel
717 g[0][2] = 0;
718 g[1][2] = 0;
719 g[2][2] = 0.70340;
720 g[3][2] = 0.96819;
721 g[4][2] = -0.90100;
722 // eta eta channel
723 g[0][3] = -0.32936;
724 g[1][3] = 0.39910;
725 g[2][3] = 0.22963;
726 g[3][3] = 0.24415;
727 g[4][3] = -0.07252;
728 // eta eta' channel
729 g[0][4] = -0.30906;
730 g[1][4] = 0.31143;
731 g[2][4] = 0.19802;
732 g[3][4] = -0.00522;
733 g[4][4] = 0.17097;
734
735 // Pole masses
736 ma[0] = 0.67460;
737 ma[1] = 1.21094;
738 ma[2] = 1.57896;
739 ma[3] = 1.21900;
740 ma[4] = 1.86602;
741 }
742
743 // Now define the K-matrix pole
744 double rho1sq, rho2sq, rho4sq, rho5sq;
745 EvtComplex rho[5];
746 double f[5][5];
747
748 // Initalize the mass of the resonance
749 double mpi = 0.13957;
750 double mK = 0.493677; // using charged K value
751 double meta = 0.54775; // using PDG value
752 double metap = 0.95778; // using PDG value
753
754 // Initialize the matrix to value zero
755 EvtComplex K[5][5];
756 for ( int i = 0; i < 5; i++ )
757 {
758 for ( int j = 0; j < 5; j++ )
759 {
760 K[i][j] = EvtComplex( 0, 0 );
761 f[i][j] = 0;
762 }
763 }
764
765 // Input the _f[i][j] scattering data
766 double s_scatt = 0.0;
767 if ( solution == 3 ) s_scatt = -3.92637;
768 else if ( solution == 1 ) s_scatt = -5.0;
769 else if ( solution == 2 ) s_scatt = -5.0;
770 double sa = 1.0;
771 double sa_0 = -0.15;
772 if ( solution == 3 )
773 {
774 f[0][0] = 0.23399; // f^scatt
775 f[0][1] = 0.15044;
776 f[0][2] = -0.20545;
777 f[0][3] = 0.32825;
778 f[0][4] = 0.35412;
779 }
780 else if ( solution == 1 )
781 {
782 f[0][0] = 0.04214; // f^scatt
783 f[0][1] = 0.19865;
784 f[0][2] = -0.63764;
785 f[0][3] = 0.44063;
786 f[0][4] = 0.36717;
787 }
788 else if ( solution == 2 )
789 {
790 f[0][0] = 0.26447; // f^scatt
791 f[0][1] = 0.10400;
792 f[0][2] = -0.35445;
793 f[0][3] = 0.31596;
794 f[0][4] = 0.42483;
795 }
796 f[1][0] = f[0][1];
797 f[2][0] = f[0][2];
798 f[3][0] = f[0][3];
799 f[4][0] = f[0][4];
800
801 // Now construct the phase-space factor
802 // For eta-eta' there is no difference term
803 rho1sq = 1. - pow( mpi + mpi, 2 ) / s; // pi+ pi- phase factor
804 if ( rho1sq >= 0 ) rho[0] = EvtComplex( sqrt( rho1sq ), 0 );
805 else rho[0] = EvtComplex( 0, sqrt( -rho1sq ) );
806
807 rho2sq = 1. - pow( mK + mK, 2 ) / s;
808 if ( rho2sq >= 0 ) rho[1] = EvtComplex( sqrt( rho2sq ), 0 );
809 else rho[1] = EvtComplex( 0, sqrt( -rho2sq ) );
810
811 // using the A&S 4pi phase space Factor:
812 // Shit, not continue
813 if ( s <= 1 )
814 {
815 double real = 1.2274 + .00370909 / ( s * s ) - .111203 / s - 6.39017 * s +
816 16.8358 * s * s - 21.8845 * s * s * s + 11.3153 * s * s * s * s;
817 double cont32 = sqrt( 1.0 - ( 16.0 * mpi * mpi ) );
818 rho[2] = EvtComplex( cont32 * real, 0 );
819 }
820 else rho[2] = EvtComplex( sqrt( 1. - 16. * mpi * mpi / s ), 0 );
821
822 rho4sq = 1. - pow( meta + meta, 2 ) / s;
823 if ( rho4sq >= 0 ) rho[3] = EvtComplex( sqrt( rho4sq ), 0 );
824 else rho[3] = EvtComplex( 0, sqrt( -rho4sq ) );
825
826 rho5sq = 1. - pow( meta + metap, 2 ) / s;
827 if ( rho5sq >= 0 ) rho[4] = EvtComplex( sqrt( rho5sq ), 0 );
828 else rho[4] = EvtComplex( 0, sqrt( -rho5sq ) );
829
830 double smallTerm = 1; // Factor to prevent divergences.
831
832 // Check if some pole may arise problems.
833 for ( int pole = 0; pole < 5; pole++ )
834 if ( fabs( pow( ma[pole], 2 ) - s ) < PRECISION ) smallTerm = pow( ma[pole], 2 ) - s;
835
836 // now sum all the pole
837 // equation (3) in the E791 K-matrix paper
838 for ( int i = 0; i < 5; i++ )
839 {
840 for ( int j = 0; j < 5; j++ )
841 {
842 for ( int pole_index = 0; pole_index < 5; pole_index++ )
843 {
844 double A = g[pole_index][i] * g[pole_index][j];
845 double B = ma[pole_index] * ma[pole_index] - s;
846
847 if ( fabs( B ) < PRECISION ) K[i][j] += EvtComplex( A, 0 );
848 else K[i][j] += EvtComplex( A / B, 0 ) * smallTerm;
849 }
850 }
851 }
852
853 // now add the SVT part
854 for ( int i = 0; i < 5; i++ )
855 {
856 for ( int j = 0; j < 5; j++ )
857 {
858 double C = f[i][j] * ( 1.0 - s_scatt );
859 double D = ( s - s_scatt );
860 K[i][j] += EvtComplex( C / D, 0 ) * smallTerm;
861 }
862 }
863
864 // Fix the bug in the FOCUS paper
865 // Include the Alder zero term:
866 for ( int i = 0; i < 5; i++ )
867 {
868 for ( int j = 0; j < 5; j++ )
869 {
870 double E = ( s - ( sa * mpi * mpi * 0.5 ) ) * ( 1.0 - sa_0 );
871 double F = ( s - sa_0 );
872 K[i][j] *= EvtComplex( E / F, 0 );
873 }
874 }
875
876 // This is not correct!
877 //(1-ipK) != (1-iKp)
878 static EvtMatrix<EvtComplex> mat;
879 mat.setRange( 5 ); // Try to do in only the first time. DEFINE ALLOCATION IN CONSTRUCTOR.
880
881 for ( int row = 0; row < 5; row++ )
882 for ( int col = 0; col < 5; col++ )
883 mat( row, col ) =
884 ( row == col ) * smallTerm - EvtComplex( 0., 1. ) * K[row][col] * rho[col];
885
886 EvtMatrix<EvtComplex>* matInverse =
887 mat.inverse(); // The 1st row of the inverse matrix. This matrix is
888 // {(I-iKp)^-1}_0j
889 vector<EvtComplex> U1j;
890 for ( int j = 0; j < 5; j++ ) U1j.push_back( ( *matInverse )[0][j] );
891
892 delete matInverse;
893
894 // this calculates final F0 factor
895 EvtComplex value( 0, 0 );
896 if ( index <= 5 )
897 {
898 // this calculates the beta_idx Factors
899 for ( int j = 0; j < 5; j++ )
900 { // sum for 5 channel
901 EvtComplex top = U1j[j] * g[index - 1][j];
902 double bottom = ma[index - 1] * ma[index - 1] - s;
903
904 if ( fabs( bottom ) < PRECISION ) value += top;
905 else value += top / bottom * smallTerm;
906 }
907 }
908 else
909 {
910 // this calculates fprod Factors
911 value += U1j[0];
912 value += U1j[1] * _fr12prod;
913 value += U1j[2] * _fr13prod;
914 value += U1j[3] * _fr14prod;
915 value += U1j[4] * _fr15prod;
916
917 value *= ( 1 - _s0prod ) / ( s - _s0prod ) * smallTerm;
918 }
919
920 return value;
921}
922
923// replace Breit-Wigner with LASS
924EvtComplex EvtDalitzReso::lass( double s ) {
925 EvtTwoBodyKine vd( _massFirst, _massSecond, sqrt( s ) );
926 double q = vd.p();
927 double GammaM = _g0 * _vd.widthFactor( vd ); // running width;
928
929 // calculate the background phase motion
930 double cot_deltaB = 1.0 / ( _a * q ) + 0.5 * _r * q;
931 double deltaB = atan( 1.0 / cot_deltaB );
932 double totalB = deltaB + _phiB;
933
934 // calculate the resonant phase motion
935 double deltaR = atan( ( _m0 * GammaM / ( _m0 * _m0 - s ) ) );
936 double totalR = deltaR + _phiR;
937
938 // sum them up
939 EvtComplex bkgB, resT;
940 bkgB = EvtComplex( _Blass * sin( totalB ), 0 ) * EvtComplex( cos( totalB ), sin( totalB ) );
941 resT = EvtComplex( _R * sin( deltaR ), 0 ) * EvtComplex( cos( totalR ), sin( totalR ) ) *
942 EvtComplex( cos( 2 * totalB ), sin( 2 * totalB ) );
943 EvtComplex T = bkgB + resT;
944
945 return T;
946}
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
TF1 * g1
Double_t x[10]
EvtComplex exp(const EvtComplex &c)
#define PRECISION
double meta
double mpi
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
@ INFO
Definition EvtReport.hh:52
XmlRpcServer s
****INTEGER imax DOUBLE PRECISION m_pi *DOUBLE PRECISION m_amfin DOUBLE PRECISION m_Chfin DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_sinw2 DOUBLE PRECISION m_GFermi DOUBLE PRECISION m_MfinMin DOUBLE PRECISION m_ta2 INTEGER m_out INTEGER m_KeyFSR INTEGER m_KeyQCD *COMMON c_Semalib $ !copy of input $ !CMS energy $ !beam mass $ !final mass $ !beam charge $ !final charge $ !smallest final mass $ !Z mass $ !Z width $ !EW mixing angle $ !Gmu Fermi $ alphaQED at q
Definition KKsem.h:33
***************************************************************************************Pseudo Class RRes *****************************************************************************************Parameters and physical constants **Maarten sept ************************************************************************DOUBLE PRECISION xsmu **************************************************************************PARTICLE DATA all others are from PDG *Only resonances with known widths into electron pairs are sept ************************************************************************C Declarations C
Definition RRes.h:29
static const double pi
Definition EvtConst.hh:27
static const double twoPi
Definition EvtConst.hh:28
EvtComplex evaluate(const EvtDalitzPoint &p)
void setRange(int range)
Definition EvtMatrix.hh:41
EvtMatrix * inverse()
Definition EvtMatrix.hh:119
static double getMass(EvtId i)
Definition EvtPDL.hh:44
static EvtId getId(const std::string &name)
Definition EvtPDL.cc:272
static int getSpin2(spintype stype)
double p(Index i=AB) const
static double d(int j, int m1, int m2, double theta)
Index common(Pair i, Pair j)
Pair combine(Index i, Index j)
Index other(Index i, Index j)