4 #define _USE_MATH_DEFINES
8 #include <ginac/ginac.h>
16 using namespace GiNaC;
25 widthcalc(): M2(0,2,2,2,2,2,2,2), M22(0,2,2,2,2,2,2), s2(
"s2"), s3(
"s3"), mq1(
"mq1"), mq2(
"mq2"), mq3(
"mq3"), mq4(
"mq4"){
27 integral::max_integration_level=100;
28 integral::relative_integration_error=1e-3;
35 cout<<
"Generating M22.dat"<<endl;
37 realsymbol mu(
"mu"), nu(
"nu"), alpha(
"alpha"), beta(
"beta"), rho(
"rho"), zeta(
"zeta");
38 realsymbol q1(
"q1"), q2(
"q2"), q3(
"q3"), q4(
"q4");
39 realsymbol h1(
"h1"), h2(
"h2"), h3(
"h3"), h4(
"h4");
41 varidx imu(mu,4,0), inu(nu,4,0), irho(rho,4,0);
42 varidx ialpha(alpha,4,0), ibeta(beta,4,0), izeta(zeta,4,0);
44 varidx jmu(mu,4,1), jnu(nu,4,1), jrho(rho,4,1);
46 ex m2q1=mq1*mq1, m2q2=mq2*mq2, m2q3=mq3*mq3, m2q4=mq4*mq4;
48 ex q2mu=indexed(q2,imu);
49 ex q3mu=indexed(q3,imu);
50 ex q4mu=indexed(q4,imu);
51 ex q1mu=q2mu+q3mu+q4mu;
53 ex s4=m2q1+m2q2+m2q3+m2q4-s2-s3;
55 ex vq1=dirac_slash(q2,4)+dirac_slash(q3,4)+dirac_slash(q4,4)+mq1*dirac_ONE(), vq2=dirac_slash(q2,4)+mq2*dirac_ONE();
56 ex vq3=dirac_slash(q3,4)+mq3*dirac_ONE(), vq4=dirac_slash(q4,4)-mq4*dirac_ONE();
60 sp.add(q4, q3, (s2-m2q4-m2q3)/2);
74 v[0][0][0]=dirac_gammaL(); v[0][0][1]=dirac_gammaR();
75 v[0][1][0]=dirac_gammaR(); v[0][1][1]=dirac_gammaL();
76 v[1][0][0]=dirac_gammaL(); v[1][0][1]=dirac_gammaL();
77 v[1][1][0]=dirac_gammaR(); v[1][1][1]=dirac_gammaR();
80 for(
uint j=0;j<2;j++){
81 v[0][i][j]=-v[0][i][j]*s2/(mq1+mq2);
82 v[1][i][j]=(dirac_slash(q3,4)+dirac_slash(q4,4))*v[1][i][j];
100 for(
uint l=0;l<2;l++)
101 for(
uint m=0;m<2;m++)
102 for(
uint n=0;n<2;n++){
106 ex tmp=dirac_trace(vq3*v[i][m][0]*vq4*v[j][n][1])*int(pow(-1.0,
double(k+1+l)));
107 M22[i][j][k][l][m][n]=tmp.simplify_indexed(sp);
114 cout<<
"Generating M2.dat"<<endl;
116 realsymbol mu(
"mu"), nu(
"nu"), alpha(
"alpha"), beta(
"beta"), rho(
"rho"), zeta(
"zeta");
117 realsymbol q1(
"q1"), q2(
"q2"), q3(
"q3"), q4(
"q4");
118 realsymbol h1(
"h1"), h2(
"h2"), h3(
"h3"), h4(
"h4");
120 varidx imu(mu,4,0), inu(nu,4,0), irho(rho,4,0);
121 varidx ialpha(alpha,4,0), ibeta(beta,4,0), izeta(zeta,4,0);
123 varidx jmu(mu,4,1), jnu(nu,4,1), jrho(rho,4,1);
125 ex m2q1=mq1*mq1, m2q2=mq2*mq2, m2q3=mq3*mq3, m2q4=mq4*mq4;
127 ex q2mu=indexed(q2,imu);
128 ex q3mu=indexed(q3,imu);
129 ex q4mu=indexed(q4,imu);
130 ex q1mu=q2mu+q3mu+q4mu;
134 ex vq1=dirac_slash(q2,4)+dirac_slash(q3,4)+dirac_slash(q4,4)+mq1*dirac_ONE(), vq2=dirac_slash(q2,4)+mq2*dirac_ONE();
135 ex vq3=dirac_slash(q3,4)+mq3*dirac_ONE(), vq4=dirac_slash(q4,4)-mq4*dirac_ONE();
137 ex s4=m2q1+m2q2+m2q3+m2q4-s2-s3;
139 sp.add(q2, q3, (s4-m2q2-m2q3)/2);
140 sp.add(q4, q3, (s2-m2q4-m2q3)/2);
141 sp.add(q2, q4, (s3-m2q2-m2q4)/2);
143 sp.add(q2, q2, m2q2);
144 sp.add(q3, q3, m2q3);
145 sp.add(q4, q4, m2q4);
157 v[0][0][0]=dirac_gammaL(); v[0][0][1]=dirac_gammaR();
158 v[0][1][0]=dirac_gammaR(); v[0][1][1]=dirac_gammaL();
159 v[1][0][0]=dirac_gamma(jmu)*dirac_gammaL(); v[1][0][1]=dirac_gamma(jmu)*dirac_gammaL();
160 v[1][1][0]=dirac_gamma(jmu)*dirac_gammaR(); v[1][1][1]=dirac_gamma(jmu)*dirac_gammaR();
163 for(
uint i=0;i<2;i++)
164 for(
uint j=0;j<2;j++)
165 for(
uint k=0;k<2;k++)
166 for(
uint l=0;l<2;l++)
167 for(
uint m=0;m<2;m++)
168 for(
uint n=0;n<2;n++){
170 ex vim=v[i][m][0].subs(mu==nu);
171 ex vjl=v[j][l][1].subs(mu==alpha);
172 ex vjn=v[j][n][1].subs(mu==beta);
174 traces[i][j][k][l][m][n][0]=dirac_trace(vq2*vik*vq1*vjl)*dirac_trace(vq3*vim*vq4*vjn);
175 traces[i][j][k][l][m][n][1]=-dirac_trace(vq2*vik*vq1*vjl*vq3*vim*vq4*vjn);
178 vector<ex> prop(2,0);
180 prop[1]=lorentz_g(imu,inu);
183 for(
uint i=0;i<2;i++)
184 for(
uint j=0;j<2;j++){
185 prop2[i][j]=prop[i]*prop[j].subs(lst(mu==alpha,nu==beta));
189 for(
uint i=0;i<2;i++)
190 for(
uint j=0;j<2;j++)
191 for(
uint k=0;k<2;k++)
192 for(
uint l=0;l<2;l++)
193 for(
uint m=0;m<2;m++)
194 for(
uint n=0;n<2;n++)
195 for(
uint o=0;o<2;o++)
198 M2[i][j][k][l][m][n][o]=(traces[i][j][k][l][m][n][o]*prop2[i][j]).simplify_indexed(sp);
207 ex q10=(s2+mq1*mq1-mq2*mq2)/(2*sqrt(s2)), lq1l=sqrt(q10*q10-mq1*mq1);
208 ex q30=(s2+mq3*mq3-mq4*mq4)/(2*sqrt(s2)), lq3l=sqrt(q30*q30-mq3*mq3);
209 ex q20=(mq1*mq1+mq2*mq2-s2)/(2*mq1), lq2l=sqrt(q20*q20-mq2*mq2);
212 for(
uint i=0;i<a.size();i++)
if(!mass[i].is_zero())
213 for(
uint j=0;j<a.size();j++)
214 for(
uint k=0;k<2;k++)
215 for(
uint l=0;l<2;l++)
216 for(
uint m=0;m<2;m++)
217 for(
uint n=0;n<2;n++)
218 for(
uint r=0;r<2;r++)
219 for(
uint s=0;s<2;s++){
220 ex coup=a[i][r][k][m]*a[j][s][l][n].conjugate();
223 ex integrand=M2[op[i]][op[j]][k][l][m][n][(r+s)%2];
224 integrand=expand(integral(s3, mq1*mq1+mq3*mq3-2*q10*q30-2*lq1l*lq3l, mq1*mq1+mq3*mq3-2*q10*q30+2*lq1l*lq3l, integrand)\
225 .eval_integ()/lq1l/sqrt(s2)*lq2l/mq1/mq1);
226 double mm2=m2, mm3=m3;
227 if(l) {mm2=m3; mm3=m2;}
228 double result=ex_to<numeric>(integral(s2,std::pow(mm3+m4,2),std::pow(m1-mm2,2),integrand.subs(lst(mq1 == m1, mq2 == mm2, mq3 == mm3, mq4 == m4))).evalf()).to_double()/std::pow(M_PI,3)/512;
229 ex partial=result*coup/(pow(mass[i],2)*pow(mass[j],2));
239 ex q10=(s2+m1*m1)/(2*sqrt(s2)), lq1l=(m1*m1-s2)/(2*sqrt(s2));
240 ex q30=sqrt(s2)/2, lq3l=q30;
241 ex q20=(m1*m1-s2)/(2*m1), lq2l=q20;
244 for(
uint i=0;i<a.size();i++)
if(!mass[i].is_zero())
245 for(
uint j=0;j<a.size();j++)
246 for(
uint k=0;k<2;k++)
247 for(
uint l=0;l<2;l++)
248 for(
uint m=0;m<2;m++)
249 for(
uint n=0;n<2;n++)
250 for(
uint r=0;r<2;r++)
251 for(
uint s=0;s<2;s++){
252 ex coup=a[i][r][k][m]*a[j][s][l][n].conjugate();
255 ex integrand=M2[op[i]][op[j]][k][l][m][n][(r+s)%2].subs(lst(mq1 == m1, mq2 == 0, mq3 == 0, mq4 == 0));
256 integrand=expand(integral(s3, m1*m1-2*q10*q30-2*lq1l*lq3l, m1*m1-2*q10*q30+2*lq1l*lq3l, integrand)\
257 .eval_integ()/lq1l/sqrt(s2)*lq2l/m1/m1);
262 double mm2=0, mm3=0, m4=0;
264 ex result=integral(s2,std::pow(mm3+m4,2),pow(m1-mm2,2),integrand).eval_integ()/pow(Pi,3)/512;
266 ex partial=result*coup/(pow(mass[i],2)*pow(mass[j],2));
274 ex q10=(s2+mq1*mq1-mq2*mq2)/(2*sqrt(s2)), lq1l=sqrt(q10*q10-mq1*mq1);
275 ex q30=(s2+mq3*mq3-mq4*mq4)/(2*sqrt(s2)), lq3l=sqrt(q30*q30-mq3*mq3);
277 for(
uint i=0;i<a.size();i++)
278 for(
uint j=0;j<a.size();j++)
279 for(
uint k=0;k<2;k++)
280 for(
uint l=0;l<2;l++)
281 for(
uint m=0;m<2;m++)
282 for(
uint n=0;n<2;n++){
283 ex coup=a[i][0][k][m]*a[j][0][l][n].conjugate();
286 ex integrand=M22[op[i]][op[j]][k][l][m][n];
289 integrand=expand(integral(s3, mq1*mq1+mq3*mq3-2*q10*q30-2*lq1l*lq3l, mq1*mq1+mq3*mq3-2*q10*q30+2*lq1l*lq3l, integrand)/lq1l/s2);
290 ex result=integrand.subs(lst(sqrt(s2) == mm, s2==mm*mm, mq1 == m1, mq2 == m2, mq3 == m3, mq4 == m4))/Pi/128;
292 if(mi.is_zero()) mi=mm;
294 if(mj.is_zero()) mj=mm;
295 ex partial=result*coup/(pow(mi,2)*pow(mj,2));
307 ex q10=(s2+mq1*mq1-mq2*mq2)/(2*sqrt(s2)), lq1l=sqrt(q10*q10-mq1*mq1);
308 ex q30=(s2+mq3*mq3-mq4*mq4)/(2*sqrt(s2)), lq3l=sqrt(q30*q30-mq3*mq3);
310 for(
uint i=0;i<a.size();i++)
311 for(
uint j=0;j<a.size();j++)
312 for(
uint k=0;k<2;k++)
313 for(
uint l=0;l<2;l++)
314 for(
uint m=0;m<2;m++)
315 for(
uint n=0;n<2;n++){
316 ex coup=a[i][0][k][m]*a[j][0][l][n].conjugate();
319 ex integrand=M22[op[i]][op[j]][k][l][m][n];
322 integrand=expand(integral(s3, mq1*mq1+mq3*mq3-2*q10*q30-2*lq1l*lq3l, mq1*mq1+mq3*mq3-2*q10*q30+2*lq1l*lq3l, integrand)/lq1l/s2);
323 ex result=integrand.subs(lst(sqrt(s2) == mm, s2==mm*mm, mq1 == m1, mq2 == m2, mq3 == m3, mq4 == m4))/Pi/128;
325 if(mi.is_zero()) mi=mm;
327 if(mj.is_zero()) mj=mm;
328 ex partial=result*coup/(pow(mi,2)*pow(mj,2));
368 realsymbol mq1, mq2, mq3,
mq4;
this class calculates decay widths of one lepton to 3 leptons
ex get_integral(const multivector< ex, 4 > &a, const vector< ex > &mass, const vector< int > &op, double m1, double m2, double m3, double m4) const
A vector of vectors of vectors of... (N times) of class T objects.
ex get_integral_meson(const multivector< ex, 4 > &a, const vector< ex > &mass, const vector< int > &op, ex mm, ex m1, ex m2, ex m3, ex m4) const
ex get_integral_symb(const multivector< ex, 4 > &a, const vector< ex > &mass, const vector< int > &op, ex m1) const
ex get_integral_meson2(const multivector< ex, 4 > &a, const vector< ex > &mass, const vector< int > &op, ex mm, ex m1, ex m2, ex m3, ex m4) const