00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "EvtGenBase/EvtPatches.hh"
00025 #include <stdlib.h>
00026 #include "EvtGenBase/EvtParticle.hh"
00027 #include "EvtGenBase/EvtGenKine.hh"
00028 #include "EvtGenBase/EvtPDL.hh"
00029 #include "EvtGenBase/EvtVector4C.hh"
00030 #include "EvtGenBase/EvtTensor4C.hh"
00031 #include "EvtGenBase/EvtReport.hh"
00032 #include "EvtGenModels/EvtVVSPwave.hh"
00033 #include <string>
00034 using std::endl;
00035
00036 EvtVVSPwave::~EvtVVSPwave() {}
00037
00038 void EvtVVSPwave::getName(std::string& model_name){
00039
00040 model_name="VVS_PWAVE";
00041
00042 }
00043
00044
00045 EvtDecayBase* EvtVVSPwave::clone(){
00046
00047 return new EvtVVSPwave;
00048
00049 }
00050
00051 void EvtVVSPwave::init(){
00052
00053
00054 checkNArg(6);
00055 checkNDaug(2);
00056
00057 checkSpinParent(EvtSpinType::VECTOR);
00058 checkSpinDaughter(0,EvtSpinType::VECTOR);
00059 checkSpinDaughter(1,EvtSpinType::SCALAR);
00060 }
00061
00062 void EvtVVSPwave::initProbMax() {
00063
00064
00065
00066 setProbMax(1.0);
00067
00068 }
00069
00070 void EvtVVSPwave::decay( EvtParticle *p){
00071
00072 p->initializePhaseSpace(getNDaug(),getDaugs());
00073
00074 EvtComplex as(getArg(0)*cos(getArg(1)),getArg(0)*sin(getArg(1)));
00075 EvtComplex ap(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3)));
00076 EvtComplex ad(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)));
00077
00078 EvtParticle *v,*s;
00079 v=p->getDaug(0);
00080 s=p->getDaug(1);
00081
00082 if (ap!=EvtComplex(0.0,0.0)) {
00083 EvtVector4C epi[3],epf[3];
00084
00085 epi[0] = p->eps(0);
00086 epi[1] = p->eps(1);
00087 epi[2] = p->eps(2);
00088
00089 epf[0] = v->eps(0);
00090 epf[1] = v->eps(1);
00091 epf[2] = v->eps(2);
00092
00093 EvtVector4R momv = p->getDaug(0)->getP4();
00094 EvtVector3C p1(momv.get(1),momv.get(2),momv.get(3));
00095
00096 EvtVector3C ei0(epi[0].get(1),epi[0].get(2),epi[0].get(3));
00097 EvtVector3C ei1(epi[1].get(1),epi[1].get(2),epi[1].get(3));
00098 EvtVector3C ei2(epi[2].get(1),epi[2].get(2),epi[2].get(3));
00099
00100 EvtVector3C ef0(epf[0].get(1),epf[0].get(2),epf[0].get(3));
00101 EvtVector3C ef1(epf[1].get(1),epf[1].get(2),epf[1].get(3));
00102 EvtVector3C ef2(epf[2].get(1),epf[2].get(2),epf[2].get(3));
00103
00104 double norm = 1/momv.d3mag();
00105 EvtVector3C q0 = p1.cross(ef0);
00106 EvtVector3C q1 = p1.cross(ef1);
00107 EvtVector3C q2 = p1.cross(ef2);
00108
00109 vertex(0,0,norm*ei0.conj()*q0);
00110 vertex(0,1,norm*ei0.conj()*q1);
00111 vertex(0,2,norm*ei0.conj()*q2);
00112
00113 vertex(1,0,norm*ei1.conj()*q0);
00114 vertex(1,1,norm*ei1.conj()*q1);
00115 vertex(1,2,norm*ei1.conj()*q2);
00116
00117 vertex(2,0,norm*ei2.conj()*q0);
00118 vertex(2,1,norm*ei2.conj()*q1);
00119 vertex(2,2,norm*ei2.conj()*q2);
00120
00121 } else if (as!=EvtComplex(0.0,0.0) || ad!=EvtComplex(0.0,0.0) ){
00122
00123
00124
00125
00126
00127 EvtTensor4C d,g;
00128
00129 g.setdiag(1.0,-1.0,-1.0,-1.0);
00130
00131 d=ad*((1.0/(v->getP4().d3mag()*v->getP4().d3mag()))*directProd(v->getP4(),v->getP4())+(1/3.0)*g)+
00132 as*g;
00133
00134 EvtVector4C ep0,ep1,ep2;
00135
00136 ep0=d.cont1(p->eps(0));
00137 ep1=d.cont1(p->eps(1));
00138 ep2=d.cont1(p->eps(2));
00139
00140 vertex(0,0,ep0.cont(v->eps(0).conj()));
00141 vertex(0,1,ep0.cont(v->eps(1).conj()));
00142 vertex(0,2,ep0.cont(v->eps(2).conj()));
00143
00144 vertex(1,0,ep1.cont(v->eps(0).conj()));
00145 vertex(1,1,ep1.cont(v->eps(1).conj()));
00146 vertex(1,2,ep1.cont(v->eps(2).conj()));
00147
00148 vertex(2,0,ep2.cont(v->eps(0).conj()));
00149 vertex(2,1,ep2.cont(v->eps(1).conj()));
00150 vertex(2,2,ep2.cont(v->eps(2).conj()));
00151 } else
00152 {
00153 report(ERROR,"EvtGen") << "In EvtVectorToVectorScalar.cc"<<endl;
00154 report(ERROR,"EvtGen") << "Not all zero value for parameters are need!!"<<endl;
00155 ::abort();
00156 }
00157 return ;
00158
00159 }