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) 2002 Caltech
11 // Module: EvtKstarstargamma.cc
13 // Description: Routine for the decau B->K**gamma
15 // Modification history:
17 // Ryd November 15, 2002 Module created
19 //------------------------------------------------------------------------
21 #include "EvtGenBase/EvtPatches.hh"
23 #include "EvtGenBase/EvtParticle.hh"
24 #include "EvtGenBase/EvtScalarParticle.hh"
25 #include "EvtGenBase/EvtVectorParticle.hh"
26 #include "EvtGenBase/EvtPhotonParticle.hh"
27 #include "EvtGenBase/EvtTensorParticle.hh"
28 #include "EvtGenBase/EvtGenKine.hh"
29 #include "EvtGenBase/EvtPDL.hh"
30 #include "EvtGenBase/EvtVector4C.hh"
31 #include "EvtGenBase/EvtVector4R.hh"
32 #include "EvtGenBase/EvtReport.hh"
33 #include "EvtGenModels/EvtKstarstargamma.hh"
35 #include "EvtGenBase/EvtEvalHelAmp.hh"
36 #include "EvtGenBase/EvtPropBreitWignerRel.hh"
37 #include "EvtGenBase/EvtTwoBodyVertex.hh"
39 EvtKstarstargamma::~EvtKstarstargamma() {}
41 std::string EvtKstarstargamma::getName(){
43 return "KSTARSTARGAMMA";
48 EvtDecayBase* EvtKstarstargamma::clone(){
50 return new EvtKstarstargamma;
54 void EvtKstarstargamma::init(){
56 // check that there are 0 arguments
59 // check that there are 3 daughters
62 // check the parent and daughter spins
63 checkSpinParent(EvtSpinType::SCALAR);
64 checkSpinDaughter(0,EvtSpinType::SCALAR);
65 checkSpinDaughter(1,EvtSpinType::SCALAR);
66 checkSpinDaughter(2,EvtSpinType::PHOTON);
69 void EvtKstarstargamma::initProbMax() {
75 void EvtKstarstargamma::decay( EvtParticle *p){
79 The EvtEvalHelAmp is completely broken...
81 p->initializePhaseSpace(getNDaug(),getDaugs());
83 EvtParticle* kaon = p->getDaug(0);
84 EvtParticle* pion = p->getDaug(1);
85 EvtParticle* photon = p->getDaug(2);
88 EvtComplexPtrPtr Hd1=new EvtComplexPtr[5];
89 Hd1[0]=new EvtComplex[2];
90 Hd1[1]=new EvtComplex[2];
91 Hd1[2]=new EvtComplex[2];
92 Hd1[3]=new EvtComplex[2];
93 Hd1[4]=new EvtComplex[2];
106 EvtEvalHelAmp d1(EvtSpinType::SCALAR,EvtSpinType::TENSOR,
107 EvtSpinType::PHOTON,Hd1);
109 EvtScalarParticle theB;
111 theB.init(p->getId(),p->getP4Restframe());
113 EvtVector4R theKstarP4=kaon->getP4()+pion->getP4();
115 EvtTensorParticle theKstar;
116 theKstar.init(EvtPDL::getId(std::string("K_2*0")),theKstarP4);
118 EvtPhotonParticle thePhoton;
119 thePhoton.init(EvtPDL::getId(std::string("K_2*0")),photon->getP4());
121 theKstar.addDaug(&theB);
122 thePhoton.addDaug(&theB);
126 d1.evalAmp(&theB,amp1);
128 EvtComplexPtrPtr Hd2=new EvtComplexPtr[1];
129 Hd2[0]=new EvtComplex[1];
134 EvtEvalHelAmp d2(EvtSpinType::TENSOR,EvtSpinType::SCALAR,
135 EvtSpinType::SCALAR,Hd2);
138 EvtVector4R theKstarP4boost(theKstarP4.get(0),-theKstarP4.get(1),-theKstarP4.get(2),-theKstarP4.get(3));
140 EvtScalarParticle theKaon;
141 theKaon.init(EvtPDL::getId(std::string("K+")),boostTo(kaon->getP4(),theKstarP4boost));
143 EvtScalarParticle thePion;
144 thePion.init(EvtPDL::getId(std::string("pi+")),boostTo(pion->getP4(),theKstarP4boost));
146 theKaon.addDaug(&theKstar);
147 thePion.addDaug(&theKstar);
149 // Calculate the propagator
151 double m = theKstarP4.mass();
152 EvtTwoBodyVertex v(0.5,0.14,1.4,2);
153 EvtTwoBodyKine v1(0.5,0.14,m);
154 EvtPropBreitWignerRel prop(1.4,0.2);
156 // Mass-dependent width correction and amplitude calculation
158 double width = prop.g0() * v.widthFactor(v1);
160 EvtComplex bwamp = prop.evaluate(m);
165 d2.evalAmp(&theKstar,amp2);
167 vertex(0,bwamp*(amp1._amp[0]*amp2._amp[0]+
168 amp1._amp[1]*amp2._amp[1]+
169 amp1._amp[2]*amp2._amp[2]+
170 amp1._amp[3]*amp2._amp[3]+
171 amp1._amp[4]*amp2._amp[4]));
173 vertex(1,bwamp*(amp1._amp[5]*amp2._amp[0]+
174 amp1._amp[6]*amp2._amp[1]+
175 amp1._amp[7]*amp2._amp[2]+
176 amp1._amp[8]*amp2._amp[3]+
177 amp1._amp[9]*amp2._amp[4]));