BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtSSSCPpng.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
4// This software is part of the EvtGen package developed jointly
5// for the BaBar and CLEO collaborations. If you use all or part
6// of it, please give an appropriate acknowledgement.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9// Copyright (C) 1998 Caltech, UCSB
10//
11// Module: EvtSSSCPpng.cc
12//
13// Description: Routine to decay B -> 2 scalars taking into account penguin
14// contributions (assuming single quark dominance for penguins)
15//
16// Modification history:
17//
18// RYD/NK December 3, 1997 Module created
19//
20//------------------------------------------------------------------------
21//
22#include "EvtSSSCPpng.hh"
32#include <stdlib.h>
33#include <string>
34
36
37void EvtSSSCPpng::getName( std::string& model_name ) { model_name = "SSS_CP_PNG"; }
38
40
42
43 // check that there are 7 arguments
44 checkNArg( 7 );
45 checkNDaug( 2 );
46
48
51}
52
54
55 setProbMax( getArg( 5 ) * getArg( 5 ) * ( 1 + getArg( 6 ) * getArg( 6 ) ) );
56}
57
59
60 // added by Lange Jan4,2000
61 static EvtId B0 = EvtPDL::getId( "B0" );
62 static EvtId B0B = EvtPDL::getId( "anti-B0" );
63
64 double t;
65 EvtId other_b;
66
68
69 EvtComplex amp;
70
71 EvtComplex A, Abar;
72 // EvtComplex ACC, AbarCC;
73
74 // assume single (top) quark dominance for the penguin.
75
76 // old: a0=alpha, a1=dm, a2=1, a3=1, a4=0, a5=1, a6=0
77 // new: a0=beta, a1=gamma, a2=delta, a3=dm, a4=1, a5=1=A_{T}, a6=A_{P}/A_{T}
78
79 // e.g., for B -> pi pi
80 // A_{T} = |V_{ub} V_{ud}| T
81 // A_{P} = |V_{tb} V_{td}| P
82 // P and T are purely hadronic matrix elements
83 // P/T = 0.055, A_{P}/A_{T} = 0.2 (see Marrocchesi and Paver, hep-ph/9702353)
84
85 // A = A_{T}( exp(i(beta+gamma)) + (A_{P}/A_{T}) exp(i(delta))
86 // A_bar = same, except for the sign of the weak phases
87 // here, delta = delta_{p}-delta_{t} (rel. strong phase)
88
89 A = getArg( 5 ) *
90 ( EvtComplex( cos( -getArg( 0 ) - getArg( 1 ) ), sin( -getArg( 0 ) - getArg( 1 ) ) ) +
91 getArg( 6 ) * EvtComplex( cos( getArg( 2 ) ), sin( getArg( 2 ) ) ) );
92
93 Abar = getArg( 5 ) *
94 ( EvtComplex( cos( getArg( 0 ) + getArg( 1 ) ), sin( getArg( 0 ) + getArg( 1 ) ) ) +
95 getArg( 6 ) * EvtComplex( cos( getArg( 2 ) ), sin( getArg( 2 ) ) ) );
96
97 // get fraction of B0 tags with these amplitudes
98
99 // double xd = 0.65;
100 double ratio = 1 / ( 1 + 0.65 * 0.65 );
101
102 EvtComplex rf, rbarf;
103
104 rf = EvtComplex( cos( 2.0 * getArg( 0 ) ), sin( 2.0 * getArg( 0 ) ) ) * Abar / A;
105 rbarf = EvtComplex( 1.0 ) / rf;
106
107 double A2 = real( A ) * real( A ) + imag( A ) * imag( A );
108 double Abar2 = real( Abar ) * real( Abar ) + imag( Abar ) * imag( Abar );
109
110 double rf2 = real( rf ) * real( rf ) + imag( rf ) * imag( rf );
111 double rbarf2 = real( rbarf ) * real( rbarf ) + imag( rbarf ) * imag( rbarf );
112
113 // fraction of B0 _tags_
114 double fract = ( Abar2 * ( 1 + rbarf2 + ( 1 - rbarf2 ) * ratio ) ) /
115 ( Abar2 * ( 1 + rbarf2 + ( 1 - rbarf2 ) * ratio ) +
116 A2 * ( 1 + rf2 + ( 1 - rf2 ) * ratio ) );
117
118 EvtCPUtil::OtherB( p, t, other_b, fract );
119
120 // this method works just as well -- NK
121 // randomly generate the tag (B0 or B0B)
122
123 // double tag = EvtRandom::Flat(0.0,1.0);
124 // if (tag < 0.5) {
125 //
126 // EvtCPUtil::OtherB(p,t,other_b,1.0);
127 // other_b = B0;
128 // }
129 // else {
130 //
131 // EvtCPUtil::OtherB(p,t,other_b,0.0);
132 // other_b = B0B;
133 // }
134
135 // mixing angle = -beta
136
137 if ( other_b == B0B )
138 {
139 amp = A * cos( getArg( 3 ) * t / ( 2 * EvtConst::c ) ) +
140 EvtComplex( cos( 2.0 * getArg( 0 ) ), sin( 2.0 * getArg( 0 ) ) ) * getArg( 4 ) *
141 EvtComplex( 0.0, 1.0 ) * Abar * sin( getArg( 3 ) * t / ( 2 * EvtConst::c ) );
142 }
143 if ( other_b == B0 )
144 {
145 amp = A * EvtComplex( cos( -2.0 * getArg( 0 ) ), sin( -2.0 * getArg( 0 ) ) ) *
146 EvtComplex( 0.0, 1.0 ) * sin( getArg( 3 ) * t / ( 2 * EvtConst::c ) ) +
147 getArg( 4 ) * Abar * cos( getArg( 3 ) * t / ( 2 * EvtConst::c ) );
148 }
149
150 vertex( amp );
151
152 return;
153}
double imag(const EvtComplex &c)
static void OtherB(EvtParticle *p, double &t, EvtId &otherb)
Definition EvtCPUtil.cc:225
static const double c
Definition EvtConst.hh:31
void vertex(const EvtComplex &amp)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
double getArg(int j)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
EvtId * getDaugs()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
Definition EvtId.hh:27
static EvtId getId(const std::string &name)
Definition EvtPDL.cc:272
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
void decay(EvtParticle *p)
virtual ~EvtSSSCPpng()
void getName(std::string &name)
EvtDecayBase * clone()
void initProbMax()
int t()
Definition t.c:1