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: EvtBto2piCPiso.cc
12 : //
13 : // Description: Routine to decay B -> pi pi with isospin amplitudes
14 : //
15 : // Modification history:
16 : //
17 : // RYD,NK Febuary 7, 1998 Module created
18 : //
19 : //------------------------------------------------------------------------
20 : //
21 : #include "EvtGenBase/EvtPatches.hh"
22 : #include <stdlib.h>
23 : #include "EvtGenBase/EvtParticle.hh"
24 : #include "EvtGenBase/EvtRandom.hh"
25 : #include "EvtGenBase/EvtGenKine.hh"
26 : #include "EvtGenBase/EvtCPUtil.hh"
27 : #include "EvtGenBase/EvtPDL.hh"
28 : #include "EvtGenModels/EvtBto2piCPiso.hh"
29 : #include "EvtGenBase/EvtReport.hh"
30 : #include "EvtGenBase/EvtId.hh"
31 : #include <string>
32 : #include "EvtGenBase/EvtConst.hh"
33 :
34 0 : EvtBto2piCPiso::~EvtBto2piCPiso() {}
35 :
36 : std::string EvtBto2piCPiso::getName(){
37 :
38 0 : return "BTO2PI_CP_ISO";
39 :
40 : }
41 :
42 :
43 : EvtDecayBase* EvtBto2piCPiso::clone(){
44 :
45 0 : return new EvtBto2piCPiso;
46 :
47 0 : }
48 :
49 : void EvtBto2piCPiso::init(){
50 :
51 : // check that there are 10 arguments
52 :
53 0 : checkNArg(10);
54 0 : checkNDaug(2);
55 :
56 0 : checkSpinParent(EvtSpinType::SCALAR);
57 :
58 0 : checkSpinDaughter(0,EvtSpinType::SCALAR);
59 0 : checkSpinDaughter(1,EvtSpinType::SCALAR);
60 :
61 0 : }
62 :
63 :
64 : void EvtBto2piCPiso::initProbMax() {
65 :
66 : //added by Lange Jan4,2000
67 0 : static EvtId PI0=EvtPDL::getId("pi0");
68 0 : static EvtId PIP=EvtPDL::getId("pi+");
69 0 : static EvtId PIM=EvtPDL::getId("pi-");
70 :
71 : //this may need to be revised
72 :
73 0 : if (((getDaugs()[0]==PIP) && (getDaugs()[1]==PIM)) || ((getDaugs()[0]==PIM) && (getDaugs()[1]==PIP))) {
74 0 : setProbMax(4.0*(getArg(2)*getArg(2)+getArg(4)*getArg(4)));
75 0 : }
76 :
77 0 : if ((getDaugs()[0]==PI0) && (getDaugs()[1]==PI0)) {
78 0 : setProbMax(2.0*(4.0*getArg(2)*getArg(2)+getArg(4)*getArg(4)));
79 0 : }
80 :
81 0 : if (((getDaugs()[0]==PIP) && (getDaugs()[1]==PI0)) || ((getDaugs()[0]==PI0) && (getDaugs()[1]==PIP))) {
82 0 : setProbMax(6.0*getArg(2)*getArg(2));
83 0 : }
84 :
85 0 : if (((getDaugs()[0]==PI0) && (getDaugs()[1]==PIM)) || ((getDaugs()[0]==PIM) && (getDaugs()[1]==PI0))) {
86 0 : setProbMax(6.0*getArg(4)*getArg(4));
87 0 : }
88 :
89 0 : }
90 :
91 : void EvtBto2piCPiso::decay( EvtParticle *p ){
92 :
93 0 : p->initializePhaseSpace(getNDaug(),getDaugs());
94 :
95 : //added by Lange Jan4,2000
96 0 : static EvtId B0=EvtPDL::getId("B0");
97 0 : static EvtId B0B=EvtPDL::getId("anti-B0");
98 0 : static EvtId PI0=EvtPDL::getId("pi0");
99 0 : static EvtId PIP=EvtPDL::getId("pi+");
100 0 : static EvtId PIM=EvtPDL::getId("pi-");
101 :
102 0 : double t;
103 0 : EvtId other_b;
104 : int charged=0;
105 :
106 : //randomly generate the tag (B0 or B0B)
107 :
108 0 : double tag = EvtRandom::Flat(0.0,1.0);
109 0 : if (tag < 0.5) {
110 :
111 0 : EvtCPUtil::getInstance()->OtherB(p,t,other_b,1.0);
112 0 : other_b = B0;
113 0 : }
114 : else {
115 :
116 0 : EvtCPUtil::getInstance()->OtherB(p,t,other_b,0.0);
117 0 : other_b = B0B;
118 : }
119 :
120 0 : EvtComplex amp;
121 :
122 0 : EvtComplex A,Abar;
123 0 : EvtComplex A2, A2_bar, A0, A0_bar;
124 :
125 0 : A2 = EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3)));
126 0 : A2_bar = EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)));
127 :
128 0 : A0 = EvtComplex(getArg(6)*cos(getArg(7)),getArg(6)*sin(getArg(7)));
129 0 : A0_bar = EvtComplex(getArg(8)*cos(getArg(9)),getArg(8)*sin(getArg(9)));
130 :
131 : //depending on what combination of pi pi we have, there will be different
132 : //A and Abar
133 :
134 0 : if (((getDaugs()[0]==PIP) && (getDaugs()[1]==PI0)) || ((getDaugs()[0]==PI0) && (getDaugs()[1]==PIP))) {
135 :
136 : //pi+ pi0, so just A_2
137 :
138 : charged = 1;
139 0 : A = 3.0*A2;
140 :
141 0 : }
142 :
143 0 : if (((getDaugs()[0]==PI0) && (getDaugs()[1]==PIM)) || ((getDaugs()[0]==PIM) && (getDaugs()[1]==PI0))) {
144 :
145 : //pi- pi0, so just A2_bar
146 :
147 : charged = 1;
148 0 : A = 3.0*A2_bar;
149 :
150 0 : }
151 :
152 0 : if (((getDaugs()[0]==PIP) && (getDaugs()[1]==PIM)) || ((getDaugs()[0]==PIM) && (getDaugs()[1]==PIP))) {
153 :
154 : //pi+ pi-, so A_2 - A_0
155 :
156 : charged = 0;
157 0 : A=sqrt(2.0)*(A2-A0);
158 0 : Abar=sqrt(2.0)*(A2_bar-A0_bar);
159 0 : }
160 :
161 0 : if ((getDaugs()[0]==PI0) && (getDaugs()[1]==PI0)) {
162 :
163 : //pi0 pi0, so 2*A_2 + A_0
164 :
165 : charged = 0;
166 0 : A=2.0*A2 + A0;
167 0 : Abar=2.0*A2_bar + A0_bar;
168 0 : }
169 :
170 0 : if(charged == 0) {
171 :
172 0 : if (other_b==B0B){
173 0 : amp=A*cos(getArg(1)*t/(2*EvtConst::c))+
174 0 : EvtComplex(cos(-2.0*getArg(0)),sin(-2.0*getArg(0)))*
175 0 : EvtComplex(0.0,1.0)*Abar*sin(getArg(1)*t/(2*EvtConst::c));
176 0 : }
177 0 : if (other_b==B0){
178 0 : amp=A*EvtComplex(cos(2.0*getArg(0)),sin(2.0*getArg(0)))*
179 0 : EvtComplex(0.0,1.0)*sin(getArg(1)*t/(2*EvtConst::c))+
180 0 : Abar*cos(getArg(1)*t/(2*EvtConst::c));
181 0 : }
182 : }
183 0 : else amp = A;
184 :
185 0 : vertex(amp);
186 :
187 : return ;
188 0 : }
189 :
190 : std::string EvtBto2piCPiso::getParamName(int i) {
191 0 : switch(i) {
192 : case 0:
193 0 : return "weakPhase";
194 : case 1:
195 0 : return "deltaM";
196 : case 2:
197 0 : return "A2";
198 : case 3:
199 0 : return "A2Phase";
200 : case 4:
201 0 : return "A2bar";
202 : case 5:
203 0 : return "A2barPhase";
204 : case 6:
205 0 : return "A0";
206 : case 7:
207 0 : return "A0Phase";
208 : case 8:
209 0 : return "A0bar";
210 : case 9:
211 0 : return "A0barPhase";
212 : default:
213 0 : return "";
214 : }
215 0 : }
216 :
217 : std::string EvtBto2piCPiso::getParamDefault(int i) {
218 0 : switch(i) {
219 : case 2:
220 0 : return "1.0";
221 : case 3:
222 0 : return "0.0";
223 : case 4:
224 0 : return "1.0";
225 : case 5:
226 0 : return "0.0";
227 : case 6:
228 0 : return "1.0";
229 : case 7:
230 0 : return "0.0";
231 : case 8:
232 0 : return "1.0";
233 : case 9:
234 0 : return "0.0";
235 : default:
236 0 : return "";
237 : }
238 0 : }
|