00001 /***************************************************************************** 00002 * Project: BaBar detector at the SLAC PEP-II B-factory 00003 * Package: EvtGenModels 00004 * File: $Id: EvtD0mixDalitz.hh,v 1.1 2009/05/08 01:59:56 pingrg Exp $ 00005 * 00006 * Description: 00007 * The D0mixDalitz model, with many resonances and mixing implemented. 00008 * 00009 * Modification history: 00010 * Jordi Garra Ticó 2008/07/03 File created 00011 *****************************************************************************/ 00012 00013 #ifndef __EVTD0MIXDALITZ_HH__ 00014 #define __EVTD0MIXDALITZ_HH__ 00015 00016 #include "EvtGenBase/EvtComplex.hh" 00017 #include "EvtGenBase/EvtPDL.hh" 00018 #include "EvtGenBase/EvtId.hh" 00019 #include "EvtGenBase/EvtDecayAmp.hh" 00020 #include "EvtGenBase/EvtDalitzPoint.hh" 00021 #include "EvtGenBase/EvtSpinType.hh" 00022 #include "EvtGenBase/EvtDalitzReso.hh" 00023 #include "EvtGenBase/EvtCyclic3.hh" 00024 00025 00026 class EvtD0mixDalitz : public EvtDecayAmp 00027 { 00028 private: 00029 int _d1; 00030 int _d2; 00031 int _d3; 00032 00033 // Mixing parameters. 00034 double _x; 00035 double _y; 00036 00037 // q/p CP violation in the mixing. 00038 EvtComplex _qp; 00039 00040 // Checker of the decay mode. 00041 bool _isKsPiPi; 00042 bool _isRBWmodel; 00043 00044 // Useful constants. 00045 static const EvtSpinType::spintype& _SCALAR; 00046 static const EvtSpinType::spintype& _VECTOR; 00047 static const EvtSpinType::spintype& _TENSOR; 00048 00049 static const EvtDalitzReso::CouplingType& _EtaPic; 00050 static const EvtDalitzReso::CouplingType& _PicPicKK; 00051 00052 static const EvtDalitzReso::NumType& _RBW; 00053 static const EvtDalitzReso::NumType& _GS; 00054 static const EvtDalitzReso::NumType& _KMAT; 00055 00056 static const EvtCyclic3::Pair& _AB; 00057 static const EvtCyclic3::Pair& _AC; 00058 static const EvtCyclic3::Pair& _BC; 00059 00060 // Values to be read or computed based on values in the evt.pdl file. 00061 // IDs of the relevant particles. 00062 EvtId _D0; 00063 EvtId _D0B; 00064 EvtId _KM; 00065 EvtId _KP; 00066 EvtId _K0; 00067 EvtId _K0B; 00068 EvtId _KL; 00069 EvtId _KS; 00070 EvtId _PIM; 00071 EvtId _PIP; 00072 00073 // Masses of the relevant particles. 00074 double _mD0; 00075 double _mKs; 00076 double _mPi; 00077 double _mK; 00078 00079 // Life time and decay rate. 00080 double _ctau; 00081 double _gamma; 00082 00083 // Some useful integrals over the Dalitz plot. 00084 EvtComplex _iChi; 00085 EvtComplex _iChi2; 00086 00087 void readPDGValues(); 00088 EvtComplex dalitzKsPiPi( const EvtDalitzPoint& point ); 00089 EvtComplex dalitzKsKK ( const EvtDalitzPoint& point ); 00090 00091 // Time evolution functions for hamiltonian eigenstates. 00092 // Negative exponential part removed. 00093 EvtComplex h1( const double& ct ) const; 00094 EvtComplex h2( const double& ct ) const; 00095 00096 void reportInvalidAndExit() const 00097 { 00098 report( ERROR, "EvtD0mixDalitz" ) << "EvtD0mixDalitz: Invalid mode." << std::endl; 00099 exit( 1 ); 00100 } 00101 public: 00102 EvtD0mixDalitz() : _d1( 0 ), _d2( 0 ), _d3( 0 ), 00103 _x( 0. ), _y( 0. ), _qp( 1. ), 00104 _isKsPiPi( false ), _isRBWmodel( true ) 00105 {} 00106 00107 virtual ~EvtD0mixDalitz() {}; 00108 00109 // One-line inline functions. 00110 void getName(std::string& model_name) { model_name = "D0MIXDALITZ"; } 00111 EvtDecayBase* clone() { return new EvtD0mixDalitz; } 00112 void initProbMax() { setProbMax( 5200. ); } 00113 00114 void init(); 00115 void decay( EvtParticle* p ); 00116 }; 00117 00118 #endif 00119