Belle II Software  release-08-01-10
EvtKstarnunu_REV.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/EvtGenModelRegister.h>
10 
11 #include "EvtGenBase/EvtPatches.hh"
12 #include <stdlib.h>
13 #include <iostream>
14 #include <string>
15 #include <cmath>
16 #include "EvtGenBase/EvtParticle.hh"
17 #include "EvtGenBase/EvtPDL.hh"
18 #include "EvtGenBase/EvtGenKine.hh"
19 #include "EvtGenBase/EvtDiracSpinor.hh"
20 #include "EvtGenBase/EvtTensor4C.hh"
21 #include "EvtGenBase/EvtReport.hh"
22 #include "EvtGenBase/EvtVector4C.hh"
23 
24 #include "generators/evtgen/models/EvtKstarnunu_REV.h"
25 
26 using std::endl;
27 
28 namespace Belle2 {
36 
38 
40  {
41  return "KSTARNUNU_REV";
42  }
43 
44  EvtDecayBase* EvtKstarnunu_REV::clone()
45  {
46  return new EvtKstarnunu_REV;
47  }
48 
49  void EvtKstarnunu_REV::decay(EvtParticle* p)
50  {
51 
52  static EvtId NUE = EvtPDL::getId("nu_e");
53  static EvtId NUM = EvtPDL::getId("nu_mu");
54  static EvtId NUT = EvtPDL::getId("nu_tau");
55  static EvtId NUEB = EvtPDL::getId("anti-nu_e");
56  static EvtId NUMB = EvtPDL::getId("anti-nu_mu");
57  static EvtId NUTB = EvtPDL::getId("anti-nu_tau");
58 
59  p->initializePhaseSpace(getNDaug(), getDaugs());
60 
61  double m_b = p->mass();
62 
63  EvtParticle* meson, * neutrino1, * neutrino2;
64  meson = p->getDaug(0);
65  neutrino1 = p->getDaug(1);
66  neutrino2 = p->getDaug(2);
67  EvtVector4R momnu1 = neutrino1->getP4();
68  EvtVector4R momnu2 = neutrino2->getP4();
69  EvtVector4R momkstar = meson->getP4();
70 
71  EvtVector4R q = momnu1 + momnu2;
72  double q2 = q.mass2();
73 
74  double m_k = meson->mass();
75 
76  EvtVector4R p4b; p4b.set(m_b, 0., 0., 0.); // Do calcs in mother rest frame
77 
78  // calculate form factors [arXiv:1503.05534v3]
79  // see Table 15, eq 15, eq 16, Table 3
80 
81  // FFs
82  double tp = (m_b + m_k) * (m_b + m_k);
83  double tm = (m_b - m_k) * (m_b - m_k);
84  double t0 = tp * (1 - sqrt(1 - tm / tp));
85  double z = (sqrt(tp - q2) - sqrt(tp - t0)) / (sqrt(tp - q2) + sqrt(tp - t0));
86  double z0 = (sqrt(tp) - sqrt(tp - t0)) / (sqrt(tp) + sqrt(tp - t0));
87 
88  // v0
89  double alpha0_v0 = 0.38;
90  double alpha1_v0 = -1.17;
91  double alpha2_v0 = 2.42;
92  double mR_v0 = 5.415;
93  double v0 = (1 / (1 - q2 / (mR_v0 * mR_v0))) * (alpha0_v0 + alpha1_v0 * (z - z0) + alpha2_v0 * (z - z0) * (z - z0));
94 
95  // A1
96  double alpha0_A1 = 0.3;
97  double alpha1_A1 = 0.39;
98  double alpha2_A1 = 1.19;
99  double mR_A1 = 5.829;
100  double A1 = (1 / (1 - q2 / (mR_A1 * mR_A1))) * (alpha0_A1 + alpha1_A1 * (z - z0) + alpha2_A1 * (z - z0) * (z - z0));
101 
102  // A12
103  double alpha0_A12 = 0.27;
104  double alpha1_A12 = 0.53;
105  double alpha2_A12 = 0.48;
106  double mR_A12 = 5.829;
107  double A12 = (1 / (1 - q2 / (mR_A12 * mR_A12))) * (alpha0_A12 + alpha1_A12 * (z - z0) + alpha2_A12 * (z - z0) * (z - z0));
108 
109  // lambda
110  double lambda = (tp - q2) * (tm - q2);
111 
112  // A2
113  double A2 = ((m_b + m_k) * (m_b + m_k) * (m_b * m_b - m_k * m_k - q2) * A1 - A12 * 16 * m_b * m_k * m_k * (m_b + m_k)) / lambda;
114 
115  // calculate quark decay amplitude from [arXiv:hep-ph/9910221v2]
116  // see eq 3.3, eq 3.4, eq 3.5, eq 4.1, eq 4.4, and eq 4.5
117  // but in B->Kstar nu nubar, A3, A0, and all T terms are ignored
118 
119  // definition of A12 can be found from [arXiv:1303.5794v2]
120 
121  // definition of A3 can be found from [arXiv:1408.5614v1]
122 
123  EvtTensor4C tds = (-2 * v0 / (m_b + m_k)) * dual(EvtGenFunctions::directProd(p4b, momkstar))
124  - EvtComplex(0.0, 1.0) *
125  ((m_b + m_k) * A1 * EvtTensor4C::g()
126  - (A2 / (m_b + m_k)) * EvtGenFunctions::directProd(p4b - momkstar, p4b + momkstar));
127 
128  EvtVector4C l;
129 
130  if (getDaug(1) == NUE || getDaug(1) == NUM || getDaug(1) == NUT) {
131  l = EvtLeptonVACurrent(neutrino1->spParentNeutrino(),
132  neutrino2->spParentNeutrino());
133  }
134  if (getDaug(1) == NUEB || getDaug(1) == NUMB || getDaug(1) == NUTB) {
135  l = EvtLeptonVACurrent(neutrino2->spParentNeutrino(),
136  neutrino1->spParentNeutrino());
137  }
138 
139  EvtVector4C et0, et1, et2;
140  et0 = tds.cont1(meson->epsParent(0).conj());
141  et1 = tds.cont1(meson->epsParent(1).conj());
142  et2 = tds.cont1(meson->epsParent(2).conj());
143 
144  vertex(0, l * et0);
145  vertex(1, l * et1);
146  vertex(2, l * et2);
147 
148  return;
149 
150  }
151 
153  {
154 
155  // check that there are 0 arguments
156  checkNArg(0);
157  checkNDaug(3);
158 
159  //We expect the parent to be a scalar
160  //and the daughters to be Kstar neutrino netrino
161 
162  checkSpinParent(EvtSpinType::SCALAR);
163 
164  checkSpinDaughter(0, EvtSpinType::VECTOR);
165  checkSpinDaughter(1, EvtSpinType::NEUTRINO);
166  checkSpinDaughter(2, EvtSpinType::NEUTRINO);
167  }
168 
170  {
171  // Maximum probability was obtained by 10^6 MC samples. It was 20000.169
172  // About 10% higher value is used.
173  setProbMax(22000.0);
174  }
175 
177 }
The evtgen model to produce B-> Kstar nu nubar decay sample.
EvtKstarnunu_REV()
Constructor.
void init()
The function for an initialization.
virtual ~EvtKstarnunu_REV()
Destructor.
double sqrt(double a)
sqrt for double
Definition: beamHelpers.h:28
EvtDecayBase * clone()
The function which makes a copy of the model.
void initProbMax()
The function to sets a maximum probability.
std::string getName()
The function which returns the name of the model.
void decay(EvtParticle *p)
The function to calculate a quark decay amplitude.
B2_EVTGEN_REGISTER_MODEL(EvtB0toKsKK)
register the model in EvtGen
Abstract base class for different kinds of events.