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
EvtKstarnunu.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
25#include "EvtGenBase/EvtPDL.hh"
30
31#include <iostream>
32#include <stdlib.h>
33#include <string>
34
35std::string EvtKstarnunu::getName() const
36{
37 return "KSTARNUNU";
38}
39
41{
42 return new EvtKstarnunu;
43}
44
46{
47 // check that there are 0 arguments
48 checkNArg( 0 );
49 checkNDaug( 3 );
50
51 //We expect the parent to be a scalar
52 //and the daughters to be K neutrino netrino
53
55
59}
60
62{
63 setProbMax( 7000.0 );
64}
65
67{
68 static const EvtId NUE = EvtPDL::getId( "nu_e" );
69 static const EvtId NUM = EvtPDL::getId( "nu_mu" );
70 static const EvtId NUT = EvtPDL::getId( "nu_tau" );
71 static const EvtId NUEB = EvtPDL::getId( "anti-nu_e" );
72 static const EvtId NUMB = EvtPDL::getId( "anti-nu_mu" );
73 static const EvtId NUTB = EvtPDL::getId( "anti-nu_tau" );
74
76
77 double m_b = p->mass();
78
79 EvtParticle *meson, *neutrino1, *neutrino2;
80 meson = p->getDaug( 0 );
81 neutrino1 = p->getDaug( 1 );
82 neutrino2 = p->getDaug( 2 );
83 EvtVector4R momnu1 = neutrino1->getP4();
84 EvtVector4R momnu2 = neutrino2->getP4();
85 EvtVector4R momkstar = meson->getP4();
86
87 double v0_0, a1_0, a2_0;
88 double m2v0, a1_b, a2_b;
89 v0_0 = 0.47;
90 a1_0 = 0.37;
91 a2_0 = 0.40;
92 m2v0 = 5. * 5.;
93 a1_b = -0.023;
94 a2_b = 0.034;
95
96 EvtVector4R q = momnu1 + momnu2;
97 double q2 = q.mass2();
98
99 double v0, a1, a2;
100 v0 = v0_0 / ( 1 - q2 / m2v0 );
101 a1 = a1_0 * ( 1 + a1_b * q2 );
102 a2 = a2_0 * ( 1 + a2_b * q2 );
103
104 EvtVector4R p4b;
105 p4b.set( m_b, 0., 0., 0. ); // Do calcs in mother rest frame
106
107 double m_k = meson->mass();
108
109 EvtTensor4C tds = ( -2 * v0 / ( m_b + m_k ) ) *
110 dual( EvtGenFunctions::directProd( p4b, momkstar ) ) -
111 EvtComplex( 0.0, 1.0 ) *
112 ( ( m_b + m_k ) * a1 * EvtTensor4C::g() -
113 ( a2 / ( m_b + m_k ) ) *
114 EvtGenFunctions::directProd( p4b - momkstar,
115 p4b + momkstar ) );
116
117 EvtVector4C l;
118
119 if ( getDaug( 1 ) == NUE || getDaug( 1 ) == NUM || getDaug( 1 ) == NUT ) {
120 l = EvtLeptonVACurrent( neutrino1->spParentNeutrino(),
121 neutrino2->spParentNeutrino() );
122 }
123 if ( getDaug( 1 ) == NUEB || getDaug( 1 ) == NUMB || getDaug( 1 ) == NUTB ) {
124 l = EvtLeptonVACurrent( neutrino2->spParentNeutrino(),
125 neutrino1->spParentNeutrino() );
126 }
127
128 EvtVector4C et0, et1, et2;
129 et0 = tds.cont1( meson->epsParent( 0 ).conj() );
130 et1 = tds.cont1( meson->epsParent( 1 ).conj() );
131 et2 = tds.cont1( meson->epsParent( 2 ).conj() );
132
133 vertex( 0, l * et0 );
134 vertex( 1, l * et1 );
135 vertex( 2, l * et2 );
136
137 return;
138}
EvtVector4C EvtLeptonVACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
const double a2
const double a1
EvtTensor4C dual(const EvtTensor4C &t2)
void vertex(const EvtComplex &amp)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
EvtDecayBase()=default
int getNDaug() const
void checkSpinParent(EvtSpinType::spintype sp)
void setProbMax(double prbmx)
EvtId getDaug(int i) const
void checkNDaug(int d1, int d2=-1)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
const EvtId * getDaugs() const
Definition EvtId.hh:27
void initProbMax() override
std::string getName() const override
EvtDecayBase * clone() const override
void decay(EvtParticle *p) override
void init() override
static EvtId getId(const std::string &name)
Definition EvtPDL.cpp:283
virtual EvtVector4C epsParent(int i) const
double initializePhaseSpace(size_t numdaughter, const EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
virtual EvtDiracSpinor spParentNeutrino() const
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
double mass() const
EvtVector4C cont1(const EvtVector4C &v4) const
static const EvtTensor4C & g()
EvtVector4C conj() const
double mass2() const
void set(int i, double d)
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)