00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "EvtGenBase/EvtPatches.hh"
00024 #include <stdlib.h>
00025 #include "EvtGenBase/EvtParticle.hh"
00026 #include "EvtGenBase/EvtGenKine.hh"
00027 #include "EvtGenBase/EvtCPUtil.hh"
00028 #include "EvtGenBase/EvtPDL.hh"
00029 #include "EvtGenBase/EvtReport.hh"
00030 #include "EvtGenModels/EvtSVSCPLH.hh"
00031 #include "EvtGenBase/EvtId.hh"
00032 #include <string>
00033 #include "EvtGenBase/EvtConst.hh"
00034 #include "EvtGenBase/EvtVector4C.hh"
00035 using std::endl;
00036
00037 EvtSVSCPLH::~EvtSVSCPLH() {}
00038
00039 void EvtSVSCPLH::getName(std::string& model_name){
00040
00041 model_name="SVS_CPLH";
00042
00043 }
00044
00045
00046 EvtDecayBase* EvtSVSCPLH::clone(){
00047
00048 return new EvtSVSCPLH;
00049
00050 }
00051
00052 void EvtSVSCPLH::init(){
00053
00054
00055 checkNArg(8);
00056 checkNDaug(2);
00057
00058 checkSpinParent(EvtSpinType::SCALAR);
00059
00060 checkSpinDaughter(0,EvtSpinType::VECTOR);
00061 checkSpinDaughter(1,EvtSpinType::SCALAR);
00062
00063 static double ctau=EvtPDL::getctau(EvtPDL::getId("B0"));
00064
00065
00066 _dm=getArg(0);
00067 _dgamma=EvtConst::c*getArg(1)/ctau;
00068
00069 _qop=getArg(2)*exp(EvtComplex(0.0,getArg(3)));
00070
00071 _poq=1.0/_qop;
00072
00073 _Af=getArg(4)*exp(EvtComplex(0.0,getArg(5)));
00074 _Abarf=getArg(6)*exp(EvtComplex(0.0,getArg(7)));
00075
00076 if (verbose()){
00077 report(INFO,"EvtGen")<<":EvtSVSCPLH:dm="<<_dm<<endl;
00078 report(INFO,"EvtGen")<<":EvtSVSCPLH:dGamma="<<_dgamma<<endl;
00079 report(INFO,"EvtGen")<<":EvtSVSCPLH:q/p="<<_qop<<endl;
00080 report(INFO,"EvtGen")<<":EvtSVSCPLH:Af="<<_Af<<endl;
00081 report(INFO,"EvtGen")<<":EvtSVSCPLH:Abarf="<<_Abarf<<endl;
00082 }
00083
00084
00085 }
00086
00087 void EvtSVSCPLH::initProbMax(){
00088
00089
00090
00091
00092 setProbMax(4.0*(getArg(4)*getArg(4)+getArg(6)*getArg(6)));
00093
00094 }
00095
00096 void EvtSVSCPLH::decay( EvtParticle *p){
00097
00098 p->initializePhaseSpace(getNDaug(),getDaugs());
00099
00100 static EvtId B0=EvtPDL::getId("B0");
00101 static EvtId B0B=EvtPDL::getId("anti-B0");
00102
00103 double t;
00104 EvtId other_b;
00105
00106 EvtCPUtil::OtherB(p,t,other_b,0.5);
00107
00108
00109 t/=EvtConst::c;
00110
00111
00112
00113
00114 EvtComplex gp=0.5*(exp(EvtComplex(0.25*t*_dgamma,-0.5*t*_dm))+exp(EvtComplex(-0.25*t*_dgamma,0.5*t*_dm)));
00115 EvtComplex gm=0.5*(exp(EvtComplex(0.25*t*_dgamma,-0.5*t*_dm))-exp(EvtComplex(-0.25*t*_dgamma,0.5*t*_dm)));
00116
00117 EvtComplex amp;
00118
00119 if (other_b==B0B){
00120 amp=gp*_Af+_qop*gm*_Abarf;
00121 }
00122 else if (other_b==B0){
00123 amp=gp*_Abarf+_poq*gm*_Af;
00124 }
00125 else{
00126 report(ERROR,"EvtGen") << "other_b was not B0 or B0B!"<<endl;
00127 ::abort();
00128 }
00129
00130 EvtVector4R p4_parent=p->getP4Restframe();;
00131
00132 double norm=p->getDaug(0)->mass()/(p->getDaug(0)->getP4().d3mag()*p4_parent.mass());
00133
00134 EvtParticle* v=p->getDaug(0);
00135
00136 vertex(0,amp*norm*(p4_parent*(v->epsParent(0))));
00137 vertex(1,amp*norm*(p4_parent*(v->epsParent(1))));
00138 vertex(2,amp*norm*(p4_parent*(v->epsParent(2))));
00139
00140
00141 return ;
00142 }
00143
00144
00145