BOSS 8.0.0
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//
21#include "EvtBto2piCPiso.hh"
31#include <stdlib.h>
32#include <string>
33
35
36void EvtBto2piCPiso::getName( std::string& model_name ) { model_name = "BTO2PI_CP_ISO"; }
37
39
41
42 // check that there are 11 arguments
43
44 checkNArg( 11 );
45 checkNDaug( 2 );
46
48
51}
52
54
55 // added by Lange Jan4,2000
56 static EvtId PI0 = EvtPDL::getId( "pi0" );
57 static EvtId PIP = EvtPDL::getId( "pi+" );
58 static EvtId PIM = EvtPDL::getId( "pi-" );
59
60 // this may need to be revised
61
62 if ( ( ( getDaugs()[0] == PIP ) && ( getDaugs()[1] == PIM ) ) ||
63 ( ( getDaugs()[0] == PIM ) && ( getDaugs()[1] == PIP ) ) )
64 { setProbMax( 4.0 * ( getArg( 2 ) * getArg( 2 ) + getArg( 4 ) * getArg( 4 ) ) ); }
65
66 if ( ( getDaugs()[0] == PI0 ) && ( getDaugs()[1] == PI0 ) )
67 { setProbMax( 2.0 * ( 4.0 * getArg( 2 ) * getArg( 2 ) + getArg( 4 ) * getArg( 4 ) ) ); }
68
69 if ( ( ( getDaugs()[0] == PIP ) && ( getDaugs()[1] == PI0 ) ) ||
70 ( ( getDaugs()[0] == PI0 ) && ( getDaugs()[1] == PIP ) ) )
71 { setProbMax( 6.0 * getArg( 2 ) * getArg( 2 ) ); }
72
73 if ( ( ( getDaugs()[0] == PI0 ) && ( getDaugs()[1] == PIM ) ) ||
74 ( ( getDaugs()[0] == PIM ) && ( getDaugs()[1] == PI0 ) ) )
75 { setProbMax( 6.0 * getArg( 4 ) * getArg( 4 ) ); }
76}
77
79
81
82 // added by Lange Jan4,2000
83 static EvtId B0 = EvtPDL::getId( "B0" );
84 static EvtId B0B = EvtPDL::getId( "anti-B0" );
85 static EvtId PI0 = EvtPDL::getId( "pi0" );
86 static EvtId PIP = EvtPDL::getId( "pi+" );
87 static EvtId PIM = EvtPDL::getId( "pi-" );
88
89 double t;
90 EvtId other_b;
91 int charged = 0;
92
93 // randomly generate the tag (B0 or B0B)
94
95 double tag = EvtRandom::Flat( 0.0, 1.0 );
96 if ( tag < 0.5 )
97 {
98
99 EvtCPUtil::OtherB( p, t, other_b, 1.0 );
100 other_b = B0;
101 }
102 else
103 {
104
105 EvtCPUtil::OtherB( p, t, other_b, 0.0 );
106 other_b = B0B;
107 }
108
109 EvtComplex amp;
110
111 EvtComplex A, Abar;
112 EvtComplex A2, A2_bar, A0, A0_bar;
113
114 A2 = EvtComplex( getArg( 2 ) * cos( getArg( 3 ) ), getArg( 2 ) * sin( getArg( 3 ) ) );
115 A2_bar = EvtComplex( getArg( 4 ) * cos( getArg( 5 ) ), getArg( 4 ) * sin( getArg( 5 ) ) );
116
117 A0 = EvtComplex( getArg( 6 ) * cos( getArg( 7 ) ), getArg( 6 ) * sin( getArg( 7 ) ) );
118 A0_bar = EvtComplex( getArg( 8 ) * cos( getArg( 9 ) ), getArg( 8 ) * sin( getArg( 9 ) ) );
119
120 // depending on what combination of pi pi we have, there will be different
121 // A and Abar
122
123 if ( ( ( getDaugs()[0] == PIP ) && ( getDaugs()[1] == PI0 ) ) ||
124 ( ( getDaugs()[0] == PI0 ) && ( getDaugs()[1] == PIP ) ) )
125 {
126
127 // pi+ pi0, so just A_2
128
129 charged = 1;
130 A = 3.0 * A2;
131 }
132
133 if ( ( ( getDaugs()[0] == PI0 ) && ( getDaugs()[1] == PIM ) ) ||
134 ( ( getDaugs()[0] == PIM ) && ( getDaugs()[1] == PI0 ) ) )
135 {
136
137 // pi- pi0, so just A2_bar
138
139 charged = 1;
140 A = 3.0 * A2_bar;
141 }
142
143 if ( ( ( getDaugs()[0] == PIP ) && ( getDaugs()[1] == PIM ) ) ||
144 ( ( getDaugs()[0] == PIM ) && ( getDaugs()[1] == PIP ) ) )
145 {
146
147 // pi+ pi-, so A_2 - A_0
148
149 charged = 0;
150 A = sqrt( 2.0 ) * ( A2 - A0 );
151 Abar = sqrt( 2.0 ) * ( A2_bar - A0_bar );
152 }
153
154 if ( ( getDaugs()[0] == PI0 ) && ( getDaugs()[1] == PI0 ) )
155 {
156
157 // pi0 pi0, so 2*A_2 + A_0
158
159 charged = 0;
160 A = 2.0 * A2 + A0;
161 Abar = 2.0 * A2_bar + A0_bar;
162 }
163
164 if ( charged == 0 )
165 {
166
167 if ( other_b == B0B )
168 {
169 amp = A * cos( getArg( 1 ) * t / ( 2 * EvtConst::c ) ) +
170 EvtComplex( cos( -2.0 * getArg( 0 ) ), sin( -2.0 * getArg( 0 ) ) ) *
171 EvtComplex( 0.0, 1.0 ) * Abar * sin( getArg( 1 ) * t / ( 2 * EvtConst::c ) );
172 }
173 if ( other_b == B0 )
174 {
175 amp = A * EvtComplex( cos( 2.0 * getArg( 0 ) ), sin( 2.0 * getArg( 0 ) ) ) *
176 EvtComplex( 0.0, 1.0 ) * sin( getArg( 1 ) * t / ( 2 * EvtConst::c ) ) +
177 Abar * cos( getArg( 1 ) * t / ( 2 * EvtConst::c ) );
178 }
179 }
180 else amp = A;
181
182 vertex( amp );
183
184 return;
185}
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:225
static const double c
Definition EvtConst.hh:31
void vertex(const EvtComplex &amp)
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()
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:272
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
static double Flat()
Definition EvtRandom.cc:69
int t()
Definition t.c:1