11 #include "SpecFuncMathMore.h"
13 using namespace ROOT::Math;
16 double const mpi=0.13957018;
18 double const mK=0.493677;
19 double const meta=0.547853;
28 return E01 + 2*n*omega;
34 for(
unsigned int i=0;
i<
n;++
i){
35 double g0l=(
i+1)*TMath::Power(4.0,-(
double)
i);
42 return std::complex<double>(sph_bessel(l,x),sph_neumann(l,x));
45 std::complex<double>
tscat(
double E,
const vector<tchannel>& channels,
48 const double lambda2=1.29*1.29;
49 const complex<double>
ic(0,1);
52 complex<double> sum=0;
53 for(
unsigned int iCh=0;iCh<channels.size();iCh++){
54 double m1=channels[iCh].first;
55 double m2=channels[iCh].second;
57 double m22=m1+m2; m22=m22*m22;
59 double p=sqrt(m12/m22*fabs((E*E-m22)));
62 double m212=(m1*m1-m2*m2);
63 double mu=(E-m212*m212/(E*E*E))/4;
77 sum+= - 2.*ic*lambda2*mu*p*a*sph_bessel(0,p*a)*
sph_hankel1(0,p*a)*ladder;
80 complex<double> k(0,p);
81 double sphBessC=TMath::SinH(p*a)/(p*
a);
82 double sphHankelC=sphBessC - TMath::CosH(p*a)/(p*
a);
83 sum+= 2.*lambda2*mu*a*p*sphBessC*sphHankelC*ladder;
87 complex<double> Denom(1,0);
92 double mi1=channels[
i].first;
93 double mi2=channels[
i].second;
94 double mi22=mi1+mi2; mi22=mi22*mi22;
96 double pi=sqrt(mi12/mi22*(E*E-mi22));
97 double mi212=(mi1*mi1-mi2*mi2);
98 double mui=(E-mi212*mi212/(E*E*E))/4;
99 double mj1=channels[j].first;
100 double mj2=channels[j].second;
101 double mj22=mj1+mj2; mj22=mj22*mj22;
103 double pj=sqrt(mj12/mj22*(E*E-mj22));
104 double mj212=(mj1*mj1-mj2*mj2);
105 double muj=(E-mj212*mj212/(E*E*E))/4;
107 double Nom=2.*lambda2*a*sqrt(mui*muj*pi*pj)*
ladderSum(E,15)*sph_bessel(0,pi*a)*sph_bessel(0,pj*a);
113 std::complex<double>
tprod(
double E,
double m1,
double m2){
114 double m22=m1+m2; m22=m22*m22;
116 double p=sqrt(m12/m22*(E*E-m22));
122 double lambda2=lambda*
lambda;
125 std::complex<double> Denom(1,0);
126 std::complex<double>
i(0,1);
127 std::complex<double> term=-2.*i*lambda2*mu*p*a*sph_bessel(0,p*a)*
sph_hankel1(0,p*a)*sum;
131 double Nom=lambda*sph_bessel(0,p*a);
140 vector< tchannel > channels;
147 unsigned int npoints=400;
148 TGraph* gRe=
new TGraph(npoints);
149 TGraph* gIm=
new TGraph(npoints);
150 TGraph* gIntense=
new TGraph(npoints);
151 TGraph* gPhase=
new TGraph(npoints);
152 gRe->SetTitle(
"Scattering");
153 gIm->SetTitle(
"Scattering Imag");
154 gIntense->SetTitle(
"Scattering Intensity");
156 TGraph* gReProd=
new TGraph(npoints);
157 TGraph* gImProd=
new TGraph(npoints);
158 TGraph* gIntenseProd=
new TGraph(npoints);
159 TGraph* gPhaseProd=
new TGraph(npoints);
160 TGraph* gArgandProd=
new TGraph(npoints);
162 gReProd->SetTitle(
"Production");
163 gImProd->SetTitle(
"Production Imag");
164 gIntenseProd->SetTitle(
"Prodcution Intensity");
166 unsigned int channel=0;
168 double M=channels[channel].first+channels[channel].second+step;
169 for(
unsigned int i=0;
i<npoints; ++
i){
170 complex<double> amp=
tscat(M,channels,0);
172 double p=sqrt(M*M/4.-
mpi2);
173 cout <<
"tscat("<<M<<
")= "<<
tscat(M,channels,0) << endl;
174 gRe->SetPoint(
i,M,amp.real()*M/(2*
p));
175 gIm->SetPoint(
i,M,amp.imag()*M/(2*
p));
176 gIntense->SetPoint(
i,M,norm(amp));
177 gPhase->SetPoint(
i,M,arg(amp));
179 gReProd->SetPoint(
i,M,pamp.real()*sqrt(p));
180 gImProd->SetPoint(
i,M,pamp.imag()*sqrt(p));
181 gIntenseProd->SetPoint(
i,M,norm(pamp)*2*p);
182 gPhaseProd->SetPoint(
i,M,arg(pamp));
183 gArgandProd->SetPoint(
i,pamp.real()*sqrt(p),pamp.imag()*sqrt(p));
186 cout <<
"finished" << endl;
188 TCanvas* c=
new TCanvas(
"cnew",
"c",10,10,800,800);
191 gIntense->Draw(
"APL");
196 gIm->Draw(
"PL same");
200 gIntenseProd->Draw(
"APL");
203 gPhaseProd->Draw(
"APL");
205 gReProd->Draw(
"APL");
206 gImProd->Draw(
"PL same");