]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA/pythia/pystfl.F
Merging the VirtualMC branch to the main development branch (HEAD)
[u/mrichter/AliRoot.git] / PYTHIA / pythia / pystfl.F
1  
2 C*********************************************************************
3  
4       SUBROUTINE PYSTFL(KF,X,Q2,XPQ)
5  
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/
16  
17 C...Send everything but protons/neutrons/VMD pions directly to PYSTFU.
18       MINT(92)=0
19       KFA=IABS(KF)
20       IACC=0
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
24       IF(IACC.EQ.0) THEN
25         CALL PYSTFU(KF,X,Q2,XPQ)
26         RETURN
27       ENDIF
28  
29 C...Reset. Check x.
30       DO 100 KFL=-25,25
31       XPQ(KFL)=0.
32   100 CONTINUE
33       IF(X.LE.0..OR.X.GE.1.) THEN
34         WRITE(MSTU(11),5000) X
35         RETURN
36       ENDIF
37  
38 C...Define valence content.
39       KFC=KF
40       NV1=2
41       NV2=1
42       IF(KF.EQ.2212) THEN
43         KFV1=2
44         KFV2=1
45       ELSEIF(KF.EQ.-2212) THEN
46         KFV1=-2
47         KFV2=-1
48       ELSEIF(KF.EQ.2112) THEN
49         KFV1=1
50         KFV2=2
51       ELSEIF(KF.EQ.-2112) THEN
52         KFV1=-1
53         KFV2=-2
54       ELSEIF(KF.EQ.211) THEN
55         NV1=1
56         KFV1=2
57         KFV2=-1
58       ELSEIF(KF.EQ.-211) THEN
59         NV1=1
60         KFV1=-2
61         KFV2=1
62       ELSEIF(MINT(105).LE.223) THEN
63         KFV1=1
64         WTV1=0.2
65         KFV2=2
66         WTV2=0.8
67       ELSEIF(MINT(105).EQ.333) THEN
68         KFV1=3
69         WTV1=1.0
70         KFV2=1
71         WTV2=0.0
72       ELSEIF(MINT(105).EQ.443) THEN
73         KFV1=4
74         WTV1=1.0
75         KFV2=1
76         WTV2=0.0
77       ENDIF
78  
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.
84  
85 C...Large Q2 and large x: naive call is enough.
86       IF(Q2.GT.Q2MN.AND.Q2.GT.Q2B) THEN
87         DO 110 KFL=-25,25
88         XPQ(KFL)=XPA(KFL)
89   110   CONTINUE
90         MINT(92)=1
91  
92 C...Small Q2 and large x: dampen boundary value.
93       ELSEIF(X.GT.XMN) THEN
94  
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
99  
100 C...Separate valence and sea parts of structure function.
101         IF(KFA.NE.22) THEN
102           XFV1=XPA(KFV1)-XPA(-KFV1)
103           XPA(KFV1)=XPA(-KFV1)
104           XFV2=XPA(KFV2)-XPA(-KFV2)
105           XPA(KFV2)=XPA(-KFV2)
106         ELSE
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)
111         ENDIF
112  
113 C...Dampen valence and sea separately. Put back together.
114         DO 120 KFL=-25,25
115         XPQ(KFL)=FS*XPA(KFL)
116   120   CONTINUE
117         IF(KFA.NE.22) THEN
118           XPQ(KFV1)=XPQ(KFV1)+FV*XFV1
119           XPQ(KFV2)=XPQ(KFV2)+FV*XFV2
120         ELSE
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)          
125         ENDIF
126         MINT(92)=2
127  
128 C...Large Q2 and small x: interpolate behaviour.
129       ELSEIF(Q2.GT.Q2MN) THEN
130  
131 C...Evaluate at extremes and define coefficients for interpolation.
132         CALL PYSTFU(KFC,XMN,Q2MN,XPA)
133         VI232A=VINT(232)
134         CALL PYSTFU(KFC,X,Q2B,XPB)
135         VI232B=VINT(232) 
136         FLA=LOG(Q2B/Q2)/LOG(Q2B/Q2MN)
137         FVA=(X/XMN)**0.45*FLA
138         FSA=(X/XMN)**(-0.08)*FLA
139         FB=1.-FLA
140  
141 C...Separate valence and sea parts of structure function.
142         IF(KFA.NE.22) THEN
143           XFVA1=XPA(KFV1)-XPA(-KFV1)
144           XPA(KFV1)=XPA(-KFV1)
145           XFVA2=XPA(KFV2)-XPA(-KFV2)
146           XPA(KFV2)=XPA(-KFV2)
147           XFVB1=XPB(KFV1)-XPB(-KFV1)
148           XPB(KFV1)=XPB(-KFV1)
149           XFVB2=XPB(KFV2)-XPB(-KFV2)
150           XPB(KFV2)=XPB(-KFV2)
151         ELSE
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
160         ENDIF
161  
162 C...Interpolate for valence and sea. Put back together.
163         DO 130 KFL=-25,25
164         XPQ(KFL)=FSA*XPA(KFL)+FB*XPB(KFL)
165   130   CONTINUE
166         IF(KFA.NE.22) THEN
167           XPQ(KFV1)=XPQ(KFV1)+(FVA*XFVA1+FB*XFVB1)
168           XPQ(KFV2)=XPQ(KFV2)+(FVA*XFVA2+FB*XFVB2)
169         ELSE
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)          
174         ENDIF
175         MINT(92)=3
176  
177 C...Small Q2 and small x: dampen boundary value and add term.
178       ELSE
179  
180 C...Evaluate at boundary and define dampening factors.
181         CALL PYSTFU(KFC,XMN,Q2MN,XPA)
182         FB=(XMN-X)*(Q2MN-Q2)/(XMN*Q2MN)
183         FA=1.-FB
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
190  
191 C...Separate valence and sea parts of structure function.
192         IF(KFA.NE.22) THEN
193           XFV1=XPA(KFV1)-XPA(-KFV1)
194           XPA(KFV1)=XPA(-KFV1)
195           XFV2=XPA(KFV2)-XPA(-KFV2)
196           XPA(KFV2)=XPA(-KFV2)
197         ELSE
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)
202         ENDIF
203  
204 C...Dampen valence and sea separately. Add constant terms.
205 C...Put back together.
206         DO 140 KFL=-25,25
207         XPQ(KFL)=FSA*XPA(KFL)
208   140   CONTINUE
209         IF(KFA.NE.22) THEN
210           DO 150 KFL=-3,3
211           XPQ(KFL)=XPQ(KFL)+FSB*WTSB(KFL)
212   150     CONTINUE
213           XPQ(KFV1)=XPQ(KFV1)+(FVA*XFV1+FVB*NV1)
214           XPQ(KFV2)=XPQ(KFV2)+(FVA*XFV2+FVB*NV2)
215         ELSE
216           DO 160 KFL=-3,3
217           XPQ(KFL)=XPQ(KFL)+VINT(281)*FSB*WTSB(KFL)
218   160     CONTINUE
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))          
223         ENDIF
224         XPQ(21)=XPQ(0)
225         MINT(92)=4
226       ENDIF
227  
228 C...Format for error printout.
229  5000 FORMAT(' Error: x value outside physical range; x =',1P,E12.3)
230  
231       RETURN
232       END