00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "EvtGenBase/EvtPatches.hh"
00017 #include <stdlib.h>
00018 #include <iostream>
00019 #include <string>
00020 #include "EvtGenBase/EvtParticle.hh"
00021 #include "EvtGenBase/EvtPDL.hh"
00022 #include "EvtGenBase/EvtGenKine.hh"
00023 #include "EvtGenModels/EvtEDM.hh"
00024 #include "EvtGenBase/EvtDiracSpinor.hh"
00025 #include "EvtGenBase/EvtReport.hh"
00026 #include "EvtGenBase/EvtVector4C.hh"
00027 #include "EvtGenBase/EvtTensor4C.hh"
00028
00029 EvtEDM::~EvtEDM() {}
00030
00031 void EvtEDM::getName(std::string& model_name){
00032
00033 model_name="EDM";
00034
00035 }
00036
00037
00038 EvtDecayBase* EvtEDM::clone(){
00039
00040 return new EvtEDM;
00041
00042 }
00043
00044 void EvtEDM::init(){
00045
00046
00047 checkNArg(4);
00048 checkNDaug(2);
00049
00050 checkSpinParent(EvtSpinType::VECTOR);
00051
00052 checkSpinDaughter(0,EvtSpinType::DIRAC);
00053 checkSpinDaughter(1,EvtSpinType::DIRAC);
00054
00055 }
00056
00057 void EvtEDM::initProbMax(){
00058
00059 setProbMax(1.0);
00060
00061 }
00062
00063 void EvtEDM::decay(EvtParticle *p){
00064
00065 p->initializePhaseSpace(getNDaug(),getDaugs());
00066
00067 EvtParticle *l1, *l2;
00068 l1 = p->getDaug(0);
00069 l2 = p->getDaug(1);
00070
00071 double magtau = getArg(0);
00072 double phstau = getArg(1);
00073 double mage = getArg(2);
00074 double phse = getArg(3);
00075 EvtComplex ctau(magtau*cos(phstau),magtau*sin(phstau));
00076 EvtComplex ce(mage*cos(phse),mage*sin(phse));
00077
00078
00079 EvtTensor4C l11, l12, l21, l22;
00080 l11=EvtLeptonTg5Current(l1->spParent(0),l2->spParent(0));
00081 l12=EvtLeptonTg5Current(l1->spParent(0),l2->spParent(1));
00082 l21=EvtLeptonTg5Current(l1->spParent(1),l2->spParent(0));
00083 l22=EvtLeptonTg5Current(l1->spParent(1),l2->spParent(1));
00084
00085 EvtVector4C eps0=p->eps(0);
00086 EvtVector4C eps1=p->eps(1);
00087 EvtVector4C eps2=p->eps(2);
00088 EvtVector4R parp4 = p->getP4();
00089
00090 EvtTensor4C p4eps0=directProd(eps0,parp4);
00091 EvtTensor4C p4eps1=directProd(eps1,parp4);
00092 EvtTensor4C p4eps2=directProd(eps2,parp4);
00093
00094 double M2=p->mass();
00095 M2*=M2;
00096 double m2=l1->mass();
00097 m2*=m2;
00098
00099 double norm=1.0/sqrt(2*M2+4*m2-4*m2*m2/M2);
00100 EvtComplex norm_edm = norm * ctau;
00101 EvtComplex norm_e = norm * ce;
00102
00103
00104 EvtVector4C L11, L12, L21, L22;
00105 L11=EvtLeptonVCurrent(l1->spParent(0),l2->spParent(0));
00106 L12=EvtLeptonVCurrent(l1->spParent(0),l2->spParent(1));
00107 L21=EvtLeptonVCurrent(l1->spParent(1),l2->spParent(0));
00108 L22=EvtLeptonVCurrent(l1->spParent(1),l2->spParent(1));
00109
00110 EvtComplex A000,A001,A010,A011,A100,A101,A110,A111,A200,A201,A210,A211;
00111 A000 = norm_e*(eps0*L11);
00112 A001 = norm_e*(eps0*L12);
00113 A010 = norm_e*(eps0*L21);
00114 A011 = norm_e*(eps0*L22);
00115
00116 A100 = norm_e*(eps1*L11);
00117 A101 = norm_e*(eps1*L12);
00118 A110 = norm_e*(eps1*L21);
00119 A111 = norm_e*(eps1*L22);
00120
00121 A200 = norm_e*(eps2*L11);
00122 A201 = norm_e*(eps2*L12);
00123 A210 = norm_e*(eps2*L21);
00124 A211 = norm_e*(eps2*L22);
00125
00126 vertex(0,0,0,norm_edm*cont(p4eps0,l11) + A000);
00127 vertex(0,0,1,norm_edm*cont(p4eps0,l12) + A001);
00128 vertex(0,1,0,norm_edm*cont(p4eps0,l21) + A010);
00129 vertex(0,1,1,norm_edm*cont(p4eps0,l22) + A011);
00130
00131 vertex(1,0,0,norm_edm*cont(p4eps1,l11) + A100);
00132 vertex(1,0,1,norm_edm*cont(p4eps1,l12) + A101);
00133 vertex(1,1,0,norm_edm*cont(p4eps1,l21) + A110);
00134 vertex(1,1,1,norm_edm*cont(p4eps1,l22) + A111);
00135
00136 vertex(2,0,0,norm_edm*cont(p4eps2,l11) + A200);
00137 vertex(2,0,1,norm_edm*cont(p4eps2,l12) + A201);
00138 vertex(2,1,0,norm_edm*cont(p4eps2,l21) + A210);
00139 vertex(2,1,1,norm_edm*cont(p4eps2,l22) + A211);
00140
00141 return;
00142
00143 }
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156