]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA/pythia/pystfu.F
More exact rounding function, but also much slower.
[u/mrichter/AliRoot.git] / PYTHIA / pythia / pystfu.F
1  
2 C*********************************************************************
3  
4       SUBROUTINE PYSTFU(KF,X,Q2,XPQ)
5  
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,
9 C...i.e. xq(x,Q2) etc.
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),
15      &XPDIR(-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),
19      &XPPR(-6:6)
20  
21 C...Interface to PDFLIB.
22       COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX
23       SAVE /W50513/
24       DOUBLE PRECISION XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU,
25      &VALUE(20),XMIN,XMAX,Q2MIN,Q2MAX
26       CHARACTER*20 PARM(20)
27       DATA VALUE/20*0D0/,PARM/20*' '/
28  
29 C...Data related to Schuler-Sjostrand photon distributions.
30       DATA ALAMGA/0.2/, PMCGA/1.3/, PMBGA/4.6/
31  
32 C...Reset structure functions.
33       MINT(92)=0
34       DO 100 KFL=-25,25
35       XPQ(KFL)=0.
36   100 CONTINUE
37  
38 C...Check x and particle species.
39       IF(X.LE.0..OR.X.GE.1.) THEN
40         WRITE(MSTU(11),5000) X
41         RETURN
42       ENDIF
43       KFA=IABS(KF)
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
49         RETURN
50       ENDIF
51  
52 C...Electron structure function call.
53       IF(KFA.EQ.11) THEN
54         CALL PYSTEL(X,Q2,XPEL)
55         DO 110 KFL=-25,25
56         XPQ(KFL)=XPEL(KFL)
57   110   CONTINUE
58  
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)
63           DO 120 KFL=-6,6
64           XPQ(KFL)=XPGA(KFL)
65   120     CONTINUE
66         ELSEIF(MSTP(56).EQ.1.AND.MSTP(55).GE.5.AND.MSTP(55).LE.8) THEN
67           Q2MX=Q2
68           P2MX=0.36
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)
72           DO 130 KFL=-6,6
73           XPQ(KFL)=XPGA(KFL)
74   130     CONTINUE
75           VINT(231)=P2MX
76         ELSEIF(MSTP(56).EQ.1.AND.MSTP(55).GE.9.AND.MSTP(55).LE.12) THEN
77           Q2MX=Q2
78           P2MX=0.36
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)
82           DO 140 KFL=-6,6
83           XPQ(KFL)=XPVMD(KFL)+XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL)
84   140     CONTINUE
85           VINT(231)=P2MX
86         ELSEIF(MSTP(56).EQ.2) THEN
87 C...Call PDFLIB structure functions.
88           PARM(1)='NPTYPE'
89           VALUE(1)=3
90           PARM(2)='NGROUP'
91           VALUE(2)=MSTP(55)/1000
92           PARM(3)='NSET'
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)
97           ENDIF
98           XX=X
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)
102           VINT(231)=Q2MIN
103           XPQ(0)=GLU
104           XPQ(1)=DNV
105           XPQ(-1)=DNV
106           XPQ(2)=UPV
107           XPQ(-2)=UPV
108           XPQ(3)=STR
109           XPQ(-3)=STR
110           XPQ(4)=CHM
111           XPQ(-4)=CHM
112           XPQ(5)=BOT
113           XPQ(-5)=BOT
114           XPQ(6)=TOP
115           XPQ(-6)=TOP
116         ELSE
117           WRITE(MSTU(11),5200) KF,MSTP(56),MSTP(55)
118         ENDIF
119  
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)
126           Q2MX=Q2
127           P2MX=0.36
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)
131           DO 150 KFL=-6,6
132           XPQ(KFL)=XPGA(KFL)
133   150     CONTINUE
134           VINT(231)=P2MX
135         ELSEIF(MSTP(54).EQ.1.AND.MSTP(53).GE.1.AND.MSTP(53).LE.3) THEN
136           CALL PYSTPI(X,Q2,XPPI)
137           DO 160 KFL=-6,6
138           XPQ(KFL)=XPPI(KFL)
139   160     CONTINUE
140         ELSEIF(MSTP(54).EQ.2) THEN
141 C...Call PDFLIB structure functions.
142           PARM(1)='NPTYPE'
143           VALUE(1)=2
144           PARM(2)='NGROUP'
145           VALUE(2)=MSTP(53)/1000
146           PARM(3)='NSET'
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)
151           ENDIF
152           XX=X
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)
156           VINT(231)=Q2MIN
157           XPQ(0)=GLU
158           XPQ(1)=DSEA
159           XPQ(-1)=UPV+DSEA
160           XPQ(2)=UPV+USEA
161           XPQ(-2)=USEA
162           XPQ(3)=STR
163           XPQ(-3)=STR
164           XPQ(4)=CHM
165           XPQ(-4)=CHM
166           XPQ(5)=BOT
167           XPQ(-5)=BOT
168           XPQ(6)=TOP
169           XPQ(-6)=TOP
170         ELSE
171           WRITE(MSTU(11),5200) KF,MSTP(54),MSTP(53)
172         ENDIF
173  
174 C...Anomalous photon structure function call.
175       ELSEIF(KFA.EQ.22.AND.MINT(109).EQ.3) THEN
176         Q2MX=Q2
177         P2MX=PARP(15)**2
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)
183           DO 170 KFL=-6,6
184           XPQ(KFL)=XPGA(KFL)
185   170     CONTINUE
186           VINT(231)=P2MX
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)
192           DO 180 KFL=-6,6
193           XPQ(KFL)=MAX(0.,XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL))
194   180     CONTINUE
195           VINT(231)=P2MX
196         ELSEIF(MSTP(56).EQ.2) THEN
197           IF(MSTP(57).EQ.0) Q2MX=P2MX
198           CALL PYGANO(0,X,Q2MX,P2MX,ALAMGA,XPGA)
199           DO 185 KFL=-6,6
200           XPQ(KFL)=XPGA(KFL)
201   185     CONTINUE
202           VINT(231)=P2MX
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)
206           DO 190 KFL=-6,6
207           XPQ(KFL)=XPGA(KFL)
208   190     CONTINUE
209           VINT(231)=P2MX
210         ELSE
211   200     RKF=11.*RLU(0)
212           KFR=1
213           IF(RKF.GT.1.) KFR=2
214           IF(RKF.GT.5.) KFR=3
215           IF(RKF.GT.6.) KFR=4
216           IF(RKF.GT.10.) KFR=5
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)
221           DO 210 KFL=-6,6
222           XPQ(KFL)=XPGA(KFL)
223   210     CONTINUE
224           VINT(231)=P2MX
225         ENDIF
226  
227 C...Proton structure function call.
228       ELSE
229         IF(MSTP(52).EQ.1.AND.MSTP(51).GE.1.AND.MSTP(51).LE.11) THEN
230           CALL PYSTPR(X,Q2,XPPR)
231           DO 220 KFL=-6,6
232           XPQ(KFL)=XPPR(KFL)
233   220     CONTINUE
234         ELSEIF(MSTP(52).EQ.2) THEN
235 C...Call PDFLIB structure functions.
236           PARM(1)='NPTYPE'
237           VALUE(1)=1
238           PARM(2)='NGROUP'
239           VALUE(2)=MSTP(51)/1000
240           PARM(3)='NSET'
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)
245           ENDIF
246           XX=X
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)
250           VINT(231)=Q2MIN
251           XPQ(0)=GLU
252           XPQ(1)=DNV+DSEA
253           XPQ(-1)=DSEA
254           XPQ(2)=UPV+USEA
255           XPQ(-2)=USEA
256           XPQ(3)=STR
257           XPQ(-3)=STR
258           XPQ(4)=CHM
259           XPQ(-4)=CHM
260           XPQ(5)=BOT
261           XPQ(-5)=BOT
262           XPQ(6)=TOP
263           XPQ(-6)=TOP
264         ELSE
265           WRITE(MSTU(11),5200) KF,MSTP(52),MSTP(51)
266         ENDIF
267       ENDIF
268  
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
272           XPV=XPQ(2)-XPQ(1)
273           XPQ(2)=XPQ(1)
274           XPQ(-2)=XPQ(-1)
275         ELSE
276           XPS=0.5*(XPQ(1)+XPQ(-2))
277           XPV=0.5*(XPQ(2)+XPQ(-1))-XPS
278           XPQ(2)=XPS
279           XPQ(-1)=XPS
280         ENDIF
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
287           XPQ(3)=XPQ(3)+XPV
288           XPQ(-3)=XPQ(-3)+XPV
289         ELSEIF(KFA.EQ.22.AND.MINT(105).EQ.443) THEN
290           XPQ(4)=XPQ(4)+XPV
291           XPQ(-4)=XPQ(-4)+XPV
292           IF(MSTP(55).GE.9) THEN
293             DO 230 KFL=-6,6
294             XPQ(KFL)=0.
295   230       CONTINUE
296           ENDIF
297         ELSE
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
302         ENDIF
303  
304 C...Rescale for gammaVDM by effective gamma -> rho coupling.
305         IF(KFA.EQ.22.AND.MINT(109).EQ.2) THEN
306           DO 240 KFL=-6,6
307           XPQ(KFL)=VINT(281)*XPQ(KFL)
308   240     CONTINUE
309           VINT(232)=VINT(281)*XPV
310         ENDIF
311  
312 C...Isospin conjugation for neutron.
313       ELSEIF(KFA.EQ.2112) THEN
314         XPS=XPQ(1)
315         XPQ(1)=XPQ(2)
316         XPQ(2)=XPS
317         XPS=XPQ(-1)
318         XPQ(-1)=XPQ(-2)
319         XPQ(-2)=XPS
320  
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))
326         XPQ(1)=XPSEA
327         XPQ(2)=XPSEA
328         XPQ(-1)=XPSEA
329         XPQ(-2)=XPSEA
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
333       ENDIF
334  
335 C...Charge conjugation for antiparticle.
336       IF(KF.LT.0) THEN
337         DO 250 KFL=1,25
338         IF(KFL.EQ.21.OR.KFL.EQ.22.OR.KFL.EQ.23.OR.KFL.EQ.25) GOTO 250
339         XPS=XPQ(KFL)
340         XPQ(KFL)=XPQ(-KFL)
341         XPQ(-KFL)=XPS
342   250   CONTINUE
343       ENDIF
344  
345 C...Allow gluon also in position 21.
346       XPQ(21)=XPQ(0)
347  
348 C...Check positivity and reset above maximum allowed flavour.
349       DO 260 KFL=-25,25
350       XPQ(KFL)=MAX(0.,XPQ(KFL))
351       IF(IABS(KFL).GT.MSTP(58).AND.IABS(KFL).LE.8) XPQ(KFL)=0.
352   260 CONTINUE
353  
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;',
357      &' KF =',I5)
358  5200 FORMAT(' Error: unknown structure function; KF, library, set =',
359      &3I5)
360  
361       RETURN
362       END