evtgen is hosted by Hepforge, IPPP Durham
EvtGen  2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
EvtKstarstargamma.cpp
Go to the documentation of this file.
1 
2 /***********************************************************************
3 * Copyright 1998-2020 CERN for the benefit of the EvtGen authors *
4 * *
5 * This file is part of EvtGen. *
6 * *
7 * EvtGen is free software: you can redistribute it and/or modify *
8 * it under the terms of the GNU General Public License as published by *
9 * the Free Software Foundation, either version 3 of the License, or *
10 * (at your option) any later version. *
11 * *
12 * EvtGen is distributed in the hope that it will be useful, *
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
15 * GNU General Public License for more details. *
16 * *
17 * You should have received a copy of the GNU General Public License *
18 * along with EvtGen. If not, see <https://www.gnu.org/licenses/>. *
19 ***********************************************************************/
20 
22 
24 #include "EvtGenBase/EvtGenKine.hh"
25 #include "EvtGenBase/EvtPDL.hh"
27 #include "EvtGenBase/EvtPatches.hh"
30 #include "EvtGenBase/EvtReport.hh"
37 
38 #include <stdlib.h>
39 #include <string>
40 
42 {
43  return "KSTARSTARGAMMA";
44 }
45 
47 {
48  return new EvtKstarstargamma;
49 }
50 
52 {
53  // check that there are 0 arguments
54  checkNArg( 0 );
55 
56  // check that there are 3 daughters
57  checkNDaug( 3 );
58 
59  // check the parent and daughter spins
64 }
65 
67 {
68  //setProbMax(1.0);
69 }
70 
72 {
73  /*
74 
75  The EvtEvalHelAmp is completely broken...
76 
77  p->initializePhaseSpace(getNDaug(),getDaugs());
78 
79  EvtParticle* kaon = p->getDaug(0);
80  EvtParticle* pion = p->getDaug(1);
81  EvtParticle* photon = p->getDaug(2);
82 
83 
84  EvtComplexPtrPtr Hd1=new EvtComplexPtr[5];
85  Hd1[0]=new EvtComplex[2];
86  Hd1[1]=new EvtComplex[2];
87  Hd1[2]=new EvtComplex[2];
88  Hd1[3]=new EvtComplex[2];
89  Hd1[4]=new EvtComplex[2];
90 
91  Hd1[0][0]=0.0;
92  Hd1[0][1]=0.0;
93  Hd1[1][0]=0.0;
94  Hd1[1][1]=0.0;
95  Hd1[2][0]=0.0;
96  Hd1[2][1]=0.0;
97  Hd1[3][0]=0.0;
98  Hd1[3][1]=1.0;
99  Hd1[4][0]=0.0;
100  Hd1[4][1]=0.0;
101 
102  EvtEvalHelAmp d1(EvtSpinType::SCALAR,EvtSpinType::TENSOR,
103  EvtSpinType::PHOTON,Hd1);
104 
105  EvtScalarParticle theB;
106 
107  theB.init(p->getId(),p->getP4Restframe());
108 
109  EvtVector4R theKstarP4=kaon->getP4()+pion->getP4();
110 
111  EvtTensorParticle theKstar;
112  theKstar.init(EvtPDL::getId(std::string("K_2*0")),theKstarP4);
113 
114  EvtPhotonParticle thePhoton;
115  thePhoton.init(EvtPDL::getId(std::string("K_2*0")),photon->getP4());
116 
117  theKstar.addDaug(&theB);
118  thePhoton.addDaug(&theB);
119 
120  EvtAmp amp1;
121 
122  d1.evalAmp(&theB,amp1);
123 
124  EvtComplexPtrPtr Hd2=new EvtComplexPtr[1];
125  Hd2[0]=new EvtComplex[1];
126 
127  Hd2[0][0]=1.0;
128 
129 
130  EvtEvalHelAmp d2(EvtSpinType::TENSOR,EvtSpinType::SCALAR,
131  EvtSpinType::SCALAR,Hd2);
132 
133 
134  EvtVector4R theKstarP4boost(theKstarP4.get(0),-theKstarP4.get(1),-theKstarP4.get(2),-theKstarP4.get(3));
135 
136  EvtScalarParticle theKaon;
137  theKaon.init(EvtPDL::getId(std::string("K+")),boostTo(kaon->getP4(),theKstarP4boost));
138 
139  EvtScalarParticle thePion;
140  thePion.init(EvtPDL::getId(std::string("pi+")),boostTo(pion->getP4(),theKstarP4boost));
141 
142  theKaon.addDaug(&theKstar);
143  thePion.addDaug(&theKstar);
144 
145  // Calculate the propagator
146 
147  double m = theKstarP4.mass();
148  EvtTwoBodyVertex v(0.5,0.14,1.4,2);
149  EvtTwoBodyKine v1(0.5,0.14,m);
150  EvtPropBreitWignerRel prop(1.4,0.2);
151 
152  // Mass-dependent width correction and amplitude calculation
153 
154  double width = prop.g0() * v.widthFactor(v1);
155  prop.set_g0(width);
156  EvtComplex bwamp = prop.evaluate(m);
157 
158 
159  EvtAmp amp2;
160 
161  d2.evalAmp(&theKstar,amp2);
162 
163  vertex(0,bwamp*(amp1._amp[0]*amp2._amp[0]+
164  amp1._amp[1]*amp2._amp[1]+
165  amp1._amp[2]*amp2._amp[2]+
166  amp1._amp[3]*amp2._amp[3]+
167  amp1._amp[4]*amp2._amp[4]));
168 
169  vertex(1,bwamp*(amp1._amp[5]*amp2._amp[0]+
170  amp1._amp[6]*amp2._amp[1]+
171  amp1._amp[7]*amp2._amp[2]+
172  amp1._amp[8]*amp2._amp[3]+
173  amp1._amp[9]*amp2._amp[4]));
174 
175 */
176 
177  return;
178 }
void initProbMax() override
EvtDecayBase * clone() override
void checkNDaug(int d1, int d2=-1)
void checkSpinParent(EvtSpinType::spintype sp)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
std::string getName() override
void init() override
void decay(EvtParticle *p) override