Daughters are initialized and have been added to the parent.
23{
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+");
30
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+");
37
38
39
40 EvtVector4R q = parent->getDaug(1)->getP4() + parent->getDaug(2)->getP4();
41 double q2 = (q.mass2());
42
43 double hf, kf, bpf, bmf;
44
45 FormFactors->gettensorff(parent->getId(), parent->getDaug(0)->getId(),
46 q2, parent->getDaug(0)->mass(), &hf, &kf, &bpf,
47 &bmf);
48
49 double costhl_flag = 1.0;
50
51 if (parent->getId() == D0 || parent->getId() == D0B ||
52 parent->getId() == DP || parent->getId() == DM) {
53 costhl_flag = -1.0;
54 }
55 if (parent->getId() == DSP || parent->getId() == DSM) {
56 costhl_flag = -1.0;
57 }
58 hf = hf * costhl_flag;
59
60 EvtVector4R p4b;
61 p4b.set(parent->mass(), 0.0, 0.0, 0.0);
62
63 EvtVector4R p4meson = parent->getDaug(0)->getP4();
64
65 EvtId l_num = parent->getDaug(1)->getId();
66
67 EvtVector4C ep_meson_b[5];
68
69 ep_meson_b[0] =
70 ((parent->getDaug(0)->epsTensorParent(0)).cont2(p4b)).conj();
71 ep_meson_b[1] =
72 ((parent->getDaug(0)->epsTensorParent(1)).cont2(p4b)).conj();
73 ep_meson_b[2] =
74 ((parent->getDaug(0)->epsTensorParent(2)).cont2(p4b)).conj();
75 ep_meson_b[3] =
76 ((parent->getDaug(0)->epsTensorParent(3)).cont2(p4b)).conj();
77 ep_meson_b[4] =
78 ((parent->getDaug(0)->epsTensorParent(4)).cont2(p4b)).conj();
79
80 EvtVector4R pp, pm;
81
82 pp = p4b + p4meson;
83 pm = p4b - p4meson;
84
85
86 double q2max = p4b.mass2() + p4meson.mass2() -
87 2.0 * p4b.mass() * p4meson.mass();
88 double q2maxin = 1.0 / q2max;
89
90 EvtComplex ep_meson_bb[5];
91
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);
97
98 EvtTensor4C tdual;
99
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));
106 } else {
107 B2ERROR("HNLSemileptonicTensorAmp: Wrong lepton number");
108 }
109
110 std::array<EvtVector4C, 5> tdsList;
111
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;
116 }
117
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))};
123
124 for (int k{0}; k < static_cast<int>(tdsList.size()); ++k) {
125
126 if (l_num == EM || l_num == MUM || l_num == TAUM) {
127
128 amp.vertex(k, i, j, current.conj() * tdsList[k]);
129
130 } else if (l_num == EP || l_num == MUP || l_num == TAUP) {
131
132 amp.vertex(k, i, j, current * tdsList[k]);
133
134 }
135
136 }
137 }
138 }
139
140 return;
141}