00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "EvtGenBase/EvtPatches.hh"
00022 #include <stdlib.h>
00023 #include <iostream>
00024 #include <string>
00025 #include "EvtGenBase/EvtParticle.hh"
00026 #include "EvtGenBase/EvtPDL.hh"
00027 #include "EvtGenBase/EvtGenKine.hh"
00028 #include "EvtGenModels/EvtSLN.hh"
00029 #include "EvtGenBase/EvtDiracSpinor.hh"
00030 #include "EvtGenBase/EvtReport.hh"
00031 #include "EvtGenBase/EvtVector4C.hh"
00032
00033 EvtSLN::~EvtSLN() {}
00034
00035 void EvtSLN::getName(std::string& model_name){
00036
00037 model_name="SLN";
00038
00039 }
00040
00041 EvtDecayBase* EvtSLN::clone(){
00042
00043 return new EvtSLN;
00044
00045 }
00046
00047
00048 void EvtSLN::init(){
00049
00050
00051 checkNArg(0);
00052 checkNDaug(2);
00053
00054 checkSpinParent(EvtSpinType::SCALAR);
00055
00056 checkSpinDaughter(0,EvtSpinType::DIRAC);
00057 checkSpinDaughter(1,EvtSpinType::NEUTRINO);
00058
00059 }
00060
00061
00062 void EvtSLN::initProbMax(){
00063
00064 double M=EvtPDL::getMeanMass(getParentId());
00065 double m=EvtPDL::getMeanMass(getDaug(0));
00066
00067 double probMax=8.0*(M*M-m*m)*m*m;
00068
00069 setProbMax(probMax);
00070
00071 }
00072
00073
00074 void EvtSLN::decay(EvtParticle *p){
00075
00076 static EvtId EM=EvtPDL::getId("e-");
00077 static EvtId MUM=EvtPDL::getId("mu-");
00078 static EvtId TAUM=EvtPDL::getId("tau-");
00079
00080 p->initializePhaseSpace(getNDaug(),getDaugs());
00081
00082 EvtParticle *l, *nul;
00083 l= p->getDaug(0);
00084 nul= p->getDaug(1);
00085
00086 EvtVector4R p4_p;
00087 p4_p.set(p->mass(),0.0,0.0,0.0);
00088
00089 EvtVector4C l1, l2;
00090
00091 if (getDaug(0)==TAUM || getDaug(0)==MUM || getDaug(0)==EM) {
00092 l1=EvtLeptonVACurrent(l->spParent(0),nul->spParentNeutrino());
00093 l2=EvtLeptonVACurrent(l->spParent(1),nul->spParentNeutrino());
00094 }
00095 else{
00096 l1=EvtLeptonVACurrent(nul->spParentNeutrino(),l->spParent(0));
00097 l2=EvtLeptonVACurrent(nul->spParentNeutrino(),l->spParent(1));
00098 }
00099
00100 vertex(0,p4_p*l1);
00101 vertex(1,p4_p*l2);
00102
00103 return;
00104
00105 }
00106
00107