31 EvtSemiLeptonicFF* FormFactors)
33 static EvtId EM = EvtPDL::getId(
"e-");
34 static EvtId MUM = EvtPDL::getId(
"mu-");
35 static EvtId TAUM = EvtPDL::getId(
"tau-");
36 static EvtId EP = EvtPDL::getId(
"e+");
37 static EvtId MUP = EvtPDL::getId(
"mu+");
38 static EvtId TAUP = EvtPDL::getId(
"tau+");
40 static EvtId D0 = EvtPDL::getId(
"D0");
41 static EvtId D0B = EvtPDL::getId(
"anti-D0");
42 static EvtId DP = EvtPDL::getId(
"D+");
43 static EvtId DM = EvtPDL::getId(
"D-");
44 static EvtId DSM = EvtPDL::getId(
"D_s-");
45 static EvtId DSP = EvtPDL::getId(
"D_s+");
49 EvtVector4R q = parent->getDaug(1)->getP4() + parent->getDaug(2)->getP4();
50 double q2 = (q.mass2());
52 double hf, kf, bpf, bmf;
54 FormFactors->gettensorff(parent->getId(), parent->getDaug(0)->getId(),
55 q2, parent->getDaug(0)->mass(), &hf, &kf, &bpf,
58 double costhl_flag = 1.0;
60 if (parent->getId() == D0 || parent->getId() == D0B ||
61 parent->getId() == DP || parent->getId() == DM) {
64 if (parent->getId() == DSP || parent->getId() == DSM) {
67 hf = hf * costhl_flag;
70 p4b.set(parent->mass(), 0.0, 0.0, 0.0);
72 EvtVector4R p4meson = parent->getDaug(0)->getP4();
74 EvtVector4C l11, l12, l21, l22;
76 EvtId l_num = parent->getDaug(1)->getId();
78 EvtVector4C ep_meson_b[5];
81 ((parent->getDaug(0)->epsTensorParent(0)).cont2(p4b)).conj();
83 ((parent->getDaug(0)->epsTensorParent(1)).cont2(p4b)).conj();
85 ((parent->getDaug(0)->epsTensorParent(2)).cont2(p4b)).conj();
87 ((parent->getDaug(0)->epsTensorParent(3)).cont2(p4b)).conj();
89 ((parent->getDaug(0)->epsTensorParent(4)).cont2(p4b)).conj();
97 double q2max = p4b.mass2() + p4meson.mass2() -
98 2.0 * p4b.mass() * p4meson.mass();
99 double q2maxin = 1.0 / q2max;
101 EvtComplex ep_meson_bb[5];
103 ep_meson_bb[0] = ep_meson_b[0] * (p4b);
104 ep_meson_bb[1] = ep_meson_b[1] * (p4b);
105 ep_meson_bb[2] = ep_meson_b[2] * (p4b);
106 ep_meson_bb[3] = ep_meson_b[3] * (p4b);
107 ep_meson_bb[4] = ep_meson_b[4] * (p4b);
109 EvtVector4C tds0, tds1, tds2, tds3, tds4;
112 if (l_num == EM || l_num == MUM || l_num == TAUM) {
113 EvtTensor4C tdual = EvtComplex(0.0, hf) *
114 dual(EvtGenFunctions::directProd(pp, pm));
115 tds0 = tdual.cont2(ep_meson_b[0]) - kf * ep_meson_b[0] -
116 bpf * ep_meson_bb[0] * pp - bmf * ep_meson_bb[0] * pm;
119 tds1 = tdual.cont2(ep_meson_b[1]) - kf * ep_meson_b[1] -
120 bpf * ep_meson_bb[1] * pp - bmf * ep_meson_bb[1] * pm;
123 tds2 = tdual.cont2(ep_meson_b[2]) - kf * ep_meson_b[2] -
124 bpf * ep_meson_bb[2] * pp - bmf * ep_meson_bb[2] * pm;
127 tds3 = tdual.cont2(ep_meson_b[3]) - kf * ep_meson_b[3] -
128 bpf * ep_meson_bb[3] * pp - bmf * ep_meson_bb[3] * pm;
131 tds4 = tdual.cont2(ep_meson_b[4]) - kf * ep_meson_b[4] -
132 bpf * ep_meson_bb[4] * pp - bmf * ep_meson_bb[4] * pm;
135 l11 = EvtLeptonVACurrent(parent->getDaug(1)->spParent(0),
136 parent->getDaug(2)->spParent(0));
137 l12 = EvtLeptonVACurrent(parent->getDaug(1)->spParent(0),
138 parent->getDaug(2)->spParent(1));
139 l21 = EvtLeptonVACurrent(parent->getDaug(1)->spParent(1),
140 parent->getDaug(2)->spParent(0));
141 l22 = EvtLeptonVACurrent(parent->getDaug(1)->spParent(1),
142 parent->getDaug(2)->spParent(1));
144 if (l_num == EP || l_num == MUP || l_num == TAUP) {
145 EvtTensor4C tdual = EvtComplex(0.0, -hf) *
146 dual(EvtGenFunctions::directProd(pp, pm));
147 tds0 = tdual.cont2(ep_meson_b[0]) - kf * ep_meson_b[0] -
148 bpf * ep_meson_bb[0] * pp - bmf * ep_meson_bb[0] * pm;
151 tds1 = tdual.cont2(ep_meson_b[1]) - kf * ep_meson_b[1] -
152 bpf * ep_meson_bb[1] * pp - bmf * ep_meson_bb[1] * pm;
155 tds2 = tdual.cont2(ep_meson_b[2]) - kf * ep_meson_b[2] -
156 bpf * ep_meson_bb[2] * pp - bmf * ep_meson_bb[2] * pm;
159 tds3 = tdual.cont2(ep_meson_b[3]) - kf * ep_meson_b[3] -
160 bpf * ep_meson_bb[3] * pp - bmf * ep_meson_bb[3] * pm;
163 tds4 = tdual.cont2(ep_meson_b[4]) - kf * ep_meson_b[4] -
164 bpf * ep_meson_bb[4] * pp - bmf * ep_meson_bb[4] * pm;
167 l11 = EvtLeptonVACurrent(parent->getDaug(2)->spParent(0),
168 parent->getDaug(1)->spParent(0));
169 l12 = EvtLeptonVACurrent(parent->getDaug(2)->spParent(0),
170 parent->getDaug(1)->spParent(1));
171 l21 = EvtLeptonVACurrent(parent->getDaug(2)->spParent(1),
172 parent->getDaug(1)->spParent(0));
173 l22 = EvtLeptonVACurrent(parent->getDaug(2)->spParent(1),
174 parent->getDaug(1)->spParent(1));
176 EvtGenReport(EVTGEN_ERROR,
"EvtGen")
177 <<
"dfnb89agngri wrong lepton number\n";
181 amp.vertex(0, 0, 0, l11 * tds0);
182 amp.vertex(0, 0, 1, l12 * tds0);
183 amp.vertex(0, 1, 0, l21 * tds0);
184 amp.vertex(0, 1, 1, l22 * tds0);
186 amp.vertex(1, 0, 0, l11 * tds1);
187 amp.vertex(1, 0, 1, l12 * tds1);
188 amp.vertex(1, 1, 0, l21 * tds1);
189 amp.vertex(1, 1, 1, l22 * tds1);
191 amp.vertex(2, 0, 0, l11 * tds2);
192 amp.vertex(2, 0, 1, l12 * tds2);
193 amp.vertex(2, 1, 0, l21 * tds2);
194 amp.vertex(2, 1, 1, l22 * tds2);
196 amp.vertex(3, 0, 0, l11 * tds3);
197 amp.vertex(3, 0, 1, l12 * tds3);
198 amp.vertex(3, 1, 0, l21 * tds3);
199 amp.vertex(3, 1, 1, l22 * tds3);
201 amp.vertex(4, 0, 0, l11 * tds4);
202 amp.vertex(4, 0, 1, l12 * tds4);
203 amp.vertex(4, 1, 0, l21 * tds4);
204 amp.vertex(4, 1, 1, l22 * tds4);