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 "EvtGenBase/EvtParticle.hh"
00024 #include "EvtGenBase/EvtGenKine.hh"
00025 #include "EvtGenBase/EvtCPUtil.hh"
00026 #include "EvtGenBase/EvtPDL.hh"
00027 #include "EvtGenBase/EvtReport.hh"
00028 #include "EvtGenModels/EvtSSSCPT.hh"
00029 #include "EvtGenBase/EvtId.hh"
00030 #include <string>
00031 #include "EvtGenBase/EvtConst.hh"
00032
00033 EvtSSSCPT::~EvtSSSCPT() {}
00034
00035 void EvtSSSCPT::getName(std::string& model_name){
00036
00037 model_name="SSS_CPT";
00038
00039 }
00040
00041
00042 EvtDecayBase* EvtSSSCPT::clone(){
00043
00044 return new EvtSSSCPT;
00045
00046 }
00047
00048 void EvtSSSCPT::init(){
00049
00050
00051 checkNArg(8);
00052 checkNDaug(2);
00053
00054 }
00055
00056
00057 void EvtSSSCPT::decay( EvtParticle *p){
00058
00059
00060 static EvtId B0=EvtPDL::getId("B0");
00061 static EvtId B0B=EvtPDL::getId("anti-B0");
00062
00063
00064 double t;
00065 EvtId other_b;
00066
00067 EvtCPUtil::OtherB(p,t,other_b);
00068
00069 p->initializePhaseSpace(getNDaug(),getDaugs());
00070
00071 EvtComplex amp;
00072
00073 EvtComplex A,Abar;
00074 EvtComplex P,Q,D,Im;
00075
00076 P=EvtComplex(cos(-getArg(0)),sin(-getArg(0)));
00077 Q=EvtComplex(cos(getArg(0)),sin(getArg(0)));
00078 D=EvtComplex(getArg(6)*cos(getArg(7)),getArg(6)*sin(getArg(7)));
00079 Im=EvtComplex(0.0,1.0);
00080
00081 A=EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3)));
00082 Abar=EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)));
00083
00084 if (other_b==B0B){
00085 amp=A*cos(getArg(1)*t/(2*EvtConst::c))+
00086 Im*sin(getArg(1)*t/(2*EvtConst::c))*
00087 (Q/P*A + 2.0*D*Abar);
00088 }
00089 if (other_b==B0){
00090 amp=Abar*cos(getArg(1)*t/(2*EvtConst::c))+
00091 Im*sin(getArg(1)*t/(2*EvtConst::c))*
00092 (P/Q*A - 2.0*D*Abar);
00093 }
00094
00095 vertex(amp);
00096
00097 return ;
00098 }
00099