EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
pygano.F
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file pygano.F
1  SUBROUTINE pygano(KF,X,Q2,P2,ALAM,XPGA)
2 C...Purpose: to evaluate the parton distributions of the anomalous
3 C...photon, inhomogeneously evolved from a scale P2 (where it vanishes)
4 C...to Q2.
5 C...KF=0 gives the sum over (up to) 5 flavours,
6 C...KF<0 limits to flavours up to abs(KF),
7 C...KF>0 is for flavour KF only.
8 C...ALAM is the 4-flavour Lambda, which is automatically converted
9 C...to 3- and 5-flavour equivalents as needed.
10  dimension xpga(-6:6),alamsq(3:5)
11  DATA pmc/1.3/, pmb/4.6/, aem/0.007297/, aem2pi/0.0011614/
12 
13 C...Reset output.
14  DO 100 kfl=-6,6
15  xpga(kfl)=0.
16  100 CONTINUE
17  IF(q2.LE.p2) RETURN
18  kfa=iabs(kf)
19 
20 C...Calculate Lambda; protect against unphysical Q2 and P2 input.
21  alamsq(3)=(alam*(pmc/alam)**(2./27.))**2
22  alamsq(4)=alam**2
23  alamsq(5)=(alam*(alam/pmb)**(2./23.))**2
24  p2eff=max(p2,1.2*alamsq(3))
25  IF(kf.EQ.4) p2eff=max(p2eff,pmc**2)
26  IF(kf.EQ.5) p2eff=max(p2eff,pmb**2)
27  q2eff=max(q2,p2eff)
28  xl=-log(x)
29 
30 C...Find number of flavours at lower and upper scale.
31  nfp=4
32  IF(p2eff.LT.pmc**2) nfp=3
33  IF(p2eff.GT.pmb**2) nfp=5
34  nfq=4
35  IF(q2eff.LT.pmc**2) nfq=3
36  IF(q2eff.GT.pmb**2) nfq=5
37 
38 C...Define range of flavour loop.
39  IF(kf.EQ.0) THEN
40  kflmn=1
41  kflmx=5
42  ELSEIF(kf.LT.0) THEN
43  kflmn=1
44  kflmx=kfa
45  ELSE
46  kflmn=kfa
47  kflmx=kfa
48  ENDIF
49 
50 C...Loop over flavours the photon can branch into.
51  DO 110 kfl=kflmn,kflmx
52 
53 C...Light flavours: calculate t range and (approximate) s range.
54  IF(kfl.LE.3.AND.(kfl.EQ.1.OR.kfl.EQ.kf)) THEN
55  tdiff=log(q2eff/p2eff)
56  s=(6./(33.-2.*nfq))*log(log(q2eff/alamsq(nfq))/
57  & log(p2eff/alamsq(nfq)))
58  IF(nfq.GT.nfp) THEN
59  q2div=pmb**2
60  IF(nfq.EQ.4) q2div=pmc**2
61  snfq=(6./(33.-2.*nfq))*log(log(q2div/alamsq(nfq))/
62  & log(p2eff/alamsq(nfq)))
63  snfp=(6./(33.-2.*(nfq-1)))*log(log(q2div/alamsq(nfq-1))/
64  & log(p2eff/alamsq(nfq-1)))
65  s=s+(log(q2div/p2eff)/log(q2eff/p2eff))*(snfp-snfq)
66  ENDIF
67  IF(nfq.EQ.5.AND.nfp.EQ.3) THEN
68  q2div=pmc**2
69  snf4=(6./(33.-2.*4))*log(log(q2div/alamsq(4))/
70  & log(p2eff/alamsq(4)))
71  snf3=(6./(33.-2.*3))*log(log(q2div/alamsq(3))/
72  & log(p2eff/alamsq(3)))
73  s=s+(log(q2div/p2eff)/log(q2eff/p2eff))*(snf3-snf4)
74  ENDIF
75 
76 C...u and s quark do not need a separate treatment when d has been done.
77  ELSEIF(kfl.EQ.2.OR.kfl.EQ.3) THEN
78 
79 C...Charm: as above, but only include range above c threshold.
80  ELSEIF(kfl.EQ.4) THEN
81  IF(q2.LE.pmc**2) goto 110
82  p2eff=max(p2eff,pmc**2)
83  q2eff=max(q2eff,p2eff)
84  tdiff=log(q2eff/p2eff)
85  s=(6./(33.-2.*nfq))*log(log(q2eff/alamsq(nfq))/
86  & log(p2eff/alamsq(nfq)))
87  IF(nfq.EQ.5.AND.nfp.EQ.4) THEN
88  q2div=pmb**2
89  snfq=(6./(33.-2.*nfq))*log(log(q2div/alamsq(nfq))/
90  & log(p2eff/alamsq(nfq)))
91  snfp=(6./(33.-2.*(nfq-1)))*log(log(q2div/alamsq(nfq-1))/
92  & log(p2eff/alamsq(nfq-1)))
93  s=s+(log(q2div/p2eff)/log(q2eff/p2eff))*(snfp-snfq)
94  ENDIF
95 
96 C...Bottom: as above, but only include range above b threshold.
97  ELSEIF(kfl.EQ.5) THEN
98  IF(q2.LE.pmb**2) goto 110
99  p2eff=max(p2eff,pmb**2)
100  q2eff=max(q2,p2eff)
101  tdiff=log(q2eff/p2eff)
102  s=(6./(33.-2.*nfq))*log(log(q2eff/alamsq(nfq))/
103  & log(p2eff/alamsq(nfq)))
104  ENDIF
105 
106 C...Evaluate flavour-dependent prefactor (charge^2 etc.).
107  chsq=1./9.
108  IF(kfl.EQ.2.OR.kfl.EQ.4) chsq=4./9.
109  fac=aem2pi*2.*chsq*tdiff
110 
111 C...Evaluate parton distributions (normalized to unit momentum sum).
112  IF(kfl.EQ.1.OR.kfl.EQ.4.OR.kfl.EQ.5.OR.kfl.EQ.kf) THEN
113  xval= ((1.5+2.49*s+26.9*s**2)/(1.+32.3*s**2)*x**2 +
114  & (1.5-0.49*s+7.83*s**2)/(1.+7.68*s**2)*(1.-x)**2 +
115  & 1.5*s/(1.-3.2*s+7.*s**2)*x*(1.-x)) *
116  & x**(1./(1.+0.58*s)) * (1.-x**2)**(2.5*s/(1.+10.*s))
117  xglu= 2.*s/(1.+4.*s+7.*s**2) *
118  & x**(-1.67*s/(1.+2.*s)) * (1.-x**2)**(1.2*s) *
119  & ((4.*x**2+7.*x+4.)*(1.-x)/3. - 2.*x*(1.+x)*xl)
120  xsea= 0.333*s**2/(1.+4.90*s+4.69*s**2+21.4*s**3) *
121  & x**(-1.18*s/(1.+1.22*s)) * (1.-x)**(1.2*s) *
122  & ((8.-73.*x+62.*x**2)*(1.-x)/9. + (3.-8.*x**2/3.)*x*xl +
123  & (2.*x-1.)*x*xl**2)
124 
125 C...Threshold factors for c and b sea.
126  sll=log(log(q2eff/alam**2)/log(p2eff/alam**2))
127  xchm=0.
128  IF(q2.GT.pmc**2.AND.q2.GT.1.001*p2eff) THEN
129  sch=max(0.,log(log(pmc**2/alam**2)/log(p2eff/alam**2)))
130  xchm=xsea*(1.-(sch/sll)**3)
131  ENDIF
132  xbot=0.
133  IF(q2.GT.pmb**2.AND.q2.GT.1.001*p2eff) THEN
134  sbt=max(0.,log(log(pmb**2/alam**2)/log(p2eff/alam**2)))
135  xbot=xsea*(1.-(sbt/sll)**3)
136  ENDIF
137  ENDIF
138 
139 C...Add contribution of each valence flavour.
140  xpga(0)=xpga(0)+fac*xglu
141  xpga(1)=xpga(1)+fac*xsea
142  xpga(2)=xpga(2)+fac*xsea
143  xpga(3)=xpga(3)+fac*xsea
144  xpga(4)=xpga(4)+fac*xchm
145  xpga(5)=xpga(5)+fac*xbot
146  xpga(kfl)=xpga(kfl)+fac*xval
147  110 CONTINUE
148  DO 120 kfl=1,5
149  xpga(-kfl)=xpga(kfl)
150  120 CONTINUE
151 
152  RETURN
153  END