2 C*********************************************************************
4 SUBROUTINE PYSTFL(KF,X,Q2,XPQ)
6 C...Give proton structure function at small x and/or Q^2 according to
7 C...correct limiting behaviour.
8 COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
9 COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
10 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
11 COMMON/PYINT1/MINT(400),VINT(400)
12 SAVE /LUDAT1/,/LUDAT2/
13 SAVE /PYPARS/,/PYINT1/
14 DIMENSION XPQ(-25:25),XPA(-25:25),XPB(-25:25),WTSB(-3:3)
15 DATA RMR/0.92/,RMP/0.38/,WTSB/0.5,1.,1.,5.,1.,1.,0.5/
17 C...Send everything but protons/neutrons/VMD pions directly to PYSTFU.
21 IF((KFA.EQ.2212.OR.KFA.EQ.2112).AND.MSTP(57).GE.2) IACC=1
22 IF(KFA.EQ.211.AND.MSTP(57).GE.3) IACC=1
23 IF(KFA.EQ.22.AND.MINT(109).EQ.2.AND.MSTP(57).GE.3) IACC=1
25 CALL PYSTFU(KF,X,Q2,XPQ)
33 IF(X.LE.0..OR.X.GE.1.) THEN
34 WRITE(MSTU(11),5000) X
38 C...Define valence content.
45 ELSEIF(KF.EQ.-2212) THEN
48 ELSEIF(KF.EQ.2112) THEN
51 ELSEIF(KF.EQ.-2112) THEN
54 ELSEIF(KF.EQ.211) THEN
58 ELSEIF(KF.EQ.-211) THEN
62 ELSEIF(MINT(105).LE.223) THEN
67 ELSEIF(MINT(105).EQ.333) THEN
72 ELSEIF(MINT(105).EQ.443) THEN
79 C...Do naive evaluation and find min Q^2, boundary Q^2 and x_0.
80 CALL PYSTFU(KFC,X,Q2,XPA)
81 Q2MN=MAX(3.,VINT(231))
82 Q2B=2.+0.052**2*EXP(3.56*SQRT(MAX(0.,-LOG(3.*X))))
83 XMN=EXP(-(LOG((Q2MN-2.)/0.052**2)/3.56)**2)/3.
85 C...Large Q2 and large x: naive call is enough.
86 IF(Q2.GT.Q2MN.AND.Q2.GT.Q2B) THEN
92 C...Small Q2 and large x: dampen boundary value.
95 C...Evaluate at boundary and define dampening factors.
96 CALL PYSTFU(KFC,X,Q2MN,XPA)
97 FV=(Q2*(Q2MN+RMR)/(Q2MN*(Q2+RMR)))**(0.55*(1.-X)/(1.-XMN))
98 FS=(Q2*(Q2MN+RMP)/(Q2MN*(Q2+RMP)))**1.08
100 C...Separate valence and sea parts of structure function.
102 XFV1=XPA(KFV1)-XPA(-KFV1)
104 XFV2=XPA(KFV2)-XPA(-KFV2)
107 XPA(KFV1)=XPA(KFV1)-WTV1*VINT(232)
108 XPA(-KFV1)=XPA(-KFV1)-WTV1*VINT(232)
109 XPA(KFV2)=XPA(KFV2)-WTV2*VINT(232)
110 XPA(-KFV2)=XPA(-KFV2)-WTV2*VINT(232)
113 C...Dampen valence and sea separately. Put back together.
118 XPQ(KFV1)=XPQ(KFV1)+FV*XFV1
119 XPQ(KFV2)=XPQ(KFV2)+FV*XFV2
121 XPQ(KFV1)=XPQ(KFV1)+FV*WTV1*VINT(232)
122 XPQ(-KFV1)=XPQ(-KFV1)+FV*WTV1*VINT(232)
123 XPQ(KFV2)=XPQ(KFV2)+FV*WTV2*VINT(232)
124 XPQ(-KFV2)=XPQ(-KFV2)+FV*WTV2*VINT(232)
128 C...Large Q2 and small x: interpolate behaviour.
129 ELSEIF(Q2.GT.Q2MN) THEN
131 C...Evaluate at extremes and define coefficients for interpolation.
132 CALL PYSTFU(KFC,XMN,Q2MN,XPA)
134 CALL PYSTFU(KFC,X,Q2B,XPB)
136 FLA=LOG(Q2B/Q2)/LOG(Q2B/Q2MN)
137 FVA=(X/XMN)**0.45*FLA
138 FSA=(X/XMN)**(-0.08)*FLA
141 C...Separate valence and sea parts of structure function.
143 XFVA1=XPA(KFV1)-XPA(-KFV1)
145 XFVA2=XPA(KFV2)-XPA(-KFV2)
147 XFVB1=XPB(KFV1)-XPB(-KFV1)
149 XFVB2=XPB(KFV2)-XPB(-KFV2)
152 XPA(KFV1)=XPA(KFV1)-WTV1*VI232A
153 XPA(-KFV1)=XPA(-KFV1)-WTV1*VI232A
154 XPA(KFV2)=XPA(KFV2)-WTV2*VI232A
155 XPA(-KFV2)=XPA(-KFV2)-WTV2*VI232A
156 XPB(KFV1)=XPB(KFV1)-WTV1*VI232B
157 XPB(-KFV1)=XPB(-KFV1)-WTV1*VI232B
158 XPB(KFV2)=XPB(KFV2)-WTV2*VI232B
159 XPB(-KFV2)=XPB(-KFV2)-WTV2*VI232B
162 C...Interpolate for valence and sea. Put back together.
164 XPQ(KFL)=FSA*XPA(KFL)+FB*XPB(KFL)
167 XPQ(KFV1)=XPQ(KFV1)+(FVA*XFVA1+FB*XFVB1)
168 XPQ(KFV2)=XPQ(KFV2)+(FVA*XFVA2+FB*XFVB2)
170 XPQ(KFV1)=XPQ(KFV1)+WTV1*(FVA*VI232A+FB*VI232B)
171 XPQ(-KFV1)=XPQ(-KFV1)+WTV1*(FVA*VI232A+FB*VI232B)
172 XPQ(KFV2)=XPQ(KFV2)+WTV2*(FVA*VI232A+FB*VI232B)
173 XPQ(-KFV2)=XPQ(-KFV2)+WTV2*(FVA*VI232A+FB*VI232B)
177 C...Small Q2 and small x: dampen boundary value and add term.
180 C...Evaluate at boundary and define dampening factors.
181 CALL PYSTFU(KFC,XMN,Q2MN,XPA)
182 FB=(XMN-X)*(Q2MN-Q2)/(XMN*Q2MN)
184 FVC=(X/XMN)**0.45*(Q2/(Q2+RMR))**0.55
185 FVA=FVC*FA*((Q2MN+RMR)/Q2MN)**0.55
186 FVB=FVC*FB*1.10*XMN**0.45*0.11
187 FSC=(X/XMN)**(-0.08)*(Q2/(Q2+RMP))**1.08
188 FSA=FSC*FA*((Q2MN+RMP)/Q2MN)**1.08
189 FSB=FSC*FB*0.21*XMN**(-0.08)*0.21
191 C...Separate valence and sea parts of structure function.
193 XFV1=XPA(KFV1)-XPA(-KFV1)
195 XFV2=XPA(KFV2)-XPA(-KFV2)
198 XPA(KFV1)=XPA(KFV1)-WTV1*VINT(232)
199 XPA(-KFV1)=XPA(-KFV1)-WTV1*VINT(232)
200 XPA(KFV2)=XPA(KFV2)-WTV2*VINT(232)
201 XPA(-KFV2)=XPA(-KFV2)-WTV2*VINT(232)
204 C...Dampen valence and sea separately. Add constant terms.
205 C...Put back together.
207 XPQ(KFL)=FSA*XPA(KFL)
211 XPQ(KFL)=XPQ(KFL)+FSB*WTSB(KFL)
213 XPQ(KFV1)=XPQ(KFV1)+(FVA*XFV1+FVB*NV1)
214 XPQ(KFV2)=XPQ(KFV2)+(FVA*XFV2+FVB*NV2)
217 XPQ(KFL)=XPQ(KFL)+VINT(281)*FSB*WTSB(KFL)
219 XPQ(KFV1)=XPQ(KFV1)+WTV1*(FVA*VINT(232)+FVB*VINT(281))
220 XPQ(-KFV1)=XPQ(-KFV1)+WTV1*(FVA*VINT(232)+FVB*VINT(281))
221 XPQ(KFV2)=XPQ(KFV2)+WTV2*(FVA*VINT(232)+FVB*VINT(281))
222 XPQ(-KFV2)=XPQ(-KFV2)+WTV2*(FVA*VINT(232)+FVB*VINT(281))
228 C...Format for error printout.
229 5000 FORMAT(' Error: x value outside physical range; x =',1P,E12.3)