00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "EvtGenBase/EvtPatches.hh"
00023 #include "EvtGenBase/EvtPatches.hh"
00024 #include "EvtGenBase/EvtParticle.hh"
00025 #include "EvtGenBase/EvtGenKine.hh"
00026 #include "EvtGenBase/EvtPDL.hh"
00027 #include "EvtGenBase/EvtReport.hh"
00028 #include "EvtGenBase/EvtVector4C.hh"
00029 #include "EvtGenBase/EvtTensor4C.hh"
00030 #include "EvtGenBase/EvtDiracSpinor.hh"
00031 #include "EvtGenModels/EvtbTosllVectorAmp.hh"
00032 #include "EvtGenBase/EvtId.hh"
00033 #include "EvtGenBase/EvtIdSet.hh"
00034 #include "EvtGenBase/EvtAmp.hh"
00035 #include "EvtGenModels/EvtbTosllAmp.hh"
00036 #include "EvtGenModels/EvtbTosllFF.hh"
00037
00038 void EvtbTosllVectorAmp::CalcAmp( EvtParticle *parent,
00039 EvtAmp& amp,
00040 EvtbTosllFF *formFactors ) {
00041
00042
00043
00044 EvtVector4R q = parent->getDaug(1)->getP4()
00045 + parent->getDaug(2)->getP4();
00046 double q2 = (q.mass2());
00047
00048
00049 double a1,a2,a0,v,t1,t2,t3;
00050 double mesonmass = parent->getDaug(0)->mass();
00051 double parentmass = parent->mass();
00052
00053 formFactors->getVectorFF(parent->getId(),
00054 parent->getDaug(0)->getId(),
00055 q2,
00056 mesonmass,
00057 a1,a2,a0,v,t1,t2,t3);
00058
00059
00060 EvtId daught = parent->getDaug(0)->getId();
00061 bool btod = false;
00062 bool nnlo = true;
00063 if
00064 (
00065 daught == EvtPDL::getId(std::string("rho+")) ||
00066 daught == EvtPDL::getId(std::string("rho-")) ||
00067 daught == EvtPDL::getId(std::string("rho0")) ||
00068 daught == EvtPDL::getId(std::string("omega"))
00069 )
00070 btod = true;
00071
00072 EvtVector4R p4b;
00073 p4b.set(parent->mass(),0.0,0.0,0.0);
00074 EvtVector4R p4meson = parent->getDaug(0)->getP4();
00075
00076 EvtVector4C l11,l12;
00077 EvtVector4C l21,l22;
00078
00079 EvtVector4C a11,a12;
00080 EvtVector4C a21,a22;
00081
00082 EvtId parentID = parent->getId();
00083
00084
00085
00086 EvtVector4R pbhat=p4b/parentmass;
00087 EvtVector4R qhat=q/parentmass;
00088 EvtVector4R pkstarhat=p4meson/parentmass;
00089 EvtVector4R phat=pbhat+pkstarhat;
00090
00091 EvtComplex c7eff = EvtbTosllAmp::GetC7Eff(q2,nnlo);
00092 EvtComplex c9eff = EvtbTosllAmp::GetC9Eff(q2,nnlo,btod);
00093 EvtComplex c10eff = EvtbTosllAmp::GetC10Eff(q2,nnlo);
00094 EvtComplex uniti(0.0,1.0);
00095
00096 double mhatb=4.4/(parentmass);
00097 double mhatkstar=mesonmass/(parentmass);
00098 double shat=q2/(parentmass*parentmass);
00099
00100
00101 EvtComplex a;
00102 a=c9eff*v*2/(1+mhatkstar)+4*mhatb*c7eff*t1/shat;
00103 EvtComplex b;
00104 b=(1+mhatkstar)*(c9eff*a1+2*mhatb*(1-mhatkstar)*c7eff*t2/shat);
00105 EvtComplex c;
00106 c=((1-mhatkstar)*c9eff*a2+
00107 2*mhatb*c7eff*(t3+(1-mhatkstar*mhatkstar)*t2/shat))/
00108 (1-mhatkstar*mhatkstar);
00109 EvtComplex d;
00110 d=(c9eff*((1+mhatkstar)*a1-(1-mhatkstar)*a2-2*mhatkstar*a0)
00111 -2*mhatb*c7eff*t3)/shat;
00112 EvtComplex e;
00113 e=2*c10eff*v/(1+mhatkstar);
00114 EvtComplex f;
00115 f=(1+mhatkstar)*c10eff*a1;
00116 EvtComplex g;
00117 g=c10eff*a2/(1+mhatkstar);
00118 EvtComplex h;
00119 h=c10eff*((1+mhatkstar)*a1-(1-mhatkstar)*a2-2*mhatkstar*a0)/shat;
00120
00121 EvtTensor4C T1,T2;
00122
00123 static EvtIdSet bmesons("B-","anti-B0");
00124 static EvtIdSet bbarmesons("B+","B0");
00125
00126 EvtParticle* lepPlus(0);
00127 EvtParticle* lepMinus(0);
00128
00129 int charge1 = EvtPDL::chg3(parent->getDaug(1)->getId());
00130 int charge2 = EvtPDL::chg3(parent->getDaug(2)->getId());
00131
00132 lepPlus = (charge1 > charge2) ? parent->getDaug(1) : parent->getDaug(2);
00133 lepMinus = (charge1 < charge2) ? parent->getDaug(1) : parent->getDaug(2);
00134
00135
00136
00137
00138
00139 if (bmesons.contains(parentID)) {
00140
00141 T1=a*dual(directProd(pbhat,pkstarhat))
00142 -b*uniti*EvtTensor4C::g()
00143 +c*uniti*directProd(pbhat,phat)
00144 +d*uniti*directProd(pbhat,qhat);
00145
00146 T2=e*dual(directProd(pbhat,pkstarhat))
00147 -f*uniti*EvtTensor4C::g()
00148 +g*uniti*directProd(pbhat,phat)
00149 +h*uniti*directProd(pbhat,qhat);
00150
00151 l11=EvtLeptonVCurrent(lepPlus->spParent(0),
00152 lepMinus->spParent(0));
00153 l21=EvtLeptonVCurrent(lepPlus->spParent(1),
00154 lepMinus->spParent(0));
00155 l12=EvtLeptonVCurrent(lepPlus->spParent(0),
00156 lepMinus->spParent(1));
00157 l22=EvtLeptonVCurrent(lepPlus->spParent(1),
00158 lepMinus->spParent(1));
00159
00160 a11=EvtLeptonACurrent(lepPlus->spParent(0),
00161 lepMinus->spParent(0));
00162 a21=EvtLeptonACurrent(lepPlus->spParent(1),
00163 lepMinus->spParent(0));
00164 a12=EvtLeptonACurrent(lepPlus->spParent(0),
00165 lepMinus->spParent(1));
00166 a22=EvtLeptonACurrent(lepPlus->spParent(1),
00167 lepMinus->spParent(1));
00168
00169 } else {
00170
00171 if (bbarmesons.contains(parentID)) {
00172
00173 T1=-a*dual(directProd(pbhat,pkstarhat))
00174 -b*uniti*EvtTensor4C::g()
00175 +c*uniti*directProd(pbhat,phat)
00176 +d*uniti*directProd(pbhat,qhat);
00177
00178 T2=-e*dual(directProd(pbhat,pkstarhat))
00179 -f*uniti*EvtTensor4C::g()
00180 +g*uniti*directProd(pbhat,phat)
00181 +h*uniti*directProd(pbhat,qhat);
00182
00183 l11=EvtLeptonVCurrent(lepPlus->spParent(1),
00184 lepMinus->spParent(1));
00185 l21=EvtLeptonVCurrent(lepPlus->spParent(0),
00186 lepMinus->spParent(1));
00187 l12=EvtLeptonVCurrent(lepPlus->spParent(1),
00188 lepMinus->spParent(0));
00189 l22=EvtLeptonVCurrent(lepPlus->spParent(0),
00190 lepMinus->spParent(0));
00191
00192 a11=EvtLeptonACurrent(lepPlus->spParent(1),
00193 lepMinus->spParent(1));
00194 a21=EvtLeptonACurrent(lepPlus->spParent(0),
00195 lepMinus->spParent(1));
00196 a12=EvtLeptonACurrent(lepPlus->spParent(1),
00197 lepMinus->spParent(0));
00198 a22=EvtLeptonACurrent(lepPlus->spParent(0),
00199 lepMinus->spParent(0));
00200
00201 }
00202 else{
00203 report(ERROR,"EvtGen") << "Wrong lepton number\n";
00204 }
00205 }
00206
00207
00208 int i;
00209
00210 for(i=0;i<3;i++){
00211 EvtVector4C eps=parent->getDaug(0)->epsParent(i).conj();
00212
00213 EvtVector4C E1=T1.cont1(eps);
00214 EvtVector4C E2=T2.cont1(eps);
00215
00216 amp.vertex(i,0,0,l11*E1+a11*E2);
00217 amp.vertex(i,0,1,l12*E1+a12*E2);
00218 amp.vertex(i,1,0,l21*E1+a21*E2);
00219 amp.vertex(i,1,1,l22*E1+a22*E2);
00220 }
00221 }
00222
00223
00224
00225
00226
00227
00228