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/EvtVector3C.hh"
00030 #include "EvtGenBase/EvtVector3R.hh"
00031 #include "EvtGenBase/EvtTensor3C.hh"
00032 #include "EvtGenBase/EvtReport.hh"
00033 #include "EvtGenModels/EvtSVVHelAmp.hh"
00034 #include "EvtGenBase/EvtId.hh"
00035 #include <string>
00036
00037 EvtSVVHelAmp::~EvtSVVHelAmp() {}
00038
00039 void EvtSVVHelAmp::getName(std::string& model_name){
00040
00041 model_name="SVV_HELAMP";
00042
00043 }
00044
00045
00046 EvtDecayBase* EvtSVVHelAmp::clone(){
00047
00048 return new EvtSVVHelAmp;
00049
00050 }
00051
00052 void EvtSVVHelAmp::init(){
00053
00054
00055 checkNArg(6);
00056 checkNDaug(2);
00057
00058 checkSpinParent(EvtSpinType::SCALAR);
00059
00060 checkSpinDaughter(0,EvtSpinType::VECTOR);
00061 checkSpinDaughter(1,EvtSpinType::VECTOR);
00062
00063 }
00064
00065
00066 void EvtSVVHelAmp::initProbMax(){
00067
00068 setProbMax(getArg(0)*getArg(0)+getArg(2)*getArg(2)+getArg(4)*getArg(4));
00069
00070 }
00071
00072
00073 void EvtSVVHelAmp::decay( EvtParticle *p){
00074
00075 SVVHel(p,_amp2,getDaug(0),getDaug(1),
00076 EvtComplex(getArg(0)*cos(getArg(1)),getArg(0)*sin(getArg(1))),
00077 EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3))),
00078 EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5))));
00079
00080 return ;
00081
00082 }
00083
00084
00085 void EvtSVVHelAmp::SVVHel(EvtParticle *parent,EvtAmp& amp,EvtId n_v1,EvtId n_v2,
00086 const EvtComplex& hp,const EvtComplex& h0,
00087 const EvtComplex& hm){
00088
00089
00090
00091
00092 int tndaug = 2;
00093 EvtId tdaug[2];
00094 tdaug[0] = n_v1;
00095 tdaug[1] = n_v2;
00096
00097
00098 parent->initializePhaseSpace(tndaug,tdaug);
00099
00100 EvtParticle *v1,*v2;
00101 v1 = parent->getDaug(0);
00102 v2 = parent->getDaug(1);
00103
00104 EvtVector4R momv1 = v1->getP4();
00105
00106
00107 EvtVector3R v1dir(momv1.get(1),momv1.get(2),momv1.get(3));
00108 v1dir=v1dir/v1dir.d3mag();
00109
00110 EvtComplex a=-0.5*(hp+hm);
00111 EvtComplex b=EvtComplex(0.0,0.5)*(hp-hm);
00112 EvtComplex c=h0+0.5*(hp+hm);
00113
00114 EvtTensor3C M=a*EvtTensor3C::id()+
00115 b*eps(v1dir)+
00116 c*directProd(v1dir,v1dir);
00117
00118 EvtVector3C t0=M.cont1(v1->eps(0).vec().conj());
00119 EvtVector3C t1=M.cont1(v1->eps(1).vec().conj());
00120 EvtVector3C t2=M.cont1(v1->eps(2).vec().conj());
00121
00122 EvtVector3C eps0=v2->eps(0).vec().conj();
00123 EvtVector3C eps1=v2->eps(1).vec().conj();
00124 EvtVector3C eps2=v2->eps(2).vec().conj();
00125
00126 amp.vertex(0,0,t0*eps0);
00127 amp.vertex(0,1,t0*eps1);
00128 amp.vertex(0,2,t0*eps2);
00129
00130 amp.vertex(1,0,t1*eps0);
00131 amp.vertex(1,1,t1*eps1);
00132 amp.vertex(1,2,t1*eps2);
00133
00134 amp.vertex(2,0,t2*eps0);
00135 amp.vertex(2,1,t2*eps1);
00136 amp.vertex(2,2,t2*eps2);
00137
00138 return ;
00139
00140 }
00141
00142