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) 1998 Caltech, UCSB
11 // Module: EvtBTo4piCP.cc
13 // Description: Routine to decay B->pi+ pi- pi+ pi-.
15 // Modification history:
17 // RYD March 2, 1997 Module created
19 //------------------------------------------------------------------------
21 #include "EvtGenBase/EvtPatches.hh"
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"
33 EvtBTo4piCP::~EvtBTo4piCP() {}
36 EvtComplex EvtAmpA2(const EvtVector4R& p4pi1,const EvtVector4R& p4pi2,
37 const EvtVector4R& p4pi3,const EvtVector4R& p4pi4){
39 //added by Lange Jan4,2000
40 static EvtId A2M=EvtPDL::getId("a_2-");
41 static EvtId RHO0=EvtPDL::getId("rho0");
43 EvtVector4R p4a2,p4rho,p4b;
51 EvtVector4R p4b_a2,p4rho_a2,p4pi1_a2,p4a2_a2;
53 p4b_a2=boostTo(p4b,p4a2);
54 p4rho_a2=boostTo(p4rho,p4a2);
55 p4pi1_a2=boostTo(p4pi1,p4a2);
56 p4a2_a2=boostTo(p4a2,p4a2);
58 EvtVector4R p4pi1_rho;
60 p4pi1_rho=boostTo(p4pi1_a2,p4rho_a2);
62 EvtVector4R vb,vrho,vpi,t;
64 vb=p4b_a2/p4b_a2.d3mag();
65 vrho=p4rho_a2/p4rho_a2.d3mag();
66 vpi=p4pi1_rho/p4pi1_rho.d3mag();
68 t.set(1.0,0.0,0.0,0.0);
70 // EvtComplex amp_a1,amp_a2;
73 // double bwm_a1=EvtPDL::getMeanMass(A1M);
74 // double gamma_a1=EvtPDL::getWidth(A1M);
75 double bwm_a2=EvtPDL::getMeanMass(A2M);
76 double gamma_a2=EvtPDL::getWidth(A2M);
77 double bwm_rho=EvtPDL::getMeanMass(RHO0);
78 double gamma_rho=EvtPDL::getWidth(RHO0);
80 amp_a2=(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)));
86 (vb.get(1)*vrho.get(1)+vb.get(2)*vrho.get(2)+vb.get(3)*vrho.get(3))*
88 vpi.get(1)*(vb.get(2)*vrho.get(3)-vb.get(3)*vrho.get(2))+
89 vpi.get(2)*(vb.get(3)*vrho.get(1)-vb.get(1)*vrho.get(3))+
90 vpi.get(3)*(vb.get(1)*vrho.get(2)-vb.get(2)*vrho.get(1))
95 EvtComplex EvtAmpA1(const EvtVector4R& p4pi1,const EvtVector4R& p4pi2,
96 const EvtVector4R& p4pi3,const EvtVector4R& p4pi4){
98 //added by Lange Jan4,2000
99 static EvtId A1M=EvtPDL::getId("a_1-");
100 static EvtId RHO0=EvtPDL::getId("rho0");
102 EvtVector4R p4a1,p4rho,p4b;
110 EvtVector4R p4b_a1,p4rho_a1,p4pi1_a1,p4a1_a1;
112 p4b_a1=boostTo(p4b,p4a1);
113 p4rho_a1=boostTo(p4rho,p4a1);
114 p4pi1_a1=boostTo(p4pi1,p4a1);
115 p4a1_a1=boostTo(p4a1,p4a1);
117 EvtVector4R p4pi1_rho;
119 p4pi1_rho=boostTo(p4pi1_a1,p4rho_a1);
121 EvtVector4R vb,vrho,vpi,t;
123 vb=p4b_a1/p4b_a1.d3mag();
124 vrho=p4rho_a1/p4rho_a1.d3mag();
125 vpi=p4pi1_rho/p4pi1_rho.d3mag();
127 t.set(1.0,0.0,0.0,0.0);
131 double bwm_a1=EvtPDL::getMeanMass(A1M);
132 double gamma_a1=EvtPDL::getWidth(A1M);
133 // double bwm_a2=EvtPDL::getMeanMass(A2M);
134 // double gamma_a2=EvtPDL::getWidth(A2M);
135 double bwm_rho=EvtPDL::getMeanMass(RHO0);
136 double gamma_rho=EvtPDL::getWidth(RHO0);
138 amp_a1=(sqrt(gamma_a1/EvtConst::twoPi)/
139 ((p4a1).mass()-bwm_a1-EvtComplex(0.0,0.5*gamma_a1)))*
140 (sqrt(gamma_rho/EvtConst::twoPi)/
141 ((p4rho).mass()-bwm_rho-EvtComplex(0.0,0.5*gamma_rho)));
144 (vb.get(1)*vpi.get(1)+vb.get(2)*vpi.get(2)+vb.get(3)*vpi.get(3));
149 std::string EvtBTo4piCP::getName(){
156 EvtDecayBase* EvtBTo4piCP::clone(){
158 return new EvtBTo4piCP;
162 void EvtBTo4piCP::init(){
164 // check that there are 18 arguments
168 checkSpinParent(EvtSpinType::SCALAR);
170 checkSpinDaughter(0,EvtSpinType::SCALAR);
171 checkSpinDaughter(1,EvtSpinType::SCALAR);
172 checkSpinDaughter(2,EvtSpinType::SCALAR);
173 checkSpinDaughter(3,EvtSpinType::SCALAR);
176 void EvtBTo4piCP::decay( EvtParticle *p){
178 //added by Lange Jan4,2000
179 static EvtId B0=EvtPDL::getId("B0");
180 static EvtId B0B=EvtPDL::getId("anti-B0");
186 EvtCPUtil::OtherB(p,t,other_b);
188 p->initializePhaseSpace(getNDaug(),getDaugs());
189 EvtVector4R mom1 = p->getDaug(0)->getP4();
190 EvtVector4R mom2 = p->getDaug(1)->getP4();
191 EvtVector4R mom3 = p->getDaug(2)->getP4();
192 EvtVector4R mom4 = p->getDaug(3)->getP4();
194 // double alpha=getArg(0);
195 //double dm=getArg(1);
202 EvtComplex A_a1p,Abar_a1p,A_a2p,Abar_a2p;
203 EvtComplex A_a1m,Abar_a1m,A_a2m,Abar_a2m;
205 A_a1p=EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3)));
206 Abar_a1p=EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)));
208 A_a2p=EvtComplex(getArg(6)*cos(getArg(7)),getArg(6)*sin(getArg(7)));
209 Abar_a2p=EvtComplex(getArg(8)*cos(getArg(9)),getArg(8)*sin(getArg(9)));
211 A_a1m=EvtComplex(getArg(10)*cos(getArg(11)),getArg(10)*sin(getArg(11)));
212 Abar_a1m=EvtComplex(getArg(12)*cos(getArg(13)),getArg(12)*sin(getArg(13)));
214 A_a2m=EvtComplex(getArg(14)*cos(getArg(15)),getArg(14)*sin(getArg(15)));
215 Abar_a2m=EvtComplex(getArg(16)*cos(getArg(17)),getArg(16)*sin(getArg(17)));
217 EvtComplex a2p_amp=EvtAmpA2(mom1,mom2,mom3,mom4)+
218 EvtAmpA2(mom1,mom4,mom3,mom2)+
219 EvtAmpA2(mom3,mom2,mom1,mom4)+
220 EvtAmpA2(mom3,mom4,mom1,mom2);
222 EvtComplex a2m_amp=EvtAmpA2(mom2,mom3,mom4,mom1)+
223 EvtAmpA2(mom2,mom1,mom4,mom3)+
224 EvtAmpA2(mom4,mom3,mom2,mom1)+
225 EvtAmpA2(mom4,mom1,mom2,mom3);
227 EvtComplex a1p_amp=EvtAmpA1(mom1,mom2,mom3,mom4)+
228 EvtAmpA1(mom1,mom4,mom3,mom2)+
229 EvtAmpA1(mom3,mom2,mom1,mom4)+
230 EvtAmpA1(mom3,mom4,mom1,mom2);
232 EvtComplex a1m_amp=EvtAmpA1(mom2,mom3,mom4,mom1)+
233 EvtAmpA1(mom2,mom1,mom4,mom3)+
234 EvtAmpA1(mom4,mom3,mom2,mom1)+
235 EvtAmpA1(mom4,mom1,mom2,mom3);
238 A=A_a2p*a2p_amp+A_a1p*a1p_amp+
239 A_a2m*a2m_amp+A_a1m*a1m_amp;
240 Abar=Abar_a2p*a2p_amp+Abar_a1p*a1p_amp+
241 Abar_a2m*a2m_amp+Abar_a1m*a1m_amp;
245 amp=A*cos(getArg(1)*t/(2*EvtConst::c))+
246 EvtComplex(cos(-2.0*getArg(0)),sin(-2.0*getArg(0)))*
247 getArg(2)*EvtComplex(0.0,1.0)*Abar*sin(getArg(1)*t/(2*EvtConst::c));
250 amp=A*EvtComplex(cos(2.0*getArg(0)),sin(2.0*getArg(0)))*
251 EvtComplex(0.0,1.0)*sin(getArg(1)*t/(2*EvtConst::c))+
252 getArg(2)*Abar*cos(getArg(1)*t/(2*EvtConst::c));