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