/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/BesEvtGen/BesEvtGen-00-03-58/src/EvtGen/EvtGenModels/EvtSVSNONCPEIGEN.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: EvtSVSNONCPEIGEN.cc
00012 //
00013 // Description: Routine to decay scalar -> vectors scalar
00014 //              and has CP violation.
00015 //
00016 // Modification history:
00017 //
00018 //    RYD       April 26, 1997       Module created
00019 //
00020 //------------------------------------------------------------------------
00021 // 
00022 #include "EvtGenBase/EvtPatches.hh"
00023 #include <stdlib.h>
00024 #include "EvtGenBase/EvtParticle.hh"
00025 #include "EvtGenBase/EvtRandom.hh"
00026 #include "EvtGenBase/EvtGenKine.hh"
00027 #include "EvtGenBase/EvtCPUtil.hh"
00028 #include "EvtGenBase/EvtPDL.hh"
00029 #include "EvtGenBase/EvtReport.hh"
00030 #include "EvtGenBase/EvtVector4C.hh"
00031 #include "EvtGenModels/EvtSVSNONCPEIGEN.hh"
00032 #include <string>
00033 #include "EvtGenBase/EvtConst.hh"
00034 
00035 EvtSVSNONCPEIGEN::~EvtSVSNONCPEIGEN() {}
00036 
00037 void EvtSVSNONCPEIGEN::getName(std::string& model_name){
00038 
00039   model_name="SVS_NONCPEIGEN";     
00040 
00041 }
00042 
00043 
00044 EvtDecayBase* EvtSVSNONCPEIGEN::clone(){
00045 
00046   return new EvtSVSNONCPEIGEN;
00047 
00048 }
00049 
00050 void EvtSVSNONCPEIGEN::init(){
00051 
00052   // check that there are 11 arguments
00053   checkNArg(11,7);
00054   checkNDaug(2);
00055 
00056   checkSpinDaughter(0,EvtSpinType::VECTOR);
00057   checkSpinDaughter(1,EvtSpinType::SCALAR);
00058 
00059   _dm=getArg(1);
00060   _phickm=2*getArg(0)+getArg(2);
00061 
00062   _A_f=EvtComplex(getArg(3)*cos(getArg(4)),getArg(3)*sin(getArg(4)));
00063   _Abar_f=EvtComplex(getArg(5)*cos(getArg(6)),getArg(5)*sin(getArg(6)));
00064   
00065   _A_fbar=_Abar_f;
00066   _Abar_fbar=_A_f;
00067 
00068   if (getNArg()==11){
00069     _A_fbar=EvtComplex(getArg(7)*cos(getArg(8)),getArg(7)*sin(getArg(8)));
00070     _Abar_fbar=EvtComplex(getArg(9)*cos(getArg(10)),getArg(9)*sin(getArg(10)));
00071   }
00072 }
00073 
00074 void EvtSVSNONCPEIGEN::initProbMax() {
00075   double theProbMax = 
00076     abs(_A_f) * abs(_A_f) +
00077     abs(_Abar_f) * abs(_Abar_f) +
00078     abs(_A_fbar) * abs(_A_fbar) +
00079     abs(_Abar_fbar) * abs(_Abar_fbar);
00080   
00081   setProbMax(theProbMax);
00082 }
00083 
00084 void EvtSVSNONCPEIGEN::decay( EvtParticle *p){
00085 
00086   //added by Lange Jan4,2000
00087   static EvtId B0=EvtPDL::getId("B0");
00088   static EvtId B0B=EvtPDL::getId("anti-B0");
00089 
00090   double t;
00091   EvtId other_b;
00092   EvtId daugs[2];
00093 
00094   // MB: flip selects the final of the decay
00095   int flip = ((p->getId() == B0) ? 0 : 1);
00096   daugs[0]=getDaug(0);
00097   daugs[1]=getDaug(1);
00098   p->initializePhaseSpace(2, daugs);
00099 
00100   EvtCPUtil::OtherB(p,t,other_b,0.5);
00101 
00102   EvtComplex amp;
00103   double dmt2 = (_dm * t) / (2 * EvtConst::c);
00104   EvtComplex ePlusIPhi(cos(_phickm), sin(_phickm));
00105   EvtComplex eMinusIPhi(cos(-_phickm), -sin(_phickm));
00106 
00107   // flip == 0 : D-rho+
00108   // flip == 1 : D+rho-
00109 
00110    if (!flip) {
00111      if (other_b==B0B){
00112        // At t=0 we have a B0
00113        amp = cos(dmt2)*_A_f + eMinusIPhi*EvtComplex(0.0,sin(dmt2))*_Abar_f;
00114      }
00115      if (other_b==B0){
00116        // At t=0 we have a B0bar
00117        amp = ePlusIPhi*EvtComplex(0.0,sin(dmt2))*_A_f + cos(dmt2)*_Abar_f;
00118      }
00119    }
00120    else{
00121      if (other_b==B0B){
00122        // At t=0 we have a B0
00123        amp = cos(dmt2)*_A_fbar + eMinusIPhi*EvtComplex(0.0,sin(dmt2))*_Abar_fbar;
00124      }
00125      if (other_b==B0){
00126        // At t=0 we have a B0bar
00127        amp = ePlusIPhi*EvtComplex(0.0,sin(dmt2))*_A_fbar + cos(dmt2)*_Abar_fbar;
00128      }
00129    }
00130 
00131 
00132   EvtParticle *v;
00133   v= p->getDaug(0);
00134 
00135   EvtVector4R momv = p->getDaug(0)->getP4();
00136   EvtVector4R moms = p->getDaug(1)->getP4();
00137   EvtVector4R p4_parent=momv+moms;
00138 
00139   double norm=momv.mass()/(momv.d3mag()*p->mass());
00140 
00141   vertex(0,amp*norm*p4_parent*(v->epsParent(0)));
00142   vertex(1,amp*norm*p4_parent*(v->epsParent(1)));
00143   vertex(2,amp*norm*p4_parent*(v->epsParent(2)));
00144 
00145   return ;
00146 }
00147 

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