EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
Evtbs2llGammaISRFSRAmp.cpp
Go to the documentation of this file.
1
2/***********************************************************************
3* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4* *
5* This file is part of EvtGen. *
6* *
7* EvtGen is free software: you can redistribute it and/or modify *
8* it under the terms of the GNU General Public License as published by *
9* the Free Software Foundation, either version 3 of the License, or *
10* (at your option) any later version. *
11* *
12* EvtGen is distributed in the hope that it will be useful, *
13* but WITHOUT ANY WARRANTY; without even the implied warranty of *
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15* GNU General Public License for more details. *
16* *
17* You should have received a copy of the GNU General Public License *
18* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19***********************************************************************/
20
22
23#include "EvtGenBase/EvtAmp.hh"
27#include "EvtGenBase/EvtId.hh"
29#include "EvtGenBase/EvtPDL.hh"
36
39
40#include <cstdlib>
41
42// input: *parent - the pointer to the parent particle (B-meson, the
43// object of the EvtParticle class);
44// *formFactors - the pointer to instance of EvtbTosllGammaFF class object;
45// *WilsCoeff - the pointer to the Standart Model Wilson Coefficients class;
46// mu - the scale parameter, GeV;
47// Nf - number of "effective" flavors (for b-quark Nf=5);
48// sr - state radiation type:
49// = 0 the ISR only,
50// = 1 the FSR only,
51// = 2 both ISR + FSR (== BSTOGLLMNT model);
52// res_swch - resonant switching parameter:
53// = 0 the resonant contribution switched OFF,
54// = 1 the resonant contribution switched ON;
55// ias - switching parameter for \alpha_s(M_Z) value:
56// = 0 PDG 1sigma minimal alpha_s(M_Z),
57// = 1 PDG average value alpha_s(M_Z),
58// = 2 PDG 1sigma maximal alpha_s(M_Z).
59// Egamma_min - photon energy cut, GeV;
60// Wolfenstein parameterization for CKM matrix
61// CKM_A, CKM_lambda, CKM_barrho, CKM_bareta
62
64 Evtbs2llGammaFF* formFactors,
65 EvtbTosllWilsCoeffNLO* WilsCoeff,
66 double mu, int Nf, int sr, int res_swch,
67 int ias, double Egamma_min, double CKM_A,
68 double CKM_lambda, double CKM_barrho,
69 double CKM_bareta, double mumumass_min )
70{
71 // FILE *mytest;
72
73 int iG = 0; // photon is the first daughter particle
74 int il1 = 1,
75 il2 = 2; // leptons are the second and thirds daughter particles
76
77 EvtComplex unit1( 1.0, 0.0 ); // real unit
78 EvtComplex uniti( 0.0, 1.0 ); // imaginary unit
79
80 double M1 = parent->mass(); // B - meson mass, GeV
81 double ml = parent->getDaug( il1 )->mass(); // leptonic mass, GeV
82 double mq = 0.0; // light quark mass from the dispersion QM, GeV
83 double mc = formFactors->getQuarkMass(
84 4 ); // m_c mass from the dispersion QM, GeV
85 double mb = formFactors->getQuarkMass(
86 5 ); // m_b mass from the dispersion QM, GeV
87 double Mw = 80.403; // GeV W-boson mass, GeV
88 double mt = 174.2; // GeV t-quark mass, GeV
89 double fb = 0.0; // leptonic decay constant of B-meson, Gev
90
91 EvtComplex Vtb, Vtq, Vub, Vuq, Vcb,
92 Vcq; // V_{tb}, V_{tq}, V_{ub}, V_{uq}, V_{cb}, V_{cq}
93 EvtComplex CKM_factor; // V^*_{tq}*V_{tb}, where q={d,s}
94 EvtComplex lambda_qu; // V^*_{uq}*V_{ub}/V^*_{tq}*V_{tb}, where q={d,s}
95 EvtComplex lambda_qc; // V^*_{cq}*V_{cb}/V^*_{tq}*V_{tb}, where q={d,s}
96 double Relambda_qu, Imlambda_qu;
97
98 // to find charges of ell^+ and ell^- in the B-meson daughters
99 int charge1 = EvtPDL::chg3( parent->getDaug( il1 )->getId() );
100 int charge2 = EvtPDL::chg3( parent->getDaug( il2 )->getId() );
101 if ( charge1 == 0 || charge2 == 0 ) {
102 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
103 << "\n\n The function EvtbsTollGammaAmp::CalcAmp(...)"
104 << "\n Error in the leptonic charge getting!"
105 << "\n charge1 =" << charge1
106 << "\n charge2 =" << charge2 << "\n charge gamma ="
107 << EvtPDL::chg3( parent->getDaug( iG )->getId() )
108 << "\n number of daughters =" << parent->getNDaug() << std::endl;
109 ::abort();
110 }
111
112 EvtParticle* lepPlus = nullptr;
113 EvtParticle* lepMinus = nullptr;
114
115 lepPlus = ( charge1 > charge2 )
116 ? parent->getDaug( il1 )
117 : parent->getDaug( il2 ); // positive charged
118 lepMinus = ( charge1 < charge2 )
119 ? parent->getDaug( il1 )
120 : parent->getDaug( il2 ); // negative charged
121
122 EvtVector4R p = parent->getP4Restframe(); // B-meson momentum in the B-rest frame
123 EvtVector4R k =
124 parent->getDaug( iG )->getP4(); // 4-momentum of photon in the B-rest frame
125 EvtVector4R q = p - k; // transition 4-momentum q=p-k in the B-rest frame
126 EvtVector4R p_1; // 4-momentum of ell^+ in the B-rest frame
127 EvtVector4R p_2; // 4-momentum of ell^- in the B-rest frame
128
129 // the preparation of the leptonic 4-momentums in the B-rest frame
130 if ( charge1 > charge2 ) {
131 p_1 = parent->getDaug( il1 )->getP4();
132 p_2 = parent->getDaug( il2 )->getP4();
133 } else {
134 p_1 = parent->getDaug( il2 )->getP4();
135 p_2 = parent->getDaug( il1 )->getP4();
136 }
137
138 EvtVector4R p_minus_p_1 =
139 p - p_1; // transition momentum of the B-meson and antilepton p-p_1
140 EvtVector4R p_minus_p_2 =
141 p - p_2; // transition momentum of the B-meson and lepton p-p_2
142
143 double q2 = q.mass2(); // Mandelstam variable s=q^2
144 double p2 = p.mass2(); // p^2=M1^2
145 double t = p_minus_p_1.mass2(); // Mandelstam variable t=(p-p_1)^2
146 double u = p_minus_p_2.mass2(); // Mandelstam variable u=(p-p_2)^2
147
148 // scalar products
149 double pk = 0.5 * ( p2 - q2 ); // (p*k)
150 double p1k = 0.5 * ( pow( ml, 2.0 ) - u ); // (p1*k)
151 double p2k = 0.5 * ( pow( ml, 2.0 ) - t ); // (p2*k)
152
153 double hatq2 = q2 / ( M1 * M1 ); // \hat s = q^2/M_1^2
154 double Egam = 0.5 * M1 *
155 ( 1 - hatq2 ); // photon energy in the B-meson rest frame
156
157 EvtVector4R hatp = p / M1;
158 EvtVector4R hatk = k / M1;
159
160 // EvtGenReport(EVTGEN_NOTICE,"EvtGen")
161 // << "\n\n The function EvtbsTollGammaISRFSRAmp::CalcAmp(...)"
162 // << "\n q = p-k =" << p-k << " q^2 = " << (p-k).mass2()
163 // << "\n q = p1+p2 =" << p_1+p_2 << " q^2 = " << (p_1+p_2).mass2()
164 // << "\n m_ell =" << parent->getDaug(il1)->mass()
165 // << "\n m_ell =" << parent->getDaug(il2)->mass()
166 // << "\n m_gamma =" << parent->getDaug(iG)->mass()
167 // << std::endl;
168
169 EvtId idparent = parent->getId(); // B-meson Id
170
171 if ( idparent == EvtPDL::getId( std::string( "B_s0" ) ) ||
172 idparent == EvtPDL::getId( std::string( "anti-B_s0" ) ) ) {
173 mq = formFactors->getQuarkMass( 3 ); // m_s mass from the dispersion QM
174 fb = 0.24; // leptonic decay constant
175 // V_{ts}
176 Vtq = unit1 * ( 1.0 - 0.5 * pow( CKM_lambda, 2.0 ) ) +
177 pow( CKM_lambda, 2.0 ) *
178 ( CKM_barrho * unit1 + CKM_bareta * uniti ) /
179 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) );
180 Vtq = -CKM_A * pow( CKM_lambda, 2.0 ) * Vtq;
181 // V_{us}
182 Vuq = CKM_lambda * unit1;
183 // V_{cs}
184 Vcq = unit1 - 0.5 * pow( CKM_lambda, 2.0 ) -
185 0.125 * pow( CKM_lambda, 4.0 ) * ( 1.0 + 4.0 * pow( CKM_A, 2.0 ) );
186 }
187
188 if ( idparent == EvtPDL::getId( std::string( "B0" ) ) ||
189 idparent == EvtPDL::getId( std::string( "anti-B0" ) ) ) {
190 mq = formFactors->getQuarkMass( 2 ); // m_d mass from the dispersion QM
191 fb = 0.20; // leptonic decay constant
192 // V_{td}
193 Vtq = unit1 - ( 1.0 - 0.5 * pow( CKM_lambda, 2.0 ) ) *
194 ( CKM_barrho * unit1 + CKM_bareta * uniti ) /
195 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) );
196 Vtq = CKM_A * pow( CKM_lambda, 3.0 ) * Vtq;
197 // V_{ud}
198 Vuq = unit1 * ( 1.0 - 0.5 * pow( CKM_lambda, 2.0 ) -
199 0.125 * pow( CKM_lambda, 4.0 ) );
200 // V_{cd}
201 Vcq = unit1 *
202 ( -CKM_lambda +
203 0.5 * pow( CKM_A, 2.0 ) * pow( CKM_lambda, 5.0 ) *
204 ( 1.0 - 2.0 * ( CKM_barrho * unit1 + CKM_bareta * uniti ) /
205 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) ) ) );
206 }
207
208 if ( mq < 0.001 ) {
209 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
210 << "\n\n The function EvtbsTollGammaISRFSRAmp::CalcAmp(..// 4-momentum of ell^+.)"
211 << "\n Error in the model set!"
212 << " mq = " << mq << std::endl;
213 ::abort();
214 }
215
216 Vtb = unit1 * ( 1.0 - 0.5 * pow( CKM_A * CKM_lambda * CKM_lambda,
217 2.0 ) ); // V_{tb}
218 Vub = CKM_A * pow( CKM_lambda, 3.0 ) *
219 ( CKM_barrho * unit1 - CKM_bareta * uniti ) /
220 sqrt( 1.0 - pow( CKM_lambda, 2.0 ) ); // V_{ub}
221 Vcb = unit1 * CKM_A * pow( CKM_lambda, 2.0 ); // V_{cb}
222
223 CKM_factor = conj( Vtq ) * Vtb; // V^*_{tq}*V_{tb}
224
225 lambda_qu = conj( Vuq ) * Vub /
226 CKM_factor; // V^*_{uq}*V_{ub}/V^*_{tq}*V_{tb}
227 Relambda_qu = real( lambda_qu );
228 Imlambda_qu = imag( lambda_qu );
229
230 lambda_qc = conj( Vcq ) * Vcb /
231 CKM_factor; // V^*_{cq}*V_{cb}/V^*_{tq}*V_{tb}
232
233 // The Wilson Coefficients preparation according to the paper
234 // A.J.Buras, M.Munz, Phys.Rev.D52, p.189 (1995)
235 double c1, c2;
236 EvtComplex a1, c7gam, c9eff_b2q, c9eff_barb2barq, c10a;
237
238 // foton energy cut and removal of the J/psi amd psi' resonant area
239 if ( Egam < Egamma_min || ( res_swch == 1 && q2 >= 9.199 && q2 <= 15.333 ) ||
240 ( q2 <= mumumass_min * mumumass_min ) ) {
241 c1 = 0.0;
242 c2 = 0.0;
243 a1 = unit1 * 0.0;
244 c7gam = unit1 * 0.0;
245 c9eff_b2q = unit1 * 0.0;
246 c9eff_barb2barq = unit1 * 0.0;
247 c10a = unit1 * 0.0;
248 } else {
249 c1 = WilsCoeff->C1( mu, Mw, Nf, ias );
250 c2 = WilsCoeff->C2( mu, Mw, Nf, ias );
251 a1 = unit1 * ( c1 + c2 / 3.0 );
252 c7gam = WilsCoeff->GetC7Eff( mu, Mw, mt, Nf, ias );
253 c9eff_b2q = WilsCoeff->GetC9Eff( 0, res_swch, ias, Nf, q2, mb, mq, mc, mu,
254 mt, Mw, ml, Relambda_qu, Imlambda_qu );
255 c9eff_barb2barq = WilsCoeff->GetC9Eff( 1, res_swch, ias, Nf, q2, mb, mq,
256 mc, mu, mt, Mw, ml, Relambda_qu,
257 Imlambda_qu );
258 c10a = WilsCoeff->GetC10Eff( mt, Mw );
259 }
260
261 EvtComplex Fv,
262 Fa; // The change of the sign is included in the amplitudes definition!
263 EvtComplex Ftv_b2q, Ftv_barb2barq;
264 EvtComplex Fta_b2q, Fta_barb2barq;
265
266 // foton energy cut and removal of the J/psi amd psi' resonant area
267 if ( Egam < Egamma_min || ( res_swch == 1 && q2 >= 9.199 && q2 <= 15.333 ) ||
268 ( q2 <= mumumass_min * mumumass_min ) ) {
269 fb = 0.0;
270 Fa = unit1 * 0.0;
271 Fv = unit1 * 0.0;
272 Fta_b2q = unit1 * 0.0;
273 Fta_barb2barq = unit1 * 0.0;
274 Ftv_b2q = unit1 * 0.0;
275 Ftv_barb2barq = unit1 * 0.0;
276 } else {
277 if ( fb < 0.01 ) {
278 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
279 << "\n\n The function EvtbsTollGammaISRFSRAmp::CalcAmp(...)"
280 << "\n Leptonic decay constant fb is not uninitialized in this function!"
281 << " fb = " << fb << std::endl;
282 ::abort();
283 }
284
285 // For \bar B^0_q -> l^+ l^- gamma
286 formFactors->getPhotonFF( 0, fb, parent->getId(), q2, M1, mb, mq, c7gam,
287 a1, lambda_qu, lambda_qc, Fv, Fa, Ftv_b2q,
288 Fta_b2q );
289
290 // For B^0_q -> l^+ l^- gamma
291 formFactors->getPhotonFF( 1, fb, parent->getId(), q2, M1, mb, mq, c7gam,
292 a1, lambda_qu, lambda_qc, Fv, Fa,
293 Ftv_barb2barq, Fta_barb2barq );
294 }
295
296 // EvtGenReport(EVTGEN_NOTICE,"EvtGen")
297 // << "\n ============================================================================"
298 // << "\n ============================================================================"
299 // << "\n\n The function Evtbs2llGammaISRFSRAmp::CalcAmp(...) passed."
300 // << "\n Particle masses:"
301 // << "\n B - meson mass M1 = " << M1
302 // << "\n photon minimum E = " << Egamma_min
303 // << "\n q2 = " << q2
304 // << "\n leptonic mass ml = " << ml
305 // << "\n light quark mass = " << mq
306 // << "\n c - quark mass mc = " << mc
307 // << "\n b - quark mass mb = " << mb
308 // << "\n t - quark mass mt = " << mt
309 // << "\n W - boson mass Mw = " << Mw
310 // << "\n ============================================================================"
311 // << "\n Input parameters:"
312 // << "\n scale parameter mu = " << mu
313 // << "\n number of flavors Nf = " << Nf
314 // << "\n state radiation switching = " << sr
315 // << "\n resonant switching = " << res_swch
316 // << "\n parameter for alpha_s(M_Z) = " << ias
317 // << "\n photon energy cut (GeV) = " << Egamma_min
318 // << "\n ============================================================================"
319 // << "\n Form-factors"
320 // << "\n Egam = " << Egam
321 // << "\n Egamma_min = " << Egamma_min
322 // << "\n Fv = " << Fv
323 // << "\n Fa = " << Fa
324 // << "\n Ftv_b2q = " << Ftv_b2q
325 // << "\n Fta_b2q = " << Fta_b2q
326 // << "\n Ftv_barb2barq = " << Ftv_barb2barq
327 // << "\n Fta_barb2barq = " << Fta_barb2barq
328 // << "\n ============================================================================"
329 // << "\n Wilson Coefficients:"
330 // << "\n Egam = " << Egam
331 // << "\n Egamma_min = " << Egamma_min
332 // << "\n Re(c7gam) = " << real(c7gam)
333 // << " Im(c7gam) = " << imag(c7gam)
334 // << "\n Re(c9eff_b2q) = " << real(c9eff_b2q)
335 // << " Im(c9eff_b2q) = " << imag(c9eff_b2q)
336 // << "\n Re(c9eff_barb2barq) = " << real(c9eff_barb2barq)
337 // << " Im(c9eff_barb2barq) = " << imag(c9eff_barb2barq)
338 // << "\n Re(c10a) = " << real(c10a)
339 // << " Im(c10a) = " << imag(c10a)
340 // << std::endl;
341
342 // Hadronic matrix element coefficients
343 EvtComplex a_b2q, a_barb2barq, b_b2q, b_barb2barq, e_b2q, e_barb2barq,
344 f_b2q, f_barb2barq;
345 EvtComplex brammS, brammT;
346
347 a_b2q = c9eff_b2q * Fv + 2.0 * c7gam * Ftv_b2q * mb * M1 / q2;
348 a_barb2barq = c9eff_barb2barq * Fv +
349 2.0 * c7gam * Ftv_barb2barq * mb * M1 / q2;
350
351 b_b2q = ( c9eff_b2q * Fa + 2.0 * c7gam * Fta_b2q * mb * M1 / q2 ) * pk /
352 ( M1 * M1 );
353 b_barb2barq = ( c9eff_barb2barq * Fa +
354 2.0 * c7gam * Fta_barb2barq * mb * M1 / q2 ) *
355 pk / ( M1 * M1 );
356
357 e_b2q = c10a * Fv;
358 e_barb2barq = e_b2q;
359
360 f_b2q = c10a * Fa * pk / ( M1 * M1 );
361 f_barb2barq = f_b2q;
362
363 brammS = 0.0; // in the Bq-meson rest frame!
364 brammT = 0.5 * c10a * ml * fb *
365 ( 1.0 / p2k + 1.0 / p1k ); // for Bramsstrahlung
366
367 // The separation of the ISR and FSR contributions
368 if ( sr == 0 ) { // ISR only
369 brammS = 0.0;
370 brammT = 0.0;
371 }
372 if ( sr == 1 ) { // FSR only
373 a_b2q = 0.0;
374 a_barb2barq = 0.0;
375 b_b2q = 0.0;
376 b_barb2barq = 0.0;
377 e_b2q = 0.0;
378 e_barb2barq = 0.0;
379 f_b2q = 0.0;
380 f_barb2barq = 0.0;
381 }
382
383 EvtTensor4C T1, T2; // hadronic matrix element tensor structures
384 EvtVector4C E1, E2;
385 EvtComplex E3;
386
387 int i; // photon polarisations counter
388
389 EvtVector4C lvc11, lvc12; // spin structures for
390 EvtVector4C lvc21, lvc22; // the leptonic vector current
391
392 EvtVector4C lac11, lac12; // spin structures for
393 EvtVector4C lac21, lac22; // the leptonic axial current
394
395 EvtComplex lsc11, lsc12; // spin structures for
396 EvtComplex lsc21, lsc22; // the leptonic scalar current
397
398 EvtTensor4C ltc11, ltc12; // spin structures for
399 EvtTensor4C ltc21, ltc22; // the leptonic tensor current
400
401 // B - and barB - mesons descriptors
402 static const EvtIdSet bmesons{ "anti-B0", "anti-B_s0" };
403 static const EvtIdSet bbarmesons{ "B0", "B_s0" };
404
405 EvtId parentID = parent->getId();
406
407 if ( bmesons.contains( parentID ) ) {
408 // The amplitude for the decay barB -> gamma ell^+ ell^- or
409 // b \bar q -> gamma ell^+ ell^-
410
411 T1 = -a_b2q * unit1 * dual( EvtGenFunctions::directProd( hatp, hatk ) ) -
412 b_b2q * uniti * EvtTensor4C::g();
413
414 T2 = -e_b2q * unit1 * dual( EvtGenFunctions::directProd( hatp, hatk ) ) -
415 f_b2q * uniti * EvtTensor4C::g();
416
417 // spin combinations for vector lepton current
418 lvc11 = EvtLeptonVCurrent( lepPlus->spParent( 0 ),
419 lepMinus->spParent( 0 ) );
420 lvc21 = EvtLeptonVCurrent( lepPlus->spParent( 1 ),
421 lepMinus->spParent( 0 ) );
422 lvc12 = EvtLeptonVCurrent( lepPlus->spParent( 0 ),
423 lepMinus->spParent( 1 ) );
424 lvc22 = EvtLeptonVCurrent( lepPlus->spParent( 1 ),
425 lepMinus->spParent( 1 ) );
426
427 lac11 = EvtLeptonACurrent( lepPlus->spParent( 0 ),
428 lepMinus->spParent( 0 ) );
429 lac21 = EvtLeptonACurrent( lepPlus->spParent( 1 ),
430 lepMinus->spParent( 0 ) );
431 lac12 = EvtLeptonACurrent( lepPlus->spParent( 0 ),
432 lepMinus->spParent( 1 ) );
433 lac22 = EvtLeptonACurrent( lepPlus->spParent( 1 ),
434 lepMinus->spParent( 1 ) );
435
436 lsc11 = EvtLeptonSCurrent( lepPlus->spParent( 0 ),
437 lepMinus->spParent( 0 ) );
438 lsc21 = EvtLeptonSCurrent( lepPlus->spParent( 1 ),
439 lepMinus->spParent( 0 ) );
440 lsc12 = EvtLeptonSCurrent( lepPlus->spParent( 0 ),
441 lepMinus->spParent( 1 ) );
442 lsc22 = EvtLeptonSCurrent( lepPlus->spParent( 1 ),
443 lepMinus->spParent( 1 ) );
444
445 // \epsilon^{\alpha\beta\mu\nu}*TCurrent_{\mu\nu}
446 ltc11 = dual( EvtLeptonTCurrent( lepPlus->spParent( 0 ),
447 lepMinus->spParent( 0 ) ) );
448 ltc21 = dual( EvtLeptonTCurrent( lepPlus->spParent( 1 ),
449 lepMinus->spParent( 0 ) ) );
450 ltc12 = dual( EvtLeptonTCurrent( lepPlus->spParent( 0 ),
451 lepMinus->spParent( 1 ) ) );
452 ltc22 = dual( EvtLeptonTCurrent( lepPlus->spParent( 1 ),
453 lepMinus->spParent( 1 ) ) );
454
455 // summing up photon polarisations
456 for ( i = 0; i < 2; i++ ) {
457 // conjaction of epsG (photon polarization vector)
458 EvtVector4C epsG = parent->getDaug( 0 )->epsParentPhoton( i ).conj();
459
460 // de-escalation T with epsG
461 E1 = T1.cont2( epsG );
462 E2 = T2.cont2( epsG );
463 E3 = ( epsG * hatp ) * brammS;
464
465 // foton energy cut and removal of the J/psi amd psi' resonant area
466 if ( Egam < Egamma_min ||
467 ( res_swch == 1 && q2 >= 9.199 && q2 <= 15.333 ) ||
468 ( q2 <= mumumass_min * mumumass_min ) ) {
469 CKM_factor = 0.0 * unit1;
470 }
471
472 // 1
473 amp.vertex( i, 0, 0,
474 CKM_factor *
475 ( lvc11 * E1 + lac11 * E2 + uniti * lsc11 * E3 +
476 uniti * ( ( ltc11.cont2( hatp ) ) * epsG ) *
477 brammT ) );
478 // EvtGenReport(EVTGEN_NOTICE,"EvtGen")
479 // << "\n 1" << CKM_factor*(lvc11*E1+lac11*E2+uniti*lsc11*E3+uniti*((ltc11.cont2(hatp))*epsG)*brammT)
480 // << std::endl;
481
482 // 2
483 amp.vertex( i, 0, 1,
484 CKM_factor *
485 ( lvc12 * E1 + lac12 * E2 + uniti * lsc12 * E3 +
486 uniti * ( ( ltc12.cont2( hatp ) ) * epsG ) *
487 brammT ) );
488 // EvtGenReport(EVTGEN_NOTICE,"EvtGen")
489 // << "\n 2" << CKM_factor*(lvc12*E1+lac12*E2+uniti*lsc12*E3+uniti*((ltc12.cont2(hatp))*epsG)*brammT)
490 // << std::endl;
491
492 // 3
493 amp.vertex( i, 1, 0,
494 CKM_factor *
495 ( lvc21 * E1 + lac21 * E2 + uniti * lsc21 * E3 +
496 uniti * ( ( ltc21.cont2( hatp ) ) * epsG ) *
497 brammT ) );
498 // EvtGenReport(EVTGEN_NOTICE,"EvtGen")
499 // << "\n 3" << CKM_factor*(lvc21*E1+lac21*E2+uniti*lsc21*E3+uniti*((ltc21.cont2(hatp))*epsG)*brammT)
500 // << std::endl;
501
502 // 4
503 amp.vertex( i, 1, 1,
504 CKM_factor *
505 ( lvc22 * E1 + lac22 * E2 + uniti * lsc22 * E3 +
506 uniti * ( ( ltc22.cont2( hatp ) ) * epsG ) *
507 brammT ) );
508 // EvtGenReport(EVTGEN_NOTICE,"EvtGen")
509 // << "\n 4" << CKM_factor*(lvc22*E1+lac22*E2+uniti*lsc22*E3+uniti*((ltc22.cont2(hatp))*epsG)*brammT)
510 // << std::endl;
511 }
512
513 } else {
514 if ( bbarmesons.contains( parentID ) ) {
515 // The amplitude for the decay B -> gamma ell^+ ell^- or
516 // q bar b -> gamma ell^+ ell^-
517
518 T1 = -a_barb2barq * unit1 *
519 dual( EvtGenFunctions::directProd( hatp, hatk ) ) +
520 b_barb2barq * uniti * EvtTensor4C::g();
521
522 T2 = -e_barb2barq * unit1 *
523 dual( EvtGenFunctions::directProd( hatp, hatk ) ) +
524 f_barb2barq * uniti * EvtTensor4C::g();
525
526 lvc11 = EvtLeptonVCurrent( lepPlus->spParent( 1 ),
527 lepMinus->spParent( 1 ) );
528 lvc21 = EvtLeptonVCurrent( lepPlus->spParent( 0 ),
529 lepMinus->spParent( 1 ) );
530 lvc12 = EvtLeptonVCurrent( lepPlus->spParent( 1 ),
531 lepMinus->spParent( 0 ) );
532 lvc22 = EvtLeptonVCurrent( lepPlus->spParent( 0 ),
533 lepMinus->spParent( 0 ) );
534
535 lac11 = EvtLeptonACurrent( lepPlus->spParent( 1 ),
536 lepMinus->spParent( 1 ) );
537 lac21 = EvtLeptonACurrent( lepPlus->spParent( 0 ),
538 lepMinus->spParent( 1 ) );
539 lac12 = EvtLeptonACurrent( lepPlus->spParent( 1 ),
540 lepMinus->spParent( 0 ) );
541 lac22 = EvtLeptonACurrent( lepPlus->spParent( 0 ),
542 lepMinus->spParent( 0 ) );
543
544 lsc11 = EvtLeptonSCurrent( lepPlus->spParent( 1 ),
545 lepMinus->spParent( 1 ) );
546 lsc21 = EvtLeptonSCurrent( lepPlus->spParent( 0 ),
547 lepMinus->spParent( 1 ) );
548 lsc12 = EvtLeptonSCurrent( lepPlus->spParent( 1 ),
549 lepMinus->spParent( 0 ) );
550 lsc22 = EvtLeptonSCurrent( lepPlus->spParent( 0 ),
551 lepMinus->spParent( 0 ) );
552
553 // \epsilon^{\alpha\beta\mu\nu}*TCurrent_{\mu\nu}
554 ltc11 = dual( EvtLeptonTCurrent( lepPlus->spParent( 1 ),
555 lepMinus->spParent( 1 ) ) );
556 ltc21 = dual( EvtLeptonTCurrent( lepPlus->spParent( 0 ),
557 lepMinus->spParent( 1 ) ) );
558 ltc12 = dual( EvtLeptonTCurrent( lepPlus->spParent( 1 ),
559 lepMinus->spParent( 0 ) ) );
560 ltc22 = dual( EvtLeptonTCurrent( lepPlus->spParent( 0 ),
561 lepMinus->spParent( 0 ) ) );
562
563 // summing up photon polarisations
564 for ( i = 0; i < 2; i++ ) {
565 EvtVector4C barepsG = parent->getDaug( 0 )->epsParentPhoton( i );
566
567 E1 = T1.cont2( barepsG );
568 E2 = T2.cont2( barepsG );
569 E3 = ( barepsG * hatp ) * brammS;
570
571 // foton energy cut and removal of the J/psi amd psi' resonant area
572 if ( Egam < Egamma_min ||
573 ( res_swch == 1 && q2 >= 9.199 && q2 <= 15.333 ) ||
574 ( q2 <= mumumass_min * mumumass_min ) ) {
575 CKM_factor = 0.0 * unit1;
576 }
577
578 amp.vertex( i, 1, 1,
579 conj( CKM_factor ) *
580 ( lvc11 * E1 + lac11 * E2 +
581 uniti * lsc11 * E3 + // -?
582 uniti * ( ( ltc11.cont2( hatp ) ) * barepsG ) *
583 brammT ) );
584 amp.vertex( i, 1, 0,
585 conj( CKM_factor ) *
586 ( lvc12 * E1 + lac12 * E2 +
587 uniti * lsc12 * E3 + // -?
588 uniti * ( ( ltc12.cont2( hatp ) ) * barepsG ) *
589 brammT ) );
590 amp.vertex( i, 0, 1,
591 conj( CKM_factor ) *
592 ( lvc21 * E1 + lac21 * E2 +
593 uniti * lsc21 * E3 + // -?
594 uniti * ( ( ltc21.cont2( hatp ) ) * barepsG ) *
595 brammT ) );
596 amp.vertex( i, 0, 0,
597 conj( CKM_factor ) *
598 ( lvc22 * E1 + lac22 * E2 +
599 uniti * lsc22 * E3 + // -?
600 uniti * ( ( ltc22.cont2( hatp ) ) * barepsG ) *
601 brammT ) );
602 }
603
604 } else {
605 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
606 << "\n\n The function Evtbs2llGammaISRFSRAmp::CalcAmp(...)"
607 << "\n Wrong B-meson number" << std::endl;
608 ::abort();
609 }
610 }
611}
612
613//
614// The decays B -> Gamma ell^+ ell^- maximum probability calculation for the
615// d^2\Gamma/dq^2 d\cos\theta distribution.
616//
617// \theta - the angle between the photon and ell^- directions in the
618// B-meson rest frame.
619//
620// If ias=0 (nonresonant case), the maximum is achieved at q2
621// B0s: q2 = 4*ml^2, Mphi^2, q_max^2;
622// B0d: q2 = 4*ml^2, Mrho^2, Momega^2, q_max^2;
623// If ias=1 (resonant case), the maximum in the same points, because the
624// resonat area is remove
625//
627 EvtId parnum, EvtId photnum, EvtId l1num, EvtId l2num,
628 Evtbs2llGammaFF* formFactors, EvtbTosllWilsCoeffNLO* WilsCoeff, double mu,
629 int Nf, int sr, int res_swch, int ias, double Egamma_min, double CKM_A,
630 double CKM_lambda, double CKM_barrho, double CKM_bareta, double mumumass_min )
631{
632 double maxfoundprob = -100.0; // maximum of the probability
633
634 double M1 = EvtPDL::getMeanMass( parnum ); // B - meson mass
635 double ml = EvtPDL::getMeanMass( l1num ); // leptonic mass
636
637 double Mrho = EvtPDL::getMeanMass(
638 EvtPDL::getId( std::string( "rho0" ) ) ); // mass of the rho-meson, MeV
639 double Momega = EvtPDL::getMeanMass( EvtPDL::getId(
640 std::string( "omega" ) ) ); // mass of the omega-meson, MeV
641 double Mphi = EvtPDL::getMeanMass(
642 EvtPDL::getId( std::string( "phi" ) ) ); // mass of the phi-meson, MeV
643
644 // EvtGenReport(EVTGEN_NOTICE,"EvtGen")
645 // << "\n M1 = " << M1
646 // << "\n ml = " << ml
647 // << "\n Mrho = " << Mrho
648 // << "\n Momega = " << Momega
649 // << "\n Mphi = " << Mphi
650 // << "\n Egamma_min = " << Egamma_min
651 // << std::endl;
652
653 double list_of_max_q2_points[5];
654 list_of_max_q2_points[0] = pow( 2.0 * ml, 2.0 );
655 list_of_max_q2_points[1] = pow( Mrho, 2.0 );
656 list_of_max_q2_points[2] = pow( Momega, 2.0 );
657 list_of_max_q2_points[3] = pow( Mphi, 2.0 );
658 list_of_max_q2_points[4] =
659 pow( M1, 2.0 ) - 2.0 * M1 * Egamma_min; // q^2_max at photon energy cut
660
661 // if(list_of_max_points[4]<0){
662 // EvtGenReport(EVTGEN_ERROR,"EvtGen")
663 // << "\n\n In the function EvtbsTollGammaAmp::CalcScalarMaxProb(...)"
664 // << "\n Bad photon energy cut: Egamma_min > M1 in the rest frame of B-meson!"
665 // << "\n q2_max = " << list_of_max_points[4]
666 // << "\n M1 = " << M1
667 // << "\n Egamma_min = " << Egamma_min
668 // << std::endl;
669 // ::abort();
670 // }
671
672 if ( Egamma_min > Mrho ) {
673 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
674 << "\n\n In the function Evtbs2llGammaISRFSRAmp::CalcMaxProb(...)"
675 << "\n Bad photon energy cut: Egamma_min > M_rho0 in the rest frame of B-meson."
676 << "\n Mrho = " << Mrho << "\n Egamma_min = " << Egamma_min
677 << std::endl;
678 ::abort();
679 }
680
681 if ( Egamma_min <= 0 ) {
682 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
683 << "\n\n In the function Evtbs2llGammaISRFSRAmp::CalcMaxProb(...)"
684 << "\n Bad photon energy cut: Egamma_min <= 0 in the rest frame of B-meson."
685 << "\n Egamma_min = " << Egamma_min << std::endl;
686 ::abort();
687 }
688
689 if ( res_swch == 0 || res_swch == 1 ) {
690 int i_list;
691 for ( i_list = 0; i_list <= 4; i_list++ ) {
692 double s; // mandelstam variable "s";
693 double t_minus; // minimum and maximum of the mandelstam variable "t"
694 double t_plus; // as function of the mandelstam variable "s=q2";
695 double t_for_s;
696 int ijk; // counter for variable "t";
697 int max_ijk; // maximal value of this counter;
698
699 s = list_of_max_q2_points[i_list];
700
701 t_plus = pow( M1, 2.0 ) + 2.0 * pow( ml, 2.0 ) - s;
702 t_plus = t_plus + sqrt( 1.0 - 4.0 * pow( ml, 2.0 ) / s ) *
703 ( pow( M1, 2.0 ) - s );
704 t_plus *= 0.5;
705
706 t_minus = pow( M1, 2.0 ) + 2.0 * pow( ml, 2.0 ) - s;
707 t_minus = t_minus - sqrt( 1.0 - 4.0 * pow( ml, 2.0 ) / s ) *
708 ( pow( M1, 2.0 ) - s );
709 t_minus *= 0.5;
710
711 if ( fabs( t_plus - t_minus ) < 0.000001 )
712 t_minus = t_plus;
713
714 max_ijk = 1000;
715 double dt = ( t_plus - t_minus ) / ( (double)max_ijk );
716 if ( fabs( dt ) < 0.00001 )
717 dt = 0.0;
718
719 if ( dt < 0.0 ) {
720 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
721 << "\n\n In the function EvtbsTollGammaISRFSRAmp::CalcScalarMaxProb(...)"
722 << "\n dt = " << dt << " < 0."
723 << "\n s = " << s << "\n t_plus = " << t_plus
724 << "\n t_minus = " << t_minus << "\n M1 = " << M1
725 << "\n ml = " << ml << std::endl;
726 ::abort();
727 }
728
729 for ( ijk = 0; ijk <= max_ijk; ijk++ ) {
730 t_for_s = t_minus + dt * ( (double)ijk );
731
732 // B-meson rest frame particles and they kinematics inicialization
733 double Eg, El2;
734 Eg = ( pow( M1, 2.0 ) - s ) / ( 2.0 * M1 ); // photon energy
735 El2 = ( s + t_for_s - pow( ml, 2.0 ) ) /
736 ( 2.0 * M1 ); // ell^- energy
737
738 double modl2;
739 modl2 = sqrt( pow( El2, 2.0 ) - pow( ml, 2.0 ) );
740
741 double cosBellminus; // angle between the B-meson and ell^- directions
742 cosBellminus = ( pow( ml, 2.0 ) + 2.0 * Eg * El2 - t_for_s ) /
743 ( 2.0 * Eg * modl2 );
744
745 if ( ( fabs( cosBellminus ) > 1.0 ) &&
746 ( fabs( cosBellminus ) <= 1.0001 ) ) {
747 EvtGenReport( EVTGEN_NOTICE, "EvtGen" )
748 << "\n Debug in the function EvtbsTollGammaISRFSRAmp::CalcMaxProb(...):"
749 << "\n cos(theta) = " << cosBellminus << std::endl;
750 cosBellminus = cosBellminus / fabs( cosBellminus );
751 }
752 if ( fabs( cosBellminus ) > 1.0001 ) {
753 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
754 << "\n\n In the function EvtbsTollGammaISRFSRAmp::CalcMaxProb(...)"
755 << "\n |cos(theta)| = " << fabs( cosBellminus ) << " > 1"
756 << "\n s = " << s << "\n t_for_s = " << t_for_s
757 << "\n t_plus = " << t_plus << "\n t_minus = " << t_minus
758 << "\n dt = " << dt << "\n Eg = " << Eg
759 << "\n El2 = " << El2 << "\n modl2 = " << modl2
760 << "\n ml = " << ml << std::endl;
761 ::abort();
762 }
763
764 EvtVector4R p, k, p1, p2;
765 p.set( M1, 0.0, 0.0, 0.0 );
766 k.set( Eg, Eg, 0.0, 0.0 );
767 p2.set( El2, modl2 * cosBellminus,
768 -modl2 * sqrt( 1.0 - pow( cosBellminus, 2.0 ) ), 0.0 );
769 p1 = p - k - p2;
770
771 // B-meson state preparation at the rest frame of B-meson
772 EvtScalarParticle* scalar_part;
773 EvtParticle* root_part;
774 scalar_part = new EvtScalarParticle;
775
776 scalar_part->noLifeTime();
777 scalar_part->init( parnum, p );
778 root_part = (EvtParticle*)scalar_part;
779 root_part->setDiagonalSpinDensity();
780
781 // Amplitude initialization
782 EvtId listdaug[3];
783 listdaug[0] = photnum;
784 listdaug[1] = l1num;
785 listdaug[2] = l2num;
786
787 EvtAmp amp;
788 amp.init( parnum, 3, listdaug );
789
790 // Daughters states preparation at the rest frame of B-meson
791 root_part->makeDaughters( 3, listdaug );
792
793 EvtParticle *gamm, *lep1, *lep2;
794 gamm = root_part->getDaug( 0 );
795 lep1 = root_part->getDaug( 1 );
796 lep2 = root_part->getDaug( 2 );
797
798 gamm->noLifeTime();
799 lep1->noLifeTime();
800 lep2->noLifeTime();
801
802 gamm->init( photnum, k );
803 lep1->init( l1num, p1 );
804 lep2->init( l2num, p2 );
805
806 EvtSpinDensity rho;
807 rho.setDiag( root_part->getSpinStates() );
808
809 // The amplitude calculation at the
810 // "maximum amplitude" kinematical configuration
811 CalcAmp( root_part, amp, formFactors, WilsCoeff, mu, Nf, sr,
812 res_swch, ias, Egamma_min, CKM_A, CKM_lambda,
813 CKM_barrho, CKM_bareta, mumumass_min );
814
815 // Now find the probability at this q2 and cos theta lepton point
816 double nikmax = rho.normalizedProb( amp.getSpinDensity() );
817
818 if ( nikmax > maxfoundprob ) {
819 double maxfoundprob_old;
820 maxfoundprob_old = maxfoundprob;
821 maxfoundprob = nikmax;
822 EvtGenReport( EVTGEN_NOTICE, "EvtGen" )
823 << "\n maxfoundprob ( s =" << s << ", t = " << t_for_s
824 << " ) = " << maxfoundprob
825 << "\n maxfoundprob_old = " << maxfoundprob_old
826 << "\n ijk =" << ijk << std::endl;
827 }
828
829 delete scalar_part;
830 // delete root_part;
831 delete gamm;
832 delete lep1;
833 delete lep2;
834
835 } // for(ijk=0; ijk<=max_ijk; ijk++)
836 } // i_list - variable loop
837 } // if(res_swch==0||res_swch==1)
838 else {
839 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
840 << "\n\n In the function Evtbs2llGammaISRFSRAmp::CalcMaxProb(...)"
841 << "\n Unexpected value of the variable res_swch !!!"
842 << "\n res_swch = " << res_swch << std::endl;
843 ::abort();
844 }
845
846 if ( maxfoundprob < 0.0 ) {
847 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
848 << "\n\n In the function Evtbs2llGammaISRFSRAmp::CalcMaxProb(...)"
849 << "\n maxfoundprob = " << maxfoundprob << " <0 or =0!"
850 << "\n mu =" << mu << " Nf =" << Nf << "\n sr =" << sr
851 << " res_swch =" << res_swch << " ias =" << ias
852 << "\n Egamma_min =" << Egamma_min << "\n CKM_A = " << CKM_A
853 << " CKM_lambda = " << CKM_lambda << "\n CKM_barrho = " << CKM_barrho
854 << " CKM_bareta = " << CKM_bareta << std::endl;
855 ::abort();
856 }
857
858 if ( maxfoundprob == 0.0 ) {
859 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
860 << "\n\n In the function Evtbs2llGammaISRFSRAmp::CalcMaxProb(...)"
861 << "\n maxfoundprob = " << maxfoundprob << " <0 or =0!"
862 << "\n mu =" << mu << " Nf =" << Nf << "\n sr =" << sr
863 << " res_swch =" << res_swch << " ias =" << ias
864 << "\n Egamma_min =" << Egamma_min << "\n CKM_A = " << CKM_A
865 << " CKM_lambda = " << CKM_lambda << "\n CKM_barrho = " << CKM_barrho
866 << " CKM_bareta = " << CKM_bareta << std::endl;
867 maxfoundprob = 0.00000001;
868 }
869
870 maxfoundprob *= 1.01;
871
872 EvtGenReport( EVTGEN_NOTICE, "EvtGen" )
873 << "\n **********************************************************************"
874 << "\n The function Evtbs2llGammaISRFSRAmp::CalcMaxProb(...) passed with arguments:"
875 << "\n mu =" << mu << " Nf =" << Nf << "\n sr =" << sr
876 << " res_swch =" << res_swch << " ias =" << ias
877 << "\n CKM_A = " << CKM_A << " CKM_lambda = " << CKM_lambda
878 << "\n Egamma_min =" << Egamma_min << "\n CKM_barrho = " << CKM_barrho
879 << " CKM_bareta = " << CKM_bareta
880 << "\n The distribution maximum maxfoundprob =" << maxfoundprob
881 << "\n **********************************************************************"
882 << std::endl;
883
884 return maxfoundprob;
885}
886
887// Triangular function
888double Evtbs2llGammaISRFSRAmp::lambda( double a, double b, double c )
889{
890 double l;
891
892 l = pow( a, 2.0 ) + pow( b, 2.0 ) + pow( c, 2.0 ) - 2.0 * a * b -
893 2.0 * a * c - 2.0 * b * c;
894
895 return l;
896}
EvtComplex conj(const EvtComplex &c)
double imag(const EvtComplex &c)
double real(const EvtComplex &c)
EvtTensor4C EvtLeptonTCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtVector4C EvtLeptonACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtComplex EvtLeptonSCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
const double a1
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition EvtReport.cpp:32
@ EVTGEN_ERROR
Definition EvtReport.hh:49
@ EVTGEN_NOTICE
Definition EvtReport.hh:51
EvtTensor4C dual(const EvtTensor4C &t2)
void vertex(const EvtComplex &amp)
Definition EvtAmp.cpp:453
EvtSpinDensity getSpinDensity() const
Definition EvtAmp.cpp:141
void init(EvtId p, int ndaug, const EvtId *daug)
Definition EvtAmp.cpp:67
bool contains(const EvtId &id) const
Definition EvtIdSet.cpp:46
Definition EvtId.hh:27
static int chg3(EvtId i)
Definition EvtPDL.cpp:366
static double getMeanMass(EvtId i)
Definition EvtPDL.cpp:306
static EvtId getId(const std::string &name)
Definition EvtPDL.cpp:283
void noLifeTime()
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
EvtId getId() const
EvtVector4R getP4Restframe() const
virtual EvtDiracSpinor spParent(int) const
int getSpinStates() const
void setDiagonalSpinDensity()
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
double mass() const
virtual EvtVector4C epsParentPhoton(int i) const
size_t getNDaug() const
void makeDaughters(size_t ndaug, const EvtId *id)
void init(EvtId part_n, double e, double px, double py, double pz)
double normalizedProb(const EvtSpinDensity &d)
void setDiag(int n)
static const EvtTensor4C & g()
EvtVector4C cont2(const EvtVector4C &v4) const
EvtVector4C conj() const
double mass2() const
void set(int i, double d)
EvtComplex GetC10Eff(double mt, double Mw)
EvtComplex GetC7Eff(double mu, double Mw, double mt, int Nf, int ias)
double C2(double mu, double Mw, int Nf, int ias)
EvtComplex GetC9Eff(int decay_id, int res_swch, int ias, int Nf, double q2, double m2, double md, double mc, double mu, double mt, double Mw, double ml, double Relambda_qu, double Imlambda_qu)
double C1(double mu, double Mw, int Nf, int ias)
virtual double getQuarkMass(int)
virtual void getPhotonFF(int, double, EvtId, double, double, double, double, EvtComplex, EvtComplex, EvtComplex, EvtComplex, EvtComplex &, EvtComplex &, EvtComplex &, EvtComplex &)
double lambda(double a, double b, double c)
double CalcMaxProb(EvtId parnum, EvtId photnum, EvtId l1num, EvtId l2num, Evtbs2llGammaFF *formFactors, EvtbTosllWilsCoeffNLO *WilsCoeff, double mu, int Nf, int sr, int res_swch, int ias, double Egamma_min, double CKM_A, double CKM_lambda, double CKM_barrho, double CKM_bareta, double mumumass_min)
void CalcAmp(EvtParticle *parent, EvtAmp &amp, Evtbs2llGammaFF *formFactors, EvtbTosllWilsCoeffNLO *WilsCoeff, double mu, int Nf, int sr, int res_swch, int ias, double Egamma_min, double CKM_A, double CKM_lambda, double CKM_barrho, double CKM_bareta, double mumumass_min)
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)