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

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 //
00003 // Environment:
00004 //      This software is part of the EvtGen package developed jointly
00005 //      for the BaBar and CLEO collaborations.  If you use all or part
00006 //      of it, please give an appropriate acknowledgement.
00007 //
00008 // Copyright Information: See EvtGen/COPYRIGHT
00009 //      Copyright (C) 1998      Caltech, UCSB
00010 //
00011 // Module: EvtVVSPwave.cc
00012 //
00013 // Description: Routine to decay vector-> vector scalar in Partial-wave
00014 //              Routine to decay a vector into a vector and scalar.  Started
00015 //              by ryd on Aug 20, 1996.
00016 //
00017 // Modification history:
00018 //
00019 //    Ping R.G. November 24, 2008       P-wave implement
00020 //    RYD       November 24, 1996       Module created
00021 //
00022 //------------------------------------------------------------------------
00023 // 
00024 #include "EvtGenBase/EvtPatches.hh"
00025 #include <stdlib.h>
00026 #include "EvtGenBase/EvtParticle.hh"
00027 #include "EvtGenBase/EvtGenKine.hh"
00028 #include "EvtGenBase/EvtPDL.hh"
00029 #include "EvtGenBase/EvtVector4C.hh"
00030 #include "EvtGenBase/EvtTensor4C.hh"
00031 #include "EvtGenBase/EvtReport.hh"
00032 #include "EvtGenModels/EvtVVSPwave.hh"
00033 #include <string>
00034 using std::endl;
00035 
00036 EvtVVSPwave::~EvtVVSPwave() {}
00037 
00038 void EvtVVSPwave::getName(std::string& model_name){
00039 
00040   model_name="VVS_PWAVE";     
00041 
00042 }
00043 
00044 
00045 EvtDecayBase* EvtVVSPwave::clone(){
00046 
00047   return new EvtVVSPwave;
00048 
00049 }
00050 
00051 void EvtVVSPwave::init(){
00052 
00053   // check that there are 6 arguments
00054   checkNArg(6);
00055   checkNDaug(2);
00056 
00057   checkSpinParent(EvtSpinType::VECTOR);
00058   checkSpinDaughter(0,EvtSpinType::VECTOR);
00059   checkSpinDaughter(1,EvtSpinType::SCALAR);
00060 }
00061 
00062 void EvtVVSPwave::initProbMax() {
00063 
00064   //probmax is 1.0 for all possible decays I think!
00065 
00066    setProbMax(1.0);
00067 
00068 }      
00069 
00070 void EvtVVSPwave::decay( EvtParticle *p){
00071 
00072   p->initializePhaseSpace(getNDaug(),getDaugs());
00073 
00074   EvtComplex as(getArg(0)*cos(getArg(1)),getArg(0)*sin(getArg(1)));
00075   EvtComplex ap(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3)));
00076   EvtComplex ad(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)));
00077 
00078   EvtParticle *v,*s;
00079   v=p->getDaug(0);
00080   s=p->getDaug(1);
00081 
00082   if (ap!=EvtComplex(0.0,0.0)) {  // implement P-wave  pingrg,2008-11-24
00083   EvtVector4C epi[3],epf[3];
00084 
00085   epi[0] = p->eps(0);  //for parent polarization 
00086   epi[1] = p->eps(1);
00087   epi[2] = p->eps(2);
00088 
00089   epf[0] = v->eps(0);  //for sun vector polarization
00090   epf[1] = v->eps(1);
00091   epf[2] = v->eps(2);
00092 
00093   EvtVector4R momv = p->getDaug(0)->getP4();
00094   EvtVector3C p1(momv.get(1),momv.get(2),momv.get(3));
00095 
00096   EvtVector3C ei0(epi[0].get(1),epi[0].get(2),epi[0].get(3));
00097   EvtVector3C ei1(epi[1].get(1),epi[1].get(2),epi[1].get(3));
00098   EvtVector3C ei2(epi[2].get(1),epi[2].get(2),epi[2].get(3));
00099 
00100   EvtVector3C ef0(epf[0].get(1),epf[0].get(2),epf[0].get(3));
00101   EvtVector3C ef1(epf[1].get(1),epf[1].get(2),epf[1].get(3));
00102   EvtVector3C ef2(epf[2].get(1),epf[2].get(2),epf[2].get(3));
00103 
00104   double norm = 1/momv.d3mag();
00105   EvtVector3C q0 = p1.cross(ef0);
00106   EvtVector3C q1 = p1.cross(ef1);
00107   EvtVector3C q2 = p1.cross(ef2);
00108 
00109   vertex(0,0,norm*ei0.conj()*q0);
00110   vertex(0,1,norm*ei0.conj()*q1);
00111   vertex(0,2,norm*ei0.conj()*q2);
00112 
00113   vertex(1,0,norm*ei1.conj()*q0);
00114   vertex(1,1,norm*ei1.conj()*q1);
00115   vertex(1,2,norm*ei1.conj()*q2);
00116 
00117   vertex(2,0,norm*ei2.conj()*q0);
00118   vertex(2,1,norm*ei2.conj()*q1);
00119   vertex(2,2,norm*ei2.conj()*q2);
00120 
00121   } else if (as!=EvtComplex(0.0,0.0) || ad!=EvtComplex(0.0,0.0) ){// implemet s- and d-wave
00122     
00123     //  EvtParticle *v,*s;
00124     //  v=p->getDaug(0);
00125     //  s=p->getDaug(1);
00126 
00127   EvtTensor4C d,g;
00128   
00129   g.setdiag(1.0,-1.0,-1.0,-1.0);
00130 
00131   d=ad*((1.0/(v->getP4().d3mag()*v->getP4().d3mag()))*directProd(v->getP4(),v->getP4())+(1/3.0)*g)+
00132     as*g;
00133 
00134   EvtVector4C ep0,ep1,ep2;  
00135   
00136   ep0=d.cont1(p->eps(0));
00137   ep1=d.cont1(p->eps(1));
00138   ep2=d.cont1(p->eps(2));
00139 
00140   vertex(0,0,ep0.cont(v->eps(0).conj()));
00141   vertex(0,1,ep0.cont(v->eps(1).conj()));
00142   vertex(0,2,ep0.cont(v->eps(2).conj()));
00143   
00144   vertex(1,0,ep1.cont(v->eps(0).conj()));
00145   vertex(1,1,ep1.cont(v->eps(1).conj()));
00146   vertex(1,2,ep1.cont(v->eps(2).conj()));
00147   
00148   vertex(2,0,ep2.cont(v->eps(0).conj()));
00149   vertex(2,1,ep2.cont(v->eps(1).conj()));
00150   vertex(2,2,ep2.cont(v->eps(2).conj()));
00151   } else 
00152     {
00153       report(ERROR,"EvtGen") << "In EvtVectorToVectorScalar.cc"<<endl;
00154       report(ERROR,"EvtGen") << "Not all zero value for parameters are need!!"<<endl;
00155       ::abort();
00156     }
00157   return ;
00158 
00159 }

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