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
EvtSemiLeptonicScalarAmp.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"
26#include "EvtGenBase/EvtId.hh"
27#include "EvtGenBase/EvtPDL.hh"
33
35 EvtSemiLeptonicFF* FormFactors )
36{
37 static const EvtId EM = EvtPDL::getId( "e-" );
38 static const EvtId MUM = EvtPDL::getId( "mu-" );
39 static const EvtId TAUM = EvtPDL::getId( "tau-" );
40 static const EvtId EP = EvtPDL::getId( "e+" );
41 static const EvtId MUP = EvtPDL::getId( "mu+" );
42 static const EvtId TAUP = EvtPDL::getId( "tau+" );
43
44 //Add the lepton and neutrino 4 momenta to find q2
45
46 EvtVector4R q = parent->getDaug( 1 )->getP4() + parent->getDaug( 2 )->getP4();
47 double q2 = ( q.mass2() );
48
49 double fpf, f0f;
50 double mesonmass = parent->getDaug( 0 )->mass();
51 double parentmass = parent->mass();
52
53 FormFactors->getscalarff( parent->getId(), parent->getDaug( 0 )->getId(),
54 q2, mesonmass, &fpf, &f0f );
55
56 EvtVector4R p4b;
57 p4b.set( parent->mass(), 0.0, 0.0, 0.0 );
58 EvtVector4R p4meson = parent->getDaug( 0 )->getP4();
59 double mdiffoverq2;
60 mdiffoverq2 = parentmass * parentmass - mesonmass * mesonmass;
61 mdiffoverq2 = mdiffoverq2 / q2;
62
63 EvtVector4C l1, l2;
64
65 EvtId l_num = parent->getDaug( 1 )->getId();
66 EvtVector4C tds;
67
68 if ( l_num == EM || l_num == MUM || l_num == TAUM ) {
69 tds = EvtVector4C(
70 fpf * ( p4b + p4meson - ( mdiffoverq2 * ( p4b - p4meson ) ) ) +
71 +f0f * mdiffoverq2 * ( p4b - p4meson ) );
72
73 l1 = EvtLeptonVACurrent( parent->getDaug( 1 )->spParent( 0 ),
74 parent->getDaug( 2 )->spParentNeutrino() );
75 l2 = EvtLeptonVACurrent( parent->getDaug( 1 )->spParent( 1 ),
76 parent->getDaug( 2 )->spParentNeutrino() );
77 } else {
78 if ( l_num == EP || l_num == MUP || l_num == TAUP ) {
79 tds = EvtVector4C(
80 fpf * ( p4b + p4meson - ( mdiffoverq2 * ( p4b - p4meson ) ) ) +
81 +f0f * mdiffoverq2 * ( p4b - p4meson ) );
82
83 l1 = EvtLeptonVACurrent( parent->getDaug( 2 )->spParentNeutrino(),
84 parent->getDaug( 1 )->spParent( 0 ) );
85 l2 = EvtLeptonVACurrent( parent->getDaug( 2 )->spParentNeutrino(),
86 parent->getDaug( 1 )->spParent( 1 ) );
87 } else {
88 EvtGenReport( EVTGEN_ERROR, "EvtGen" )
89 << "dfnb89agngri wrong lepton number\n";
90 }
91 }
92
93 amp.vertex( 0, l1 * tds );
94 amp.vertex( 1, l2 * tds );
95}
EvtVector4C EvtLeptonVACurrent(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
Definition EvtId.hh:27
static EvtId getId(const std::string &name)
Definition EvtPDL.cpp:283
EvtId getId() const
virtual EvtDiracSpinor spParentNeutrino() const
virtual EvtDiracSpinor spParent(int) const
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
double mass() const
virtual void getscalarff(EvtId parent, EvtId daught, double t, double mass, double *fpf, double *fmf)=0
void CalcAmp(EvtParticle *parent, EvtAmp &amp, EvtSemiLeptonicFF *FormFactors) override
double mass2() const
void set(int i, double d)