BOSS 7.0.4
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtBto2piCPiso.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: 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//
22#include <stdlib.h>
27#include "EvtGenBase/EvtPDL.hh"
30#include "EvtGenBase/EvtId.hh"
31#include <string>
33
35
36void EvtBto2piCPiso::getName(std::string& model_name){
37
38 model_name="BTO2PI_CP_ISO";
39
40}
41
42
44
45 return new EvtBto2piCPiso;
46
47}
48
50
51 // check that there are 11 arguments
52
53 checkNArg(11);
54 checkNDaug(2);
55
57
60
61}
62
63
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
92
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
111 EvtCPUtil::OtherB(p,t,other_b,1.0);
112 other_b = B0;
113 }
114 else {
115
116 EvtCPUtil::OtherB(p,t,other_b,0.0);
117 other_b = B0B;
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
double sin(const BesAngle a)
double cos(const BesAngle a)
void getName(std::string &name)
virtual ~EvtBto2piCPiso()
EvtDecayBase * clone()
void decay(EvtParticle *p)
static void OtherB(EvtParticle *p, double &t, EvtId &otherb)
Definition: EvtCPUtil.cc:229
static const double c
Definition: EvtConst.hh:32
void vertex(const EvtComplex &amp)
Definition: EvtDecayAmp.hh:37
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
double getArg(int j)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
EvtId * getDaugs()
Definition: EvtDecayBase.hh:65
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
Definition: EvtId.hh:27
static EvtId getId(const std::string &name)
Definition: EvtPDL.cc:287
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
static double Flat()
Definition: EvtRandom.cc:74
int t()
Definition: t.c:1