BOSS 7.1.2
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtPartWave.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) 2000 Caltech, UCSB
10//
11// Module: EvtHelAmp.cc
12//
13// Description: Decay model for implementation of generic 2 body
14// decay specified by the partial wave amplitudes
15//
16//
17// Modification history:
18//
19// fkw February 2, 2001 changes to satisfy KCC
20// RYD September 7, 2000 Module created
21//
22//------------------------------------------------------------------------
23//
25#include <stdlib.h>
28#include "EvtGenBase/EvtPDL.hh"
34#include "EvtGenBase/EvtId.hh"
35#include <string>
37#include "EvtGenBase/EvtKine.hh"
39#include <algorithm>
40using std::endl;
42
43void EvtPartWave::getName(std::string& model_name){
44
45 model_name="PARTWAVE";
46
47}
48
49
51
52 return new EvtPartWave;
53
54}
55
57
58 checkNDaug(2);
59
60 //find out how many states each particle have
64
65 if (verbose()){
66 report(INFO,"EvtGen")<<"_nA,_nB,_nC:"
67 <<_nA<<","<<_nB<<","<<_nC<<endl;
68 }
69
70 //find out what 2 times the spin is
74
75 if (verbose()){
76 report(INFO,"EvtGen")<<"_JA2,_JB2,_JC2:"
77 <<_JA2<<","<<_JB2<<","<<_JC2<<endl;
78 }
79
80
81 //allocate memory
82 int* _lambdaA2=new int[_nA];
83 int* _lambdaB2=new int[_nB];
84 int* _lambdaC2=new int[_nC];
85
86 EvtComplexPtr* _HBC=new EvtComplexPtr[_nB];
87 int ib,ic;
88 for(ib=0;ib<_nB;ib++){
89 _HBC[ib]=new EvtComplex[_nC];
90 }
91
92
93 int i;
94 //find the allowed helicities (actually 2*times the helicity!)
95
96 fillHelicity(_lambdaA2,_nA,_JA2);
97 fillHelicity(_lambdaB2,_nB,_JB2);
98 fillHelicity(_lambdaC2,_nC,_JC2);
99
100 if (verbose()){
101 report(INFO,"EvtGen")<<"Helicity states of particle A:"<<endl;
102 for(i=0;i<_nA;i++){
103 report(INFO,"EvtGen")<<_lambdaA2[i]<<endl;
104 }
105
106 report(INFO,"EvtGen")<<"Helicity states of particle B:"<<endl;
107 for(i=0;i<_nB;i++){
108 report(INFO,"EvtGen")<<_lambdaB2[i]<<endl;
109 }
110
111 report(INFO,"EvtGen")<<"Helicity states of particle C:"<<endl;
112 for(i=0;i<_nC;i++){
113 report(INFO,"EvtGen")<<_lambdaC2[i]<<endl;
114 }
115
116 report(INFO,"EvtGen")<<"Will now figure out the valid (M_LS) states:"<<endl;
117
118 }
119
120 int Lmin=std::max(_JA2-_JB2-_JC2,std::max(_JB2-_JA2-_JC2,_JC2-_JA2-_JB2));
121 if (Lmin<0) Lmin=0;
122 //int Lmin=_JA2-_JB2-_JC2;
123 int Lmax=_JA2+_JB2+_JC2;
124
125 int L;
126
127 int _nPartialWaveAmp=0;
128
129 int _nL[50];
130 int _nS[50];
131
132 for (L=Lmin;L<=Lmax;L+=2){
133 int Smin=abs(L-_JA2);
134 if (Smin<abs(_JB2-_JC2)) Smin=abs(_JB2-_JC2);
135 int Smax=L+_JA2;
136 if (Smax>abs(_JB2+_JC2)) Smax=abs(_JB2+_JC2);
137 int S;
138 for (S=Smin;S<=Smax;S+=2){
139 _nL[_nPartialWaveAmp]=L;
140 _nS[_nPartialWaveAmp]=S;
141
142 _nPartialWaveAmp++;
143 if (verbose()){
144 report(INFO,"EvtGen")<<"M["<<L<<"]["<<S<<"]"<<endl;
145 }
146 }
147 }
148
149 checkNArg(_nPartialWaveAmp*2);
150
151 int argcounter=0;
152
153 EvtComplex _M[50];
154
155 for(i=0;i<_nPartialWaveAmp;i++){
156 _M[i]=getArg(argcounter)*exp(EvtComplex(0.0,getArg(argcounter+1)));;
157 argcounter+=2;
158 if (verbose()){
159 report(INFO,"EvtGen")<<"M["<<_nL[i]<<"]["<<_nS[i]<<"]="<<_M[i]<<endl;
160 }
161 }
162
163 //Now calculate the helicity amplitudes
164
165
166
167 for(ib=0;ib<_nB;ib++){
168 for(ic=0;ic<_nC;ic++){
169 _HBC[ib][ic]=0.0;
170 if (abs(_lambdaB2[ib]-_lambdaC2[ic])<=_JA2){
171 for(i=0;i<_nPartialWaveAmp;i++){
172 int L=_nL[i];
173 int S=_nS[i];
174 int lambda2=_lambdaB2[ib];
175 int lambda3=_lambdaC2[ic];
176 int s1=_JA2;
177 int s2=_JB2;
178 int s3=_JC2;
179 int m1=lambda2-lambda3;
180 EvtCGCoefSingle c1(s2,s3);
181 EvtCGCoefSingle c2(L,S);
182
183 if (verbose()){
184 report(INFO,"EvtGen") << "s2,lambda2:"<<s2<<" "<<lambda2<<endl;
185 }
186 //fkw changes to satisfy KCC
187 double fkwTmp = (L+1.0)/(s1+1.0);
188
189 if (S>=abs(m1)){
190
191 EvtComplex tmp=sqrt(fkwTmp)
192 *c1.coef(S,m1,s2,s3,lambda2,-lambda3)
193 *c2.coef(s1,m1,L,S,0,m1)*_M[i];
194 //fkw EvtComplex tmp=sqrt((L+1)/(s1+1))*c1.coef(S,m1,s2,s3,lambda2,-lambda3)*c2.coef(s1,m1,L,S,0,m1)*_M[i];
195 _HBC[ib][ic]+=tmp;
196 }
197 }
198 if (verbose()){
199 report(INFO,"EvtGen")<<"_HBC["<<ib<<"]["<<ic<<"]="<<_HBC[ib][ic]<<endl;
200 }
201 }
202 }
203 }
204
208 _HBC);
209
210
211}
212
213
215
216 double maxprob=_evalHelAmp->probMax();
217
218 if (verbose()){
219 report(INFO,"EvtGen")<<"Calculated probmax"<<maxprob<<endl;
220 }
221
222 setProbMax(maxprob);
223
224}
225
226
228
229 //first generate simple phase space
231
232 _evalHelAmp->evalAmp(p,_amp2);
233
234 return;
235
236}
237
238
239
240void EvtPartWave::fillHelicity(int* lambda2,int n,int J2){
241
242 int i;
243
244 //photon is special case!
245 if (n==2&&J2==2) {
246 lambda2[0]=2;
247 lambda2[1]=-2;
248 return;
249 }
250
251 assert(n==J2+1);
252
253 for(i=0;i<n;i++){
254 lambda2[i]=n-i*2-1;
255 }
256
257 return;
258
259}
260
261
262
263
264
265
266
267
268
269
270
const Int_t n
EvtComplex exp(const EvtComplex &c)
ostream & report(Severity severity, const char *facility)
Definition EvtReport.cc:36
@ INFO
Definition EvtReport.hh:52
double coef(int J, int M, int j1, int j2, int m1, int m2)
double getArg(int j)
void setProbMax(double prbmx)
EvtId getParentId()
void checkNDaug(int d1, int d2=-1)
EvtId * getDaugs()
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
EvtId getDaug(int i)
void evalAmp(EvtParticle *p, EvtAmp &amp)
static EvtSpinType::spintype getSpinType(EvtId i)
Definition EvtPDL.hh:61
void initProbMax()
void getName(std::string &name)
void decay(EvtParticle *p)
virtual ~EvtPartWave()
EvtDecayBase * clone()
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
static int getSpin2(spintype stype)
static int getSpinStates(spintype stype)
double * m1
Definition qcdloop1.h:75