]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TEvtGen/EvtGenModels/EvtBto2piCPiso.cpp
Fix bug in building local list of valid files.
[u/mrichter/AliRoot.git] / TEvtGen / EvtGenModels / EvtBto2piCPiso.cpp
CommitLineData
da0e9ce3 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
34EvtBto2piCPiso::~EvtBto2piCPiso() {}
35
36std::string EvtBto2piCPiso::getName(){
37
38 return "BTO2PI_CP_ISO";
39
40}
41
42
43EvtDecayBase* EvtBto2piCPiso::clone(){
44
45 return new EvtBto2piCPiso;
46
47}
48
49void EvtBto2piCPiso::init(){
50
0ca57c2f 51 // check that there are 10 arguments
da0e9ce3 52
0ca57c2f 53 checkNArg(10);
da0e9ce3 54 checkNDaug(2);
55
56 checkSpinParent(EvtSpinType::SCALAR);
57
58 checkSpinDaughter(0,EvtSpinType::SCALAR);
59 checkSpinDaughter(1,EvtSpinType::SCALAR);
60
61}
62
63
64void EvtBto2piCPiso::initProbMax() {
65
66 //added by Lange Jan4,2000
67 static EvtId PI0=EvtPDL::getId("pi0");
68 static EvtId PIP=EvtPDL::getId("pi+");
69 static EvtId PIM=EvtPDL::getId("pi-");
70
71//this may need to be revised
72
73if (((getDaugs()[0]==PIP) && (getDaugs()[1]==PIM)) || ((getDaugs()[0]==PIM) && (getDaugs()[1]==PIP))) {
74 setProbMax(4.0*(getArg(2)*getArg(2)+getArg(4)*getArg(4)));
75}
76
77if ((getDaugs()[0]==PI0) && (getDaugs()[1]==PI0)) {
78 setProbMax(2.0*(4.0*getArg(2)*getArg(2)+getArg(4)*getArg(4)));
79}
80
81if (((getDaugs()[0]==PIP) && (getDaugs()[1]==PI0)) || ((getDaugs()[0]==PI0) && (getDaugs()[1]==PIP))) {
82 setProbMax(6.0*getArg(2)*getArg(2));
83}
84
85if (((getDaugs()[0]==PI0) && (getDaugs()[1]==PIM)) || ((getDaugs()[0]==PIM) && (getDaugs()[1]==PI0))) {
86 setProbMax(6.0*getArg(4)*getArg(4));
87}
88
89}
90
91void EvtBto2piCPiso::decay( EvtParticle *p ){
92
93 p->initializePhaseSpace(getNDaug(),getDaugs());
94
95 //added by Lange Jan4,2000
96 static EvtId B0=EvtPDL::getId("B0");
97 static EvtId B0B=EvtPDL::getId("anti-B0");
98 static EvtId PI0=EvtPDL::getId("pi0");
99 static EvtId PIP=EvtPDL::getId("pi+");
100 static EvtId PIM=EvtPDL::getId("pi-");
101
102 double t;
103 EvtId other_b;
104 int charged=0;
105
106//randomly generate the tag (B0 or B0B)
107
108 double tag = EvtRandom::Flat(0.0,1.0);
109 if (tag < 0.5) {
110
0ca57c2f 111 EvtCPUtil::getInstance()->OtherB(p,t,other_b,1.0);
112 other_b = B0;
da0e9ce3 113 }
114 else {
115
0ca57c2f 116 EvtCPUtil::getInstance()->OtherB(p,t,other_b,0.0);
117 other_b = B0B;
da0e9ce3 118 }
119
120 EvtComplex amp;
121
122 EvtComplex A,Abar;
123 EvtComplex A2, A2_bar, A0, A0_bar;
124
125 A2 = EvtComplex(getArg(2)*cos(getArg(3)),getArg(2)*sin(getArg(3)));
126 A2_bar = EvtComplex(getArg(4)*cos(getArg(5)),getArg(4)*sin(getArg(5)));
127
128 A0 = EvtComplex(getArg(6)*cos(getArg(7)),getArg(6)*sin(getArg(7)));
129 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 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 A = 3.0*A2;
140
141 }
142
143 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 A = 3.0*A2_bar;
149
150 }
151
152 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 A=sqrt(2.0)*(A2-A0);
158 Abar=sqrt(2.0)*(A2_bar-A0_bar);
159 }
160
161 if ((getDaugs()[0]==PI0) && (getDaugs()[1]==PI0)) {
162
163 //pi0 pi0, so 2*A_2 + A_0
164
165 charged = 0;
166 A=2.0*A2 + A0;
167 Abar=2.0*A2_bar + A0_bar;
168 }
169
170 if(charged == 0) {
171
172 if (other_b==B0B){
173 amp=A*cos(getArg(1)*t/(2*EvtConst::c))+
174 EvtComplex(cos(-2.0*getArg(0)),sin(-2.0*getArg(0)))*
175 EvtComplex(0.0,1.0)*Abar*sin(getArg(1)*t/(2*EvtConst::c));
176 }
177 if (other_b==B0){
178 amp=A*EvtComplex(cos(2.0*getArg(0)),sin(2.0*getArg(0)))*
179 EvtComplex(0.0,1.0)*sin(getArg(1)*t/(2*EvtConst::c))+
180 Abar*cos(getArg(1)*t/(2*EvtConst::c));
181 }
182 }
183 else amp = A;
184
185 vertex(amp);
186
187 return ;
188}
189
0ca57c2f 190std::string EvtBto2piCPiso::getParamName(int i) {
191 switch(i) {
192 case 0:
193 return "weakPhase";
194 case 1:
195 return "deltaM";
196 case 2:
197 return "A2";
198 case 3:
199 return "A2Phase";
200 case 4:
201 return "A2bar";
202 case 5:
203 return "A2barPhase";
204 case 6:
205 return "A0";
206 case 7:
207 return "A0Phase";
208 case 8:
209 return "A0bar";
210 case 9:
211 return "A0barPhase";
212 default:
213 return "";
214 }
215}
216
217std::string EvtBto2piCPiso::getParamDefault(int i) {
218 switch(i) {
219 case 2:
220 return "1.0";
221 case 3:
222 return "0.0";
223 case 4:
224 return "1.0";
225 case 5:
226 return "0.0";
227 case 6:
228 return "1.0";
229 case 7:
230 return "0.0";
231 case 8:
232 return "1.0";
233 case 9:
234 return "0.0";
235 default:
236 return "";
237 }
238}