BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtBHadronic.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: EvtBHadronic.cc
12//
13// Description: Model for hadronic B decays. Uses naive factorization.
14//
15// Modification history:
16//
17// RYD June 14, 1997 Module created
18//
19//------------------------------------------------------------------------
20//
21#include "EvtBHadronic.hh"
30#include "EvtISGW2FF.hh"
31#include <stdlib.h>
32#include <string>
33using std::endl;
34
36
37void EvtBHadronic::getName( std::string& model_name ) { model_name = "BHADRONIC"; }
38
40
42
43 // check that there are 2 argument
44 checkNArg( 2 );
45}
46
48
49 // added by Lange Jan4,2000
50 static EvtId B0 = EvtPDL::getId( "B0" );
51 static EvtId D0 = EvtPDL::getId( "D0" );
52 static EvtId DST0 = EvtPDL::getId( "D*0" );
53 static EvtId D3P10 = EvtPDL::getId( "D'_10" );
54 static EvtId D3P20 = EvtPDL::getId( "D_2*0" );
55 static EvtId D3P00 = EvtPDL::getId( "D_0*0" );
56 static EvtId D1P10 = EvtPDL::getId( "D_10" );
57
58 static EvtISGW2FF ffmodel;
59
61
63 double m;
64
65 m = p->mass();
66
67 int i, j;
68
69 for ( i = 0; i < getNDaug(); i++ ) { p4[i] = p->getDaug( i )->getP4(); }
70
71 int bcurrent, wcurrent;
72 int nbcurrent = 0;
73 int nwcurrent = 0;
74
75 bcurrent = (int)getArg( 0 );
76 wcurrent = (int)getArg( 1 );
77
78 EvtVector4C jb[5], jw[5];
79 EvtTensor4C g, tds;
80
81 EvtVector4R p4b;
82 p4b.set( p->mass(), 0.0, 0.0, 0.0 );
83
85 double q2;
86
87 EvtComplex ep_meson_bb[5];
88 double f, gf, ap, am;
89 double fp, fm;
90 double hf, kf, bp, bm;
91 EvtVector4R pp, pm;
92 EvtVector4C ep_meson_b[5];
93
94 switch ( bcurrent )
95 {
96
97 // D0
98 case 1:
99 q = p4b - p4[0];
100 q2 = q * q;
101 nbcurrent = 1;
102 ffmodel.getscalarff( B0, D0, EvtPDL::getMeanMass( D0 ),
103 EvtPDL::getMeanMass( getDaugs()[1] ), &fp, &fm );
104 jb[0] = EvtVector4C( fp * ( p4b + p4[0] ) - fm * q );
105 break;
106 // D*
107 case 2:
108 q = p4b - p4[0];
109 q2 = q * q;
110 nbcurrent = 3;
111 ffmodel.getvectorff( B0, DST0, EvtPDL::getMeanMass( DST0 ), q2, &f, &gf, &ap, &am );
112
113 g.setdiag( 1.0, -1.0, -1.0, -1.0 );
114 tds = -f * g - ap * ( directProd( p4b, p4b ) + directProd( p4b, p4[0] ) ) -
115 gf * EvtComplex( 0.0, 1.0 ) * dual( directProd( p4[0] + p4b, p4b - p4[0] ) ) -
116 am * ( ( directProd( p4b, p4b ) - directProd( p4b, p4[0] ) ) );
117 jb[0] = tds.cont1( p->getDaug( 0 )->epsParent( 0 ).conj() );
118 jb[1] = tds.cont1( p->getDaug( 0 )->epsParent( 1 ).conj() );
119 jb[2] = tds.cont1( p->getDaug( 0 )->epsParent( 2 ).conj() );
120 break;
121 // D1
122 case 3:
123 q = p4b - p4[0];
124 q2 = q * q;
125 nbcurrent = 3;
126 ffmodel.getvectorff( B0, D3P10, EvtPDL::getMeanMass( D3P10 ), q2, &f, &gf, &ap, &am );
127
128 g.setdiag( 1.0, -1.0, -1.0, -1.0 );
129 tds = -f * g - ap * ( directProd( p4b, p4b ) + directProd( p4b, p4[0] ) ) -
130 gf * EvtComplex( 0.0, 1.0 ) * dual( directProd( p4[0] + p4b, p4b - p4[0] ) ) -
131 am * ( ( directProd( p4b, p4b ) - directProd( p4b, p4[0] ) ) );
132 jb[0] = tds.cont1( p->getDaug( 0 )->epsParent( 0 ).conj() );
133 jb[1] = tds.cont1( p->getDaug( 0 )->epsParent( 1 ).conj() );
134 jb[2] = tds.cont1( p->getDaug( 0 )->epsParent( 2 ).conj() );
135
136 break;
137 // D2*
138 case 4:
139 q = p4b - p4[0];
140 q2 = q * q;
141 nbcurrent = 5;
142 ffmodel.gettensorff( B0, D3P20, EvtPDL::getMeanMass( D3P20 ), q2, &hf, &kf, &bp, &bm );
143 g.setdiag( 1.0, -1.0, -1.0, -1.0 );
144
145 ep_meson_b[0] = ( ( p->getDaug( 0 )->epsTensorParent( 0 ) ).cont2( p4b ) ).conj();
146 ep_meson_b[1] = ( ( p->getDaug( 0 )->epsTensorParent( 1 ) ).cont2( p4b ) ).conj();
147 ep_meson_b[2] = ( ( p->getDaug( 0 )->epsTensorParent( 2 ) ).cont2( p4b ) ).conj();
148 ep_meson_b[3] = ( ( p->getDaug( 0 )->epsTensorParent( 3 ) ).cont2( p4b ) ).conj();
149 ep_meson_b[4] = ( ( p->getDaug( 0 )->epsTensorParent( 4 ) ).cont2( p4b ) ).conj();
150
151 pp = p4b + p4[0];
152 pm = p4b - p4[0];
153
154 ep_meson_bb[0] = ep_meson_b[0] * ( p4b );
155 ep_meson_bb[1] = ep_meson_b[1] * ( p4b );
156 ep_meson_bb[2] = ep_meson_b[2] * ( p4b );
157 ep_meson_bb[3] = ep_meson_b[3] * ( p4b );
158 ep_meson_bb[4] = ep_meson_b[4] * ( p4b );
159
160 jb[0] =
161 EvtComplex( 0.0, ( 1.0 ) * hf ) * dual( directProd( pp, pm ) ).cont2( ep_meson_b[0] ) -
162 kf * ep_meson_b[0] - bp * ep_meson_bb[0] * pp - bm * ep_meson_bb[0] * pm;
163
164 jb[1] =
165 EvtComplex( 0.0, ( 1.0 ) * hf ) * dual( directProd( pp, pm ) ).cont2( ep_meson_b[1] ) -
166 kf * ep_meson_b[1] - bp * ep_meson_bb[1] * pp - bm * ep_meson_bb[1] * pm;
167
168 jb[2] =
169 EvtComplex( 0.0, ( 1.0 ) * hf ) * dual( directProd( pp, pm ) ).cont2( ep_meson_b[2] ) -
170 kf * ep_meson_b[2] - bp * ep_meson_bb[2] * pp - bm * ep_meson_bb[2] * pm;
171
172 jb[3] =
173 EvtComplex( 0.0, ( 1.0 ) * hf ) * dual( directProd( pp, pm ) ).cont2( ep_meson_b[3] ) -
174 kf * ep_meson_b[3] - bp * ep_meson_bb[3] * pp - bm * ep_meson_bb[3] * pm;
175
176 jb[4] =
177 EvtComplex( 0.0, ( 1.0 ) * hf ) * dual( directProd( pp, pm ) ).cont2( ep_meson_b[4] ) -
178 kf * ep_meson_b[4] - bp * ep_meson_bb[4] * pp - bm * ep_meson_bb[4] * pm;
179 break;
180 // D_0*
181 case 5:
182 q = p4b - p4[0];
183 q2 = q * q;
184 double f, gf, ap, am;
185 nbcurrent = 3;
186 ffmodel.getvectorff( B0, D1P10, EvtPDL::getMeanMass( D1P10 ), q2, &f, &gf, &ap, &am );
187 g.setdiag( 1.0, -1.0, -1.0, -1.0 );
188 tds = -f * g - ap * ( directProd( p4b, p4b ) + directProd( p4b, p4[0] ) ) +
189 gf * EvtComplex( 0.0, 1.0 ) * dual( directProd( p4[0] + p4b, p4b - p4[0] ) ) -
190 am * ( ( directProd( p4b, p4b ) - directProd( p4b, p4[0] ) ) );
191 jb[0] = tds.cont1( p->getDaug( 0 )->epsParent( 0 ).conj() );
192 jb[1] = tds.cont1( p->getDaug( 0 )->epsParent( 1 ).conj() );
193 jb[2] = tds.cont1( p->getDaug( 0 )->epsParent( 2 ).conj() );
194 break;
195 // D_1
196 case 6:
197 q = p4b - p4[0];
198 q2 = q * q;
199 nbcurrent = 1;
200 ffmodel.getscalarff( B0, D3P00, EvtPDL::getMeanMass( D3P00 ), q2, &fp, &fm );
201 jb[0] = fp * ( p4b + p4[0] ) + fm * q;
202 break;
203 default: report( ERROR, "EvtGen" ) << "In EvtBHadronic, unknown hadronic current." << endl;
204 }
205
206 double norm;
207
208 switch ( wcurrent )
209 {
210
211 case 1:
212 case 3:
213 case 4:
214 nwcurrent = 1;
215 jw[0] = p4[getNDaug() - 1];
216 break;
217
218 case 2:
219 case 5:
220 case 6:
221 nwcurrent = 3;
222 norm = 1.0 / sqrt( p4[1].get( 0 ) * p4[1].get( 0 ) / p4[1].mass2() - 1.0 );
223 jw[0] = norm * p->getDaug( getNDaug() - 1 )->epsParent( 0 );
224 jw[1] = norm * p->getDaug( getNDaug() - 1 )->epsParent( 1 );
225 jw[2] = norm * p->getDaug( getNDaug() - 1 )->epsParent( 2 );
226 break;
227
228 default: report( ERROR, "EvtGen" ) << "In EvtBHadronic, unknown W current." << endl;
229 }
230
231 if ( nbcurrent == 1 && nwcurrent == 1 )
232 {
233 vertex( jb[0] * jw[0] );
234 return;
235 }
236
237 if ( nbcurrent == 1 )
238 {
239 // report(INFO,"EvtGen") << "Amplitudes:";
240 // EvtComplex a=0.0;
241 for ( j = 0; j < nwcurrent; j++ )
242 {
243 // report(INFO,"EvtGen") << jb[0]*jw[j] << " ";
244 // a+=(jb[0]*jw[j]*jb[0]*jw[j]);
245 vertex( j, jb[0] * jw[j] );
246 }
247 // report(INFO,"EvtGen") << " prob:"<<a<<" mass:"<<p4[1].mass()<< endl;
248 return;
249 }
250
251 if ( nwcurrent == 1 )
252 {
253 for ( j = 0; j < nbcurrent; j++ ) { vertex( j, jb[j] * jw[0] ); }
254 return;
255 }
256
257 for ( j = 0; j < nbcurrent; j++ )
258 {
259 for ( i = 0; i < nwcurrent; i++ ) { vertex( j, i, jb[j] * jw[i] ); }
260 }
261 return;
262}
TFile f("ana_bhabha660a_dqa_mcPat_zy_old.root")
Evt3Rank3C directProd(const EvtVector3C &c1, const EvtVector3C &c2, const EvtVector3C &c3)
const int MAX_DAUG
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:34
@ ERROR
Definition EvtReport.hh:49
EvtTensor4C dual(const EvtTensor4C &t2)
****INTEGER imax DOUBLE PRECISION m_pi *DOUBLE PRECISION m_amfin DOUBLE PRECISION m_Chfin DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_sinw2 DOUBLE PRECISION m_GFermi DOUBLE PRECISION m_MfinMin DOUBLE PRECISION m_ta2 INTEGER m_out INTEGER m_KeyFSR INTEGER m_KeyQCD *COMMON c_Semalib $ !copy of input $ !CMS energy $ !beam mass $ !final mass $ !beam charge $ !final charge $ !smallest final mass $ !Z mass $ !Z width $ !EW mixing angle $ !Gmu Fermi $ alphaQED at q
Definition KKsem.h:33
void getName(std::string &name)
void decay(EvtParticle *p)
virtual ~EvtBHadronic()
EvtDecayBase * clone()
void vertex(const EvtComplex &amp)
double getArg(int j)
EvtId * getDaugs()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
void getscalarff(EvtId parent, EvtId daught, double t, double mass, double *fpf, double *f0f)
Definition EvtISGW2FF.cc:34
void getvectorff(EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f)
void gettensorff(EvtId parent, EvtId daught, double t, double mass, double *hf, double *kf, double *bpf, double *bmf)
Definition EvtId.hh:27
static double getMeanMass(EvtId i)
Definition EvtPDL.hh:43
static EvtId getId(const std::string &name)
Definition EvtPDL.cc:272
virtual EvtVector4C epsParent(int i) const
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double mass() const
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
void setdiag(double t00, double t11, double t22, double t33)
EvtVector4C cont1(const EvtVector4C &v4) const
EvtVector4C cont2(const EvtVector4C &v4) const
EvtVector4C conj() const
void set(int i, double d)