1 //--------------------------------------------------------------------------
4 // This software is part of the EvtGen package developed jointly
5 // for the BaBar and CLEO collaborations. If you use all or part
6 // of it, please give an appropriate acknowledgement.
8 // Copyright Information: See EvtGen/COPYRIGHT
9 // Copyright (C) 1998 Caltech, UCSB
11 // Module: EvtKstarnunu.cc
13 // Description: B ==> K* nu nubar
15 // Modification history:
17 // RYD September 29, 1997 Module created
19 //------------------------------------------------------------------------
22 // Module: EvtKstarnunu
29 // Created: Sept. 29 1997
32 #include "EvtGenBase/EvtPatches.hh"
36 #include "EvtGenBase/EvtParticle.hh"
37 #include "EvtGenBase/EvtPDL.hh"
38 #include "EvtGenBase/EvtGenKine.hh"
39 #include "EvtGenBase/EvtDiracSpinor.hh"
40 #include "EvtGenBase/EvtTensor4C.hh"
41 #include "EvtGenModels/EvtKstarnunu.hh"
42 #include "EvtGenBase/EvtReport.hh"
43 #include "EvtGenBase/EvtVector4C.hh"
45 EvtKstarnunu::~EvtKstarnunu() {}
47 std::string EvtKstarnunu::getName(){
54 EvtDecayBase* EvtKstarnunu::clone(){
56 return new EvtKstarnunu;
60 void EvtKstarnunu::init(){
62 // check that there are 0 arguments
66 //We expect the parent to be a scalar
67 //and the daughters to be K neutrino netrino
69 checkSpinParent(EvtSpinType::SCALAR);
71 checkSpinDaughter(0,EvtSpinType::VECTOR);
72 checkSpinDaughter(1,EvtSpinType::NEUTRINO);
73 checkSpinDaughter(2,EvtSpinType::NEUTRINO);
78 void EvtKstarnunu::decay(EvtParticle *p){
80 static EvtId NUE=EvtPDL::getId("nu_e");
81 static EvtId NUM=EvtPDL::getId("nu_mu");
82 static EvtId NUT=EvtPDL::getId("nu_tau");
83 static EvtId NUEB=EvtPDL::getId("anti-nu_e");
84 static EvtId NUMB=EvtPDL::getId("anti-nu_mu");
85 static EvtId NUTB=EvtPDL::getId("anti-nu_tau");
87 p->initializePhaseSpace(getNDaug(),getDaugs());
89 double m_b = p->mass();
91 EvtParticle *meson, *neutrino1, *neutrino2;
92 meson = p->getDaug(0);
93 neutrino1 = p->getDaug(1);
94 neutrino2 = p->getDaug(2);
95 EvtVector4R momnu1 = neutrino1->getP4();
96 EvtVector4R momnu2 = neutrino2->getP4();
97 EvtVector4R momkstar = meson->getP4();
99 double v0_0, a0_0, a1_0, a2_0;
100 double m2v0, m2a0, a1_b, a2_b;
110 EvtVector4R q = momnu1+momnu2;
111 double q2 = q.mass2();
114 v0 = v0_0/(1-q2/m2v0);
115 a1 = a1_0*(1+a1_b*q2);
116 a2 = a2_0*(1+a2_b*q2);
118 EvtVector4R p4b; p4b.set(m_b,0.,0.,0.); // Do calcs in mother rest frame
120 double m_k = meson->mass();
122 EvtTensor4C tds=(-2*v0/(m_b+m_k))*dual(directProd(p4b,momkstar))
123 - EvtComplex(0.0,1.0)*
124 ( (m_b+m_k)*a1*EvtTensor4C::g()
125 - (a2/(m_b+m_k))*directProd(p4b-momkstar,p4b+momkstar));
129 if (getDaug(1)==NUE||getDaug(1)==NUM||getDaug(1)==NUT) {
130 l=EvtLeptonVACurrent(neutrino1->spParentNeutrino(),
131 neutrino2->spParentNeutrino());
133 if (getDaug(1)==NUEB||getDaug(1)==NUMB||getDaug(1)==NUTB) {
134 l=EvtLeptonVACurrent(neutrino2->spParentNeutrino(),
135 neutrino1->spParentNeutrino());
138 EvtVector4C et0,et1,et2;
139 et0 = tds.cont1( meson->epsParent(0).conj() );
140 et1 = tds.cont1( meson->epsParent(1).conj() );
141 et2 = tds.cont1( meson->epsParent(2).conj() );