BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtBTo4piCP.cc
Go to the documentation of this file.
1//--------------------------------------------------------------------------
2//
3// Environment:
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.
7//
8// Copyright Information: See EvtGen/COPYRIGHT
9// Copyright (C) 1998 Caltech, UCSB
10//
11// Module: EvtBTo4piCP.cc
12//
13// Description: Routine to decay B->pi+ pi- pi+ pi-.
14//
15// Modification history:
16//
17// RYD March 2, 1997 Module created
18//
19//------------------------------------------------------------------------
20//
21#include "EvtBTo4piCP.hh"
30#include <stdlib.h>
31#include <string>
32
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 EvtId A2M = EvtPDL::getId( "a_2-" );
40 static 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 = ( sqrt( gamma_a2 / EvtConst::twoPi ) /
80 ( ( p4a2 ).mass() - bwm_a2 - EvtComplex( 0.0, 0.5 * gamma_a2 ) ) ) *
81 ( sqrt( gamma_rho / EvtConst::twoPi ) /
82 ( ( p4rho ).mass() - bwm_rho - EvtComplex( 0.0, 0.5 * gamma_rho ) ) );
83
84 return amp_a2 *
85 ( vb.get( 1 ) * vrho.get( 1 ) + vb.get( 2 ) * vrho.get( 2 ) +
86 vb.get( 3 ) * vrho.get( 3 ) ) *
87 ( vpi.get( 1 ) * ( vb.get( 2 ) * vrho.get( 3 ) - vb.get( 3 ) * vrho.get( 2 ) ) +
88 vpi.get( 2 ) * ( vb.get( 3 ) * vrho.get( 1 ) - vb.get( 1 ) * vrho.get( 3 ) ) +
89 vpi.get( 3 ) * ( vb.get( 1 ) * vrho.get( 2 ) - vb.get( 2 ) * vrho.get( 1 ) ) );
90}
91
92EvtComplex EvtAmpA1( const EvtVector4R& p4pi1, const EvtVector4R& p4pi2,
93 const EvtVector4R& p4pi3, const EvtVector4R& p4pi4 ) {
94
95 // added by Lange Jan4,2000
96 static EvtId A1M = EvtPDL::getId( "a_1-" );
97 static EvtId RHO0 = EvtPDL::getId( "rho0" );
98
99 EvtVector4R p4a1, p4rho, p4b;
100
101 p4rho = p4pi1 + p4pi2;
102
103 p4a1 = p4rho + p4pi3;
104
105 p4b = p4a1 + p4pi4;
106
107 EvtVector4R p4b_a1, p4rho_a1, p4pi1_a1, p4a1_a1;
108
109 p4b_a1 = boostTo( p4b, p4a1 );
110 p4rho_a1 = boostTo( p4rho, p4a1 );
111 p4pi1_a1 = boostTo( p4pi1, p4a1 );
112 p4a1_a1 = boostTo( p4a1, p4a1 );
113
114 EvtVector4R p4pi1_rho;
115
116 p4pi1_rho = boostTo( p4pi1_a1, p4rho_a1 );
117
118 EvtVector4R vb, vrho, vpi, t;
119
120 vb = p4b_a1 / p4b_a1.d3mag();
121 vrho = p4rho_a1 / p4rho_a1.d3mag();
122 vpi = p4pi1_rho / p4pi1_rho.d3mag();
123
124 t.set( 1.0, 0.0, 0.0, 0.0 );
125
126 EvtComplex amp_a1;
127
128 double bwm_a1 = EvtPDL::getMeanMass( A1M );
129 double gamma_a1 = EvtPDL::getWidth( A1M );
130 // double bwm_a2=EvtPDL::getMeanMass(A2M);
131 // double gamma_a2=EvtPDL::getWidth(A2M);
132 double bwm_rho = EvtPDL::getMeanMass( RHO0 );
133 double gamma_rho = EvtPDL::getWidth( RHO0 );
134
135 amp_a1 = ( sqrt( gamma_a1 / EvtConst::twoPi ) /
136 ( ( p4a1 ).mass() - bwm_a1 - EvtComplex( 0.0, 0.5 * gamma_a1 ) ) ) *
137 ( sqrt( gamma_rho / EvtConst::twoPi ) /
138 ( ( p4rho ).mass() - bwm_rho - EvtComplex( 0.0, 0.5 * gamma_rho ) ) );
139
140 return amp_a1 * ( vb.get( 1 ) * vpi.get( 1 ) + vb.get( 2 ) * vpi.get( 2 ) +
141 vb.get( 3 ) * vpi.get( 3 ) );
142}
143
144void EvtBTo4piCP::getName( std::string& model_name ) { model_name = "BTO4PI_CP"; }
145
147
149
150 // check that there are 18 arguments
151 checkNArg( 18 );
152 checkNDaug( 4 );
153
155
160}
161
163
164 // added by Lange Jan4,2000
165 static EvtId B0 = EvtPDL::getId( "B0" );
166 static EvtId B0B = EvtPDL::getId( "anti-B0" );
167
168 double t;
169 EvtId other_b;
170
171 EvtCPUtil::OtherB( p, t, other_b );
172
174 EvtVector4R mom1 = p->getDaug( 0 )->getP4();
175 EvtVector4R mom2 = p->getDaug( 1 )->getP4();
176 EvtVector4R mom3 = p->getDaug( 2 )->getP4();
177 EvtVector4R mom4 = p->getDaug( 3 )->getP4();
178
179 // double alpha=getArg(0);
180 // double dm=getArg(1);
181
182 EvtComplex amp;
183
184 EvtComplex A, Abar;
185
186 EvtComplex A_a1p, Abar_a1p, A_a2p, Abar_a2p;
187 EvtComplex A_a1m, Abar_a1m, A_a2m, Abar_a2m;
188
189 A_a1p = EvtComplex( getArg( 2 ) * cos( getArg( 3 ) ), getArg( 2 ) * sin( getArg( 3 ) ) );
190 Abar_a1p = EvtComplex( getArg( 4 ) * cos( getArg( 5 ) ), getArg( 4 ) * sin( getArg( 5 ) ) );
191
192 A_a2p = EvtComplex( getArg( 6 ) * cos( getArg( 7 ) ), getArg( 6 ) * sin( getArg( 7 ) ) );
193 Abar_a2p = EvtComplex( getArg( 8 ) * cos( getArg( 9 ) ), getArg( 8 ) * sin( getArg( 9 ) ) );
194
195 A_a1m = EvtComplex( getArg( 10 ) * cos( getArg( 11 ) ), getArg( 10 ) * sin( getArg( 11 ) ) );
196 Abar_a1m =
197 EvtComplex( getArg( 12 ) * cos( getArg( 13 ) ), getArg( 12 ) * sin( getArg( 13 ) ) );
198
199 A_a2m = EvtComplex( getArg( 14 ) * cos( getArg( 15 ) ), getArg( 14 ) * sin( getArg( 15 ) ) );
200 Abar_a2m =
201 EvtComplex( getArg( 16 ) * cos( getArg( 17 ) ), getArg( 16 ) * sin( getArg( 17 ) ) );
202
203 EvtComplex a2p_amp = EvtAmpA2( mom1, mom2, mom3, mom4 ) +
204 EvtAmpA2( mom1, mom4, mom3, mom2 ) +
205 EvtAmpA2( mom3, mom2, mom1, mom4 ) + EvtAmpA2( mom3, mom4, mom1, mom2 );
206
207 EvtComplex a2m_amp = EvtAmpA2( mom2, mom3, mom4, mom1 ) +
208 EvtAmpA2( mom2, mom1, mom4, mom3 ) +
209 EvtAmpA2( mom4, mom3, mom2, mom1 ) + EvtAmpA2( mom4, mom1, mom2, mom3 );
210
211 EvtComplex a1p_amp = EvtAmpA1( mom1, mom2, mom3, mom4 ) +
212 EvtAmpA1( mom1, mom4, mom3, mom2 ) +
213 EvtAmpA1( mom3, mom2, mom1, mom4 ) + EvtAmpA1( mom3, mom4, mom1, mom2 );
214
215 EvtComplex a1m_amp = EvtAmpA1( mom2, mom3, mom4, mom1 ) +
216 EvtAmpA1( mom2, mom1, mom4, mom3 ) +
217 EvtAmpA1( mom4, mom3, mom2, mom1 ) + EvtAmpA1( mom4, mom1, mom2, mom3 );
218
219 A = A_a2p * a2p_amp + A_a1p * a1p_amp + A_a2m * a2m_amp + A_a1m * a1m_amp;
220 Abar = Abar_a2p * a2p_amp + Abar_a1p * a1p_amp + Abar_a2m * a2m_amp + Abar_a1m * a1m_amp;
221
222 if ( other_b == B0B )
223 {
224 amp = A * cos( getArg( 1 ) * t / ( 2 * EvtConst::c ) ) +
225 EvtComplex( cos( -2.0 * getArg( 0 ) ), sin( -2.0 * getArg( 0 ) ) ) * getArg( 2 ) *
226 EvtComplex( 0.0, 1.0 ) * Abar * sin( getArg( 1 ) * t / ( 2 * EvtConst::c ) );
227 }
228 if ( other_b == B0 )
229 {
230 amp = A * EvtComplex( cos( 2.0 * getArg( 0 ) ), sin( 2.0 * getArg( 0 ) ) ) *
231 EvtComplex( 0.0, 1.0 ) * sin( getArg( 1 ) * t / ( 2 * EvtConst::c ) ) +
232 getArg( 2 ) * Abar * cos( getArg( 1 ) * t / ( 2 * EvtConst::c ) );
233 }
234
235 vertex( amp );
236
237 return;
238}
double mass
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)
EvtDiracSpinor boostTo(const EvtDiracSpinor &sp, const EvtVector4R p4)
virtual ~EvtBTo4piCP()
void decay(EvtParticle *p)
void getName(std::string &name)
EvtDecayBase * clone()
static void OtherB(EvtParticle *p, double &t, EvtId &otherb)
Definition EvtCPUtil.cc:225
static const double c
Definition EvtConst.hh:31
static const double twoPi
Definition EvtConst.hh:28
void vertex(const EvtComplex &amp)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
double getArg(int j)
void checkNDaug(int d1, int d2=-1)
EvtId * getDaugs()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
Definition EvtId.hh:27
static double getWidth(EvtId i)
Definition EvtPDL.hh:59
static double getMeanMass(EvtId i)
Definition EvtPDL.hh:43
static EvtId getId(const std::string &name)
Definition EvtPDL.cc:272
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
double get(int i) const
double d3mag() const
int t()
Definition t.c:1