EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
EvtbTosllScalarAmp.cpp
Go to the documentation of this file.
1
2/***********************************************************************
3* Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4* *
5* This file is part of EvtGen. *
6* *
7* EvtGen is free software: you can redistribute it and/or modify *
8* it under the terms of the GNU General Public License as published by *
9* the Free Software Foundation, either version 3 of the License, or *
10* (at your option) any later version. *
11* *
12* EvtGen is distributed in the hope that it will be useful, *
13* but WITHOUT ANY WARRANTY; without even the implied warranty of *
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15* GNU General Public License for more details. *
16* *
17* You should have received a copy of the GNU General Public License *
18* along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19***********************************************************************/
20
22
23#include "EvtGenBase/EvtAmp.hh"
27#include "EvtGenBase/EvtId.hh"
29#include "EvtGenBase/EvtPDL.hh"
34
37
39 EvtbTosllFF* formFactors )
40{
41 //Add the lepton and neutrino 4 momenta to find q2
42
43 EvtVector4R q = parent->getDaug( 1 )->getP4() + parent->getDaug( 2 )->getP4();
44 double q2 = ( q.mass2() );
45
46 double fp( 0. ), f0( 0. ), ft( 0. );
47 double mesonmass = parent->getDaug( 0 )->mass();
48 double parentmass = parent->mass();
49
50 formFactors->getScalarFF( parent->getId(), parent->getDaug( 0 )->getId(),
51 q2, mesonmass, fp, f0, ft );
52
53 EvtId daught = parent->getDaug( 0 )->getId();
54 bool btod = false;
55 bool nnlo = true;
56 if ( daught == EvtPDL::getId( std::string( "pi+" ) ) ||
57 daught == EvtPDL::getId( std::string( "pi-" ) ) ||
58 daught == EvtPDL::getId( std::string( "pi0" ) ) ||
59 daught == EvtPDL::getId( std::string( "eta" ) ) ||
60 daught == EvtPDL::getId( std::string( "eta'" ) ) )
61 btod = true;
62
63 EvtVector4R p4b;
64 p4b.set( parent->mass(), 0.0, 0.0, 0.0 );
65
66 EvtVector4C l11, l12;
67 EvtVector4C l21, l22;
68
69 EvtVector4C a11, a12;
70 EvtVector4C a21, a22;
71
72 EvtId l_num = parent->getDaug( 1 )->getId();
73
74 EvtVector4C T1, T2;
75
76 EvtVector4R phat = p4b / parentmass;
77 EvtVector4R qhat = q / parentmass;
78
79 EvtComplex c7eff = EvtbTosllAmp::GetC7Eff( q2, nnlo );
80 EvtComplex c9eff = EvtbTosllAmp::GetC9Eff( q2, nnlo, btod );
81 EvtComplex c10eff = EvtbTosllAmp::GetC10Eff( q2, nnlo );
82
83 //double mbhat=1;
84 double mbhat = 4.4 / ( parentmass );
85 //double mkhat = 0.15;
86 double mkhat = mesonmass / ( parentmass );
87 double shat = q2 / ( parentmass * parentmass );
88
89 double fm = ( f0 - fp ) * ( 1 - mkhat * mkhat ) / shat;
90
91 EvtComplex aprime;
92 aprime = c9eff * fp + 2.0 * mbhat * c7eff * ft / ( 1 + mkhat );
93 EvtComplex bprime;
94 bprime = c9eff * fm - 2 * mbhat * c7eff * ft * ( 1 - mkhat ) / shat;
95
96 EvtComplex cprime;
97 cprime = c10eff * fp;
98 EvtComplex dprime;
99 dprime = c10eff * fm;
100
101 static const EvtIdSet leptons{ "e-", "mu-", "tau-" };
102 static const EvtIdSet antileptons{ "e+", "mu+", "tau+" };
103
104 if ( leptons.contains( l_num ) ) {
105 T1 = aprime * phat + bprime * qhat;
106 T2 = cprime * phat + dprime * qhat;
107
108 l11 = EvtLeptonVCurrent( parent->getDaug( 1 )->spParent( 0 ),
109 parent->getDaug( 2 )->spParent( 0 ) );
110 l21 = EvtLeptonVCurrent( parent->getDaug( 1 )->spParent( 1 ),
111 parent->getDaug( 2 )->spParent( 0 ) );
112 l12 = EvtLeptonVCurrent( parent->getDaug( 1 )->spParent( 0 ),
113 parent->getDaug( 2 )->spParent( 1 ) );
114 l22 = EvtLeptonVCurrent( parent->getDaug( 1 )->spParent( 1 ),
115 parent->getDaug( 2 )->spParent( 1 ) );
116 a11 = EvtLeptonACurrent( parent->getDaug( 1 )->spParent( 0 ),
117 parent->getDaug( 2 )->spParent( 0 ) );
118 a21 = EvtLeptonACurrent( parent->getDaug( 1 )->spParent( 1 ),
119 parent->getDaug( 2 )->spParent( 0 ) );
120 a12 = EvtLeptonACurrent( parent->getDaug( 1 )->spParent( 0 ),
121 parent->getDaug( 2 )->spParent( 1 ) );
122 a22 = EvtLeptonACurrent( parent->getDaug( 1 )->spParent( 1 ),
123 parent->getDaug( 2 )->spParent( 1 ) );
124 } else {
125 if ( antileptons.contains( l_num ) ) {
126 T1 = aprime * phat + bprime * qhat;
127 T2 = cprime * phat + dprime * qhat;
128
129 l11 = EvtLeptonVCurrent( parent->getDaug( 1 )->spParent( 1 ),
130 parent->getDaug( 2 )->spParent( 1 ) );
131 l21 = EvtLeptonVCurrent( parent->getDaug( 1 )->spParent( 0 ),
132 parent->getDaug( 2 )->spParent( 1 ) );
133 l12 = EvtLeptonVCurrent( parent->getDaug( 1 )->spParent( 1 ),
134 parent->getDaug( 2 )->spParent( 0 ) );
135 l22 = EvtLeptonVCurrent( parent->getDaug( 1 )->spParent( 0 ),
136 parent->getDaug( 2 )->spParent( 0 ) );
137
138 a11 = EvtLeptonACurrent( parent->getDaug( 1 )->spParent( 1 ),
139 parent->getDaug( 2 )->spParent( 1 ) );
140 a21 = EvtLeptonACurrent( parent->getDaug( 1 )->spParent( 0 ),
141 parent->getDaug( 2 )->spParent( 1 ) );
142 a12 = EvtLeptonACurrent( parent->getDaug( 1 )->spParent( 1 ),
143 parent->getDaug( 2 )->spParent( 0 ) );
144 a22 = EvtLeptonACurrent( parent->getDaug( 1 )->spParent( 0 ),
145 parent->getDaug( 2 )->spParent( 0 ) );
146
147 } else {
148 EvtGenReport( EVTGEN_ERROR, "EvtGen" ) << "Wrong lepton number\n";
149 }
150 }
151
152 amp.vertex( 0, 0, l11 * T1 + a11 * T2 );
153 amp.vertex( 0, 1, l12 * T1 + a12 * T2 );
154 amp.vertex( 1, 0, l21 * T1 + a21 * T2 );
155 amp.vertex( 1, 1, l22 * T1 + a22 * T2 );
156}
EvtVector4C EvtLeptonACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
Definition EvtReport.cpp:32
@ EVTGEN_ERROR
Definition EvtReport.hh:49
void vertex(const EvtComplex &amp)
Definition EvtAmp.cpp:453
bool contains(const EvtId &id) const
Definition EvtIdSet.cpp:46
Definition EvtId.hh:27
static EvtId getId(const std::string &name)
Definition EvtPDL.cpp:283
EvtId getId() const
virtual EvtDiracSpinor spParent(int) const
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
double mass() const
double mass2() const
void set(int i, double d)
EvtComplex GetC7Eff(double q2, bool nnlo=true)
EvtComplex GetC10Eff(double q2, bool nnlo=true)
EvtComplex GetC9Eff(double q2, bool nnlo=true, bool btod=false)
virtual void getScalarFF(EvtId, EvtId, double, double, double &, double &, double &)
void CalcAmp(EvtParticle *parent, EvtAmp &amp, EvtbTosllFF *formFactors) override