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.
EvtBsquark.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/EvtGenKine.hh"
27 #include "EvtGenBase/EvtIdSet.hh"
28 #include "EvtGenBase/EvtPDL.hh"
30 #include "EvtGenBase/EvtPatches.hh"
31 #include "EvtGenBase/EvtReport.hh"
32 
33 #include <iostream>
34 #include <string>
35 
36 std::string EvtBsquark::getName()
37 {
38  return "BSQUARK";
39 }
40 
42 {
43  return new EvtBsquark;
44 }
45 
47 {
48  // check that there are 5 arguments
49  checkNArg( 5 );
50 }
51 
53 {
54  //For now do not set a maximum.
55 
56  //SetProbMax(0.000000000005);
57 }
58 
60 {
61  static EvtId cquark = EvtPDL::getId( "c" );
62  static EvtId anticquark = EvtPDL::getId( "anti-c" );
63 
64  static EvtIdSet leptons( "e-", "mu-", "tau-" );
65 
67 
68  int charge = 1;
69 
70  EvtParticle* lepton;
71  lepton = p->getDaug( 1 );
72  if ( leptons.contains( lepton->getId() ) ) {
73  charge = -1;
74  }
75 
76  EvtDiracParticle charmquark;
77 
78  //this is a very crude approximation...
79  if ( charge == -1 ) {
80  charmquark.init( cquark, p->getDaug( 0 )->getP4() );
81  } else {
82  charmquark.init( anticquark, p->getDaug( 0 )->getP4() );
83  }
84 
85  EvtVector4R p4c = p->getDaug( 0 )->getP4();
86 
87  EvtVector4R p4sn = p->getDaug( 2 )->getP4();
88 
89  EvtVector4R p4b( p->mass(), 0.0, 0.0, 0.0 );
90 
91  EvtComplex M[2][2];
92 
93  int il, ic;
94 
95  //project out the right handed current
97 
98  double tanbeta = getArg( 1 );
99  double cosbeta = cos( atan( tanbeta ) );
100  double sinbeta = sin( atan( tanbeta ) );
101 
102  double mb = 4.9;
103  double mc = 1.3;
104  double mw = 80.4;
105 
106  double Mass = getArg( 2 );
107  double mu = getArg( 3 );
108  double mchargino = getArg( 4 );
109 
110  double tan2phim = 2 * sqrt( 2.0 ) * mw * ( mu * cosbeta + Mass * sinbeta ) /
111  ( Mass * Mass - mu * mu +
112  2 * mw * mw * cos( 2 * atan( tanbeta ) ) );
113 
114  double phim = 0.5 * atan( tan2phim );
115 
116  EvtComplex U11 = cos( phim );
117  EvtComplex U12 = sin( phim );
118  EvtComplex U21 = -sin( phim );
119  EvtComplex U22 = cos( phim );
120 
121  double tan2phip = 2 * sqrt( 2.0 ) * mw * ( mu * cosbeta + Mass * sinbeta ) /
122  ( Mass * Mass - mu * mu -
123  2 * mw * mw * cos( 2 * atan( tanbeta ) ) );
124 
125  double phip = 0.5 * atan( tan2phip );
126 
127  EvtComplex V11 = cos( phip );
128  EvtComplex V12 = sin( phip );
129  EvtComplex V21 = -sin( phip );
130  EvtComplex V22 = cos( phip );
131 
132  double theta = getArg( 0 );
133  double ctheta = cos( theta );
134  double stheta = sin( theta );
135 
136  double vcsb = 0.08;
137  double mchi1 = mchargino;
138  double mchi2 = mchargino;
139 
140  //overall scale factor
141  double g = 1.0;
142 
143  EvtComplex a1 = mchi1 * ( U11 * ctheta - mb * U12 * stheta /
144  ( sqrt( 2.0 ) * mw * cosbeta ) );
145  EvtComplex a2 = mchi2 * ( U21 * ctheta - mb * U22 * stheta /
146  ( sqrt( 2.0 ) * mw * cosbeta ) );
147 
148  EvtComplex b1 = mc * conj( V12 ) * ctheta / ( sqrt( 2.0 ) * mw * sinbeta );
149  EvtComplex b2 = mc * conj( V22 ) * ctheta / ( sqrt( 2.0 ) * mw * sinbeta );
150 
151  EvtComplex f1 = -( g * g * V11 * vcsb ) /
152  ( ( p4b - p4c ).mass2() - mchi1 * mchi1 );
153  EvtComplex f2 = -( g * g * V21 * vcsb ) /
154  ( ( p4b - p4c ).mass2() - mchi1 * mchi2 );
155 
156  //EvtGenReport(EVTGEN_INFO,"EvtGen") <<g<<" "<<V11<<" "<<FL<<" "<<vcsb<<" "<<mchi1<<endl;
157  //EvtGenReport(EVTGEN_INFO,"EvtGen") << "f1:"<<f1<<" "<<(p4b-p4c).mass2()<<endl;
158  //EvtGenReport(EVTGEN_INFO,"EvtGen") << "f2:"<<f2<<" "<<(p4b-p4c).mass2()<<endl;
159 
160  //EvtGenReport(EVTGEN_INFO,"EvtGen") << "p4sn:"<<p4sn<<endl;
161 
162  EvtGammaMatrix pslash = p4sn.get( 0 ) * EvtGammaMatrix::g0() -
163  p4sn.get( 1 ) * EvtGammaMatrix::g1() -
164  p4sn.get( 2 ) * EvtGammaMatrix::g2() -
165  p4sn.get( 3 ) * EvtGammaMatrix::g3();
166 
167  //EvtGenReport(EVTGEN_INFO,"EvtGen") << "pslash:"<<pslash<<endl;
168 
169  for ( il = 0; il < 2; il++ ) {
170  for ( ic = 0; ic < 2; ic++ ) {
171  EvtComplex a = 0.0;
172  EvtComplex b = 0.0;
173 
174  if ( charge == -1 ) {
175  a = charmquark.spParent( ic ) * ( PR * lepton->spParent( il ) );
176  b = charmquark.spParent( ic ) *
177  ( ( pslash * PR ) * lepton->spParent( il ) );
178  } else {
179  a = lepton->spParent( il ) * ( PR * charmquark.spParent( ic ) );
180  b = lepton->spParent( il ) *
181  ( ( pslash * PR ) * charmquark.spParent( ic ) );
182  }
183 
184  //EvtGenReport(EVTGEN_INFO,"EvtGen") <<"pslash*PR:"<<pslash*PR<<endl;
185  //EvtGenReport(EVTGEN_INFO,"EvtGen") <<"sp charm:"<<charmquark.spParent(ic)<<endl;
186  //EvtGenReport(EVTGEN_INFO,"EvtGen") <<"sp lepton:"<<lepton->spParent(il)<<endl;
187 
188  M[ic][il] = f1 * ( a1 * a + b1 * b ) + f2 * ( a2 * a + b2 * b );
189 
190  //EvtGenReport(EVTGEN_INFO,"EvtGen") << "Contr1:"<<a1<<" "<<a<<" "<<b1<<" "<<b<<endl;
191  //EvtGenReport(EVTGEN_INFO,"EvtGen") << "Contr2:"<<a2<<" "<<a<<" "<<b2<<" "<<b<<endl;
192 
193  //EvtGenReport(EVTGEN_INFO,"EvtGen") <<"case1:"<<f1<<" "<<a1<<" "<<b1<<" "<<a<<" "<<b<<endl;
194  //EvtGenReport(EVTGEN_INFO,"EvtGen") <<"case2:"<<f2<<" "<<a2<<" "<<b2<<" "<<a<<" "<<b<<endl;
195  }
196  }
197 
198  double prob = real( M[0][0] * conj( M[0][0] ) + M[1][0] * conj( M[1][0] ) +
199  M[0][1] * conj( M[0][1] ) + M[1][1] * conj( M[1][1] ) );
200 
201  //EvtGenReport(EVTGEN_INFO,"EvtGen") <<"prob:"<<prob<<endl;
202 
203  setProb( prob );
204 
205  return;
206 }
void setProb(double prob)
Definition: EvtDecayProb.hh:32
double getArg(unsigned int j)
void init() override
Definition: EvtBsquark.cpp:46
static const EvtGammaMatrix & g0()
void decay(EvtParticle *p) override
Definition: EvtBsquark.cpp:59
Evt3Rank3C conj(const Evt3Rank3C &t2)
Definition: Evt3Rank3C.cpp:172
EvtDiracSpinor spParent(int i) const override
const double a2
EvtId getId() const
const double a1
void init(EvtId part_n, const EvtVector4R &p4) override
virtual EvtDiracSpinor spParent(int) const
EvtId * getDaugs()
Definition: EvtDecayBase.hh:66
Definition: EvtId.hh:27
static const EvtGammaMatrix & g1()
double get(int i) const
Definition: EvtVector4R.hh:162
double initializePhaseSpace(unsigned int numdaughter, EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
static EvtId getId(const std::string &name)
Definition: EvtPDL.cpp:287
const EvtVector4R & getP4() const
static const EvtGammaMatrix & g2()
double mass() const
static const EvtGammaMatrix & g3()
int getNDaug() const
Definition: EvtDecayBase.hh:65
EvtDecayBase * clone() override
Definition: EvtBsquark.cpp:41
EvtParticle * getDaug(int i)
Definition: EvtParticle.cpp:91
static const EvtGammaMatrix & id()
std::string getName() override
Definition: EvtBsquark.cpp:36
void initProbMax() override
Definition: EvtBsquark.cpp:52
int contains(const EvtId id)
Definition: EvtIdSet.cpp:422
static const EvtGammaMatrix & g5()
double real(const EvtComplex &c)
Definition: EvtComplex.hh:230