Belle II Software development
EvtHNLSemiLeptonicVectorAmp.cc
1/**************************************************************************
2 * basf2 (Belle II Analysis Software Framework) *
3 * Author: The Belle II Collaboration *
4 * *
5 * See git log for contributors and copyright holders. *
6 * This file is licensed under LGPL-3.0, see LICENSE.md. *
7 **************************************************************************/
8
9#include <generators/evtgen/models/EvtHNLSemiLeptonicVectorAmp.h>
10
11#include <framework/logging/Logger.h>
12#include <EvtGenBase/EvtAmp.hh>
13#include <EvtGenBase/EvtDiracSpinor.hh>
14#include <EvtGenBase/EvtId.hh>
15#include <EvtGenBase/EvtPDL.hh>
16#include <EvtGenBase/EvtParticle.hh>
17#include <EvtGenBase/EvtSemiLeptonicFF.hh>
18#include <EvtGenBase/EvtTensor4C.hh>
19#include <EvtGenBase/EvtVector4C.hh>
20
21void EvtHNLSemiLeptonicVectorAmp::CalcAmp(EvtParticle* parent, EvtAmp& amp,
22 EvtSemiLeptonicFF* FormFactors)
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 //Add the lepton and neutrino 4 momenta to find q2
39
40 EvtVector4R q = parent->getDaug(1)->getP4() + parent->getDaug(2)->getP4();
41 double q2 = (q.mass2());
42
43 double a1f, a2f, vf, a0f, a3f;
44 double m_meson = parent->getDaug(0)->mass();
45
46 FormFactors->getvectorff(parent->getId(), parent->getDaug(0)->getId(),
47 q2, m_meson, &a1f, &a2f, &vf, &a0f);
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 vf = vf * 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 double m_b = parent->mass();
67
68 a3f = ((m_b + m_meson) / (2.0 * m_meson)) * a1f -
69 ((m_b - m_meson) / (2.0 * m_meson)) * a2f;
70
71 EvtTensor4C tds;
72 tds = a1f * (m_b + m_meson) * EvtTensor4C::g();
73 tds.addDirProd((-a2f / (m_b + m_meson)) * p4b, p4b + p4meson);
74
75 if (l_num == EM || l_num == MUM || l_num == TAUM) {
76 tds += EvtComplex(0.0, vf / (m_b + m_meson)) *
77 dual(EvtGenFunctions::directProd(p4meson + p4b, p4b - p4meson));
78 } else if (l_num == EP || l_num == MUP || l_num == TAUP) {
79 tds -= EvtComplex(0.0, vf / (m_b + m_meson)) *
80 dual(EvtGenFunctions::directProd(p4meson + p4b,
81 p4b - p4meson));
82 } else {
83 B2ERROR("HNLSemileptonicVectorAmp: Wrong lepton number");
84 }
85
86 tds.addDirProd((a0f - a3f) * 2.0 * (m_meson / q2) * p4b,
87 p4b - p4meson);
88
89 EvtVector4C et0 = tds.cont1(parent->getDaug(0)->epsParent(0).conj());
90 EvtVector4C et1 = tds.cont1(parent->getDaug(0)->epsParent(1).conj());
91 EvtVector4C et2 = tds.cont1(parent->getDaug(0)->epsParent(2).conj());
92 const std::array<const EvtVector4C*, 3> etaList{{&et0, &et1, &et2}};
93
94 for (int i{0}; i < 2; ++i) {
95 for (int j{0}; j < 2; ++j) {
96 const EvtVector4C current{
97 EvtLeptonVACurrent(parent->getDaug(2)->spParent(j),
98 parent->getDaug(1)->spParent(i))};
99
100 for (int k{0}; k < static_cast<int>(etaList.size()); ++k) {
101
102 if (l_num == EM || l_num == MUM || l_num == TAUM) {
103
104 amp.vertex(k, i, j, current.conj().cont(*etaList[k]));
105
106 } else {
107
108 amp.vertex(k, i, j, current.cont(*etaList[k]));
109
110 }
111 }
112 }
113 }
114
115 return;
116}
void CalcAmp(EvtParticle *parent, EvtAmp &amp, EvtSemiLeptonicFF *FormFactors) override
Daughters are initialized and have been added to the parent.