00001 #include "EvtGenBase/EvtPatches.hh"
00002
00003 #include <stdlib.h>
00004 #include <math.h>
00005 #include "EvtGenBase/EvtVector4R.hh"
00006 #include "EvtGenBase/EvtParticle.hh"
00007 #include "EvtGenBase/EvtGenKine.hh"
00008 #include "EvtGenBase/EvtPDL.hh"
00009 #include "EvtGenModels/EvtPhiDalitz.hh"
00010 #include "EvtGenBase/EvtReport.hh"
00011 #include <string>
00012
00013 EvtPhiDalitz::~EvtPhiDalitz() {}
00014
00015 void EvtPhiDalitz::getName(std::string& model_name){
00016
00017 model_name="PHI_DALITZ";
00018
00019 }
00020
00021
00022 EvtDecayBase* EvtPhiDalitz::clone(){
00023
00024 return new EvtPhiDalitz;
00025
00026 }
00027
00028 void EvtPhiDalitz::init(){
00029
00030
00031 checkNArg(0);
00032 checkNDaug(3);
00033
00034 checkSpinParent(EvtSpinType::VECTOR);
00035
00036 checkSpinDaughter(0,EvtSpinType::SCALAR);
00037 checkSpinDaughter(1,EvtSpinType::SCALAR);
00038 checkSpinDaughter(2,EvtSpinType::SCALAR);
00039 }
00040
00041
00042
00043 void EvtPhiDalitz::decay( EvtParticle *p){
00044
00045 EvtId PIP=EvtPDL::getId("pi+");
00046 EvtId PIM=EvtPDL::getId("pi-");
00047 EvtId PIZ=EvtPDL::getId("pi0");
00048 EvtId RHOP=EvtPDL::getId("rho+");
00049 EvtId RHOM=EvtPDL::getId("rho-");
00050 EvtId RHOZ=EvtPDL::getId("rho0");
00051 EvtId OMEGA=EvtPDL::getId("omega");
00052
00053 p->initializePhaseSpace(getNDaug(),getDaugs());
00054
00055 EvtVector4R Ppip = p->getDaug(0)->getP4();
00056 EvtVector4R Ppim = p->getDaug(1)->getP4();
00057 EvtVector4R Ppi0 = p->getDaug(2)->getP4();
00058 EvtVector4R Qp = (Ppim + Ppi0);
00059 EvtVector4R Qm = (Ppip + Ppi0);
00060 EvtVector4R Q0 = (Ppip + Ppim);
00061 double m2_pip = pow(EvtPDL::getMeanMass(PIP),2);
00062 double m2_pim = pow(EvtPDL::getMeanMass(PIM),2);
00063 double m2_pi0 = pow(EvtPDL::getMeanMass(PIZ),2);
00064 double M2rhop = pow(EvtPDL::getMeanMass(RHOP),2);
00065 double M2rhom = pow(EvtPDL::getMeanMass(RHOM),2);
00066 double M2rho0 = pow(EvtPDL::getMeanMass(RHOZ),2);
00067 double M2omega = pow(EvtPDL::getMeanMass(OMEGA),2);
00068
00069 double Wrhop = EvtPDL::getWidth(RHOP);
00070 double Wrhom = EvtPDL::getWidth(RHOM);
00071 double Wrho0 = EvtPDL::getWidth(RHOZ);
00072 double Womega = EvtPDL::getWidth(OMEGA);
00073
00074 EvtComplex Atot(0,0);
00075
00076
00077 double Gp = Wrhop*pow(((Qp.mass2()-m2_pim-m2_pi0)/2-M2rhop/4)/(M2rhop/4-(m2_pim+m2_pi0)/2),3/2)*(M2rhop/Qp.mass2());
00078 EvtComplex Drhop((Qp.mass2()-M2rhop),Qp.mass()*Gp);
00079 EvtComplex A1(M2rhop/Drhop);
00080
00081
00082 double Gm = Wrhom*pow(((Qm.mass2()-m2_pip-m2_pi0)/2-M2rhom/4)/(M2rhom/4-(m2_pip+m2_pi0)/2),3/2)*(M2rhom/Qm.mass2());
00083 EvtComplex Drhom((Qm.mass2()-M2rhom),Qm.mass()*Gm);
00084 EvtComplex A2(M2rhom/Drhom);
00085
00086
00087 double G0 = Wrho0*pow(((Q0.mass2()-m2_pip-m2_pim)/2-M2rho0/4)/(M2rho0/4-(m2_pip+m2_pim)/2),3/2)*(M2rho0/Q0.mass2());
00088 EvtComplex Drho0((Q0.mass2()-M2rho0),Q0.mass()*G0);
00089 EvtComplex A3(M2rho0/Drho0);
00090
00091
00092 EvtComplex OmegaPhase(0,-0.22);
00093 EvtComplex DOmega((Q0.mass2()-M2omega),Q0.mass()*Womega);
00094 EvtComplex A4(0.0071*M2omega*exp(OmegaPhase)/DOmega);
00095
00096
00097 EvtComplex DirPhase(0,2.47);
00098 EvtComplex A5(0.78*exp(DirPhase));
00099
00100 Atot=A1+A2+A3+A4+A5;
00101
00102 vertex(0,Atot);
00103 vertex(1,Atot);
00104 vertex(2,Atot);
00105
00106 return ;
00107
00108 }
00109
00110
00111
00112
00113
00114
00115