BOSS 7.0.1
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//
22#include <stdlib.h>
26#include "EvtGenBase/EvtPDL.hh"
33#include <string>
34using std::endl;
35
37
38void EvtBHadronic::getName(std::string& model_name){
39
40 model_name="BHADRONIC";
41
42}
43
44
46
47 return new EvtBHadronic;
48
49}
50
51
53
54 // check that there are 2 argument
55 checkNArg(2);
56
57
58}
59
61
62 //added by Lange Jan4,2000
63 static EvtId B0=EvtPDL::getId("B0");
64 static EvtId D0=EvtPDL::getId("D0");
65 static EvtId DST0=EvtPDL::getId("D*0");
66 static EvtId D3P10=EvtPDL::getId("D'_10");
67 static EvtId D3P20=EvtPDL::getId("D_2*0");
68 static EvtId D3P00=EvtPDL::getId("D_0*0");
69 static EvtId D1P10=EvtPDL::getId("D_10");
70
71 static EvtISGW2FF ffmodel;
72
74
75
77 double m;
78
79 m = p->mass();
80
81
82 int i,j;
83
84 for ( i=0; i<getNDaug(); i++) {
85 p4[i]=p->getDaug(i)->getP4();
86 }
87
88 int bcurrent,wcurrent;
89 int nbcurrent=0;
90 int nwcurrent=0;
91
92 bcurrent=(int)getArg(0);
93 wcurrent=(int)getArg(1);
94
95 EvtVector4C jb[5],jw[5];
96 EvtTensor4C g,tds;
97
98 EvtVector4R p4b;
99 p4b.set(p->mass(),0.0,0.0,0.0);
100
102 double q2;
103
104 EvtComplex ep_meson_bb[5];
105 double f,gf,ap,am;
106 double fp,fm;
107 double hf,kf,bp,bm;
108 EvtVector4R pp,pm;
109 EvtVector4C ep_meson_b[5];
110
111 switch (bcurrent) {
112
113 // D0
114 case 1:
115 q=p4b-p4[0];
116 q2=q*q;
117 nbcurrent=1;
118 ffmodel.getscalarff(B0,D0,EvtPDL::getMeanMass(D0),
119 EvtPDL::getMeanMass(getDaugs()[1]),&fp,&fm);
120 jb[0]=EvtVector4C(fp*(p4b+p4[0])-fm*q);
121 break;
122 // D*
123 case 2:
124 q=p4b-p4[0];
125 q2=q*q;
126 nbcurrent=3;
127 ffmodel.getvectorff(B0,DST0,EvtPDL::getMeanMass(DST0),q2,&f,&gf,&ap,&am);
128
129 g.setdiag(1.0,-1.0,-1.0,-1.0);
130 tds = -f*g
131 -ap*(directProd(p4b,p4b)+directProd(p4b,p4[0]))
132 -gf*EvtComplex(0.0,1.0)*dual(directProd(p4[0]+p4b,p4b-p4[0]))
133 -am*((directProd(p4b,p4b)-directProd(p4b,p4[0])));
134 jb[0]=tds.cont1(p->getDaug(0)->epsParent(0).conj());
135 jb[1]=tds.cont1(p->getDaug(0)->epsParent(1).conj());
136 jb[2]=tds.cont1(p->getDaug(0)->epsParent(2).conj());
137 break;
138 // D1
139 case 3:
140 q=p4b-p4[0];
141 q2=q*q;
142 nbcurrent=3;
143 ffmodel.getvectorff(B0,D3P10,EvtPDL::getMeanMass(D3P10),q2,&f,&gf,&ap,&am);
144
145 g.setdiag(1.0,-1.0,-1.0,-1.0);
146 tds = -f*g
147 -ap*(directProd(p4b,p4b)+directProd(p4b,p4[0]))
148 -gf*EvtComplex(0.0,1.0)*dual(directProd(p4[0]+p4b,p4b-p4[0]))
149 -am*((directProd(p4b,p4b)-directProd(p4b,p4[0])));
150 jb[0]=tds.cont1(p->getDaug(0)->epsParent(0).conj());
151 jb[1]=tds.cont1(p->getDaug(0)->epsParent(1).conj());
152 jb[2]=tds.cont1(p->getDaug(0)->epsParent(2).conj());
153
154 break;
155 // D2*
156 case 4:
157 q=p4b-p4[0];
158 q2=q*q;
159 nbcurrent=5;
160 ffmodel.gettensorff(B0,D3P20,EvtPDL::getMeanMass(D3P20),q2,&hf,&kf,&bp,&bm);
161 g.setdiag(1.0,-1.0,-1.0,-1.0);
162
163 ep_meson_b[0] = ((p->getDaug(0)->epsTensorParent(0)).cont2(p4b)).conj();
164 ep_meson_b[1] = ((p->getDaug(0)->epsTensorParent(1)).cont2(p4b)).conj();
165 ep_meson_b[2] = ((p->getDaug(0)->epsTensorParent(2)).cont2(p4b)).conj();
166 ep_meson_b[3] = ((p->getDaug(0)->epsTensorParent(3)).cont2(p4b)).conj();
167 ep_meson_b[4] = ((p->getDaug(0)->epsTensorParent(4)).cont2(p4b)).conj();
168
169 pp=p4b+p4[0];
170 pm=p4b-p4[0];
171
172 ep_meson_bb[0]=ep_meson_b[0]*(p4b);
173 ep_meson_bb[1]=ep_meson_b[1]*(p4b);
174 ep_meson_bb[2]=ep_meson_b[2]*(p4b);
175 ep_meson_bb[3]=ep_meson_b[3]*(p4b);
176 ep_meson_bb[4]=ep_meson_b[4]*(p4b);
177
178 jb[0]=EvtComplex(0.0,(1.0)*hf)*dual(directProd(pp,pm)).cont2(ep_meson_b[0])
179 -kf*ep_meson_b[0]
180 -bp*ep_meson_bb[0]*pp-bm*ep_meson_bb[0]*pm;
181
182 jb[1]=EvtComplex(0.0,(1.0)*hf)*dual(directProd(pp,pm)).cont2(ep_meson_b[1])
183 -kf*ep_meson_b[1]
184 -bp*ep_meson_bb[1]*pp-bm*ep_meson_bb[1]*pm;
185
186 jb[2]=EvtComplex(0.0,(1.0)*hf)*dual(directProd(pp,pm)).cont2(ep_meson_b[2])
187 -kf*ep_meson_b[2]
188 -bp*ep_meson_bb[2]*pp-bm*ep_meson_bb[2]*pm;
189
190 jb[3]=EvtComplex(0.0,(1.0)*hf)*dual(directProd(pp,pm)).cont2(ep_meson_b[3])
191 -kf*ep_meson_b[3]
192 -bp*ep_meson_bb[3]*pp-bm*ep_meson_bb[3]*pm;
193
194 jb[4]=EvtComplex(0.0,(1.0)*hf)*dual(directProd(pp,pm)).cont2(ep_meson_b[4])
195 -kf*ep_meson_b[4]
196 -bp*ep_meson_bb[4]*pp-bm*ep_meson_bb[4]*pm;
197 break;
198 // D_0*
199 case 5:
200 q=p4b-p4[0];
201 q2=q*q;
202 double f,gf,ap,am;
203 nbcurrent=3;
204 ffmodel.getvectorff(B0,D1P10,EvtPDL::getMeanMass(D1P10),q2,&f,&gf,&ap,&am);
205 g.setdiag(1.0,-1.0,-1.0,-1.0);
206 tds = -f*g
207 -ap*(directProd(p4b,p4b)+directProd(p4b,p4[0]))
208 +gf*EvtComplex(0.0,1.0)*dual(directProd(p4[0]+p4b,p4b-p4[0]))
209 -am*((directProd(p4b,p4b)-directProd(p4b,p4[0])));
210 jb[0]=tds.cont1(p->getDaug(0)->epsParent(0).conj());
211 jb[1]=tds.cont1(p->getDaug(0)->epsParent(1).conj());
212 jb[2]=tds.cont1(p->getDaug(0)->epsParent(2).conj());
213 break;
214 // D_1
215 case 6:
216 q=p4b-p4[0];
217 q2=q*q;
218 nbcurrent=1;
219 ffmodel.getscalarff(B0,D3P00,EvtPDL::getMeanMass(D3P00),q2,&fp,&fm);
220 jb[0]=fp*(p4b+p4[0])+fm*q;
221 break;
222 default:
223 report(ERROR,"EvtGen")<<"In EvtBHadronic, unknown hadronic current."<<endl;
224
225 }
226
227 double norm;
228
229 switch (wcurrent) {
230
231
232 case 1: case 3: case 4:
233 nwcurrent=1;
234 jw[0]=p4[getNDaug()-1];
235 break;
236
237 case 2: case 5: case 6:
238 nwcurrent=3;
239 norm=1.0/sqrt(p4[1].get(0)*p4[1].get(0)/p4[1].mass2()-1.0);
240 jw[0]=norm*p->getDaug(getNDaug()-1)->epsParent(0);
241 jw[1]=norm*p->getDaug(getNDaug()-1)->epsParent(1);
242 jw[2]=norm*p->getDaug(getNDaug()-1)->epsParent(2);
243 break;
244
245
246 default:
247 report(ERROR,"EvtGen")<<"In EvtBHadronic, unknown W current."<<endl;
248
249 }
250
251 if (nbcurrent==1&&nwcurrent==1){
252 vertex(jb[0]*jw[0]);
253 return;
254 }
255
256 if (nbcurrent==1){
257 //report(INFO,"EvtGen") << "Amplitudes:";
258 //EvtComplex a=0.0;
259 for(j=0;j<nwcurrent;j++){
260 //report(INFO,"EvtGen") << jb[0]*jw[j] << " ";
261 //a+=(jb[0]*jw[j]*jb[0]*jw[j]);
262 vertex(j,jb[0]*jw[j]);
263 }
264 //report(INFO,"EvtGen") << " prob:"<<a<<" mass:"<<p4[1].mass()<< endl;
265 return;
266 }
267
268 if (nwcurrent==1){
269 for(j=0;j<nbcurrent;j++){
270 vertex(j,jb[j]*jw[0]);
271 }
272 return;
273 }
274
275 for(j=0;j<nbcurrent;j++){
276 for(i=0;i<nwcurrent;i++){
277 vertex(j,i,jb[j]*jw[i]);
278 }
279 }
280 return;
281
282}
283
284
285
286
287
288
289
Evt3Rank3C conj(const Evt3Rank3C &t2)
Definition: Evt3Rank3C.cc:175
Evt3Rank3C directProd(const EvtVector3C &c1, const EvtVector3C &c2, const EvtVector3C &c3)
const int MAX_DAUG
Definition: EvtParticle.hh:38
ostream & report(Severity severity, const char *facility)
Definition: EvtReport.cc:36
@ ERROR
Definition: EvtReport.hh:49
EvtTensor4C dual(const EvtTensor4C &t2)
Definition: EvtTensor4C.cc:379
****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)
Definition: EvtBHadronic.cc:38
void decay(EvtParticle *p)
Definition: EvtBHadronic.cc:60
virtual ~EvtBHadronic()
Definition: EvtBHadronic.cc:36
EvtDecayBase * clone()
Definition: EvtBHadronic.cc:45
void vertex(const EvtComplex &amp)
Definition: EvtDecayAmp.hh:37
double getArg(int j)
EvtId * getDaugs()
Definition: EvtDecayBase.hh:65
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:35
void getvectorff(EvtId parent, EvtId daught, double t, double mass, double *a1f, double *a2f, double *vf, double *a0f)
Definition: EvtISGW2FF.cc:382
void gettensorff(EvtId parent, EvtId daught, double t, double mass, double *hf, double *kf, double *bpf, double *bmf)
Definition: EvtISGW2FF.cc:217
Definition: EvtId.hh:27
static double getMeanMass(EvtId i)
Definition: EvtPDL.hh:45
static EvtId getId(const std::string &name)
Definition: EvtPDL.cc:287
virtual EvtVector4C epsParent(int i) const
Definition: EvtParticle.cc:565
virtual EvtTensor4C epsTensorParent(int i) const
Definition: EvtParticle.cc:657
const EvtVector4R & getP4() const
Definition: EvtParticle.cc:121
EvtParticle * getDaug(int i)
Definition: EvtParticle.cc:85
double mass() const
Definition: EvtParticle.cc:127
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)
Definition: EvtTensor4C.cc:218
EvtVector4C cont1(const EvtVector4C &v4) const
Definition: EvtTensor4C.cc:461
EvtVector4C cont2(const EvtVector4C &v4) const
Definition: EvtTensor4C.cc:474
EvtVector4C conj() const
Definition: EvtVector4C.hh:206
void set(int i, double d)
Definition: EvtVector4R.hh:183