1
function calcissud(kkfl,xx1,xx2,pt2min,pt2,nfnevl,relerr,ifail)
5
double precision calcissud,xx1,xx2,pt2min,pt2
7
double precision bthres,alam5,alam4,s,x1,x2
9
common/sudpars/bthres,alam5,alam4,s,x1,x2,kfl
10
data alam5,alam4/2.11384241947499864d-2,3.6864E-002/
11
data bthres,s/22.3109,196d6/
13
integer n,minpts,maxpts,iwk,nfnevl,ifail
14
parameter(n=2,minpts=5,maxpts=50000,iwk=10298) !iwk=7*(1+maxpts/34)
15
double precision fsud,a(n),b(n),eps,wk(iwk),result,relerr
25
if(abs(kfl).eq.5) a(1)=log(max(pt2min,bthres))
31
if(pt2.le.exp(a(1)))then
39
if(abs(kfl).eq.5.and.x1.gt.0.6)then
47
c...perform integration
48
call dadmul(fsud,n,a,b,minpts,maxpts,eps,wk,iwk,
49
$ result,relerr,nfnevl,ifail)
51
calcissud=exp(-result)
56
C...FSUD is the integrand called by dadmul
57
double precision function fsud(n,x)
65
double precision bthres,alam5,alam4,s,x1,x2
67
common/sudpars/bthres,alam5,alam4,s,x1,x2,kfl
70
double precision pdg2pdf
74
double precision b5,b4
75
data b5,b4/3.8333333333333335,4.1666666666666/
76
double precision pt2,pt,z,zmax,zint,s12
77
DOUBLE PRECISION XPQ1(-7:7),XPQ2(-7:7)
78
DATA XPQ1,XPQ2/30*0d0/
79
double precision qm2(5),qmrel
80
data qm2/3*0,2.2725,22.3109/
81
double precision ptold,xiold,kflold,xpqold
86
print *,'Error: Probably forgot log() for pt2 limits!'
92
zmax=1d0+pt2/(2d0*s12)-sqrt(pt2**2/(4d0*s12**2)+pt2/s12)
96
if(z.gt.zmax.or.z.le.x1) return
98
c PT integral: 1/pt2*alpha_s(pt)/2pi
99
if(pt2.gt.bthres) then
100
fsud=1d0/(b5*log(pt2/alam5))
101
else! if(pt2.gt.2.2725000000000000)then
102
fsud=1d0/(b4*log(pt2/alam4))
105
c Color coherence suppression
107
fsud=fsud*min(1d0,s12/4d0/pt2)
109
c Z integral: need pdf ratio and splitting function
111
c CALL PFTOPDG(1,x1/z,DSQRT(pt2),XPQ2)
112
if(kfla.lt.6.and.kfl.ne.0)then
113
XPQ1(kfl)=max(pdg2pdf(1,kfl,x1,pt),1d-20)
114
XPQ2(kfl)=pdg2pdf(1,kfl,x1/z,pt)
115
XPQ2(0)=pdg2pdf(1,21,x1/z,pt)
118
$ qmrel=2*z*(1-z)*qm2(kfla)/pt2
119
zint=zint+XPQ2(kfl)/(z*XPQ1(kfl))*4d0/3d0*
120
$ ((1+z**2)/(1-z)-qmrel)
121
zint=zint+XPQ2(0)/(z*XPQ1(kfl))*0.5d0*(z**2+(1-z)**2+qmrel)
122
elseif(kfl.eq.21.or.kfl.eq.0)then
123
XPQ1(0)=pdg2pdf(1,0,x1,pt)
124
c CALL PFTOPDG(1,x1/z,pt,XPQ2)
126
XPQ2(i)=pdg2pdf(1,i,x1/z,pt)
130
zint=zint+XPQ2(3) ! for anti-s dist
131
zint=zint/(z*XPQ1(0))*4d0/3d0*(1+(1-z)**2)/z
132
zint=zint+XPQ2(0)/(z*XPQ1(0))*6*(1-z*(1-z))**2/(z*(1-z))
140
double precision function pdg2pdf(ih,ipdg,x,xmu)
141
c***************************************************************************
142
c Based on pdf.f, wrapper for calling the pdf of MCFM
143
c***************************************************************************
148
DOUBLE PRECISION x,xmu
149
INTEGER IH,ipdg,ipart
153
include 'PDF/pdf.inc'
155
double precision Ctq3df,Ctq4Fn,Ctq5Pdf,Ctq6Pdf,Ctq5L
159
if(ipart.eq.21) ipart=0
161
if (pdlabel(1:5) .eq. 'cteq3') then
163
if (pdlabel .eq. 'cteq3_m') then
165
elseif (pdlabel .eq. 'cteq3_l') then
167
elseif (pdlabel .eq. 'cteq3_d') then
172
if(iabs(ipart).ge.1.and.iabs(ipart).le.2)
173
$ ipart=sign(3-iabs(ipart),ipart)
175
pdg2pdf=Ctq3df(mode,ipart,x,xmu,Irt)/x
177
if(ipdg.ge.1.and.ipdg.le.2)
178
$ pdg2pdf=pdg2pdf+Ctq3df(mode,-ipart,x,xmu,Irt)/x
181
elseif (pdlabel(1:5) .eq. 'cteq4') then
183
if (pdlabel .eq. 'cteq4_m') then
185
elseif (pdlabel .eq. 'cteq4_d') then
187
elseif (pdlabel .eq. 'cteq4_l') then
189
elseif (pdlabel .eq. 'cteq4a1') then
191
elseif (pdlabel .eq. 'cteq4a2') then
193
elseif (pdlabel .eq. 'cteq4a3') then
195
elseif (pdlabel .eq. 'cteq4a4') then
197
elseif (pdlabel .eq. 'cteq4a5') then
199
elseif (pdlabel .eq. 'cteq4hj') then
201
elseif (pdlabel .eq. 'cteq4lq') then
205
if(iabs(ipart).ge.1.and.iabs(ipart).le.2)
206
$ ipart=sign(3-iabs(ipart),ipart)
208
pdg2pdf=Ctq4Fn(mode,ipart,x,xmu)
210
elseif (pdlabel .eq. 'cteq5l1') then
212
if(iabs(ipart).ge.1.and.iabs(ipart).le.2)
213
$ ipart=sign(3-iabs(ipart),ipart)
215
pdg2pdf=Ctq5L(ipart,x,xmu)
217
elseif ((pdlabel(1:5) .eq. 'cteq5') .or.
218
. (pdlabel(1:4) .eq. 'ctq5')) then
220
if(iabs(ipart).ge.1.and.iabs(ipart).le.2)
221
$ ipart=sign(3-iabs(ipart),ipart)
223
pdg2pdf=Ctq5Pdf(ipart,x,xmu)
225
elseif (pdlabel(1:5) .eq. 'cteq6') then
227
if(iabs(ipart).ge.1.and.iabs(ipart).le.2)
228
$ ipart=sign(3-iabs(ipart),ipart)
230
pdg2pdf=Ctq6Pdf(ipart,x,xmu)