12#include "framework/logging/Logger.h"
13#include "generators/evtgen/models/EvtBSemiTauonicHelicityAmplitudeCalculator.h"
23 m_CV1(0), m_CV2(0), m_CS1(0), m_CS2(0), m_CT(0)
41 B2INFO(
"EvtBSemiTauonicHelicityAmplitudeCalculator initialized with the default values.");
42 B2INFO(
"rho_1^2 : " <<
m_rho12);
46 B2INFO(
"a_S1: " <<
m_aS1);
47 B2INFO(
"a_R3: " <<
m_aR3);
48 B2INFO(
"bottom quark mass: " <<
m_mBottom);
49 B2INFO(
"charm quark mass: " <<
m_mCharm);
50 B2INFO(
"CV1 : " <<
m_CV1);
51 B2INFO(
"CV2 : " <<
m_CV2);
52 B2INFO(
"CS1 : " <<
m_CS1);
53 B2INFO(
"CS2 : " <<
m_CS2);
54 B2INFO(
"CT : " <<
m_CT);
55 B2INFO(
"B meson mass: " <<
m_mB);
56 B2INFO(
"D meson mass: " <<
m_mD);
57 B2INFO(
"D* meson mass: " <<
m_mDst);
61 const double ffR11,
const double ffR21,
const double aS1,
const double aR3,
62 const double bottomMass,
const double charmMass,
63 const EvtComplex& CV1,
const EvtComplex& CV2,
const EvtComplex& CS1,
const EvtComplex& CS2,
const EvtComplex& CT,
64 const double parentMass,
const double DMass,
const double DstarMass):
65 m_CV1(CV1), m_CV2(CV2), m_CS1(CS1), m_CS2(CS2), m_CT(CT)
82 B2INFO(
"EvtBSemiTauonicHelicityAmplitudeCalculator initialized.");
83 B2INFO(
"rho_1^2 : " << rho12);
84 B2INFO(
"rho_A1^2 : " << rhoA12);
85 B2INFO(
"R_1(1) : " << ffR11);
86 B2INFO(
"R_2(1) : " << ffR21);
87 B2INFO(
"a_S1: " <<
m_aS1);
88 B2INFO(
"a_R3: " <<
m_aR3);
89 B2INFO(
"bottom quark mass: " <<
m_mBottom);
90 B2INFO(
"charm quark mass: " <<
m_mCharm);
91 B2INFO(
"CV1 : " <<
m_CV1);
92 B2INFO(
"CV2 : " <<
m_CV2);
93 B2INFO(
"CS1 : " <<
m_CS1);
94 B2INFO(
"CS2 : " <<
m_CS2);
95 B2INFO(
"CT : " <<
m_CT);
96 B2INFO(
"Parent meson mass: " <<
m_mB);
97 B2INFO(
"D meson mass: " <<
m_mD);
98 B2INFO(
"D* meson mass: " <<
m_mDst);
105 mtau, tauhel, Dhel, w, costau);
110 const EvtComplex& CS2,
const EvtComplex& CT,
111 double mtau,
int tauhel,
int Dhel,
double w,
double costau)
const
117 (1.*
helampSM(mtau, tauhel, Dhel, w, costau)
118 + CV1 *
helampV1(mtau, tauhel, Dhel, w, costau)
119 + CV2 *
helampV2(mtau, tauhel, Dhel, w, costau)
120 + CS1 *
helampS1(mtau, tauhel, Dhel, w, costau)
121 + CS2 *
helampS2(mtau, tauhel, Dhel, w, costau)
122 + CT *
helampT(mtau, tauhel, Dhel, w, costau));
130 double q2,
double costau)
const
135 if (tauhel == -1 && whel == -1)
return sqrt(2.*q2) *
v(mtau, q2) * (1. - costau);
136 if (tauhel == -1 && whel == 0)
return -2.*
sqrt(q2) *
v(mtau, q2) *
sqrt(1 - costau * costau);
137 if (tauhel == -1 && whel == +1)
return sqrt(2.*q2) *
v(mtau, q2) * (1. + costau);
138 if (tauhel == -1 && whel == 2)
return 0.;
140 if (tauhel == +1 && whel == -1)
return -
sqrt(2.) * mtau *
v(mtau, q2) *
sqrt(1. - costau * costau);
141 if (tauhel == +1 && whel == 0)
return 2.*mtau *
v(mtau, q2) * costau;
142 if (tauhel == +1 && whel == +1)
return sqrt(2.) * mtau *
v(mtau, q2) *
sqrt(1 - costau * costau);
143 if (tauhel == +1 && whel == 2)
return -2.*mtau *
v(mtau, q2);
152 double q2,
double )
const
157 if (tauhel == -1)
return 0.;
158 if (tauhel == +1)
return -2.*
sqrt(q2) *
v(mtau, q2);
167 int whel1,
int whel2,
168 double q2,
double costau)
const
173 if (whel1 == whel2)
return 0;
174 if (whel1 > whel2)
return -
Lep(mtau, tauhel, whel2, whel1, q2, costau);
176 if (tauhel == -1 && whel1 == -1 && whel2 == 0)
return -
sqrt(2.) * mtau *
v(mtau, q2) * (1. - costau);
177 if (tauhel == -1 && whel1 == -1 && whel2 == +1)
return 2 * mtau *
v(mtau, q2) *
sqrt(1. - costau * costau);
178 if (tauhel == -1 && whel1 == -1 && whel2 == 2)
return Lep(mtau, -1, -1, 0, q2, costau);
179 if (tauhel == -1 && whel1 == 0 && whel2 == +1)
return -
sqrt(2.) * mtau *
v(mtau, q2) * (1. + costau);
180 if (tauhel == -1 && whel1 == 0 && whel2 == 2)
return Lep(mtau, -1, -1, +1, q2, costau);
181 if (tauhel == -1 && whel1 == +1 && whel2 == 2)
return Lep(mtau, -1, 0, +1, q2, costau);
183 if (tauhel == +1 && whel1 == -1 && whel2 == 0)
return sqrt(2.*q2) *
v(mtau, q2) *
sqrt(1. - costau * costau);
184 if (tauhel == +1 && whel1 == -1 && whel2 == +1)
return -2.*
sqrt(q2) *
v(mtau, q2) * costau;
185 if (tauhel == +1 && whel1 == -1 && whel2 == 2)
return Lep(mtau, +1, -1, 0, q2, costau);
186 if (tauhel == +1 && whel1 == 0 && whel2 == +1)
return -
Lep(mtau, +1, -1, 0, q2, costau);
187 if (tauhel == +1 && whel1 == 0 && whel2 == 2)
return Lep(mtau, +1, -1, +1, q2, costau);
188 if (tauhel == +1 && whel1 == +1 && whel2 == 2)
return -
Lep(mtau, +1, -1, 0, q2, costau);
203 const double r0 =
r(Dhel);
204 if (Dhel == 2 && whel == 0) {
205 return m_mB *
sqrt(r0 * (w * w - 1.) /
qh2(2, w)) * ((1 + r0) *
hp(w) - (1 - r0) *
hm(w));
207 if (Dhel == 2 && whel == 2) {
208 return m_mB *
sqrt(r0 /
qh2(2, w)) * ((1 - r0) * (w + 1) *
hp(w) - (1 + r0) * (w - 1) *
hm(w));
210 if (Dhel == +1 && whel == +1) {
213 if (Dhel == -1 && whel == -1) {
216 if (Dhel == 0 && whel == 0) {
218 (-(w - r0) *
hA1(w) + (w - 1) * (r0 *
hA2(w) +
hA3(w)));
220 if (Dhel == 0 && whel == 2) {
221 return m_mB *
sqrt(r0 * (w * w - 1) /
qh2(0, w)) * (-(w + 1) *
hA1(w) + (1 - r0 * w) *
hA2(w) + (w - r0) *
hA3(w));
235 if (Dhel == 2)
return HadV1(2, whel, w);
236 if (Dhel == +1 && whel == +1)
return -
HadV1(-1, -1, w);
237 if (Dhel == -1 && whel == -1)
return -
HadV1(+1, +1, w);
238 if (Dhel == 0)
return -
HadV1(0, whel, w);
248 if (Dhel == 2)
return m_mB *
sqrt(
r(2)) * (w + 1) *
hS(w);
260 if (Dhel == 2)
return HadS1(2, w);
261 else return -
HadS1(Dhel, w);
270 if (whel1 == whel2)
return 0.;
271 if (whel1 > whel2)
return -
HadT(Dhel, whel2, whel1, w);
273 const double r0 =
r(Dhel);
274 if (Dhel == 2 && whel1 == -1 && whel2 == +1)
return m_mB *
sqrt(
r(2)) *
sqrt(w * w - 1) *
hT(w);
275 if (Dhel == 2 && whel1 == 0 && whel2 == 2)
return -
HadT(2, -1, +1, w);
276 if (Dhel == -1 && whel1 == -1 && whel2 == 0)
277 return -
m_mB *
sqrt(r0 /
qh2(-1, w)) * (1 - r0 * (w +
sqrt(w * w - 1))) *
279 if (Dhel == -1 && whel1 == -1 && whel2 == 2)
return -
HadT(-1, -1, 0, w);
280 if (Dhel == 0 && whel1 == -1 && whel2 == +1)
281 return m_mB *
sqrt(r0) * ((w + 1) *
hT1(w) + (w - 1) *
hT2(w) + 2 * (w * w - 1) *
hT3(w));
282 if (Dhel == 0 && whel1 == 0 && whel2 == 2)
return -
HadT(0, -1, +1, w);
283 if (Dhel == +1 && whel1 == 0 && whel2 == +1)
284 return -
m_mB *
sqrt(r0 /
qh2(+1, w)) * (1 - r0 * (w -
sqrt(w * w - 1))) *
287 if (Dhel == +1 && whel1 == +1 && whel2 == 2)
return -
HadT(+1, 0, +1, w);
301 for (
int whel = -1; whel <= 2; whel++) {
302 amp +=
eta(whel) *
Lep(mtau, tauhel, whel,
q2(Dhel, w), costau)
303 *
HadV1(Dhel, whel, w);
311 return helampSM(mtau, tauhel, Dhel, w, costau);
318 for (
int whel = -1; whel <= 2; whel++) {
319 amp +=
eta(whel) *
Lep(mtau, tauhel, whel,
q2(Dhel, w), costau)
320 *
HadV2(Dhel, whel, w);
328 return -
Lep(mtau, tauhel,
q2(Dhel, w), costau) *
HadS1(Dhel, w);
334 return -
Lep(mtau, tauhel,
q2(Dhel, w), costau) *
HadS2(Dhel, w);
341 for (
int whel1 = -1; whel1 <= 2; whel1++) {
342 for (
int whel2 = -1; whel2 <= 2; whel2++) {
343 amp += -1 *
eta(whel1) *
eta(whel2) *
Lep(mtau, tauhel, whel1, whel2,
q2(Dhel, w), costau)
344 *
HadT(Dhel, whel1, whel2, w);
357 const double r0 =
r(2);
358 return -((1 + r0) * (1 + r0) * (w - 1) *
ffV1(w)
359 - (1 - r0) * (1 - r0) * (w + 1) *
ffS1(w)) / (2 *
qh2(2, w));
364 return - (1 -
r(2) *
r(2)) * (w + 1) * (
ffV1(w) -
ffS1(w)) / (2 *
qh2(2, w));
396 const double r0 =
r(2);
398 - (1 + r0) / (1 -
rq()) * (w - 1) / (w + 1) *
hm(w));
408 const double r0 =
r(1);
419 const double r0 =
r(2);
420 return hp(w) - (1 + r0) *
hm(w) / (1 - r0);
426 const double r0 =
r(1);
427 return -((1 + r0) * (1 + r0) * (w - 1) *
hV(w)
428 - (1 - r0) * (1 - r0) * (w + 1) *
hA1(w))
435 const double r0 =
r(1);
436 return -(1 - r0 * r0) * (w + 1) * (
hV(w) -
hA1(w))
443 const double r0 =
r(1);
444 return ((1 + r0) * (1 + r0) *
hV(w) - 2 * r0 * (w + 1) *
hA1(w)
446 / (2 *
qh2(1, w) * (1 + r0));
476 return m_ffR11 - 0.12 * (w - 1) + 0.05 * (w - 1) * (w - 1);
481 return m_ffR21 + 0.11 * (w - 1) - 0.06 * (w - 1) * (w - 1);
486 return 1 +
aR3() *
dR3(w);
491 return -0.019 + 0.041 * (w - 1.) - 0.015 * (w - 1.) * (w - 1.);
496 return 0.22 - 0.052 * (w - 1.) + 0.026 * (w - 1.) * (w - 1.);
503 double mesonMass =
m_mDst;
504 if (Dhel == 2) mesonMass =
m_mD;
505 assert(mesonMass >= 0.);
512 return sqrt(1 - mtau * mtau / q2);
518 return 1 - 2 *
r(Dhel) * w +
r(Dhel) *
r(Dhel);
530 if (Dhel == -1 || Dhel == 0 || Dhel == 1 || Dhel == 2)
return true;
536 if (whel == -1 || whel == 0 || whel == 1 || whel == 2)
return true;
542 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 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 sqrt(double a)
sqrt for double
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.