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 <stdlib.h>
00024 #include "EvtGenBase/EvtParticle.hh"
00025 #include "EvtGenBase/EvtGenKine.hh"
00026 #include "EvtGenBase/EvtPDL.hh"
00027 #include "EvtGenBase/EvtVector4C.hh"
00028 #include "EvtGenBase/EvtTensor4C.hh"
00029 #include "EvtGenBase/EvtReport.hh"
00030 #include "EvtGenModels/EvtVVpipi.hh"
00031 #include <string>
00032 using std::endl;
00033
00034 EvtVVpipi::~EvtVVpipi() {}
00035
00036 void EvtVVpipi::getName(std::string& model_name){
00037
00038 model_name="VVPIPI";
00039
00040 }
00041
00042
00043 EvtDecayBase* EvtVVpipi::clone(){
00044
00045 return new EvtVVpipi;
00046
00047 }
00048
00049 void EvtVVpipi::init(){
00050
00051 static EvtId PIP=EvtPDL::getId("pi+");
00052 static EvtId PIM=EvtPDL::getId("pi-");
00053 static EvtId PI0=EvtPDL::getId("pi0");
00054
00055
00056 checkNArg(0);
00057 checkNDaug(3);
00058
00059 checkSpinParent(EvtSpinType::VECTOR);
00060 checkSpinDaughter(0,EvtSpinType::VECTOR);
00061
00062
00063
00064 if ((!(getDaug(1)==PIP&&getDaug(2)==PIM))&&
00065 (!(getDaug(1)==PI0&&getDaug(2)==PI0))) {
00066 report(ERROR,"EvtGen") << "EvtVVpipi generator expected "
00067 << " pi+ and pi- (or pi0 and pi0) "
00068 << "as 2nd and 3rd daughter. "<<endl;
00069 report(ERROR,"EvtGen") << "Will terminate execution!"<<endl;
00070 ::abort();
00071 }
00072
00073 }
00074
00075 void EvtVVpipi::initProbMax() {
00076
00077
00078 setProbMax(0.08);
00079
00080 }
00081
00082 void EvtVVpipi::decay( EvtParticle *p){
00083
00084 p->initializePhaseSpace(getNDaug(),getDaugs());
00085
00086 EvtParticle *v,*s1,*s2;
00087
00088 v=p->getDaug(0);
00089 s1=p->getDaug(1);
00090 s2=p->getDaug(2);
00091
00092
00093
00094 EvtVector4C ep0,ep1,ep2;
00095
00096 ep0=p->eps(0);
00097 ep1=p->eps(1);
00098 ep2=p->eps(2);
00099
00100 double fac=(s1->getP4()+s2->getP4()).mass2()-4*s1->mass()*s2->mass();
00101
00102 vertex(0,0,fac*(ep0*v->epsParent(0).conj()));
00103 vertex(0,1,fac*(ep0*v->epsParent(1).conj()));
00104 vertex(0,2,fac*(ep0*v->epsParent(2).conj()));
00105
00106 vertex(1,0,fac*(ep1*v->epsParent(0).conj()));
00107 vertex(1,1,fac*(ep1*v->epsParent(1).conj()));
00108 vertex(1,2,fac*(ep1*v->epsParent(2).conj()));
00109
00110 vertex(2,0,fac*(ep2*v->epsParent(0).conj()));
00111 vertex(2,1,fac*(ep2*v->epsParent(1).conj()));
00112 vertex(2,2,fac*(ep2*v->epsParent(2).conj()));
00113
00114 return ;
00115
00116 }
00117
00118
00119
00120