62 massB1_a00 = 0.547862;
63 massB2_a00 = 0.134977;
64 massC1_a00 = 0.497614;
65 massC2_a00 = 0.497614;
73 massB1_a0p = 0.547862;
89 phase_a2m = -0.138591;
94 mag_a0_1450m = 0.210031;
95 phase_a0_1450m = -0.23412;
97 mass_a0_1450m = 1.474;
98 width_a0_1450m = 0.265;
126 double value = EvaluateAmp( D1, D2, D3 );
132 double m23sq = ( p4_d2 + p4_d3 ).mass2();
133 double m13sq = ( p4_d1 + p4_d3 ).mass2();
134 double m12sq = ( p4_d1 + p4_d2 ).mass2();
135 double cosTheta23_1v2 =
136 helicityAngle( MD,
m2, m3,
m1, m23sq, m12sq );
137 double cosTheta13_1v2 =
138 helicityAngle( MD,
m1, m3,
m2, m13sq, m12sq );
139 double cosTheta12_2v3 =
140 helicityAngle( MD,
m2,
m1, m3, m12sq, m23sq );
144 std::complex<double> Amp_a00 =
145 GetCoefficient( mag_a00, phase_a00 ) *
146 AmpFlatteRes( m23sq, mass_a00,
m2, m3, gA_a00, massB1_a00, massB2_a00, gB_a00,
147 massC1_a00, massC2_a00, gC_a00, spin_a00, mesonRadius ) /
149 std::complex<double> Amp_a0p = GetCoefficient( mag_a0p, phase_a0p ) *
150 AmpFlatteRes( m13sq, mass_a0p,
m1, m3, gA_a0p, massB1_a0p,
151 massB2_a0p, gB_a0p, spin_a0p, mesonRadius ) /
153 std::complex<double> Amp_phi =
154 GetCoefficient( mag_phi, phase_phi ) *
155 AmpRelBreitWignerRes( m23sq, mass_phi,
m2, m3, width_phi, spin_phi, mesonRadius ) *
156 Wigner_d( spin_phi, 0, 0, acos( cosTheta23_1v2 ) ) / 715.1406308838;
157 std::complex<double> Amp_a2p =
158 GetCoefficient( mag_a2p, phase_a2p ) *
159 AmpRelBreitWignerRes( m13sq, mass_a2p,
m1, m3, width_a2p, spin_a2p, mesonRadius ) *
160 Wigner_d( spin_a2p, 0, 0, acos( cosTheta13_1v2 ) ) / 340.70301058;
161 std::complex<double> Amp_a2m =
162 GetCoefficient( mag_a2m, phase_a2m ) *
163 AmpRelBreitWignerRes( m12sq, mass_a2m,
m1,
m2, width_a2m, spin_a2m, mesonRadius ) *
164 Wigner_d( spin_a2m, 0, 0, acos( cosTheta12_2v3 ) ) / 340.737568318;
165 std::complex<double> Amp_a0_1450m =
166 GetCoefficient( mag_a0_1450m, phase_a0_1450m ) *
167 AmpRelBreitWignerRes( m12sq, mass_a0_1450m,
m1,
m2, width_a0_1450m, spin_a0_1450m,
174 std::complex<double> Amp = Amp_a00 + Amp_a0p + Amp_phi + Amp_a2p + Amp_a2m + Amp_a0_1450m;
175 double value = std::norm( Amp );
179double EvtD0ToKSKK::helicityAngle(
double M,
double m,
double m2,
double mSpec,
180 double invMassSqA,
double invMassSqB ) {
182 double eCms = ( invMassSqA + m * m - m2 * m2 ) / ( 2 * sqrt( invMassSqA ) );
183 double pCms = eCms * eCms - m * m;
185 double eSpecCms = ( M * M - mSpec * mSpec - invMassSqA ) / ( 2 * sqrt( invMassSqA ) );
186 double pSpecCms = eSpecCms * eSpecCms - mSpec * mSpec;
187 double cosAngle = -( invMassSqB - m * m - mSpec * mSpec - 2 * eCms * eSpecCms ) /
188 ( 2 * sqrt( pCms * pSpecCms ) );
192std::complex<double> EvtD0ToKSKK::AmpRelBreitWignerRes(
double mSq,
double mR,
double ma,
193 double mb,
double width,
194 unsigned int J,
double mesonRadius ) {
198 std::complex<double> i( 0, 1 );
199 double sqrtS = sqrt( mSq );
201 FormFactor( sqrtS, ma, mb, J, mesonRadius ) / FormFactor( mR, ma, mb, J, mesonRadius );
202 std::complex<double> qTerm =
203 pow( ( phspFactor( sqrtS, ma, mb ) / phspFactor( mR, ma, mb ) ) * sqrtS / mR,
206 std::complex<double> g_final = widthToCoupling( mSq, mR, width, ma, mb, J, mesonRadius );
207 std::complex<double> denom = std::complex<double>( mR * mR - mSq, 0 ) +
208 ( -1.0 ) * i * sqrtS * ( width * qTerm * barrier );
209 std::complex<double> result = g_final / denom;
213std::complex<double> EvtD0ToKSKK::widthToCoupling(
double mSq,
double mR,
double width,
214 double ma,
double mb,
double spin,
215 double mesonRadius ) {
216 double sqrtS = sqrt( mSq );
217 std::complex<double> gammaA( 1, 0 );
220 std::complex<double>
q = qValue( mR, ma, mb );
221 double ffR = FormFactor( mR, ma, mb, spin, mesonRadius );
222 std::complex<double> qR = pow(
q, spin );
225 std::complex<double> rho = phspFactor( sqrtS, ma, mb );
226 std::complex<double> denom = gammaA * sqrt( rho );
227 std::complex<double> res = std::complex<double>( sqrt( mR * width ), 0 ) / denom;
231std::complex<double> EvtD0ToKSKK::AmpFlatteRes(
double mSq,
double mR,
double massA1,
232 double massA2,
double gA,
double massB1,
233 double massB2,
double couplingB,
234 unsigned int J,
double mesonRadius ) {
235 std::complex<double> i( 0, 1 );
236 double sqrtS = sqrt( mSq );
237 std::complex<double> termA =
238 gA * gA * phspFactor( sqrtS, massA1, massA2 );
239 std::complex<double> termB =
240 couplingB * couplingB *
241 phspFactor( sqrtS, massB1, massB2 );
242 std::complex<double> denom =
243 std::complex<double>( mR * mR - mSq, 0 ) + ( -1.0 ) * i * ( termA + termB );
244 std::complex<double> result = std::complex<double>( gA, 0 ) / denom;
247std::complex<double> EvtD0ToKSKK::AmpFlatteRes(
double mSq,
double mR,
double massA1,
248 double massA2,
double gA,
double massB1,
249 double massB2,
double couplingB,
double massC1,
250 double massC2,
double couplingC,
251 unsigned int J,
double mesonRadius ) {
252 std::complex<double> i( 0, 1 );
253 double sqrtS = sqrt( mSq );
254 std::complex<double> termA =
255 gA * gA * phspFactor( sqrtS, massA1, massA2 );
256 std::complex<double> termB =
257 couplingB * couplingB *
258 phspFactor( sqrtS, massB1, massB2 );
259 std::complex<double> termC =
260 couplingC * couplingC *
261 phspFactor( sqrtS, massC1, massC2 );
262 std::complex<double> denom =
263 std::complex<double>( mR * mR - mSq, 0 ) + ( -1.0 ) * i * ( termA + termB + termC );
264 std::complex<double> result = std::complex<double>( gA, 0 ) / denom;
268double EvtD0ToKSKK::FormFactor(
double sqrtS,
double ma,
double mb,
double spin,
269 double mesonRadius ) {
270 if ( spin == 0 ) {
return 1.0; }
271 std::complex<double>
q = qValue( sqrtS, ma, mb );
275 double qSq = std::norm(
q );
276 double z = qSq * mesonRadius * mesonRadius;
278 if ( spin == 1 ) {
return ( sqrt( 2 * z / ( z + 1 ) ) ); }
279 else if ( spin == 2 ) {
return ( sqrt( 13 * z * z / ( ( z - 3 ) * ( z - 3 ) + 9 * z ) ) ); }
283std::complex<double> EvtD0ToKSKK::phspFactor(
double sqrtS,
double ma,
double mb ) {
297 double s = sqrtS * sqrtS;
298 std::complex<double> i( 0, 1 );
299 std::complex<double> rho;
300 double q = sqrt( fabs( qSqValue( sqrtS, ma, mb ) * 4 /
s ) );
303 rho = -
q /
M_PI * log( fabs( ( 1 +
q ) / ( 1 -
q ) ) );
305 else if ( 0 <
s &&
s <= ( ma + mb ) * ( ma + mb ) )
307 rho = ( -2.0 *
q /
M_PI * atan( 1 /
q ) ) / ( i * 16.0 *
M_PI * sqrtS );
309 else if ( ( ma + mb ) * ( ma + mb ) <
s )
311 rho = ( -
q /
M_PI * log( fabs( ( 1 +
q ) / ( 1 -
q ) ) ) + i *
q ) /
312 ( i * 16.0 *
M_PI * sqrtS );
317std::complex<double> EvtD0ToKSKK::qValue(
double sqrtS,
double ma,
double mb ) {
318 return phspFactor( sqrtS, ma, mb ) * 8.0 *
M_PI * sqrtS;
321double EvtD0ToKSKK::qSqValue(
double sqrtS,
double ma,
double mb ) {
322 double mapb = ma + mb;
323 double mamb = ma - mb;
324 double xSq = sqrtS * sqrtS;
325 double t1 = xSq - mapb * mapb;
326 double t2 = xSq - mamb * mamb;
327 return ( t1 * t2 / ( 4 * xSq ) );
330std::complex<double> EvtD0ToKSKK::GetCoefficient(
double mag,
double phase )
const {
331 return std::complex<double>( fabs( mag ) *
cos( phase ), fabs( mag ) *
sin( phase ) );
334double EvtD0ToKSKK::Wigner_d(
unsigned int __j,
unsigned int __m,
unsigned int __n,
336 int J = (int)( 2. * __j );
337 int M = (int)( 2. * __m );
338 int N = (int)( 2. * __n );
339 int temp_M, k, k_low, k_hi;
340 double const_term = 0.0, sum_term = 0.0, d = 1.0;
341 int m_p_n, j_p_m, j_p_n, j_m_m, j_m_n;
342 int kmn1, kmn2, jmnk, jmk, jnk;
345 if ( J < 0 ||
abs( M ) > J ||
abs( N ) > J )
348 cout <<
"d: you have entered an illegal number for J, M, N." << endl;
349 cout <<
"Must follow these rules: J >= 0, abs(M) <= J, and abs(N) <= J." << endl;
350 cout <<
"J = " << J <<
" M = " << M <<
" N = " << N << endl;
356 __beta = fabs( __beta );
362 m_p_n = ( M + N ) / 2;
363 j_p_m = ( J + M ) / 2;
364 j_m_m = ( J - M ) / 2;
365 j_p_n = ( J + N ) / 2;
366 j_m_n = ( J - N ) / 2;
368 kk = (double)factorial( j_p_m ) * (double)factorial( j_m_m ) * (double)factorial( j_p_n ) *
369 (double)factorial( j_m_n );
370 const_term = pow( ( -1.0 ), ( j_p_m ) ) * sqrt( kk );
372 k_low = ( ( m_p_n > 0 ) ? m_p_n : 0 );
373 k_hi = ( ( j_p_m < j_p_n ) ? j_p_m : j_p_n );
375 for ( k = k_low; k <= k_hi; k++ )
377 kmn1 = 2 * k - ( M + N ) / 2;
378 jmnk = J + ( M + N ) / 2 - 2 * k;
379 jmk = ( J + M ) / 2 - k;
380 jnk = ( J + N ) / 2 - k;
381 kmn2 = k - ( M + N ) / 2;
383 pow( ( -1.0 ), ( k ) ) *
384 ( ( pow(
cos( __beta / 2.0 ), kmn1 ) ) * ( pow(
sin( __beta / 2.0 ), jmnk ) ) ) /
385 ( factorial( k ) * factorial( jmk ) * factorial( jnk ) * factorial( kmn2 ) );
388 d = const_term * sum_term * sqrt( 2.0 * __j + 1.0 );
392int EvtD0ToKSKK::factorial(
int i ) {
394 if ( ( i == 0 ) || ( i == 1 ) )
f = 1;
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
double sin(const BesAngle a)
double cos(const BesAngle a)
****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
void getName(std::string &name)
void decay(EvtParticle *p)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
void setProb(double prob)
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)