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.
EvtSSSCPpng.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/EvtCPUtil.hh"
24 #include "EvtGenBase/EvtConst.hh"
25 #include "EvtGenBase/EvtGenKine.hh"
26 #include "EvtGenBase/EvtId.hh"
27 #include "EvtGenBase/EvtPDL.hh"
29 #include "EvtGenBase/EvtPatches.hh"
30 #include "EvtGenBase/EvtRandom.hh"
31 #include "EvtGenBase/EvtReport.hh"
32 
33 #include <stdlib.h>
34 #include <string>
35 
36 std::string EvtSSSCPpng::getName()
37 {
38  return "SSS_CP_PNG";
39 }
40 
42 {
43  return new EvtSSSCPpng;
44 }
45 
47 {
48  // check that there are 7 arguments
49  checkNArg( 7 );
50  checkNDaug( 2 );
51 
53 
56 }
57 
59 {
60  setProbMax( getArg( 5 ) * getArg( 5 ) * ( 1 + getArg( 6 ) * getArg( 6 ) ) );
61 }
62 
64 {
65  //added by Lange Jan4,2000
66  static EvtId B0 = EvtPDL::getId( "B0" );
67  static EvtId B0B = EvtPDL::getId( "anti-B0" );
68 
69  double t;
70  EvtId other_b;
71 
73 
74  EvtComplex amp;
75 
76  EvtComplex A, Abar;
77  //EvtComplex ACC, AbarCC;
78 
79  // assume single (top) quark dominance for the penguin.
80 
81  // old: a0=alpha, a1=dm, a2=1, a3=1, a4=0, a5=1, a6=0
82  // new: a0=beta, a1=gamma, a2=delta, a3=dm, a4=1, a5=1=A_{T}, a6=A_{P}/A_{T}
83 
84  // e.g., for B -> pi pi
85  // A_{T} = |V_{ub} V_{ud}| T
86  // A_{P} = |V_{tb} V_{td}| P
87  // P and T are purely hadronic matrix elements
88  // P/T = 0.055, A_{P}/A_{T} = 0.2 (see Marrocchesi and Paver, hep-ph/9702353)
89 
90  // A = A_{T}( exp(i(beta+gamma)) + (A_{P}/A_{T}) exp(i(delta))
91  // A_bar = same, except for the sign of the weak phases
92  // here, delta = delta_{p}-delta_{t} (rel. strong phase)
93 
94  A = getArg( 5 ) *
95  ( EvtComplex( cos( -getArg( 0 ) - getArg( 1 ) ),
96  sin( -getArg( 0 ) - getArg( 1 ) ) ) +
97  getArg( 6 ) * EvtComplex( cos( getArg( 2 ) ), sin( getArg( 2 ) ) ) );
98 
99  Abar = getArg( 5 ) * ( EvtComplex( cos( getArg( 0 ) + getArg( 1 ) ),
100  sin( getArg( 0 ) + getArg( 1 ) ) ) +
101  getArg( 6 ) * EvtComplex( cos( getArg( 2 ) ),
102  sin( getArg( 2 ) ) ) );
103 
104  // get fraction of B0 tags with these amplitudes
105 
106  //double xd = 0.65;
107  double ratio = 1 / ( 1 + 0.65 * 0.65 );
108 
109  EvtComplex rf, rbarf;
110 
111  rf = EvtComplex( cos( 2.0 * getArg( 0 ) ), sin( 2.0 * getArg( 0 ) ) ) *
112  Abar / A;
113  rbarf = EvtComplex( 1.0 ) / rf;
114 
115  double A2 = real( A ) * real( A ) + imag( A ) * imag( A );
116  double Abar2 = real( Abar ) * real( Abar ) + imag( Abar ) * imag( Abar );
117 
118  double rf2 = real( rf ) * real( rf ) + imag( rf ) * imag( rf );
119  double rbarf2 = real( rbarf ) * real( rbarf ) + imag( rbarf ) * imag( rbarf );
120 
121  //fraction of B0 _tags_
122  double fract = ( Abar2 * ( 1 + rbarf2 + ( 1 - rbarf2 ) * ratio ) ) /
123  ( Abar2 * ( 1 + rbarf2 + ( 1 - rbarf2 ) * ratio ) +
124  A2 * ( 1 + rf2 + ( 1 - rf2 ) * ratio ) );
125 
126  EvtCPUtil::getInstance()->OtherB( p, t, other_b, fract );
127 
128  //this method works just as well -- NK
129  //randomly generate the tag (B0 or B0B)
130 
131  // double tag = EvtRandom::Flat(0.0,1.0);
132  // if (tag < 0.5) {
133  //
134  // EvtCPUtil::OtherB(p,t,other_b,1.0);
135  // other_b = B0;
136  // }
137  // else {
138  //
139  // EvtCPUtil::OtherB(p,t,other_b,0.0);
140  // other_b = B0B;
141  // }
142 
143  //mixing angle = -beta
144 
145  if ( other_b == B0B ) {
146  amp = A * cos( getArg( 3 ) * t / ( 2 * EvtConst::c ) ) +
147  EvtComplex( cos( 2.0 * getArg( 0 ) ), sin( 2.0 * getArg( 0 ) ) ) *
148  getArg( 4 ) * EvtComplex( 0.0, 1.0 ) * Abar *
149  sin( getArg( 3 ) * t / ( 2 * EvtConst::c ) );
150  }
151  if ( other_b == B0 ) {
152  amp = A *
153  EvtComplex( cos( -2.0 * getArg( 0 ) ),
154  sin( -2.0 * getArg( 0 ) ) ) *
155  EvtComplex( 0.0, 1.0 ) *
156  sin( getArg( 3 ) * t / ( 2 * EvtConst::c ) ) +
157  getArg( 4 ) * Abar * cos( getArg( 3 ) * t / ( 2 * EvtConst::c ) );
158  }
159 
160  vertex( amp );
161 
162  return;
163 }
void decay(EvtParticle *p) override
Definition: EvtSSSCPpng.cpp:63
std::string getName() override
Definition: EvtSSSCPpng.cpp:36
double getArg(unsigned int j)
void init() override
Definition: EvtSSSCPpng.cpp:46
void OtherB(EvtParticle *p, double &t, EvtId &otherb)
Definition: EvtCPUtil.cpp:372
EvtId * getDaugs()
Definition: EvtDecayBase.hh:66
void setProbMax(double prbmx)
Definition: EvtId.hh:27
void vertex(const EvtComplex &amp)
Definition: EvtDecayAmp.hh:37
double initializePhaseSpace(unsigned int numdaughter, EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
void checkNDaug(int d1, int d2=-1)
void checkSpinParent(EvtSpinType::spintype sp)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
static const double c
Definition: EvtConst.hh:30
static EvtId getId(const std::string &name)
Definition: EvtPDL.cpp:287
double imag(const EvtComplex &c)
Definition: EvtComplex.hh:235
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
int getNDaug() const
Definition: EvtDecayBase.hh:65
static EvtCPUtil * getInstance()
Definition: EvtCPUtil.cpp:43
void initProbMax() override
Definition: EvtSSSCPpng.cpp:58
double real(const EvtComplex &c)
Definition: EvtComplex.hh:230
EvtDecayBase * clone() override
Definition: EvtSSSCPpng.cpp:41