2 C*********************************************************************
4 SUBROUTINE PYSTFU(KF,X,Q2,XPQ)
6 C...Gives electron, photon, pi+, neutron, proton and hyperon
7 C...structure functions according to a few different parametrizations.
8 C...Note that what is coded is x times the probability distribution,
10 COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
11 COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)
12 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
13 COMMON/PYINT1/MINT(400),VINT(400)
14 COMMON/PYINT8/XPVMD(-6:6),XPANL(-6:6),XPANH(-6:6),XPBEH(-6:6),
16 SAVE /LUDAT1/,/LUDAT2/
17 SAVE /PYPARS/,/PYINT1/,/PYINT8/
18 DIMENSION XPQ(-25:25),XPEL(-25:25),XPGA(-6:6),XPPI(-6:6),
21 C...Interface to PDFLIB.
22 COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX
24 DOUBLE PRECISION XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU,
25 &VALUE(20),XMIN,XMAX,Q2MIN,Q2MAX
27 DATA VALUE/20*0D0/,PARM/20*' '/
29 C...Data related to Schuler-Sjostrand photon distributions.
30 DATA ALAMGA/0.2/, PMCGA/1.3/, PMBGA/4.6/
32 C...Reset structure functions.
38 C...Check x and particle species.
39 IF(X.LE.0..OR.X.GE.1.) THEN
40 WRITE(MSTU(11),5000) X
44 IF(KFA.NE.11.AND.KFA.NE.22.AND.KFA.NE.211.AND.KFA.NE.2112.AND.
45 &KFA.NE.2212.AND.KFA.NE.3122.AND.KFA.NE.3112.AND.KFA.NE.3212
46 &.AND.KFA.NE.3222.AND.KFA.NE.3312.AND.KFA.NE.3322.AND.
47 &KFA.NE.3334.AND.KFA.NE.111) THEN
48 WRITE(MSTU(11),5100) KF
52 C...Electron structure function call.
54 CALL PYSTEL(X,Q2,XPEL)
59 C...Photon structure function call (VDM+anomalous).
60 ELSEIF(KFA.EQ.22.AND.MINT(109).LE.1) THEN
61 IF(MSTP(56).EQ.1.AND.MSTP(55).EQ.1) THEN
62 CALL PYSTGA(X,Q2,XPGA)
66 ELSEIF(MSTP(56).EQ.1.AND.MSTP(55).GE.5.AND.MSTP(55).LE.8) THEN
69 IF(MSTP(55).GE.7) P2MX=4.0
70 IF(MSTP(57).EQ.0) Q2MX=P2MX
71 CALL PYGGAM(MSTP(55)-4,X,Q2MX,0.,F2GAM,XPGA)
76 ELSEIF(MSTP(56).EQ.1.AND.MSTP(55).GE.9.AND.MSTP(55).LE.12) THEN
79 IF(MSTP(55).GE.11) P2MX=4.0
80 IF(MSTP(57).EQ.0) Q2MX=P2MX
81 CALL PYGGAM(MSTP(55)-8,X,Q2MX,0.,F2GAM,XPGA)
83 XPQ(KFL)=XPVMD(KFL)+XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL)
86 ELSEIF(MSTP(56).EQ.2) THEN
87 C...Call PDFLIB structure functions.
91 VALUE(2)=MSTP(55)/1000
93 VALUE(3)=MOD(MSTP(55),1000)
94 IF(MINT(93).NE.3000000+MSTP(55)) THEN
95 CALL PDFSET(PARM,VALUE)
96 MINT(93)=3000000+MSTP(55)
99 QQ=SQRT(MAX(0.,SNGL(Q2MIN),Q2))
100 IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
101 CALL STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
117 WRITE(MSTU(11),5200) KF,MSTP(56),MSTP(55)
120 C...Pion/gammaVDM structure function call.
121 ELSEIF(KFA.EQ.211.OR.KFA.EQ.111.OR.(KFA.EQ.22.AND.
122 &MINT(109).EQ.2)) THEN
123 IF(KFA.EQ.22.AND.MSTP(56).EQ.1.AND.MSTP(55).GE.5.AND.
124 & MSTP(55).LE.12) THEN
125 ISET=1+MOD(MSTP(55)-1,4)
128 IF(ISET.GE.3) P2MX=4.0
129 IF(MSTP(57).EQ.0) Q2MX=P2MX
130 CALL PYGVMD(ISET,2,X,Q2MX,P2MX,ALAMGA,XPGA)
135 ELSEIF(MSTP(54).EQ.1.AND.MSTP(53).GE.1.AND.MSTP(53).LE.3) THEN
136 CALL PYSTPI(X,Q2,XPPI)
140 ELSEIF(MSTP(54).EQ.2) THEN
141 C...Call PDFLIB structure functions.
145 VALUE(2)=MSTP(53)/1000
147 VALUE(3)=MOD(MSTP(53),1000)
148 IF(MINT(93).NE.2000000+MSTP(53)) THEN
149 CALL PDFSET(PARM,VALUE)
150 MINT(93)=2000000+MSTP(53)
153 QQ=SQRT(MAX(0.,SNGL(Q2MIN),Q2))
154 IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
155 CALL STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
171 WRITE(MSTU(11),5200) KF,MSTP(54),MSTP(53)
174 C...Anomalous photon structure function call.
175 ELSEIF(KFA.EQ.22.AND.MINT(109).EQ.3) THEN
178 IF(MSTP(56).EQ.1.AND.MSTP(55).LE.8) THEN
179 IF(MSTP(55).EQ.5.OR.MSTP(55).EQ.6) P2MX=0.36
180 IF(MSTP(55).EQ.7.OR.MSTP(55).EQ.8) P2MX=4.0
181 IF(MSTP(57).EQ.0) Q2MX=P2MX
182 CALL PYGANO(0,X,Q2MX,P2MX,ALAMGA,XPGA)
187 ELSEIF(MSTP(56).EQ.1) THEN
188 IF(MSTP(55).EQ.9.OR.MSTP(55).EQ.10) P2MX=0.36
189 IF(MSTP(55).EQ.11.OR.MSTP(55).EQ.12) P2MX=4.0
190 IF(MSTP(57).EQ.0) Q2MX=P2MX
191 CALL PYGGAM(MSTP(55)-8,X,Q2MX,0.,F2GM,XPGA)
193 XPQ(KFL)=MAX(0.,XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL))
196 ELSEIF(MSTP(56).EQ.2) THEN
197 IF(MSTP(57).EQ.0) Q2MX=P2MX
198 CALL PYGANO(0,X,Q2MX,P2MX,ALAMGA,XPGA)
203 ELSEIF(MSTP(55).GE.1.AND.MSTP(55).LE.5) THEN
204 IF(MSTP(57).EQ.0) Q2MX=P2MX
205 CALL PYGVMD(0,MSTP(55),X,Q2MX,P2MX,PARP(1),XPGA)
217 IF(KFR.EQ.4.AND.Q2.LT.PMCGA**2) GOTO 200
218 IF(KFR.EQ.5.AND.Q2.LT.PMBGA**2) GOTO 200
219 IF(MSTP(57).EQ.0) Q2MX=P2MX
220 CALL PYGVMD(0,KFR,X,Q2MX,P2MX,PARP(1),XPGA)
227 C...Proton structure function call.
229 IF(MSTP(52).EQ.1.AND.MSTP(51).GE.1.AND.MSTP(51).LE.11) THEN
230 CALL PYSTPR(X,Q2,XPPR)
234 ELSEIF(MSTP(52).EQ.2) THEN
235 C...Call PDFLIB structure functions.
239 VALUE(2)=MSTP(51)/1000
241 VALUE(3)=MOD(MSTP(51),1000)
242 IF(MINT(93).NE.1000000+MSTP(51)) THEN
243 CALL PDFSET(PARM,VALUE)
244 MINT(93)=1000000+MSTP(51)
247 QQ=SQRT(MAX(0.,SNGL(Q2MIN),Q2))
248 IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
249 CALL STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
265 WRITE(MSTU(11),5200) KF,MSTP(52),MSTP(51)
269 C...Isospin average for pi0/gammaVDM.
270 IF(KFA.EQ.111.OR.(KFA.EQ.22.AND.MINT(109).EQ.2)) THEN
271 IF(KFA.EQ.22.AND.MSTP(55).GE.5.AND.MSTP(55).LE.12) THEN
276 XPS=0.5*(XPQ(1)+XPQ(-2))
277 XPV=0.5*(XPQ(2)+XPQ(-1))-XPS
281 IF(KFA.EQ.22.AND.MINT(105).LE.223) THEN
282 XPQ(1)=XPQ(1)+0.2*XPV
283 XPQ(-1)=XPQ(-1)+0.2*XPV
284 XPQ(2)=XPQ(2)+0.8*XPV
285 XPQ(-2)=XPQ(-2)+0.8*XPV
286 ELSEIF(KFA.EQ.22.AND.MINT(105).EQ.333) THEN
289 ELSEIF(KFA.EQ.22.AND.MINT(105).EQ.443) THEN
292 IF(MSTP(55).GE.9) THEN
298 XPQ(1)=XPQ(1)+0.5*XPV
299 XPQ(-1)=XPQ(-1)+0.5*XPV
300 XPQ(2)=XPQ(2)+0.5*XPV
301 XPQ(-2)=XPQ(-2)+0.5*XPV
304 C...Rescale for gammaVDM by effective gamma -> rho coupling.
305 IF(KFA.EQ.22.AND.MINT(109).EQ.2) THEN
307 XPQ(KFL)=VINT(281)*XPQ(KFL)
309 VINT(232)=VINT(281)*XPV
312 C...Isospin conjugation for neutron.
313 ELSEIF(KFA.EQ.2112) THEN
321 C...Simple recipes for hyperon (average valence structure function).
322 ELSEIF(KFA.EQ.3122.OR.KFA.EQ.3112.OR.KFA.EQ.3212.OR.KFA.EQ.3222
323 &.OR.KFA.EQ.3312.OR.KFA.EQ.3322.OR.KFA.EQ.3334) THEN
324 XPVAL=(XPQ(1)+XPQ(2)-XPQ(-1)-XPQ(-2))/3.
325 XPSEA=0.5*(XPQ(-1)+XPQ(-2))
330 XPQ(KFA/1000)=XPQ(KFA/1000)+XPVAL
331 XPQ(MOD(KFA/100,10))=XPQ(MOD(KFA/100,10))+XPVAL
332 XPQ(MOD(KFA/10,10))=XPQ(MOD(KFA/10,10))+XPVAL
335 C...Charge conjugation for antiparticle.
338 IF(KFL.EQ.21.OR.KFL.EQ.22.OR.KFL.EQ.23.OR.KFL.EQ.25) GOTO 250
345 C...Allow gluon also in position 21.
348 C...Check positivity and reset above maximum allowed flavour.
350 XPQ(KFL)=MAX(0.,XPQ(KFL))
351 IF(IABS(KFL).GT.MSTP(58).AND.IABS(KFL).LE.8) XPQ(KFL)=0.
354 C...Formats for error printouts.
355 5000 FORMAT(' Error: x value outside physical range; x =',1P,E12.3)
356 5100 FORMAT(' Error: illegal particle code for structure function;',
358 5200 FORMAT(' Error: unknown structure function; KF, library, set =',