22 EvtSemiLeptonicFF* FormFactors)
24 static EvtId EM = EvtPDL::getId(
"e-");
25 static EvtId MUM = EvtPDL::getId(
"mu-");
26 static EvtId TAUM = EvtPDL::getId(
"tau-");
27 static EvtId EP = EvtPDL::getId(
"e+");
28 static EvtId MUP = EvtPDL::getId(
"mu+");
29 static EvtId TAUP = EvtPDL::getId(
"tau+");
31 static EvtId D0 = EvtPDL::getId(
"D0");
32 static EvtId D0B = EvtPDL::getId(
"anti-D0");
33 static EvtId DP = EvtPDL::getId(
"D+");
34 static EvtId DM = EvtPDL::getId(
"D-");
35 static EvtId DSM = EvtPDL::getId(
"D_s-");
36 static EvtId DSP = EvtPDL::getId(
"D_s+");
40 EvtVector4R q = parent->getDaug(1)->getP4() + parent->getDaug(2)->getP4();
41 double q2 = (q.mass2());
43 double hf, kf, bpf, bmf;
45 FormFactors->gettensorff(parent->getId(), parent->getDaug(0)->getId(),
46 q2, parent->getDaug(0)->mass(), &hf, &kf, &bpf,
49 double costhl_flag = 1.0;
51 if (parent->getId() == D0 || parent->getId() == D0B ||
52 parent->getId() == DP || parent->getId() == DM) {
55 if (parent->getId() == DSP || parent->getId() == DSM) {
58 hf = hf * costhl_flag;
61 p4b.set(parent->mass(), 0.0, 0.0, 0.0);
63 EvtVector4R p4meson = parent->getDaug(0)->getP4();
65 EvtId l_num = parent->getDaug(1)->getId();
67 EvtVector4C ep_meson_b[5];
70 ((parent->getDaug(0)->epsTensorParent(0)).cont2(p4b)).conj();
72 ((parent->getDaug(0)->epsTensorParent(1)).cont2(p4b)).conj();
74 ((parent->getDaug(0)->epsTensorParent(2)).cont2(p4b)).conj();
76 ((parent->getDaug(0)->epsTensorParent(3)).cont2(p4b)).conj();
78 ((parent->getDaug(0)->epsTensorParent(4)).cont2(p4b)).conj();
86 double q2max = p4b.mass2() + p4meson.mass2() -
87 2.0 * p4b.mass() * p4meson.mass();
88 double q2maxin = 1.0 / q2max;
90 EvtComplex ep_meson_bb[5];
92 ep_meson_bb[0] = ep_meson_b[0] * (p4b);
93 ep_meson_bb[1] = ep_meson_b[1] * (p4b);
94 ep_meson_bb[2] = ep_meson_b[2] * (p4b);
95 ep_meson_bb[3] = ep_meson_b[3] * (p4b);
96 ep_meson_bb[4] = ep_meson_b[4] * (p4b);
100 if (l_num == EM || l_num == MUM || l_num == TAUM) {
101 tdual = EvtComplex(0.0, hf) *
102 dual(EvtGenFunctions::directProd(pp, pm));
103 }
else if (l_num == EP || l_num == MUP || l_num == TAUP) {
104 tdual = EvtComplex(0.0, -hf) *
105 dual(EvtGenFunctions::directProd(pp, pm));
107 B2ERROR(
"HNLSemileptonicTensorAmp: Wrong lepton number");
110 std::array<EvtVector4C, 5> tdsList;
112 for (std::size_t k{0}; k < tdsList.size(); ++k) {
113 tdsList[k] = tdual.cont2(ep_meson_b[k]) - kf * ep_meson_b[k] -
114 bpf * ep_meson_bb[k] * pp - bmf * ep_meson_bb[k] * pm;
115 tdsList[k] *= q2maxin;
118 for (
int i{0}; i < 2; ++i) {
119 for (
int j{0}; j < 2; ++j) {
120 const EvtVector4C current{
121 EvtLeptonVACurrent(parent->getDaug(2)->spParent(j),
122 parent->getDaug(1)->spParent(i))};
124 for (
int k{0}; k < static_cast<int>(tdsList.size()); ++k) {
126 if (l_num == EM || l_num == MUM || l_num == TAUM) {
128 amp.vertex(k, i, j, current.conj() * tdsList[k]);
130 }
else if (l_num == EP || l_num == MUP || l_num == TAUP) {
132 amp.vertex(k, i, j, current * tdsList[k]);