11 #include "framework/logging/Logger.h"
12 #include "generators/evtgen/models/EvtBSemiTauonicHelicityAmplitudeCalculator.h"
22 m_CV1(0), m_CV2(0), m_CS1(0), m_CS2(0), m_CT(0)
40 B2INFO(
"EvtBSemiTauonicHelicityAmplitudeCalculator initialized with the default values.");
41 B2INFO(
"rho_1^2 : " <<
m_rho12);
45 B2INFO(
"a_S1: " <<
m_aS1);
46 B2INFO(
"a_R3: " <<
m_aR3);
47 B2INFO(
"bottom quark mass: " <<
m_mBottom);
48 B2INFO(
"charm quark mass: " <<
m_mCharm);
49 B2INFO(
"CV1 : " <<
m_CV1);
50 B2INFO(
"CV2 : " <<
m_CV2);
51 B2INFO(
"CS1 : " <<
m_CS1);
52 B2INFO(
"CS2 : " <<
m_CS2);
53 B2INFO(
"CT : " <<
m_CT);
54 B2INFO(
"B meson mass: " <<
m_mB);
55 B2INFO(
"D meson mass: " <<
m_mD);
56 B2INFO(
"D* meson mass: " <<
m_mDst);
60 const double ffR11,
const double ffR21,
const double aS1,
const double aR3,
61 const double bottomMass,
const double charmMass,
62 const EvtComplex& CV1,
const EvtComplex& CV2,
const EvtComplex& CS1,
const EvtComplex& CS2,
const EvtComplex& CT,
63 const double parentMass,
const double DMass,
const double DstarMass):
64 m_CV1(CV1), m_CV2(CV2), m_CS1(CS1), m_CS2(CS2), m_CT(CT)
81 B2INFO(
"EvtBSemiTauonicHelicityAmplitudeCalculator initialized.");
82 B2INFO(
"rho_1^2 : " << rho12);
83 B2INFO(
"rho_A1^2 : " << rhoA12);
84 B2INFO(
"R_1(1) : " << ffR11);
85 B2INFO(
"R_2(1) : " << ffR21);
86 B2INFO(
"a_S1: " <<
m_aS1);
87 B2INFO(
"a_R3: " <<
m_aR3);
88 B2INFO(
"bottom quark mass: " <<
m_mBottom);
89 B2INFO(
"charm quark mass: " <<
m_mCharm);
90 B2INFO(
"CV1 : " <<
m_CV1);
91 B2INFO(
"CV2 : " <<
m_CV2);
92 B2INFO(
"CS1 : " <<
m_CS1);
93 B2INFO(
"CS2 : " <<
m_CS2);
94 B2INFO(
"CT : " <<
m_CT);
95 B2INFO(
"Parent meson mass: " <<
m_mB);
96 B2INFO(
"D meson mass: " <<
m_mD);
97 B2INFO(
"D* meson mass: " <<
m_mDst);
104 mtau, tauhel, Dhel, w, costau);
109 const EvtComplex& CS2,
const EvtComplex& CT,
110 double mtau,
int tauhel,
int Dhel,
double w,
double costau)
const
116 (1.*
helampSM(mtau, tauhel, Dhel, w, costau)
117 + CV1 *
helampV1(mtau, tauhel, Dhel, w, costau)
118 + CV2 *
helampV2(mtau, tauhel, Dhel, w, costau)
119 + CS1 *
helampS1(mtau, tauhel, Dhel, w, costau)
120 + CS2 *
helampS2(mtau, tauhel, Dhel, w, costau)
121 + CT *
helampT(mtau, tauhel, Dhel, w, costau));
129 double q2,
double costau)
const
134 if (tauhel == -1 && whel == -1)
return sqrt(2.*
q2) *
v(mtau,
q2) * (1. - costau);
135 if (tauhel == -1 && whel == 0)
return -2.*
sqrt(
q2) *
v(mtau,
q2) *
sqrt(1 - costau * costau);
136 if (tauhel == -1 && whel == +1)
return sqrt(2.*
q2) *
v(mtau,
q2) * (1. + costau);
137 if (tauhel == -1 && whel == 2)
return 0.;
139 if (tauhel == +1 && whel == -1)
return -
sqrt(2.) * mtau *
v(mtau,
q2) *
sqrt(1. - costau * costau);
140 if (tauhel == +1 && whel == 0)
return 2.*mtau *
v(mtau,
q2) * costau;
141 if (tauhel == +1 && whel == +1)
return sqrt(2.) * mtau *
v(mtau,
q2) *
sqrt(1 - costau * costau);
142 if (tauhel == +1 && whel == 2)
return -2.*mtau *
v(mtau,
q2);
151 double q2,
double )
const
156 if (tauhel == -1)
return 0.;
157 if (tauhel == +1)
return -2.*
sqrt(
q2) *
v(mtau,
q2);
166 int whel1,
int whel2,
167 double q2,
double costau)
const
172 if (whel1 == whel2)
return 0;
173 if (whel1 > whel2)
return -
Lep(mtau, tauhel, whel2, whel1,
q2, costau);
175 if (tauhel == -1 && whel1 == -1 && whel2 == 0)
return -
sqrt(2.) * mtau *
v(mtau,
q2) * (1. - costau);
176 if (tauhel == -1 && whel1 == -1 && whel2 == +1)
return 2 * mtau *
v(mtau,
q2) *
sqrt(1. - costau * costau);
177 if (tauhel == -1 && whel1 == -1 && whel2 == 2)
return Lep(mtau, -1, -1, 0,
q2, costau);
178 if (tauhel == -1 && whel1 == 0 && whel2 == +1)
return -
sqrt(2.) * mtau *
v(mtau,
q2) * (1. + costau);
179 if (tauhel == -1 && whel1 == 0 && whel2 == 2)
return Lep(mtau, -1, -1, +1,
q2, costau);
180 if (tauhel == -1 && whel1 == +1 && whel2 == 2)
return Lep(mtau, -1, 0, +1,
q2, costau);
182 if (tauhel == +1 && whel1 == -1 && whel2 == 0)
return sqrt(2.*
q2) *
v(mtau,
q2) *
sqrt(1. - costau * costau);
183 if (tauhel == +1 && whel1 == -1 && whel2 == +1)
return -2.*
sqrt(
q2) *
v(mtau,
q2) * costau;
184 if (tauhel == +1 && whel1 == -1 && whel2 == 2)
return Lep(mtau, +1, -1, 0,
q2, costau);
185 if (tauhel == +1 && whel1 == 0 && whel2 == +1)
return -
Lep(mtau, +1, -1, 0,
q2, costau);
186 if (tauhel == +1 && whel1 == 0 && whel2 == 2)
return Lep(mtau, +1, -1, +1,
q2, costau);
187 if (tauhel == +1 && whel1 == +1 && whel2 == 2)
return -
Lep(mtau, +1, -1, 0,
q2, costau);
202 const double r0 =
r(Dhel);
203 if (Dhel == 2 && whel == 0) {
204 return m_mB *
sqrt(r0 * (w * w - 1.) /
qh2(2, w)) * ((1 + r0) *
hp(w) - (1 - r0) *
hm(w));
206 if (Dhel == 2 && whel == 2) {
207 return m_mB *
sqrt(r0 /
qh2(2, w)) * ((1 - r0) * (w + 1) *
hp(w) - (1 + r0) * (w - 1) *
hm(w));
209 if (Dhel == +1 && whel == +1) {
212 if (Dhel == -1 && whel == -1) {
215 if (Dhel == 0 && whel == 0) {
217 (-(w - r0) *
hA1(w) + (w - 1) * (r0 *
hA2(w) +
hA3(w)));
219 if (Dhel == 0 && whel == 2) {
220 return m_mB *
sqrt(r0 * (w * w - 1) /
qh2(0, w)) * (-(w + 1) *
hA1(w) + (1 - r0 * w) *
hA2(w) + (w - r0) *
hA3(w));
234 if (Dhel == 2)
return HadV1(2, whel, w);
235 if (Dhel == +1 && whel == +1)
return -
HadV1(-1, -1, w);
236 if (Dhel == -1 && whel == -1)
return -
HadV1(+1, +1, w);
237 if (Dhel == 0)
return -
HadV1(0, whel, w);
247 if (Dhel == 2)
return m_mB *
sqrt(
r(2)) * (w + 1) *
hS(w);
259 if (Dhel == 2)
return HadS1(2, w);
260 else return -
HadS1(Dhel, w);
269 if (whel1 == whel2)
return 0.;
270 if (whel1 > whel2)
return -
HadT(Dhel, whel2, whel1, w);
272 const double r0 =
r(Dhel);
273 if (Dhel == 2 && whel1 == -1 && whel2 == +1)
return m_mB *
sqrt(
r(2)) *
sqrt(w * w - 1) *
hT(w);
274 if (Dhel == 2 && whel1 == 0 && whel2 == 2)
return -
HadT(2, -1, +1, w);
275 if (Dhel == -1 && whel1 == -1 && whel2 == 0)
276 return -
m_mB *
sqrt(r0 /
qh2(-1, w)) * (1 - r0 * (w +
sqrt(w * w - 1))) *
278 if (Dhel == -1 && whel1 == -1 && whel2 == 2)
return -
HadT(-1, -1, 0, w);
279 if (Dhel == 0 && whel1 == -1 && whel2 == +1)
280 return m_mB *
sqrt(r0) * ((w + 1) *
hT1(w) + (w - 1) *
hT2(w) + 2 * (w * w - 1) *
hT3(w));
281 if (Dhel == 0 && whel1 == 0 && whel2 == 2)
return -
HadT(0, -1, +1, w);
282 if (Dhel == +1 && whel1 == 0 && whel2 == +1)
283 return -
m_mB *
sqrt(r0 /
qh2(+1, w)) * (1 - r0 * (w -
sqrt(w * w - 1))) *
286 if (Dhel == +1 && whel1 == +1 && whel2 == 2)
return -
HadT(+1, 0, +1, w);
300 for (
int whel = -1; whel <= 2; whel++) {
301 amp +=
eta(whel) *
Lep(mtau, tauhel, whel,
q2(Dhel, w), costau)
302 *
HadV1(Dhel, whel, w);
310 return helampSM(mtau, tauhel, Dhel, w, costau);
317 for (
int whel = -1; whel <= 2; whel++) {
318 amp +=
eta(whel) *
Lep(mtau, tauhel, whel,
q2(Dhel, w), costau)
319 *
HadV2(Dhel, whel, w);
327 return -
Lep(mtau, tauhel,
q2(Dhel, w), costau) *
HadS1(Dhel, w);
333 return -
Lep(mtau, tauhel,
q2(Dhel, w), costau) *
HadS2(Dhel, w);
340 for (
int whel1 = -1; whel1 <= 2; whel1++) {
341 for (
int whel2 = -1; whel2 <= 2; whel2++) {
342 amp += -1 *
eta(whel1) *
eta(whel2) *
Lep(mtau, tauhel, whel1, whel2,
q2(Dhel, w), costau)
343 *
HadT(Dhel, whel1, whel2, w);
356 const double r0 =
r(2);
357 return -((1 + r0) * (1 + r0) * (w - 1) *
ffV1(w)
358 - (1 - r0) * (1 - r0) * (w + 1) *
ffS1(w)) / (2 *
qh2(2, w));
363 return - (1 -
r(2) *
r(2)) * (w + 1) * (
ffV1(w) -
ffS1(w)) / (2 *
qh2(2, w));
395 const double r0 =
r(2);
397 - (1 + r0) / (1 -
rq()) * (w - 1) / (w + 1) *
hm(w));
407 const double r0 =
r(1);
418 const double r0 =
r(2);
419 return hp(w) - (1 + r0) *
hm(w) / (1 - r0);
425 const double r0 =
r(1);
426 return -((1 + r0) * (1 + r0) * (w - 1) *
hV(w)
427 - (1 - r0) * (1 - r0) * (w + 1) *
hA1(w))
434 const double r0 =
r(1);
435 return -(1 - r0 * r0) * (w + 1) * (
hV(w) -
hA1(w))
442 const double r0 =
r(1);
443 return ((1 + r0) * (1 + r0) *
hV(w) - 2 * r0 * (w + 1) *
hA1(w)
445 / (2 *
qh2(1, w) * (1 + r0));
475 return m_ffR11 - 0.12 * (w - 1) + 0.05 * (w - 1) * (w - 1);
480 return m_ffR21 + 0.11 * (w - 1) - 0.06 * (w - 1) * (w - 1);
485 return 1 +
aR3() *
dR3(w);
490 return -0.019 + 0.041 * (w - 1.) - 0.015 * (w - 1.) * (w - 1.);
495 return 0.22 - 0.052 * (w - 1.) + 0.026 * (w - 1.) * (w - 1.);
502 double mesonMass =
m_mDst;
503 if (Dhel == 2) mesonMass =
m_mD;
504 assert(mesonMass >= 0.);
511 return sqrt(1 - mtau * mtau /
q2);
517 return 1 - 2 *
r(Dhel) * w +
r(Dhel) *
r(Dhel);
529 if (Dhel == -1 || Dhel == 0 || Dhel == 1 || Dhel == 2)
return true;
535 if (whel == -1 || whel == 0 || whel == 1 || whel == 2)
return true;
541 if (tauhel == -1 || tauhel == 1)
return true;
EvtComplex m_CV2
Wilson coefficient CV2.
double m_mCharm
c quark mass (running mass at m_b scale), used for scalar form factor term )
double m_aR3
1/mQ correcion factor a_R3.
double m_mBottom
b quark mass (running mass at m_b scale), used for scalar form factor term
EvtComplex m_CV1
Wilson coefficient CV1.
double m_mD
daughter scalar (D) meson mass.
double aR3() const
HQET correction factor for the uncertainty of 1/m_Q correction.
double m_ffR11
Form factor parameter R_1(1).
EvtComplex m_CS1
Wilson coefficient CS1.
EvtComplex m_CT
Wilson coefficient CT.
double m_mB
parent (B) meson mass.
double rq() const
Ratio of the charm quark mass to the charm quark mass.
double eta(int whel) const
The metric factor.
double ffV11() const
Form factor normalization factor for B->Dlnu.
EvtComplex m_CS2
Wilson coefficient CS2.
double m_aS1
1/mQ correcion factor a_S1.
double m_rho12
Form factor slope parameters rho_1^2.
double ffA11() const
Form factor normalization factor for B->D*lnu.
double m_ffR21
Form factor parameter R_2(1).
double aS1() const
HQET correction factor for the uncertainty of 1/m_Q correction.
double r(int Dhel) const
Ratio of the daughter meson mass to the parent meson.
double m_mDst
daughter vector (D*) meson mass.
double m_rhoA12
Form factor slope parameters rho_A1^2.
double ffR2(double w) const
CLN form factor R2.
double hV(double w) const
HQET D* axial vector form factor h_V(w).
double HadV2(int Dhel, int whel, double w) const
The function to calculate the Hadronic Amplitudes of right handed (V+A) type contribution.
double qh2(int Dhel, double w) const
Function to calculate the q^2 divided by the square of parent mass (m_B^2).
double hT1(double w) const
D* tensor form factor h_{T1}(w) in terms of axial vector form factors.
double hm(double w) const
HQET D vector form factor h_-(w).
bool chkwhel(int whel) const
Function to check if whel is in the valid range.
EvtComplex helAmp(double mtau, int tauhel, int Dhel, double w, double costau) const
The function calculates the helicity amplitude.
double dR3(double w) const
HQET correction factor for the scalar form factor for B->D*taunu.
double v(double mtau, double q2) const
Function to calculate the tau velocity.
double helampT(double mtau, int tauhel, int Dhel, double w, double costau) const
Helicity Amplitudes of tensor type contribution.
double sqrt(double a)
sqrt for double
double helampV1(double mtau, int tauhel, int Dhel, double w, double costau) const
Helicity Amplitudes of left handed (V-A) contribution.
double ffS1(double w) const
CLN form factor S1.
EvtBSemiTauonicHelicityAmplitudeCalculator()
The default constructor.
double Lep(const double mtau, int tauhel, int whel, double q2, double costau) const
The function to calculate the Leptonic Amplitudes for B->D*taunu decay of the vector type contributio...
double hA1(double w) const
HQET D* axial vector form factor h_{A1}(w).
double hS(double w) const
D scalar form factor h_S(w) in terms of vector form factors.
bool chktauhel(int tauhel) const
Function to check if tauhel is in the valid range.
double HadT(int Dhel, int whel1, int whel2, double w) const
The function to calculate the Hadronic Amplitudes of tensor type contribution.
double ffA1(double w) const
CLN form factor A1.
double hT3(double w) const
D* tensor form factor h_{T3}(w).
double HadS1(int Dhel, double w) const
The function to calculate the Hadronic Amplitudes of scalar (S+P) type contribution.
double hT(double w) const
D tensor form factor h_T(w) in terms of vector form factors.
double helampS1(double mtau, int tauhel, int Dhel, double w, double costau) const
Helicity Amplitudes of scalar (S+P) type contribution.
double hA2(double w) const
HQET D* axial vector form factor h_{A2}(w).
double ffV1(double w) const
CLN form factor V1.
double helampSM(double mtau, int tauhel, int Dhel, double w, double costau) const
Helicity Amplitudes of SM (left handed) contribution.
bool chkDhel(int Dhel) const
sanity checkers
double z(double w) const
CLN form factor z.
double hp(double w) const
HQET D vector form factor h_+(w).
double hP(double w) const
D* pseudo scalar form factor h_P(w) in terms of axial vector form factors.
double HadS2(int Dhel, double w) const
The function to calculate the Hadronic Amplitudes of scalar (S-P) type contribution.
double helampV2(double mtau, int tauhel, int Dhel, double w, double costau) const
Helicity Amplitudes of right handed (V+A) contribution.
double hA3(double w) const
HQET D* axial vector form factor h_{A3}(w).
double helampS2(double mtau, int tauhel, int Dhel, double w, double costau) const
Helicity Amplitudes of scalar (S-P) type contribution.
double ffR1(double w) const
CLN form factor R1.
double HadV1(int Dhel, int whel, double w) const
The function to calculate the Hadronic Amplitudes of left handed (V-A) type contribution.
double q2(int Dhel, double w) const
Function to calculate the q^2 of the decay (square of l+nu invariant mass).
double mD(int Dhel) const
Daughter D(*) meson mass.
double hT2(double w) const
D* tensor form factor h_{T2}(w).
double dS1(double w) const
HQET correction factor for the scalar form factor for B->Dtaunu.
double ffR3(double w) const
CLN form factor R3.
Abstract base class for different kinds of events.