EvtGen 2.2.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
Loading...
Searching...
No Matches
EvtBTo4piCP.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
26#include "EvtGenBase/EvtId.hh"
27#include "EvtGenBase/EvtPDL.hh"
31
32#include <stdlib.h>
33#include <string>
34
35EvtComplex EvtAmpA2( const EvtVector4R& p4pi1, const EvtVector4R& p4pi2,
36 const EvtVector4R& p4pi3, const EvtVector4R& p4pi4 )
37{
38 //added by Lange Jan4,2000
39 static const EvtId A2M = EvtPDL::getId( "a_2-" );
40 static const EvtId RHO0 = EvtPDL::getId( "rho0" );
41
42 EvtVector4R p4a2, p4rho, p4b;
43
44 p4rho = p4pi1 + p4pi2;
45
46 p4a2 = p4rho + p4pi3;
47
48 p4b = p4a2 + p4pi4;
49
50 EvtVector4R p4b_a2, p4rho_a2, p4pi1_a2, p4a2_a2;
51
52 p4b_a2 = boostTo( p4b, p4a2 );
53 p4rho_a2 = boostTo( p4rho, p4a2 );
54 p4pi1_a2 = boostTo( p4pi1, p4a2 );
55 p4a2_a2 = boostTo( p4a2, p4a2 );
56
57 EvtVector4R p4pi1_rho;
58
59 p4pi1_rho = boostTo( p4pi1_a2, p4rho_a2 );
60
61 EvtVector4R vb, vrho, vpi, t;
62
63 vb = p4b_a2 / p4b_a2.d3mag();
64 vrho = p4rho_a2 / p4rho_a2.d3mag();
65 vpi = p4pi1_rho / p4pi1_rho.d3mag();
66
67 t.set( 1.0, 0.0, 0.0, 0.0 );
68
69 // EvtComplex amp_a1,amp_a2;
70 EvtComplex amp_a2;
71
72 // double bwm_a1=EvtPDL::getMeanMass(A1M);
73 // double gamma_a1=EvtPDL::getWidth(A1M);
74 double bwm_a2 = EvtPDL::getMeanMass( A2M );
75 double gamma_a2 = EvtPDL::getWidth( A2M );
76 double bwm_rho = EvtPDL::getMeanMass( RHO0 );
77 double gamma_rho = EvtPDL::getWidth( RHO0 );
78
79 amp_a2 =
80 ( sqrt( gamma_a2 / EvtConst::twoPi ) /
81 ( ( p4a2 ).mass() - bwm_a2 - EvtComplex( 0.0, 0.5 * gamma_a2 ) ) ) *
82 ( sqrt( gamma_rho / EvtConst::twoPi ) /
83 ( ( p4rho ).mass() - bwm_rho - EvtComplex( 0.0, 0.5 * gamma_rho ) ) );
84
85 return amp_a2 *
86 ( vb.get( 1 ) * vrho.get( 1 ) + vb.get( 2 ) * vrho.get( 2 ) +
87 vb.get( 3 ) * vrho.get( 3 ) ) *
88 ( vpi.get( 1 ) *
89 ( vb.get( 2 ) * vrho.get( 3 ) - vb.get( 3 ) * vrho.get( 2 ) ) +
90 vpi.get( 2 ) *
91 ( vb.get( 3 ) * vrho.get( 1 ) - vb.get( 1 ) * vrho.get( 3 ) ) +
92 vpi.get( 3 ) *
93 ( vb.get( 1 ) * vrho.get( 2 ) - vb.get( 2 ) * vrho.get( 1 ) ) );
94}
95
96EvtComplex EvtAmpA1( const EvtVector4R& p4pi1, const EvtVector4R& p4pi2,
97 const EvtVector4R& p4pi3, const EvtVector4R& p4pi4 )
98{
99 //added by Lange Jan4,2000
100 static const EvtId A1M = EvtPDL::getId( "a_1-" );
101 static const EvtId RHO0 = EvtPDL::getId( "rho0" );
102
103 EvtVector4R p4a1, p4rho, p4b;
104
105 p4rho = p4pi1 + p4pi2;
106
107 p4a1 = p4rho + p4pi3;
108
109 p4b = p4a1 + p4pi4;
110
111 EvtVector4R p4b_a1, p4rho_a1, p4pi1_a1, p4a1_a1;
112
113 p4b_a1 = boostTo( p4b, p4a1 );
114 p4rho_a1 = boostTo( p4rho, p4a1 );
115 p4pi1_a1 = boostTo( p4pi1, p4a1 );
116 p4a1_a1 = boostTo( p4a1, p4a1 );
117
118 EvtVector4R p4pi1_rho;
119
120 p4pi1_rho = boostTo( p4pi1_a1, p4rho_a1 );
121
122 EvtVector4R vb, vrho, vpi, t;
123
124 vb = p4b_a1 / p4b_a1.d3mag();
125 vrho = p4rho_a1 / p4rho_a1.d3mag();
126 vpi = p4pi1_rho / p4pi1_rho.d3mag();
127
128 t.set( 1.0, 0.0, 0.0, 0.0 );
129
130 EvtComplex amp_a1;
131
132 double bwm_a1 = EvtPDL::getMeanMass( A1M );
133 double gamma_a1 = EvtPDL::getWidth( A1M );
134 // double bwm_a2=EvtPDL::getMeanMass(A2M);
135 // double gamma_a2=EvtPDL::getWidth(A2M);
136 double bwm_rho = EvtPDL::getMeanMass( RHO0 );
137 double gamma_rho = EvtPDL::getWidth( RHO0 );
138
139 amp_a1 =
140 ( sqrt( gamma_a1 / EvtConst::twoPi ) /
141 ( ( p4a1 ).mass() - bwm_a1 - EvtComplex( 0.0, 0.5 * gamma_a1 ) ) ) *
142 ( sqrt( gamma_rho / EvtConst::twoPi ) /
143 ( ( p4rho ).mass() - bwm_rho - EvtComplex( 0.0, 0.5 * gamma_rho ) ) );
144
145 return amp_a1 * ( vb.get( 1 ) * vpi.get( 1 ) + vb.get( 2 ) * vpi.get( 2 ) +
146 vb.get( 3 ) * vpi.get( 3 ) );
147}
148
149std::string EvtBTo4piCP::getName() const
150{
151 return "BTO4PI_CP";
152}
153
155{
156 return new EvtBTo4piCP;
157}
158
160{
161 setProbMax( 50.0 );
162}
163
165{
166 // check that there are 18 arguments
167 checkNArg( 18 );
168 checkNDaug( 4 );
169
171
176}
177
179{
180 //added by Lange Jan4,2000
181 static const EvtId B0 = EvtPDL::getId( "B0" );
182 static const EvtId B0B = EvtPDL::getId( "anti-B0" );
183
184 double t;
185 EvtId other_b;
186
187 EvtCPUtil::getInstance()->OtherB( p, t, other_b, 0.5 );
188
190 EvtVector4R mom1 = p->getDaug( 0 )->getP4();
191 EvtVector4R mom2 = p->getDaug( 1 )->getP4();
192 EvtVector4R mom3 = p->getDaug( 2 )->getP4();
193 EvtVector4R mom4 = p->getDaug( 3 )->getP4();
194
195 // double alpha=getArg(0);
196 //double dm=getArg(1);
197
198 EvtComplex amp;
199
200 EvtComplex A, Abar;
201
202 EvtComplex A_a1p, Abar_a1p, A_a2p, Abar_a2p;
203 EvtComplex A_a1m, Abar_a1m, A_a2m, Abar_a2m;
204
205 A_a1p = EvtComplex( getArg( 2 ) * cos( getArg( 3 ) ),
206 getArg( 2 ) * sin( getArg( 3 ) ) );
207 Abar_a1p = EvtComplex( getArg( 4 ) * cos( getArg( 5 ) ),
208 getArg( 4 ) * sin( getArg( 5 ) ) );
209
210 A_a2p = EvtComplex( getArg( 6 ) * cos( getArg( 7 ) ),
211 getArg( 6 ) * sin( getArg( 7 ) ) );
212 Abar_a2p = EvtComplex( getArg( 8 ) * cos( getArg( 9 ) ),
213 getArg( 8 ) * sin( getArg( 9 ) ) );
214
215 A_a1m = EvtComplex( getArg( 10 ) * cos( getArg( 11 ) ),
216 getArg( 10 ) * sin( getArg( 11 ) ) );
217 Abar_a1m = EvtComplex( getArg( 12 ) * cos( getArg( 13 ) ),
218 getArg( 12 ) * sin( getArg( 13 ) ) );
219
220 A_a2m = EvtComplex( getArg( 14 ) * cos( getArg( 15 ) ),
221 getArg( 14 ) * sin( getArg( 15 ) ) );
222 Abar_a2m = EvtComplex( getArg( 16 ) * cos( getArg( 17 ) ),
223 getArg( 16 ) * sin( getArg( 17 ) ) );
224
225 EvtComplex a2p_amp = EvtAmpA2( mom1, mom2, mom3, mom4 ) +
226 EvtAmpA2( mom1, mom4, mom3, mom2 ) +
227 EvtAmpA2( mom3, mom2, mom1, mom4 ) +
228 EvtAmpA2( mom3, mom4, mom1, mom2 );
229
230 EvtComplex a2m_amp = EvtAmpA2( mom2, mom3, mom4, mom1 ) +
231 EvtAmpA2( mom2, mom1, mom4, mom3 ) +
232 EvtAmpA2( mom4, mom3, mom2, mom1 ) +
233 EvtAmpA2( mom4, mom1, mom2, mom3 );
234
235 EvtComplex a1p_amp = EvtAmpA1( mom1, mom2, mom3, mom4 ) +
236 EvtAmpA1( mom1, mom4, mom3, mom2 ) +
237 EvtAmpA1( mom3, mom2, mom1, mom4 ) +
238 EvtAmpA1( mom3, mom4, mom1, mom2 );
239
240 EvtComplex a1m_amp = EvtAmpA1( mom2, mom3, mom4, mom1 ) +
241 EvtAmpA1( mom2, mom1, mom4, mom3 ) +
242 EvtAmpA1( mom4, mom3, mom2, mom1 ) +
243 EvtAmpA1( mom4, mom1, mom2, mom3 );
244
245 A = A_a2p * a2p_amp + A_a1p * a1p_amp + A_a2m * a2m_amp + A_a1m * a1m_amp;
246 Abar = Abar_a2p * a2p_amp + Abar_a1p * a1p_amp + Abar_a2m * a2m_amp +
247 Abar_a1m * a1m_amp;
248
249 if ( other_b == B0B ) {
250 amp = A * cos( getArg( 1 ) * t / ( 2 * EvtConst::c ) ) +
251 EvtComplex( cos( -2.0 * getArg( 0 ) ), sin( -2.0 * getArg( 0 ) ) ) *
252 getArg( 2 ) * EvtComplex( 0.0, 1.0 ) * Abar *
253 sin( getArg( 1 ) * t / ( 2 * EvtConst::c ) );
254 }
255 if ( other_b == B0 ) {
256 amp = A * EvtComplex( cos( 2.0 * getArg( 0 ) ), sin( 2.0 * getArg( 0 ) ) ) *
257 EvtComplex( 0.0, 1.0 ) *
258 sin( getArg( 1 ) * t / ( 2 * EvtConst::c ) ) +
259 getArg( 2 ) * Abar * cos( getArg( 1 ) * t / ( 2 * EvtConst::c ) );
260 }
261
262 vertex( amp );
263
264 return;
265}
EvtComplex EvtAmpA2(const EvtVector4R &p4pi1, const EvtVector4R &p4pi2, const EvtVector4R &p4pi3, const EvtVector4R &p4pi4)
EvtComplex EvtAmpA1(const EvtVector4R &p4pi1, const EvtVector4R &p4pi2, const EvtVector4R &p4pi3, const EvtVector4R &p4pi4)
EvtRaritaSchwinger boostTo(const EvtRaritaSchwinger &rs, const EvtVector4R p4)
void init() override
void decay(EvtParticle *p) override
void initProbMax() override
EvtBTo4piCP * clone() const override
std::string getName() const override
static EvtCPUtil * getInstance()
Definition EvtCPUtil.cpp:42
void OtherB(EvtParticle *p, double &t, EvtId &otherb)
static const double c
Definition EvtConst.hh:30
static const double twoPi
Definition EvtConst.hh:27
void vertex(const EvtComplex &amp)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
int getNDaug() const
void checkSpinParent(EvtSpinType::spintype sp)
double getArg(unsigned int j)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
const EvtId * getDaugs() const
Definition EvtId.hh:27
static double getWidth(EvtId i)
Definition EvtPDL.cpp:346
static double getMeanMass(EvtId i)
Definition EvtPDL.cpp:306
static EvtId getId(const std::string &name)
Definition EvtPDL.cpp:283
double initializePhaseSpace(size_t numdaughter, const EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
double get(int i) const
double d3mag() const
void set(int i, double d)