/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Generator/BesEvtGen/BesEvtGen-00-03-58/src/EvtGen/EvtGenModels/EvtDDalitz.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: EvtDDalitz.cc
00012 //
00013 // Description: Routine to handle three-body decays of D0/D0_bar or D+/D-
00014 //
00015 // Modification history:
00016 //
00017 //    NK     September 3, 1997         Module created
00018 //
00019 //------------------------------------------------------------------------
00020 // 
00021 #include "EvtGenBase/EvtPatches.hh"
00022 #include <stdlib.h>
00023 #include "EvtGenBase/EvtParticle.hh"
00024 #include "EvtGenBase/EvtGenKine.hh"
00025 #include "EvtGenBase/EvtPDL.hh"
00026 #include "EvtGenBase/EvtReport.hh"
00027 #include "EvtGenBase/EvtResonance.hh"
00028 #include "EvtGenBase/EvtResonance2.hh"
00029 #include "EvtGenModels/EvtDDalitz.hh"
00030 #include <string>
00031 #include "EvtGenBase/EvtConst.hh"
00032 #include "EvtGenBase/EvtFlatte.hh"
00033 #include "EvtGenBase/EvtDecayTable.hh"
00034 using std::endl;
00035 
00036 EvtDDalitz::~EvtDDalitz() {}
00037 
00038 void EvtDDalitz::getName(std::string& model_name){
00039   
00040   model_name="D_DALITZ";     
00041 
00042 }
00043 
00044 
00045 EvtDecayBase* EvtDDalitz::clone(){
00046 
00047   return new EvtDDalitz;
00048 
00049 }
00050 
00051 void EvtDDalitz::init(){
00052 
00053   // check that there are 0 arguments
00054 
00055   static EvtId DM=EvtPDL::getId("D-");
00056   static EvtId DP=EvtPDL::getId("D+");
00057   static EvtId D0=EvtPDL::getId("D0");
00058   static EvtId D0B=EvtPDL::getId("anti-D0");
00059   static EvtId DSP=EvtPDL::getId("D_s+");
00060   static EvtId DSM=EvtPDL::getId("D_s-");
00061   static EvtId KM=EvtPDL::getId("K-");
00062   static EvtId KP=EvtPDL::getId("K+");
00063   static EvtId K0=EvtPDL::getId("K0");
00064   static EvtId KB=EvtPDL::getId("anti-K0");
00065   static EvtId KL=EvtPDL::getId("K_L0");
00066   static EvtId KS=EvtPDL::getId("K_S0");
00067   static EvtId PIM=EvtPDL::getId("pi-");
00068   static EvtId PIP=EvtPDL::getId("pi+");
00069   static EvtId PI0=EvtPDL::getId("pi0");
00070 
00071   static double MPI = EvtPDL::getMeanMass(PI0);
00072   static double MKP = EvtPDL::getMeanMass(KP);
00073 
00074 
00075   checkNArg(0);
00076   checkNDaug(3);
00077 
00078   checkSpinParent(EvtSpinType::SCALAR);
00079 
00080   checkSpinDaughter(0,EvtSpinType::SCALAR);
00081   checkSpinDaughter(1,EvtSpinType::SCALAR);
00082   checkSpinDaughter(2,EvtSpinType::SCALAR);
00083 
00084   EvtId parnum=getParentId();
00085   EvtId d1=getDaug(0);
00086   EvtId d2=getDaug(1);
00087   EvtId d3=getDaug(2);
00088   _flag=0;
00089   if ( parnum == D0 ) {
00090     //look for either a K- pi+ pi0 or K0bar pi+ pi-
00091     if ( d1==KM && d2==PIP && d3==PI0 ) { _flag=4; _d1=0; _d2=1; _d3=2;}
00092     if ( d1==KM && d3==PIP && d2==PI0 ) { _flag=4; _d1=0; _d2=2; _d3=1;}
00093     if ( d2==KM && d1==PIP && d3==PI0 ) { _flag=4; _d1=1; _d2=0; _d3=2;}
00094     if ( d2==KM && d3==PIP && d1==PI0 ) { _flag=4; _d1=1; _d2=2; _d3=0;}
00095     if ( d3==KM && d1==PIP && d2==PI0 ) { _flag=4; _d1=2; _d2=0; _d3=1;}
00096     if ( d3==KM && d2==PIP && d1==PI0 ) { _flag=4; _d1=2; _d2=1; _d3=0;}
00097 
00098     if ( d1==KB && d2==PIP && d3==PIM )  { _flag=3; _d1=0; _d2=2; _d3=1;}
00099     if ( d1==KB && d3==PIP && d2==PIM ) { _flag=3; _d1=0; _d2=1; _d3=2;}
00100     if ( d2==KB && d1==PIP && d3==PIM ) { _flag=3; _d1=1; _d2=2; _d3=0;}
00101     if ( d2==KB && d3==PIP && d1==PIM ) { _flag=3; _d1=1; _d2=0; _d3=2;}
00102     if ( d3==KB && d1==PIP && d2==PIM ) { _flag=3; _d1=2; _d2=1; _d3=0;}
00103     if ( d3==KB && d2==PIP && d1==PIM ) { _flag=3; _d1=2; _d2=0; _d3=1;}
00104 
00105     if ( d1==KL && d2==PIP && d3==PIM )  { _flag=3; _d1=0; _d2=2; _d3=1;}
00106     if ( d1==KL && d3==PIP && d2==PIM ) { _flag=3; _d1=0; _d2=1; _d3=2;}
00107     if ( d2==KL && d1==PIP && d3==PIM ) { _flag=3; _d1=1; _d2=2; _d3=0;}
00108     if ( d2==KL && d3==PIP && d1==PIM ) { _flag=3; _d1=1; _d2=0; _d3=2;}
00109     if ( d3==KL && d1==PIP && d2==PIM ) { _flag=3; _d1=2; _d2=1; _d3=0;}
00110     if ( d3==KL && d2==PIP && d1==PIM ) { _flag=3; _d1=2; _d2=0; _d3=1;}
00111 
00112     if ( d1==KS && d2==PIP && d3==PIM )  { _flag=3; _d1=0; _d2=2; _d3=1;}
00113     if ( d1==KS && d3==PIP && d2==PIM ) { _flag=3; _d1=0; _d2=1; _d3=2;}
00114     if ( d2==KS && d1==PIP && d3==PIM ) { _flag=3; _d1=1; _d2=2; _d3=0;}
00115     if ( d2==KS && d3==PIP && d1==PIM ) { _flag=3; _d1=1; _d2=0; _d3=2;}
00116     if ( d3==KS && d1==PIP && d2==PIM ) { _flag=3; _d1=2; _d2=1; _d3=0;}
00117     if ( d3==KS && d2==PIP && d1==PIM ) { _flag=3; _d1=2; _d2=0; _d3=1;}
00118 
00119     
00120     if ( d1==KS && d2==KP && d3==KM ) {_flag=5;_d1=0;_d2=2;_d3=1;}
00121     if ( d1==KS && d3==KP && d2==KM ) {_flag=5;_d1=0;_d2=1;_d3=2;}
00122     if ( d2==KS && d1==KP && d3==KM ) {_flag=5;_d1=1;_d2=2;_d3=0;}
00123     if ( d2==KS && d3==KP && d1==KM ) {_flag=5;_d1=1;_d2=0;_d3=2;}
00124     if ( d3==KS && d1==KP && d2==KM ) {_flag=5;_d1=2;_d2=1;_d3=0;}
00125     if ( d3==KS && d2==KP && d1==KM ) {_flag=5;_d1=2;_d2=0;_d3=1;}
00126     
00127     if ( d1==KL && d2==KP && d3==KM ) {_flag=5;_d1=0;_d2=2;_d3=1;}
00128     if ( d1==KL && d3==KP && d2==KM ) {_flag=5;_d1=0;_d2=1;_d3=2;}
00129     if ( d2==KL && d1==KP && d3==KM ) {_flag=5;_d1=1;_d2=2;_d3=0;}
00130     if ( d2==KL && d3==KP && d1==KM ) {_flag=5;_d1=1;_d2=0;_d3=2;}
00131     if ( d3==KL && d1==KP && d2==KM ) {_flag=5;_d1=2;_d2=1;_d3=0;}
00132     if ( d3==KL && d2==KP && d1==KM ) {_flag=5;_d1=2;_d2=0;_d3=1;}  
00133     
00134     if ( d1==K0 && d2==KP && d3==KM ) {_flag=5;_d1=0;_d2=2;_d3=1;}
00135     if ( d1==K0 && d3==KP && d2==KM ) {_flag=5;_d1=0;_d2=1;_d3=2;}
00136     if ( d2==K0 && d1==KP && d3==KM ) {_flag=5;_d1=1;_d2=2;_d3=0;}
00137     if ( d2==K0 && d3==KP && d1==KM ) {_flag=5;_d1=1;_d2=0;_d3=2;}
00138     if ( d3==K0 && d1==KP && d2==KM ) {_flag=5;_d1=2;_d2=1;_d3=0;}
00139     if ( d3==K0 && d2==KP && d1==KM ) {_flag=5;_d1=2;_d2=0;_d3=1;}
00140   }
00141   if ( parnum == D0B ) {
00142     //look for either a K+ pi- pi0 or K0 pi+ pi-
00143     if ( d1==KP && d2==PIM && d3==PI0 )  { _flag=4; _d1=0; _d2=1; _d3=2;}
00144     if ( d1==KP && d3==PIM && d2==PI0 ) { _flag=4; _d1=0; _d2=2; _d3=1;}
00145     if ( d2==KP && d1==PIM && d3==PI0 ) { _flag=4; _d1=1; _d2=0; _d3=2;}
00146     if ( d2==KP && d3==PIM && d1==PI0 ) { _flag=4; _d1=1; _d2=2; _d3=0;}
00147     if ( d3==KP && d1==PIM && d2==PI0 ) { _flag=4; _d1=2; _d2=0; _d3=1;}
00148     if ( d3==KP && d2==PIM && d1==PI0 ) { _flag=4; _d1=2; _d2=1; _d3=0;}
00149 
00150     if ( d1==K0 && d2==PIP && d3==PIM )  { _flag=3; _d1=0; _d2=1; _d3=2;}
00151     if ( d1==K0 && d3==PIP && d2==PIM ) { _flag=3; _d1=0; _d2=2; _d3=1;}
00152     if ( d2==K0 && d1==PIP && d3==PIM ) { _flag=3; _d1=1; _d2=0; _d3=2;}
00153     if ( d2==K0 && d3==PIP && d1==PIM ) { _flag=3; _d1=1; _d2=2; _d3=0;}
00154     if ( d3==K0 && d1==PIP && d2==PIM ) { _flag=3; _d1=2; _d2=0; _d3=1;}
00155     if ( d3==K0 && d2==PIP && d1==PIM ) { _flag=3; _d1=2; _d2=1; _d3=0;}
00156 
00157     if ( d1==KL && d2==PIP && d3==PIM )  { _flag=3; _d1=0; _d2=1; _d3=2;}
00158     if ( d1==KL && d3==PIP && d2==PIM ) { _flag=3; _d1=0; _d2=2; _d3=1;}
00159     if ( d2==KL && d1==PIP && d3==PIM ) { _flag=3; _d1=1; _d2=0; _d3=2;}
00160     if ( d2==KL && d3==PIP && d1==PIM ) { _flag=3; _d1=1; _d2=2; _d3=0;}
00161     if ( d3==KL && d1==PIP && d2==PIM ) { _flag=3; _d1=2; _d2=0; _d3=1;}
00162     if ( d3==KL && d2==PIP && d1==PIM ) { _flag=3; _d1=2; _d2=1; _d3=0;}
00163 
00164     if ( d1==KS && d2==PIP && d3==PIM )  { _flag=3; _d1=0; _d2=1; _d3=2;}
00165     if ( d1==KS && d3==PIP && d2==PIM ) { _flag=3; _d1=0; _d2=2; _d3=1;}
00166     if ( d2==KS && d1==PIP && d3==PIM ) { _flag=3; _d1=1; _d2=0; _d3=2;}
00167     if ( d2==KS && d3==PIP && d1==PIM ) { _flag=3; _d1=1; _d2=2; _d3=0;}
00168     if ( d3==KS && d1==PIP && d2==PIM ) { _flag=3; _d1=2; _d2=0; _d3=1;}
00169     if ( d3==KS && d2==PIP && d1==PIM ) { _flag=3; _d1=2; _d2=1; _d3=0;}
00170 
00171     if ( d1==KS && d2==KP && d3==KM ) {_flag=5;_d1=0;_d2=1;_d3=2;}
00172     if ( d1==KS && d3==KP && d2==KM ) {_flag=5;_d1=0;_d2=2;_d3=1;}
00173     if ( d2==KS && d1==KP && d3==KM ) {_flag=5;_d1=1;_d2=0;_d3=2;}
00174     if ( d2==KS && d3==KP && d1==KM ) {_flag=5;_d1=1;_d2=2;_d3=0;}
00175     if ( d3==KS && d1==KP && d2==KM ) {_flag=5;_d1=2;_d2=0;_d3=1;}
00176     if ( d3==KS && d2==KP && d1==KM ) {_flag=5;_d1=2;_d2=1;_d3=0;}
00177     
00178     if ( d1==KL && d2==KP && d3==KM ) {_flag=5;_d1=0;_d2=1;_d3=2;}
00179     if ( d1==KL && d3==KP && d2==KM ) {_flag=5;_d1=0;_d2=2;_d3=1;}
00180     if ( d2==KL && d1==KP && d3==KM ) {_flag=5;_d1=1;_d2=0;_d3=2;}
00181     if ( d2==KL && d3==KP && d1==KM ) {_flag=5;_d1=1;_d2=2;_d3=0;}
00182     if ( d3==KL && d1==KP && d2==KM ) {_flag=5;_d1=2;_d2=0;_d3=1;}
00183     if ( d3==KL && d2==KP && d1==KM ) {_flag=5;_d1=2;_d2=1;_d3=0;}
00184     
00185     if ( d1==K0 && d2==KP && d3==KM ) {_flag=5;_d1=0;_d2=1;_d3=2;}
00186     if ( d1==K0 && d3==KP && d2==KM ) {_flag=5;_d1=0;_d2=2;_d3=1;}
00187     if ( d2==K0 && d1==KP && d3==KM ) {_flag=5;_d1=1;_d2=0;_d3=2;}
00188     if ( d2==K0 && d3==KP && d1==KM ) {_flag=5;_d1=1;_d2=2;_d3=0;}
00189     if ( d3==K0 && d1==KP && d2==KM ) {_flag=5;_d1=2;_d2=0;_d3=1;}
00190     if ( d3==K0 && d2==KP && d1==KM ) {_flag=5;_d1=2;_d2=1;_d3=0;}
00191     
00192   }
00193 
00194   if ( parnum == DP ) {
00195     //look for K- pi+ pi+
00196     if ( d1==KB && d2==PIP && d3==PI0 )  { _flag=2; _d1=0; _d2=1; _d3=2;}
00197     if ( d1==KB && d3==PIP && d2==PI0 ) { _flag=2; _d1=0; _d2=2; _d3=1;}
00198     if ( d2==KB && d1==PIP && d3==PI0 ) { _flag=2; _d1=1; _d2=0; _d3=2;}
00199     if ( d2==KB && d3==PIP && d1==PI0 ) { _flag=2; _d1=1; _d2=2; _d3=0;}
00200     if ( d3==KB && d1==PIP && d2==PI0 ) { _flag=2; _d1=2; _d2=0; _d3=1;}
00201     if ( d3==KB && d2==PIP && d1==PI0 ) { _flag=2; _d1=2; _d2=1; _d3=0;}
00202 
00203     if ( d1==KL && d2==PIP && d3==PI0 )  { _flag=2; _d1=0; _d2=1; _d3=2;}
00204     if ( d1==KL && d3==PIP && d2==PI0 ) { _flag=2; _d1=0; _d2=2; _d3=1;}
00205     if ( d2==KL && d1==PIP && d3==PI0 ) { _flag=2; _d1=1; _d2=0; _d3=2;}
00206     if ( d2==KL && d3==PIP && d1==PI0 ) { _flag=2; _d1=1; _d2=2; _d3=0;}
00207     if ( d3==KL && d1==PIP && d2==PI0 ) { _flag=2; _d1=2; _d2=0; _d3=1;}
00208     if ( d3==KL && d2==PIP && d1==PI0 ) { _flag=2; _d1=2; _d2=1; _d3=0;}
00209 
00210     if ( d1==KS && d2==PIP && d3==PI0 )  { _flag=2; _d1=0; _d2=1; _d3=2;}
00211     if ( d1==KS && d3==PIP && d2==PI0 ) { _flag=2; _d1=0; _d2=2; _d3=1;}
00212     if ( d2==KS && d1==PIP && d3==PI0 ) { _flag=2; _d1=1; _d2=0; _d3=2;}
00213     if ( d2==KS && d3==PIP && d1==PI0 ) { _flag=2; _d1=1; _d2=2; _d3=0;}
00214     if ( d3==KS && d1==PIP && d2==PI0 ) { _flag=2; _d1=2; _d2=0; _d3=1;}
00215     if ( d3==KS && d2==PIP && d1==PI0 ) { _flag=2; _d1=2; _d2=1; _d3=0;}
00216 
00217     if ( d1==KM && d2==PIP && d3==PIP )  { _flag=1; _d1=0; _d2=1; _d3=2;}
00218     if ( d2==KM && d1==PIP && d3==PIP ) { _flag=1; _d1=1; _d2=0; _d3=2;}
00219     if ( d3==KM && d1==PIP && d2==PIP ) { _flag=1; _d1=2; _d2=0; _d3=1;}
00220   }
00221 
00222   if ( parnum == DM ) {
00223     //look for K- pi+ pi+
00224     if ( d1==K0 && d2==PIM && d3==PI0 )  { _flag=2; _d1=0; _d2=1; _d3=2;}
00225     if ( d1==K0 && d3==PIM && d2==PI0 ) { _flag=2; _d1=0; _d2=2; _d3=1;}
00226     if ( d2==K0 && d1==PIM && d3==PI0 ) { _flag=2; _d1=1; _d2=0; _d3=2;}
00227     if ( d2==K0 && d3==PIM && d1==PI0 ) { _flag=2; _d1=1; _d2=2; _d3=0;}
00228     if ( d3==K0 && d1==PIM && d2==PI0 ) { _flag=2; _d1=2; _d2=0; _d3=1;}
00229     if ( d3==K0 && d2==PIM && d1==PI0 ) { _flag=2; _d1=2; _d2=1; _d3=0;}
00230 
00231     if ( d1==KL && d2==PIM && d3==PI0 )  { _flag=2; _d1=0; _d2=1; _d3=2;}
00232     if ( d1==KL && d3==PIM && d2==PI0 ) { _flag=2; _d1=0; _d2=2; _d3=1;}
00233     if ( d2==KL && d1==PIM && d3==PI0 ) { _flag=2; _d1=1; _d2=0; _d3=2;}
00234     if ( d2==KL && d3==PIM && d1==PI0 ) { _flag=2; _d1=1; _d2=2; _d3=0;}
00235     if ( d3==KL && d1==PIM && d2==PI0 ) { _flag=2; _d1=2; _d2=0; _d3=1;}
00236     if ( d3==KL && d2==PIM && d1==PI0 ) { _flag=2; _d1=2; _d2=1; _d3=0;}
00237 
00238     if ( d1==KS && d2==PIM && d3==PI0 )  { _flag=2; _d1=0; _d2=1; _d3=2;}
00239     if ( d1==KS && d3==PIM && d2==PI0 ) { _flag=2; _d1=0; _d2=2; _d3=1;}
00240     if ( d2==KS && d1==PIM && d3==PI0 ) { _flag=2; _d1=1; _d2=0; _d3=2;}
00241     if ( d2==KS && d3==PIM && d1==PI0 ) { _flag=2; _d1=1; _d2=2; _d3=0;}
00242     if ( d3==KS && d1==PIM && d2==PI0 ) { _flag=2; _d1=2; _d2=0; _d3=1;}
00243     if ( d3==KS && d2==PIM && d1==PI0 ) { _flag=2; _d1=2; _d2=1; _d3=0;}
00244 
00245     if ( d1==KP && d2==PIM && d3==PIM )  { _flag=1; _d1=0; _d2=1; _d3=2;}
00246     if ( d2==KP && d1==PIM && d3==PIM ) { _flag=1; _d1=1; _d2=0; _d3=2;}
00247     if ( d3==KP && d1==PIM && d2==PIM ) { _flag=1; _d1=2; _d2=0; _d3=1;}
00248   }
00249   
00250   if ( parnum == DSP ) {
00251      if ( d1==KM && d2==KP && d3==PIP ) { _flag=6; _d1=0; _d2=1; _d3=2; }
00252      if ( d1==KM && d3==KP && d2==PIP ) { _flag=6; _d1=0; _d2=2; _d3=1; }
00253      if ( d2==KM && d1==KP && d3==PIP ) { _flag=6; _d1=1; _d2=0; _d3=2; }
00254      if ( d2==KM && d3==KP && d1==PIP ) { _flag=6; _d1=1; _d2=2; _d3=0; }
00255      if ( d3==KM && d1==KP && d2==PIP ) { _flag=6; _d1=2; _d2=0; _d3=1; }
00256      if ( d3==KM && d2==KP && d1==PIP ) { _flag=6; _d1=2; _d2=1; _d3=0; }
00257   }
00258 
00259   if ( parnum == DSM ) {
00260      if ( d1==KP && d2==KM && d3==PIM ) { _flag=6; _d1=0; _d2=1; _d3=2; }
00261      if ( d1==KP && d3==KM && d2==PIM ) { _flag=6; _d1=0; _d2=2; _d3=1; }
00262      if ( d2==KP && d1==KM && d3==PIM ) { _flag=6; _d1=1; _d2=0; _d3=2; }
00263      if ( d2==KP && d3==KM && d1==PIM ) { _flag=6; _d1=1; _d2=2; _d3=0; }
00264      if ( d3==KP && d1==KM && d2==PIM ) { _flag=6; _d1=2; _d2=0; _d3=1; }
00265      if ( d3==KP && d2==KM && d1==PIM ) { _flag=6; _d1=2; _d2=1; _d3=0; }
00266   }
00267 
00268   if ( _flag==6) {
00269     _kkpi_params.push_back(EvtFlatteParam(MPI, MPI, 0.406));
00270     _kkpi_params.push_back(EvtFlatteParam(MKP, MKP, 0.800));
00271   }
00272 
00273   if ( _flag==0) {
00274     report(ERROR,"EvtGen") << "EvtDDaltiz: Invalid mode."<<endl;
00275     assert(0);
00276   }
00277 }
00278 
00279 void EvtDDalitz::initProbMax() {
00280 
00281 //probmax different for different modes!  
00282 
00283   if ( _flag==1 ) {setProbMax(9.6);}
00284   if ( _flag==2 ) {setProbMax(147.9);}
00285   if ( _flag==3 ) {setProbMax(5000.0);}
00286   if ( _flag==4 ) {setProbMax(3000.0);}
00287   if ( _flag==5 ) {setProbMax(10000000.0);}
00288   if ( _flag==6 ) {setProbMax(50000.0);}
00289 
00290 }
00291 
00292 void EvtDDalitz::decay( EvtParticle *p){
00293 
00294   //added by Lange Jan4,2000
00295   static EvtId BP = EvtPDL::getId("B+");
00296   static EvtId BM = EvtPDL::getId("B-");
00297   static EvtId B0 = EvtPDL::getId("B0");
00298   static EvtId B0B = EvtPDL::getId("anti-B0");
00299   static EvtId DM=EvtPDL::getId("D-");
00300   static EvtId DP=EvtPDL::getId("D+");
00301   static EvtId D0=EvtPDL::getId("D0");
00302   static EvtId D0B=EvtPDL::getId("anti-D0");
00303   static EvtId KM=EvtPDL::getId("K-");
00304   static EvtId KP=EvtPDL::getId("K+");
00305   static EvtId K0=EvtPDL::getId("K0");
00306   static EvtId KB=EvtPDL::getId("anti-K0");
00307   static EvtId PIM=EvtPDL::getId("pi-");
00308   static EvtId PIP=EvtPDL::getId("pi+");
00309   static EvtId PI0=EvtPDL::getId("pi0");
00310 
00311   double oneby2 = 0.707106782;
00312 
00313   bool isBToDK=false;
00314   if ( p -> getParent () ) {
00315     std::string name1;
00316     EvtDecayTable::getDecayFunc(p->getParent())->getName(name1);
00317 
00318     EvtId parId = p -> getParent()->getId ();
00319     if ( ( BP == parId ) || ( BM == parId ) || ( B0 == parId ) ||
00320          ( B0B == parId ) )
00321       if (name1 == "BTODDALITZCPK") isBToDK=true;
00322   }
00323   
00324 
00325 //same structure for all of these decays
00326 
00327   p->initializePhaseSpace(getNDaug(),getDaugs());
00328   EvtVector4R moms1 = p->getDaug(_d1)->getP4();
00329   EvtVector4R moms2 = p->getDaug(_d2)->getP4();
00330   EvtVector4R moms3 = p->getDaug(_d3)->getP4();
00331 
00332   EvtVector4R p4_p;
00333   p4_p.set(p->mass(),0.0,0.0,0.0);
00334 
00335   EvtComplex amp(1.0,0.0);
00336 
00337 //now determine which D and which decay
00338 
00339 //data from Anjos et al, Phys.Rev.D 1993, v.48,num.1,p.56 (E691 resuls)
00340 //for D+ -> K- pi+ pi+, and from Adler et al, Phys.Lett. B196 (1987), 107
00341 //(Mark III results) for D+ -> K0bar pi+ pi0. 
00342   //CLEO results for D0->k-pi+pi0
00343 
00344   if ( _flag==1) {
00345 
00346 //have a D+ -> K- pi+ pi+ decay, or charge conjugate
00347 //Anjos etal e691 - Phys Rev D48, 56 (1993) 
00348     EvtResonance DplusRes11(p4_p,moms1,moms2,0.78,-60.0,0.0498,0.89610,1);
00349     EvtResonance DplusRes12(p4_p,moms3,moms1,0.78,-60.0,0.0498,0.89610,1);//K*(892)
00350     
00351     EvtResonance DplusRes21(p4_p,moms1,moms2,0.53,132.0,0.287,1.429,0);
00352     EvtResonance DplusRes22(p4_p,moms3,moms1,0.53,132.0,0.287,1.429,0);//K*(1430)
00353     
00354     EvtResonance DplusRes31(p4_p,moms1,moms2,0.47,-51.0,0.323,1.714,1);
00355     EvtResonance DplusRes32(p4_p,moms3,moms1,0.47,-51.0,0.323,1.714,1);//K*(1680)
00356     
00357     amp = amp + oneby2*(-DplusRes11.resAmpl()+DplusRes12.resAmpl()) + oneby2*(DplusRes21.resAmpl() + DplusRes22.resAmpl()) + oneby2*(-DplusRes31.resAmpl()+ DplusRes32.resAmpl());
00358     
00359  }
00360   
00361   if ( _flag==2) {
00362 
00363 //have a D+ -> K0bar pi+ pi0 decay (daughters must be listed in this order!)
00364 //adler etal MarkIII - Phys Lett B196, 107 (1987)    
00365 // Results in this paper:
00366 //   Kbar rho+    FitFraction = 68+/-8+/-12    Phase   0
00367 //   Kbar* pi+                  19+/-6+/-6            43+/-23
00368 //   nonres                     13+/-7+/-8           250+/-19   
00369 // These numbers below seem not to be exactly the same
00370 // the phases are equiv to -106=254 and 41
00371 // 
00372     EvtResonance DplusKpipi0Res1(p4_p,moms2,moms3,1.00,0.00,0.1512,0.7699,1); //rho+  
00373     EvtResonance DplusKpipi0Res2(p4_p,moms3,moms1,0.8695,0.7191,0.0498,0.89159,1); //K*0
00374     
00375     amp = 0.9522*EvtComplex(cos(-1.8565),sin(-1.8565)) + 1.00*DplusKpipi0Res1.relBrWig(0) + 0.8695*EvtComplex(cos(0.7191),sin(0.7191))*DplusKpipi0Res2.relBrWig(1);
00376     
00377   }
00378 
00379   if(_flag==3) {
00380 
00381 //know it's a D0 -> K0_bar pi+ pi- or charge conjugate
00382 
00383 //    EvtResonance DK2piRes1(p4_p,moms1,moms2,2.31,109.0,0.0498,0.89610,1);//K*(892)
00384 //    EvtResonance DK2piRes2(p4_p,moms3,moms2,1.59,-123.0,0.1491,0.7683,1);//RHO(770)
00385     
00386 //    amp = amp + DK2piRes1.resAmpl() + DK2piRes2.resAmpl();
00387 
00388 
00389     // D0 -> K0 pi+ pi- + CC
00390     // If it does not come from a B->DK, decay it as D0 or D0bar separatly
00391     // if p4_p is D0, moms1 is K0, moms2 is pi-, moms3 is pi+
00392     // if p4_p is D0bar, moms1 is K0, moms2 is pi+, moms3 is pi-
00393 
00394     if ( isBToDK ) {
00395       // Gamma angle in rad.                                                                       
00396       double gamma = EvtDecayTable::getDecayFunc( p->getParent() )
00397         -> getArg( 0 )  ;
00398       // Strong phase in rad.
00399       double delta =  EvtDecayTable::getDecayFunc( p->getParent() )
00400         -> getArg( 1 )  ;
00401       // Ratio between B->D0K and B->D0barK
00402       double A     =  EvtDecayTable::getDecayFunc( p->getParent() )
00403         -> getArg( 2 )  ;
00404 
00405       EvtComplex Factor( fabs( A ) * cos ( delta ) ,
00406                          fabs( A ) * sin ( delta ) ) ;
00407 
00408       if ( ( p->getParent()->getId() == BP ) ||
00409            ( p->getParent()->getId() == B0 ) ) {
00410         // the ratio D/Dbar
00411         Factor = Factor * EvtComplex( cos ( gamma ) , sin ( gamma ) ) ;
00412         if ( p->getId() == D0 ) {
00413           // the flavor of the particle has no meaning. But we need
00414           // it to know which daughter is pi+ or pi-
00415           // M( B+ or B0 ) = f(Dbar) + factor * f(D)
00416           // f(Dbar) = amplDtoK0PiPi(pD, K0, pi+, pi-)
00417           // f(D)    = amplDtoK0PiPi(pD, K0, pi-, pi+)
00418           // Then ...                                                
00419           amp = amplDtoK0PiPi( p4_p , moms1 , moms3 , moms2 ) +
00420             Factor * amplDtoK0PiPi( p4_p , moms1 , moms2 , moms3 ) ;
00421         }
00422         else {
00423           amp = amplDtoK0PiPi( p4_p , moms1 , moms2 , moms3 ) +
00424             Factor * amplDtoK0PiPi( p4_p , moms1 , moms3 , moms2 ) ;
00425         }
00426       }
00427       else if ( ( p->getParent() -> getId() == BM ) ||
00428                 ( p->getParent() -> getId() == B0B ) ) {
00429         Factor = Factor * EvtComplex( cos ( gamma ) , - sin ( gamma ) ) ;
00430         // here M( B- or B0bar ) = f(D) + factor * f(Dbar) then ...
00431         if ( p->getId() == D0 ) {
00432           amp = amplDtoK0PiPi( p4_p , moms1 , moms2 , moms3 ) +
00433             Factor * amplDtoK0PiPi( p4_p , moms1 , moms3 , moms2 ) ;
00434         }
00435         else {
00436           amp = amplDtoK0PiPi( p4_p , moms1 , moms3 , moms2 ) +
00437             Factor * amplDtoK0PiPi( p4_p , moms1 , moms2 , moms3 ) ;
00438         }
00439       }
00440     }
00441     else {
00442       amp = amplDtoK0PiPi( p4_p , moms1 , moms2 , moms3 ) ;
00443     }
00444   }
00445 
00446   
00447   if(_flag==4) {
00448 
00449     EvtResonance2 DKpipi0Res1(p4_p,moms2,moms3,1.0  ,0.0   ,0.1507,0.770 ,1); //rho
00450     EvtResonance2 DKpipi0Res2(p4_p,moms1,moms2,0.39, -0.2  ,0.0505,0.8961,1); //k*0
00451     EvtResonance2 DKpipi0Res3(p4_p,moms1,moms3,0.44, 163.0 ,0.050 ,0.8915,1); //k*-
00452     
00453     EvtResonance2 DKpipi0Res4(p4_p,moms1,moms3,0.77 ,55.5  ,0.294 ,1.412 ,0); //k01430-
00454     EvtResonance2 DKpipi0Res5(p4_p,moms1,moms2,0.85 ,166.0 ,0.294 ,1.412 ,0); //k01430bar
00455     EvtResonance2 DKpipi0Res6(p4_p,moms2,moms3,2.5  ,171.0 ,0.240 ,1.700 ,1); //rho1700
00456     EvtResonance2 DKpipi0Res7(p4_p,moms1,moms3,2.5  ,103.0 ,0.322 ,1.717 ,1); //K*1680-
00457     
00458     
00459     
00460     double pi180inv = 1.0/EvtConst::radToDegrees;
00461     
00462     amp = EvtComplex(1.75*cos(31.2*pi180inv),1.75*sin(31.2*pi180inv)) 
00463       + DKpipi0Res1.resAmpl() + DKpipi0Res2.resAmpl() + DKpipi0Res3.resAmpl()
00464       + DKpipi0Res4.resAmpl() + DKpipi0Res5.resAmpl() 
00465       + DKpipi0Res6.resAmpl()
00466       + DKpipi0Res7.resAmpl();
00467     
00468   }
00469  
00470  
00471   if(_flag==5) {
00472 
00473     // D0 -> K0 K+ K- + CC
00474     // If it does not come from a B->DK, decay it as D0 or D0bar separatly
00475     // if p4_p is D0, moms1 is K0, moms2 is pi-, moms3 is pi+
00476     // if p4_p is D0bar, moms1 is K0, moms2 is pi+, moms3 is pi-
00477 
00478     if ( isBToDK ){
00479       // Gamma angle in rad.
00480       double gamma = EvtDecayTable::getDecayFunc( p->getParent() )
00481         -> getArg( 0 )  ;
00482       // Strong phase in rad.
00483       double delta =  EvtDecayTable::getDecayFunc( p->getParent() )
00484         -> getArg( 1 )  ;
00485       // Ratio between B->D0K and B->D0barK
00486       double A     =  EvtDecayTable::getDecayFunc( p->getParent() )
00487         -> getArg( 2 )  ;
00488 
00489       EvtComplex Factor( fabs( A ) * cos ( delta ) ,
00490                          fabs( A ) * sin ( delta ) ) ;
00491 
00492       if ( ( p->getParent()->getId() == BP ) ||
00493            ( p->getParent()->getId() == B0 ) ) {
00494         // the ratio D/Dbar
00495         Factor = Factor * EvtComplex( cos ( gamma ) , sin ( gamma ) ) ;
00496         if ( p->getId() == D0 ) {
00497           // the flavor of the particle has no meaning. But we need
00498           // it to know which daughter is pi+ or pi-
00499           // M( B+ or B0 ) = f(Dbar) + factor * f(D)
00500           // f(Dbar) = amplDtoK0PiPi(pD, K0, K+, K-)
00501           // f(D)    = amplDtoK0PiPi(pD, K0, K-, K+)
00502           // Then ...
00503           amp = amplDtoK0KK( p4_p , moms1 , moms3 , moms2 ) +
00504             Factor * amplDtoK0KK( p4_p , moms1 , moms2 , moms3 ) ;
00505         }
00506         else {
00507           amp = amplDtoK0KK( p4_p , moms1 , moms2 , moms3 ) +
00508             Factor * amplDtoK0KK( p4_p , moms1 , moms3 , moms2 ) ;
00509         }
00510       }
00511       else if ( ( p->getParent() -> getId() == BM ) ||
00512                 ( p->getParent() -> getId() == B0B ) ) {
00513         Factor = Factor * EvtComplex( cos ( gamma ) , - sin ( gamma ) ) ;
00514         // here M( B- or B0bar ) = f(D) + factor * f(Dbar) then ...
00515         if ( p->getId() == D0 ) {
00516           amp = amplDtoK0KK( p4_p , moms1 , moms2 , moms3 ) +
00517             Factor * amplDtoK0KK( p4_p , moms1 , moms3 , moms2 ) ;
00518         }
00519         else {
00520           amp = amplDtoK0KK( p4_p , moms1 , moms3 , moms2 ) +
00521             Factor * amplDtoK0KK( p4_p , moms1 , moms2 , moms3 ) ;
00522         }
00523       }
00524     }
00525     else {
00526       amp = amplDtoK0KK( p4_p , moms1 , moms2 , moms3 ) ;
00527     }
00528   }
00529 
00530 
00531 
00532 
00533   // Ds -> K K pi
00534   if(_flag==6) {
00535      EvtResonance2 DsKKpiRes1(p4_p, moms3, moms1, 1.0, 0.0, 0.0455, 0.8944, 1, true); // K*(892)
00536      EvtResonance2 DsKKpiRes2(p4_p, moms3, moms1, 1.48, 138., 0.290, 1.414, 0); // K*_0(1430)
00537      EvtFlatte     DsKKpiRes3(p4_p, moms1, moms2, 5.07, 156., 0.965, _kkpi_params); // f_0(980)
00538      EvtResonance2 DsKKpiRes4(p4_p, moms1, moms2, 1.15, -10., 0.00426, 1.019455, 1, true); // phi(1020)
00539      EvtResonance2 DsKKpiRes5(p4_p, moms1, moms2, 1.28, 53., 0.265, 1.350, 0); // f_0(1370)
00540      EvtResonance2 DsKKpiRes6(p4_p, moms1, moms2, 1.19, 87., 0.137, 1.724, 0); // f_0(1710)
00541      amp = DsKKpiRes1.resAmpl() + DsKKpiRes2.resAmpl() + DsKKpiRes3.resAmpl()
00542        + DsKKpiRes4.resAmpl() + DsKKpiRes5.resAmpl() + DsKKpiRes6.resAmpl();
00543 
00544   }
00545 
00546 
00547   vertex(amp);
00548 
00549   return ;
00550 }
00551 
00552 EvtComplex EvtDDalitz::amplDtoK0PiPi(EvtVector4R p4_p,  EvtVector4R moms1, 
00553                                      EvtVector4R moms2, EvtVector4R moms3) {
00554 
00555     //K*(892)-
00556     EvtResonance2 DK2piRes1(p4_p,moms1,moms2,1.418,-190.0,0.0508,0.89166,1);
00557     //K0*(1430)
00558     EvtResonance2 DK2piRes2(p4_p,moms1,moms2,1.818,-337.0,0.294 ,1.412  ,0);
00559     //K2*(1430)
00560     EvtResonance2 DK2piRes3(p4_p,moms1,moms2,0.909,  -5.0,0.0985,1.4256 ,2);
00561     //K*(1680)
00562     EvtResonance2 DK2piRes4(p4_p,moms1,moms2,5.091,-166.0,0.322 ,1.717  ,1);
00563     //DCS K*(892)
00564     EvtResonance2 DK2piRes5(p4_p,moms1,moms3,0.100, -19.0,0.0508,0.89166,1);
00565     
00566     //Rho
00567     EvtResonance2 DK2piRes6(p4_p,moms3,moms2,0.909,-340.0,0.1502,0.7693,1);
00568     //Omega
00569     EvtResonance2 DK2piRes7(p4_p,moms3,moms2,.0336,-226.0,0.00844,0.78257,1);
00570     //f0(980)
00571     EvtResonance2 DK2piRes8(p4_p,moms3,moms2,0.309,-152.0,0.05,0.977,0);
00572     //f0(1370)
00573     EvtResonance2 DK2piRes9(p4_p,moms3,moms2,1.636,-255.0,0.272,1.31,0);
00574     //f2(1270)
00575     EvtResonance2 DK2piRes10(p4_p,moms3,moms2,0.636,-32.0,0.1851,1.2754,2);
00576     
00577     return EvtComplex(1.0,0.0) + 
00578       DK2piRes1.resAmpl() + DK2piRes2.resAmpl() +
00579       DK2piRes3.resAmpl() + DK2piRes4.resAmpl() +
00580       DK2piRes5.resAmpl() + DK2piRes6.resAmpl() +
00581       DK2piRes7.resAmpl() + DK2piRes8.resAmpl() +
00582       DK2piRes9.resAmpl() + DK2piRes10.resAmpl();
00583 }
00584 
00585 //
00586 // BaBar decay amplitudes for D0->Ks K+ K-
00587 //
00588 // p4_p is D0
00589 // moms1 is K0s
00590 // moms2 is K+
00591 // moms3 is K-
00592 // Amplitudes and phases are taken from BaBar hep-ex/0207089
00593 // with convention : Non Resonant = Amp 1. / Phase 0. 
00594 
00595 EvtComplex EvtDDalitz::amplDtoK0KK(EvtVector4R p4_p,  EvtVector4R moms1, 
00596                                      EvtVector4R moms2, EvtVector4R moms3) {
00597 
00598     //phi
00599     EvtResonance DK0KKRes1( p4_p, moms2, moms3, 113.75, -40.0, 0.0043,
00600                             1.019456, 1 ) ;
00601     //a0(980)
00602     EvtResonance DK0KKRes2( p4_p, moms2, moms3, 152.25, 69.0, 0.1196 , 0.9847,
00603                             0 ) ;
00604     //f0(980)
00605     EvtResonance DK0KKRes3( p4_p, moms2, moms3, 30.5, -201.0, 0.05, 0.980 , 
00606                             0 ) ;
00607     //a0(980)+
00608     EvtResonance DK0KKRes4( p4_p, moms1, moms2, 85.75, -93.0, 0.1196 , 0.9847,
00609                             0 ) ;
00610     //a0(980)-
00611     EvtResonance DK0KKRes5( p4_p, moms3, moms1, 8. , -53.0 ,0.1196, 0.9847,
00612                             0 ) ;
00613 
00614 
00615     return EvtComplex(1.0,0.0) +
00616 
00617       DK0KKRes1.resAmpl() + DK0KKRes2.resAmpl() +
00618 
00619       DK0KKRes3.resAmpl() + DK0KKRes4.resAmpl() +
00620 
00621       DK0KKRes5.resAmpl() ;
00622 
00623 
00624 }

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