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: EvtTVSPwave.cc
13 // Description: Routine to decay tensor-> vector scalar
14 // by specifying the partial waves
16 // Modification history:
18 // DJL/RYD August 11, 1997 Module created
20 //------------------------------------------------------------------------
22 #include "EvtGenBase/EvtPatches.hh"
24 #include "EvtGenBase/EvtParticle.hh"
25 #include "EvtGenBase/EvtGenKine.hh"
26 #include "EvtGenBase/EvtPDL.hh"
27 #include "EvtGenBase/EvtVector4C.hh"
28 #include "EvtGenBase/EvtTensor4C.hh"
29 #include "EvtGenBase/EvtReport.hh"
30 #include "EvtGenModels/EvtTVSPwave.hh"
33 EvtTVSPwave::~EvtTVSPwave() {}
35 std::string EvtTVSPwave::getName(){
42 EvtDecayBase* EvtTVSPwave::clone(){
44 return new EvtTVSPwave;
48 void EvtTVSPwave::init(){
50 // check that there are 6 arguments
54 checkSpinParent(EvtSpinType::TENSOR);
56 checkSpinDaughter(0,EvtSpinType::VECTOR);
57 checkSpinDaughter(1,EvtSpinType::SCALAR);
60 void EvtTVSPwave::initProbMax(){
67 void EvtTVSPwave::decay( EvtParticle *p ){
69 EvtComplex ap(getArg(0)*cos(getArg(1)),getArg(0)*sin(getArg(1)));
70 EvtComplex ad(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3)));
71 EvtComplex af(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)));
73 if (ap!=EvtComplex(0.0,0.0)||af!=EvtComplex(0.0,0.0)) {
74 report(ERROR,"EvtGen") << "dfslkh8945wqh:In EvtTensorToVectorScalar.c\n";
75 report(ERROR,"EvtGen") << "P or F wave not yet implemented!! (ryd) \n";
78 p->initializePhaseSpace(getNDaug(),getDaugs());
82 EvtVector4R momv = v->getP4();
83 double massv = v->mass();
87 double m_parent = p->mass();
91 p_parent.set(m_parent,0.0,0.0,0.0);
93 EvtVector4C pep0,pep1,pep2,pep3,pep4;
96 EvtVector4C epsdual0,epsdual1,epsdual2;
98 double norm=massv/(m_parent*momv.get(0)*momv.d3mag()*momv.d3mag());
99 pdual=dual(directProd(norm*p_parent,momv));
101 epsdual0=pdual.cont1(v->epsParent(0).conj());
102 epsdual1=pdual.cont1(v->epsParent(1).conj());
103 epsdual2=pdual.cont1(v->epsParent(2).conj());
105 pep0=p->epsTensor(0).cont1(momv);
106 pep1=p->epsTensor(1).cont1(momv);
107 pep2=p->epsTensor(2).cont1(momv);
108 pep3=p->epsTensor(3).cont1(momv);
109 pep4=p->epsTensor(4).cont1(momv);
111 vertex(0,0,pep0*epsdual0);
112 vertex(1,0,pep1*epsdual0);
113 vertex(2,0,pep2*epsdual0);
114 vertex(3,0,pep3*epsdual0);
115 vertex(4,0,pep4*epsdual0);
117 vertex(0,1,pep0*epsdual1);
118 vertex(1,1,pep1*epsdual1);
119 vertex(2,1,pep2*epsdual1);
120 vertex(3,1,pep3*epsdual1);
121 vertex(4,1,pep4*epsdual1);
123 vertex(0,2,pep0*epsdual2);
124 vertex(1,2,pep1*epsdual2);
125 vertex(2,2,pep2*epsdual2);
126 vertex(3,2,pep3*epsdual2);
127 vertex(4,2,pep4*epsdual2);