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/EvtHypWK.hh"
00029 #include "EvtGenBase/EvtDiracSpinor.hh"
00030 #include "EvtGenBase/EvtReport.hh"
00031 #include "EvtGenBase/EvtVector4C.hh"
00032 #include "EvtGenBase/EvtId.hh"
00033 #include "EvtGenBase/EvtHelSys.hh"
00034 #include "EvtGenBase/EvtdFunction.hh"
00035
00036 using std::cout;
00037 using std::endl;
00038
00039 EvtHypWK::~EvtHypWK() {}
00040
00041 void EvtHypWK::getName(std::string& model_name){
00042
00043 model_name="HypWK";
00044
00045 }
00046
00047
00048
00049 EvtDecayBase* EvtHypWK::clone(){
00050
00051 return new EvtHypWK;
00052
00053 }
00054
00055 void EvtHypWK::init(){
00056
00057
00058 checkNArg(0);
00059 checkNDaug(2);
00060
00061
00062 checkSpinParent(EvtSpinType::DIRAC);
00063
00064 checkSpinDaughter(0,EvtSpinType::DIRAC);
00065 checkSpinDaughter(1,EvtSpinType::SCALAR);
00066
00067
00068 }
00069
00070
00071 void EvtHypWK::decay(EvtParticle *p){
00072
00073 static EvtId PIP=EvtPDL::getId("pi+");
00074 static EvtId PIM=EvtPDL::getId("pi-");
00075 static EvtId PI0=EvtPDL::getId("pi0");
00076 static EvtId PP=EvtPDL::getId("p+");
00077 static EvtId PM=EvtPDL::getId("anti-p-");
00078 static EvtId NP=EvtPDL::getId("n0");
00079 static EvtId NM=EvtPDL::getId("anti-n0");
00080
00081 static EvtId LP=EvtPDL::getId("Lambda0");
00082 static EvtId LM=EvtPDL::getId("anti-Lambda0");
00083 static EvtId SPP=EvtPDL::getId("Sigma+");
00084 static EvtId SPM=EvtPDL::getId("anti-Sigma-");
00085 static EvtId SMP=EvtPDL::getId("Sigma-");
00086 static EvtId SMM=EvtPDL::getId("anti-Sigma+");
00087
00088 static EvtId XP=EvtPDL::getId("Xi-");
00089 static EvtId XM=EvtPDL::getId("anti-Xi+");
00090 static EvtId X0P=EvtPDL::getId("Xi0");
00091 static EvtId X0M=EvtPDL::getId("anti-Xi0");
00092
00093
00094 static int count=0;
00095
00096
00097 count+=1;
00098
00099 p->initializePhaseSpace(getNDaug(),getDaugs());
00100
00101 EvtParticle *l1, *l2;
00102 l1 = p->getDaug(0);
00103 l2 = p->getDaug(1);
00104 EvtVector4R DRP4=l1->getP4();
00105 EvtVector4R MEP4=l2->getP4();
00106 EvtVector4R PRP4=p->getP4();
00107 EvtHelSys angles(PRP4,DRP4);
00108 double tht=angles.getHelAng(1);
00109 double ph =angles.getHelAng(2);
00110 double gmm=0;
00111
00112 EvtVector4R pDaug=l1->getP4();
00113 double p3=pDaug.d3mag();
00114
00115
00116 double M=p->mass();
00117 double M2=M*M;
00118 double m=l1->mass();
00119 double m2=m*m;
00120 double theta,phi,alpha,beta,ga;
00121
00122 EvtId p1,d1,d2;
00123 p1=p->getId();
00124 d1=l1->getId();
00125 d2=l2->getId();
00126
00127 if(p1==XP){ alpha=-0.46;phi=-2.1; }
00128 else if(p1==XM){alpha=0.46;phi=-2.1;}
00129 else if(p1==X0P){alpha=-0.41;phi=21.0;}
00130 else if(p1==X0M){alpha=0.41;phi=21.0; }
00131 else if(p1==LP){alpha=0.64;phi=-6.5; }
00132 else if(p1==LM){ alpha=-0.64;phi=-6.5; }
00133 else if(p1==SMP){alpha=-0.07;phi=10.0;}
00134 else if(p1==SMM){alpha=0.07;phi=10.0; }
00135 else if(p1==SPP){
00136 if (d1==PP){ alpha=-0.98;phi=36.0; }
00137 else if(d1==NP){ alpha=0.07;phi=167.0; }
00138 else { cout<<"The decay is not discussed."<<endl; }
00139 }
00140 else if(p1==SPM){
00141 if (d1==PM){ alpha=0.98;phi=36.0; }
00142 else if(d1==NM){ alpha=-0.07;phi=167.0; }
00143 else { cout<<"The decay is not discussed."<<endl; }
00144 }
00145 else { cout<<"The decay is not discussed.";
00146 }
00147
00148 double FP=sqrt((1+alpha)/2.);
00149 double FM=sqrt((1-alpha)/2.);
00150
00151 vertex(0,0,Djmn(0.5, 0.5, 0.5,ph,tht,gmm)*FP);
00152 vertex(0,1,Djmn(0.5, 0.5,-0.5,ph,tht,gmm)*FM);
00153 vertex(1,0,Djmn(0.5,-0.5, 0.5,ph,tht,gmm)*FP);
00154 vertex(1,1,Djmn(0.5,-0.5,-0.5,ph,tht,gmm)*FM);
00155
00156 return;
00157
00158 }
00159
00160
00161