BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtBHadronic Class Reference

#include <EvtBHadronic.hh>

Inheritance diagram for EvtBHadronic:

Public Member Functions

 EvtBHadronic ()
virtual ~EvtBHadronic ()
void getName (std::string &name)
EvtDecayBaseclone ()
void init ()
void decay (EvtParticle *p)
Public Member Functions inherited from EvtDecayAmp
void makeDecay (EvtParticle *p)
void setWeight (double weight)
void vertex (const EvtComplex &amp)
void vertex (int i1, const EvtComplex &amp)
void vertex (int i1, int i2, const EvtComplex &amp)
void vertex (int i1, int i2, int i3, const EvtComplex &amp)
void vertex (int *i1, const EvtComplex &amp)
virtual ~EvtDecayAmp ()
Public Member Functions inherited from EvtDecayBase
virtual void initProbMax ()
virtual std::string commandName ()
virtual void command (std::string cmd)
double getProbMax (double prob)
double resetProbMax (double prob)
 EvtDecayBase ()
virtual ~EvtDecayBase ()
virtual bool matchingDecay (const EvtDecayBase &other) const
EvtId getParentId ()
double getBranchingFraction ()
void disableCheckQ ()
void checkQ ()
int getNDaug ()
EvtIdgetDaugs ()
EvtId getDaug (int i)
int getNArg ()
int getPHOTOS ()
void setPHOTOS ()
void setVerbose ()
void setSummary ()
double * getArgs ()
std::string * getArgsStr ()
double getArg (int j)
std::string getArgStr (int j)
std::string getModelName ()
int getDSum ()
int summary ()
int verbose ()
void saveDecayInfo (EvtId ipar, int ndaug, EvtId *daug, int narg, std::vector< std::string > &args, std::string name, double brfr)
void printSummary ()
void setProbMax (double prbmx)
void noProbMax ()
void checkNArg (int a1, int a2=-1, int a3=-1, int a4=-1)
void checkNDaug (int d1, int d2=-1)
void checkSpinParent (EvtSpinType::spintype sp)
void checkSpinDaughter (int d1, EvtSpinType::spintype sp)
virtual int nRealDaughters ()

Additional Inherited Members

Static Public Member Functions inherited from EvtDecayBase
static void findMasses (EvtParticle *p, int ndaugs, EvtId daugs[10], double masses[10])
static void findMass (EvtParticle *p)
static double findMaxMass (EvtParticle *p)
Protected Member Functions inherited from EvtDecayBase
bool daugsDecayedByParentModel ()
Protected Attributes inherited from EvtDecayAmp
EvtAmp _amp2
Protected Attributes inherited from EvtDecayBase
bool _daugsDecayedByParentModel

Detailed Description

Definition at line 27 of file EvtBHadronic.hh.

Constructor & Destructor Documentation

◆ EvtBHadronic()

EvtBHadronic::EvtBHadronic ( )
inline

Definition at line 30 of file EvtBHadronic.hh.

30{}

Referenced by clone().

◆ ~EvtBHadronic()

EvtBHadronic::~EvtBHadronic ( )
virtual

Definition at line 35 of file EvtBHadronic.cc.

35{}

Member Function Documentation

◆ clone()

EvtDecayBase * EvtBHadronic::clone ( )
virtual

Implements EvtDecayBase.

Definition at line 39 of file EvtBHadronic.cc.

39{ return new EvtBHadronic; }

◆ decay()

void EvtBHadronic::decay ( EvtParticle * p)
virtual

Implements EvtDecayBase.

Definition at line 47 of file EvtBHadronic.cc.

47 {
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
62 EvtVector4R p4[MAX_DAUG];
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
84 EvtVector4R q;
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 vertex(const EvtComplex &amp)
double getArg(int j)
EvtId * getDaugs()
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)
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)

◆ getName()

void EvtBHadronic::getName ( std::string & name)
virtual

Implements EvtDecayBase.

Definition at line 37 of file EvtBHadronic.cc.

37{ model_name = "BHADRONIC"; }

◆ init()

void EvtBHadronic::init ( )
virtual

Reimplemented from EvtDecayBase.

Definition at line 41 of file EvtBHadronic.cc.

41 {
42
43 // check that there are 2 argument
44 checkNArg( 2 );
45}
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)

The documentation for this class was generated from the following files: