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