]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PYTHIA/pythia/pysave.F
More exact rounding function, but also much slower.
[u/mrichter/AliRoot.git] / PYTHIA / pythia / pysave.F
CommitLineData
fe4da5cc 1
2C*********************************************************************
3
4 SUBROUTINE PYSAVE(ISAVE,IGA)
5
6C...Saves and restores parameter and cross section values for the
7C...3 gamma-p and 6 gamma-gamma alnternatives. Also makes random
8C...choice between alternatives.
9 COMMON/PYSUBS/MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200)
10 COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
11 COMMON/PYINT1/MINT(400),VINT(400)
12 COMMON/PYINT2/ISET(200),KFPR(200,2),COEF(200,20),ICOL(40,4,2)
13 COMMON/PYINT5/NGEN(0:200,3),XSEC(0:200,3)
14 COMMON/PYINT9/DXSEC(0:200)
15 DOUBLE PRECISION DXSEC
16 SAVE /PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,/PYINT5/,/PYINT9/
17 DIMENSION NCP(10),NSUBCP(10,20),MSUBCP(10,20),COEFCP(10,20,20),
18 &NGENCP(10,0:20,3),XSECCP(10,0:20,3),INTCP(10,20),RECP(10,20)
19 DOUBLE PRECISION DXSECC(10,0:20)
20 SAVE NCP,NSUBCP,MSUBCP,COEFCP,NGENCP,XSECCP,INTCP,RECP,DXSECC
21
22C...Save list of subprocesses and cross-section information.
23 IF(ISAVE.EQ.1) THEN
24 ICP=0
25 DO 120 I=1,200
26 IF(MSUB(I).EQ.0.AND.I.NE.96.AND.I.NE.97) GOTO 120
27 ICP=ICP+1
28 NSUBCP(IGA,ICP)=I
29 MSUBCP(IGA,ICP)=MSUB(I)
30 DO 100 J=1,20
31 COEFCP(IGA,ICP,J)=COEF(I,J)
32 100 CONTINUE
33 DO 110 J=1,3
34 NGENCP(IGA,ICP,J)=NGEN(I,J)
35 XSECCP(IGA,ICP,J)=XSEC(I,J)
36 110 CONTINUE
37 DXSECC(IGA,ICP)=DXSEC(I)
38 120 CONTINUE
39 NCP(IGA)=ICP
40 DO 130 J=1,3
41 NGENCP(IGA,0,J)=NGEN(0,J)
42 XSECCP(IGA,0,J)=XSEC(0,J)
43 130 CONTINUE
44 DXSECC(IGA,0)=DXSEC(0)
45C...Save various common process variables.
46 DO 140 J=1,10
47 INTCP(IGA,J)=MINT(40+J)
48 140 CONTINUE
49 INTCP(IGA,11)=MINT(101)
50 INTCP(IGA,12)=MINT(102)
51 INTCP(IGA,13)=MINT(107)
52 INTCP(IGA,14)=MINT(108)
53 INTCP(IGA,15)=MINT(123)
54 RECP(IGA,1)=CKIN(3)
55
56C...Save cross-section information only.
57 ELSEIF(ISAVE.EQ.2) THEN
58 DO 160 ICP=1,NCP(IGA)
59 I=NSUBCP(IGA,ICP)
60 DO 150 J=1,3
61 NGENCP(IGA,ICP,J)=NGEN(I,J)
62 XSECCP(IGA,ICP,J)=XSEC(I,J)
63 150 CONTINUE
64 DXSECC(IGA,ICP)=DXSEC(I)
65 160 CONTINUE
66 DO 170 J=1,3
67 NGENCP(IGA,0,J)=NGEN(0,J)
68 XSECCP(IGA,0,J)=XSEC(0,J)
69 170 CONTINUE
70 DXSECC(IGA,0)=DXSEC(0)
71
72C...Choose between allowed alternatives.
73 ELSEIF(ISAVE.EQ.3.OR.ISAVE.EQ.4) THEN
74 IF(ISAVE.EQ.4) THEN
75 XSUMCP=0.
76 DO 180 IG=1,MINT(121)
77 XSUMCP=XSUMCP+XSECCP(IG,0,1)
78 180 CONTINUE
79 XSUMCP=XSUMCP*RLU(0)
80 DO 190 IG=1,MINT(121)
81 IGA=IG
82 XSUMCP=XSUMCP-XSECCP(IG,0,1)
83 IF(XSUMCP.LE.0.) GOTO 200
84 190 CONTINUE
85 200 CONTINUE
86 ENDIF
87
88C...Restore cross-section information.
89 DO 210 I=1,200
90 MSUB(I)=0
91 210 CONTINUE
92 DO 240 ICP=1,NCP(IGA)
93 I=NSUBCP(IGA,ICP)
94 MSUB(I)=MSUBCP(IGA,ICP)
95 DO 220 J=1,20
96 COEF(I,J)=COEFCP(IGA,ICP,J)
97 220 CONTINUE
98 DO 230 J=1,3
99 NGEN(I,J)=NGENCP(IGA,ICP,J)
100 XSEC(I,J)=XSECCP(IGA,ICP,J)
101 230 CONTINUE
102 DXSEC(I)=DXSECC(IGA,ICP)
103 240 CONTINUE
104 DO 250 J=1,3
105 NGEN(0,J)=NGENCP(IGA,0,J)
106 XSEC(0,J)=XSECCP(IGA,0,J)
107 250 CONTINUE
108 DXSEC(0)=DXSECC(IGA,0)
109
110C...Restore various common process variables.
111 DO 260 J=1,10
112 MINT(40+J)=INTCP(IGA,J)
113 260 CONTINUE
114 MINT(101)=INTCP(IGA,11)
115 MINT(102)=INTCP(IGA,12)
116 MINT(107)=INTCP(IGA,13)
117 MINT(108)=INTCP(IGA,14)
118 MINT(123)=INTCP(IGA,15)
119 CKIN(3)=RECP(IGA,1)
120 CKIN(1)=2.*CKIN(3)
121
122C...Sum up cross-section info (for PYSTAT).
123 ELSEIF(ISAVE.EQ.5) THEN
124 DO 270 I=1,200
125 MSUB(I)=0
126 NGEN(I,1)=0
127 NGEN(I,3)=0
128 XSEC(I,3)=0.
129 270 CONTINUE
130 NGEN(0,1)=0
131 NGEN(0,2)=0
132 NGEN(0,3)=0
133 XSEC(0,3)=0
134 DO 290 IG=1,MINT(121)
135 DO 280 ICP=1,NCP(IG)
136 I=NSUBCP(IG,ICP)
137 IF(MSUBCP(IG,ICP).EQ.1) MSUB(I)=1
138 NGEN(I,1)=NGEN(I,1)+NGENCP(IG,ICP,1)
139 NGEN(I,3)=NGEN(I,3)+NGENCP(IG,ICP,3)
140 XSEC(I,3)=XSEC(I,3)+XSECCP(IG,ICP,3)
141 280 CONTINUE
142 NGEN(0,1)=NGEN(0,1)+NGENCP(IG,0,1)
143 NGEN(0,2)=NGEN(0,2)+NGENCP(IG,0,2)
144 NGEN(0,3)=NGEN(0,3)+NGENCP(IG,0,3)
145 XSEC(0,3)=XSEC(0,3)+XSECCP(IG,0,3)
146 290 CONTINUE
147 ENDIF
148
149 RETURN
150 END