/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/BesEvtGen/BesEvtGen-00-03-58/src/EvtGen/EvtGenModels/EvtHypWK.cc

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 //
00003 // Environment:
00004 //      This software is part of models developed at BES collaboration
00005 //      based on the EvtGen framework.  If you use all or part
00006 //      of it, please give an appropriate acknowledgement.
00007 //
00008 // Copyright Information: See EvtGen/BesCopyright
00009 //      Copyright (A) 2006      Ping Rong-Gang, Pang Cai-Ying@IHEP
00010 //
00011 // Module: EvtHypWK.hh
00012 //
00013 // Description: To generate octet hyperon weak decays.
00014 //
00015 // Modification history:
00016 //
00017 //    Pang C.-Y., Ping R.-G.    Mar, 2007       Module created
00018 //    Ping R.G. Apr. 2007  change to helicity amplitude method
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   // check that there are 0 arguments
00058   checkNArg(0);
00059   checkNDaug(2);
00060 
00061  //  checkSpinParent(EvtSpinType::VECTOR);
00062    checkSpinParent(EvtSpinType::DIRAC);
00063   
00064    checkSpinDaughter(0,EvtSpinType::DIRAC);
00065    checkSpinDaughter(1,EvtSpinType::SCALAR);
00066 //  checkSpinDaughter(1,EvtSpinType::DIRAC);
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 //  if(count==0) findMaxPro(p); //using the default getProbMax() in EvtGenBase/EvtDecayProb.cc 
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(); //Dirac Daughter
00105   EvtVector4R MEP4=l2->getP4(); //Meson Daughter
00106   EvtVector4R PRP4=p->getP4();  //Parent Momentum
00107   EvtHelSys angles(PRP4,DRP4);   //using helicity sys.angles
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;   // the following is the 
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 

Generated on Tue Nov 29 23:12:18 2016 for BOSS_7.0.2 by  doxygen 1.4.7