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
EvtWnPi.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
26#include "EvtGenBase/EvtPDL.hh"
32
34
35#include <ctype.h>
36#include <fstream>
37#include <iomanip>
38#include <iostream>
39#include <stdlib.h>
40#include <string.h>
41
42using namespace std;
43
44// W+ -> pi_ current
46{
47 return q1;
48}
49
50// W+ -> pi+ pi0 current
52{
53 return BWr( q1 + q2 ) * ( q1 - q2 );
54}
55
56// W+ -> pi+ pi+ pi- current
58{
59 EvtVector4R Q = q1 + q2 + q3;
60 double Q2 = Q.mass2();
61 return BWa( Q ) *
62 ( ( q1 - q3 ) - ( Q * ( Q * ( q1 - q3 ) ) / Q2 ) * BWr( q2 + q3 ) +
63 ( q2 - q3 ) - ( Q * ( Q * ( q2 - q3 ) ) / Q2 ) * BWr( q1 + q3 ) );
64}
65
66// W+ -> pi+ pi+ pi- pi- pi+ current with symmetrization
69{
70 // double Q2 = Qtot*Qtot;
71 // return q1-Qtot*(q1*Qtot)/Q2;
72 EvtVector4C V = JB( q1, q2, q3, q4, q5 ) + JB( q5, q2, q3, q4, q1 ) +
73 JB( q1, q5, q3, q4, q2 ) + JB( q1, q2, q4, q3, q5 ) +
74 JB( q5, q2, q4, q3, q1 ) + JB( q1, q5, q4, q3, q2 );
75 // cout<<"BC2: Qtot="<<Qtot<<", V="<<V<<endl;
76 return V;
77}
78
79// a1 -> pi+ pi+ pi- BW
81{
82 double const _mA1 = 1.26, _GA1 = 0.4;
83 EvtComplex I( 0, 1 );
84 double Q2 = q.mass2();
85 double GA1 = _GA1 * pi3G( Q2 ) / pi3G( _mA1 * _mA1 );
86 EvtComplex denBA1( _mA1 * _mA1 - Q2, -1. * _mA1 * GA1 );
87 return _mA1 * _mA1 / denBA1;
88}
89
91{
92 double const mf = 0.8, Gf = 0.6;
93 EvtComplex I( 0, 1 );
94 double Q2 = q.mass2();
95 return mf * mf / ( mf * mf - Q2 - I * mf * Gf );
96}
97
99{
100 double _mRho = 0.775, _gammaRho = 0.149, _mRhopr = 1.364,
101 _gammaRhopr = 0.400, _beta = -0.108;
102 double m1 = EvtPDL::getMeanMass( EvtPDL::getId( "pi+" ) ),
103 m2 = EvtPDL::getMeanMass( EvtPDL::getId( "pi+" ) );
104 double mQ2 = q.mass2();
105
106 // momenta in the rho->pipi decay
107 double dRho = _mRho * _mRho - m1 * m1 - m2 * m2;
108 double pPiRho = ( 1.0 / _mRho ) *
109 sqrt( ( dRho * dRho ) / 4.0 - m1 * m1 * m2 * m2 );
110
111 double dRhopr = _mRhopr * _mRhopr - m1 * m1 - m2 * m2;
112 double pPiRhopr = ( 1.0 / _mRhopr ) *
113 sqrt( ( dRhopr * dRhopr ) / 4.0 - m1 * m1 * m2 * m2 );
114
115 double dQ = mQ2 - m1 * m1 - m2 * m2;
116 double pPiQ = ( 1.0 / sqrt( mQ2 ) ) *
117 sqrt( ( dQ * dQ ) / 4.0 - m1 * m1 * m2 * m2 );
118
119 double gammaRho = _gammaRho * _mRho / sqrt( mQ2 ) *
120 pow( ( pPiQ / pPiRho ), 3 );
121 EvtComplex BRhoDem( _mRho * _mRho - mQ2, -1.0 * _mRho * gammaRho );
122 EvtComplex BRho = _mRho * _mRho / BRhoDem;
123
124 double gammaRhopr = _gammaRhopr * _mRhopr / sqrt( mQ2 ) *
125 pow( ( pPiQ / pPiRhopr ), 3 );
126 EvtComplex BRhoprDem( _mRhopr * _mRhopr - mQ2, -1.0 * _mRho * gammaRhopr );
127 EvtComplex BRhopr = _mRhopr * _mRhopr / BRhoprDem;
128
129 return ( BRho + _beta * BRhopr ) / ( 1 + _beta );
130}
131
132double EvtWnPi::pi3G( double m2 )
133{
134 double mPi = EvtPDL::getMeanMass( EvtPDL::getId( "pi+" ) );
135 double _mRho = 0.775;
136 if ( m2 > ( _mRho + mPi ) ) {
137 return m2 * ( 1.623 + 10.38 / m2 - 9.32 / ( m2 * m2 ) +
138 0.65 / ( m2 * m2 * m2 ) );
139 } else {
140 double t1 = m2 - 9.0 * mPi * mPi;
141 return 4.1 * pow( t1, 3.0 ) * ( 1.0 - 3.3 * t1 + 5.8 * t1 * t1 );
142 };
143}
144
146 EvtVector4R p4, EvtVector4R p5 )
147{
148 EvtVector4R Qtot = p1 + p2 + p3 + p4 + p5, Qa = p1 + p2 + p3;
149 EvtTensor4C T = ( 1 / Qtot.mass2() ) *
150 EvtGenFunctions::directProd( Qtot, Qtot ) -
152 EvtVector4R V13 = Qa * ( p2 * ( p1 - p3 ) ) / Qa.mass2() - ( p1 - p3 );
153 EvtVector4R V23 = Qa * ( p1 * ( p2 - p3 ) ) / Qa.mass2() - ( p2 - p3 );
154 return BWa( Qtot ) * BWa( Qa ) * BWf( p4 + p5 ) *
155 ( T.cont1( V13 ) * BWr( p1 + p3 ) + T.cont1( V23 ) * BWr( p2 + p3 ) );
156}
const EvtComplex I
static double getMeanMass(EvtId i)
Definition EvtPDL.cpp:306
static EvtId getId(const std::string &name)
Definition EvtPDL.cpp:283
EvtVector4C cont1(const EvtVector4C &v4) const
static const EvtTensor4C & g()
double mass2() const
EvtComplex BWr(EvtVector4R q)
Definition EvtWnPi.cpp:98
EvtComplex BWf(EvtVector4R q)
Definition EvtWnPi.cpp:90
EvtVector4C WCurrent(EvtVector4R q1)
Definition EvtWnPi.cpp:45
EvtVector4C JB(EvtVector4R q1, EvtVector4R q2, EvtVector4R q3, EvtVector4R q4, EvtVector4R q5)
Definition EvtWnPi.cpp:145
double pi3G(double Q2)
Definition EvtWnPi.cpp:132
EvtComplex BWa(EvtVector4R q)
Definition EvtWnPi.cpp:80
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)