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/EvtDeBD.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/EvtRaritaSchwinger.hh"
00035 #include "EvtGenBase/EvtRaritaSchwingerParticle.hh"
00036
00037 using std::cout;
00038 using std::endl;
00039
00040 EvtDeBD::~EvtDeBD() {}
00041
00042 void EvtDeBD::getName(std::string& model_name){
00043
00044 model_name="DeBD";
00045
00046 }
00047
00048
00049 EvtDecayBase* EvtDeBD::clone(){
00050
00051 return new EvtDeBD;
00052
00053 }
00054
00055 void EvtDeBD::init(){
00056
00057
00058 checkNArg(0);
00059 checkNDaug(2);
00060
00061 checkSpinParent(EvtSpinType::RARITASCHWINGER);
00062
00063 checkSpinDaughter(0,EvtSpinType::DIRAC);
00064 checkSpinDaughter(1,EvtSpinType::SCALAR);
00065
00066 }
00067
00068
00069
00070
00071
00072
00073
00074 void EvtDeBD::decay(EvtParticle *p){
00075
00076 static EvtId PIM=EvtPDL::getId("pi-");
00077 static EvtId PI0=EvtPDL::getId("pi0");
00078 static EvtId KM=EvtPDL::getId("K-");
00079
00080 static EvtId L0 =EvtPDL::getId("Lambda0");
00081 static EvtId LB =EvtPDL::getId("anti-Lambda0");
00082 static EvtId XM =EvtPDL::getId("Xi-");
00083 static EvtId XMB=EvtPDL::getId("anti-Xi+");
00084 static EvtId X0 =EvtPDL::getId("Xi0");
00085 static EvtId X0B=EvtPDL::getId("anti-Xi0");
00086
00087 static EvtId OM =EvtPDL::getId("Omega-");
00088 static EvtId OMB=EvtPDL::getId("anti-Omega+");
00089
00090 p->initializePhaseSpace(getNDaug(),getDaugs());
00091
00092 EvtParticle *l1, *l2;
00093 l1 = p->getDaug(0);
00094 l2 = p->getDaug(1);
00095
00096 EvtId p1,d1,d2;
00097 p1=p ->getId();
00098 d1=l1->getId();
00099 d2=l2->getId();
00100
00101
00102 EvtVector4R pDaug=l1->getP4();
00103 double p3=pDaug.d3mag();
00104
00105 EvtVector4R pv,ps,ppr;
00106 pv=l1->getP4Lab();
00107 ps=l2->getP4Lab();
00108 ppr=p->getP4();
00109
00110 double theta,alpha;
00111 EvtHelSys angles(ppr,pv);
00112 theta=angles.getHelAng(1);
00113 double phi =angles.getHelAng(2);
00114 double gamma=0;
00115
00116 if((p1==OM)&&(d1==L0)){
00117 alpha=0.0175;
00118 }
00119 else if((p1==OMB)&&(d1==LB)){
00120 alpha=-0.0175;
00121 }
00122 else if((p1==OM)&&(d1==X0)){
00123 alpha=0.09;
00124 }
00125 else if((p1==OMB)||(d1==X0B)){
00126 alpha=-0.09;
00127 }
00128 else if((p1==OM)||(d1==XM)){
00129 alpha=0.05;
00130 }
00131 else if((p1==OMB)||(d1==XMB)){
00132 alpha=-0.05;
00133 }
00134
00135 double FP,FM;
00136 if(p1==OM||p1==OMB){
00137 FM=sqrt((1+alpha)/2.);
00138 FP=sqrt((1-alpha)/2.);
00139 }
00140 else {
00141 FP=1;FM=1;
00142 }
00143
00144 vertex(0,0,Djmn(1.5, 0.5, 0.5,phi,theta,gamma)*FP);
00145 vertex(0,1,Djmn(1.5, 0.5,-0.5,phi,theta,gamma)*FM);
00146 vertex(1,0,Djmn(1.5, 1.5, 0.5,phi,theta,gamma)*FP);
00147 vertex(1,1,Djmn(1.5, 1.5,-0.5,phi,theta,gamma)*FM);
00148 vertex(2,0,Djmn(1.5,-1.5, 0.5,phi,theta,gamma)*FP);
00149 vertex(2,1,Djmn(1.5,-1.5,-0.5,phi,theta,gamma)*FM);
00150 vertex(3,0,Djmn(1.5,-0.5, 0.5,phi,theta,gamma)*FP);
00151 vertex(3,1,Djmn(1.5,-0.5,-0.5,phi,theta,gamma)*FM);
00152
00153 return;
00154
00155 }
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168