]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA6/pythia6150.f
Unused variables commented out
[u/mrichter/AliRoot.git] / PYTHIA6 / pythia6150.f
1 C*********************************************************************
2 C*********************************************************************
3 C*                                                                  **
4 C*                                                    March 1997    **
5 C*                                                                  **
6 C*           The Lund Monte Carlo for Hadronic Processes            **
7 C*                                                                  **
8 C*                        PYTHIA version 6.1                        **
9 C*                                                                  **
10 C*                        Torbjorn Sjostrand                        **
11 C*                Department of Theoretical Physics 2               **
12 C*                         Lund University                          **
13 C*               Solvegatan 14A, S-223 62 Lund, Sweden              **
14 C*                    phone +46 - 46 - 222 48 16                    **
15 C*                    E-mail torbjorn@thep.lu.se                    **
16 C*                                                                  **
17 C*                          SUSY parts by                           **
18 C*                         Stephen Mrenna                           **
19 C*                   Physics Department, UC Davis                   **
20 C*             One Shields Avenue, Davis, CA 95616, USA             **
21 C*                   phone + 1 - 530 - 752 - 2661                   **
22 C*                E-mail mrenna@physics.ucdavis.edu                 **
23 C*                                                                  **
24 C*         Several parts are written by Hans-Uno Bengtsson          **
25 C*          PYSHOW is written together with Mats Bengtsson          **
26 C*     advanced popcorn baryon production written by Patrik Eden    **
27 C*    code for virtual photons mainly written by Christer Friberg   **
28 C*    code for low-mass strings mainly written by Emanuel Norrbin   **
29 C*        Bose-Einstein code mainly written by Leif Lonnblad        **
30 C*      CTEQ  parton distributions are by the CTEQ collaboration    **
31 C*      GRV 94 parton distributions are by Glueck, Reya and Vogt    **
32 C*   SaS photon parton distributions together with Gerhard Schuler  **
33 C*     g + g and q + qbar -> t + tbar + H code by Zoltan Kunszt     **
34 C*         MSSM Higgs mass calculation code by M. Carena,           **
35 C*           J.R. Espinosa, M. Quiros and C.E.M. Wagner             **
36 C*         PYGAUS adapted from CERN library (K.S. Kolbig)           **
37 C*                                                                  **
38 C*   The latest program version and documentation is found on WWW   **
39 C*            http://www.thep.lu.se/~torbjorn/Pythia.html           **
40 C*                                                                  **
41 C*              Copyright Torbjorn Sjostrand, Lund 1997             **
42 C*                                                                  **
43 C*********************************************************************
44 C*********************************************************************
45 C                                                                    *
46 C  List of subprograms in order of appearance, with main purpose     *
47 C  (S = subroutine, F = function, B = block data)                    *
48 C                                                                    *
49 C  B   PYDATA   to contain all default values                        *
50 C  S   PYTEST   to test the proper functioning of the package        *
51 C  S   PYHEPC   to convert between /PYJETS/ and /HEPEVT/ records     *
52 C                                                                    *
53 C  S   PYINIT   to administer the initialization procedure           *
54 C  S   PYEVNT   to administer the generation of an event             *
55 C  S   PYSTAT   to print cross-section and other information         *
56 C  S   PYINRE   to initialize treatment of resonances                *
57 C  S   PYINBM   to read in beam, target and frame choices            *
58 C  S   PYINKI   to initialize kinematics of incoming particles       *
59 C  S   PYINPR   to set up the selection of included processes        *
60 C  S   PYXTOT   to give total, elastic and diffractive cross-sect.   *
61 C  S   PYMAXI   to find differential cross-section maxima            *
62 C  S   PYPILE   to select multiplicity of pileup events              *
63 C  S   PYSAVE   to save alternatives for gamma-p and gamma-gamma     *
64 C  S   PYGAGA   to handle lepton -> lepton + gamma branchings        *
65 C  S   PYRAND   to select subprocess and kinematics for event        *
66 C  S   PYSCAT   to set up kinematics and colour flow of event        *
67 C  S   PYSSPA   to simulate initial state spacelike showers          *
68 C  S   PYRESD   to perform resonance decays                          *
69 C  S   PYMULT   to generate multiple interactions                    *
70 C  S   PYREMN   to add on target remnants                            *
71 C  S   PYDIFF   to set up kinematics for diffractive events          *
72 C  S   PYDISG   to set up kinematics, remnant and showers for DIS    *
73 C  S   PYDOCU   to compute cross-sections and handle documentation   *
74 C  S   PYFRAM   to perform boosts between different frames           *
75 C  S   PYWIDT   to calculate full and partial widths of resonances   *
76 C  S   PYOFSH   to calculate partial width into off-shell channels   *
77 C  S   PYRECO   to handle colour reconnection in W+W- events         *
78 C  S   PYKLIM   to calculate borders of allowed kinematical region   *
79 C  S   PYKMAP   to construct value of kinematical variable           *
80 C  S   PYSIGH   to calculate differential cross-sections             *
81 C  S   PYPDFU   to evaluate parton distributions                     *
82 C  S   PYPDFL   to evaluate parton distributions at low x and Q^2    *
83 C  S   PYPDEL   to evaluate electron parton distributions            *
84 C  S   PYPDGA   to evaluate photon parton distributions (generic)    *
85 C  S   PYGGAM   to evaluate photon parton distributions (SaS sets)   *
86 C  S   PYGVMD   to evaluate VMD part of photon parton distributions  *
87 C  S   PYGANO   to evaluate anomalous part of photon pdf's           *
88 C  S   PYGBEH   to evaluate Bethe-Heitler part of photon pdf's       *
89 C  S   PYGDIR   to evaluate direct contribution to photon pdf's      *
90 C  S   PYPDPI   to evaluate pion parton distributions                *
91 C  S   PYPDPR   to evaluate proton parton distributions              *
92 C  F   PYCTEQ   to evaluate the CTEQ 3 proton parton distributions   *
93 C  S   PYGRVL   to evaluate the GRV 94L proton parton distributions  *
94 C  S   PYGRVM   to evaluate the GRV 94M proton parton distributions  *
95 C  S   PYGRVD   to evaluate the GRV 94D proton parton distributions  *
96 C  F   PYGRVV   auxiliary to the PYGRV* routines                     *
97 C  F   PYGRVW   auxiliary to the PYGRV* routines                     *
98 C  F   PYGRVS   auxiliary to the PYGRV* routines                     *
99 C  F   PYCT5L   to evaluate the CTEQ 5L proton parton distributions  *
100 C  F   PYCT5M   to evaluate the CTEQ 5M1 proton parton distributions *
101 C  S   PYPDPO   to evaluate old proton parton distributions          *
102 C  F   PYHFTH   to evaluate threshold factor for heavy flavour       *
103 C  S   PYSPLI   to find flavours left in hadron when one removed     *
104 C  F   PYGAMM   to evaluate ordinary Gamma function Gamma(x)         *
105 C  S   PYWAUX   to evaluate auxiliary functions W1(s) and W2(s)      *
106 C  S   PYI3AU   to evaluate auxiliary function I3(s,t,u,v)           *
107 C  F   PYSPEN   to evaluate Spence (dilogarithm) function Sp(x)      *
108 C  S   PYQQBH   to evaluate matrix element for g + g -> Q + Qbar + H *
109 C                                                                    *
110 C  S   PYMSIN   to initialize the supersymmetry simulation           *
111 C  S   PYAPPS   to determine MSSM parameters from SUGRA input        *
112 C  F   PYRNMQ   to determine running quark masses                    *
113 C  F   PYRNMT   to determine running top mass                        *
114 C  S   PYTHRG   to calculate sfermion third-gen. mass eigenstates    *
115 C  S   PYINOM   to calculate neutralino/chargino mass eigenstates    *
116 C  F   PYRNM3   to determine running M3, gluino mass                 *
117 C  S   PYEIG4   to calculate eigenvalues and -vectors in 4*4 matrix  *
118 C  S   PYHGGM   to determine Higgs mass spectrum                     *
119 C  S   PYSUBH   to determine Higgs masses in the MSSM                *
120 C  S   PYPOLE   to determine Higgs masses in the MSSM                *
121 C  S   PYVACU   to determine Higgs masses in the MSSM                *
122 C  S   PYRGHM   auxiliary to PYVACU                                  *
123 C  S   PYGFXX   auxiliary to PYRGHM                                  *
124 C  F   PYFINT   auxiliary to PYVACU                                  *
125 C  F   PYFISB   auxiliary to PYFINT                                  *
126 C  S   PYSFDC   to calculate sfermion decay partial widths           *
127 C  S   PYGLUI   to calculate gluino decay partial widths             *
128 C  S   PYTBBN   to calculate 3-body decay of gluino to neutralino    *
129 C  S   PYTBBC   to calculate 3-body decay of gluino to chargino      *
130 C  S   PYNJDC   to calculate neutralino decay partial widths         *
131 C  S   PYCJDC   to calculate chargino decay partial widths           *
132 C  F   PYXXZ5   auxiliary for neutralino 3-body decay                *
133 C  F   PYXXW5   auxiliary for ino charge change 3-body decay         *
134 C  F   PYXXGA   auxiliary for ino -> ino + gamma decay               *
135 C  F   PYX2XG   auxiliary for ino -> ino + gauge boson decay         *
136 C  F   PYX2XH   auxiliary for ino -> ino + Higgs decay               *
137 C  F   PYXXZ2   auxiliary for chargino 3-body decay                  *
138 C  S   PYHEXT   to calculate non-SM Higgs decay partial widths       *
139 C  F   PYH2XX   auxiliary for H -> ino + ino decay                   *
140 C  F   PYGAUS   to perform Gaussian integration                      *
141 C  F   PYSIMP   to perform Simpson integration                       *
142 C  F   PYLAMF   to evaluate the lambda kinematics function           *
143 C  S   PYTBDY   to perform 3-body decay of gauginos                  *
144 C  S   PYTECM   to calculate techni_rho/omega masses                 *
145 C  S   PYEICG   to calculate eigenvalues of a 4*4 complex matrix     *
146 C                                                                    *
147 C  S   PY1ENT   to fill one entry (= parton or particle)             *
148 C  S   PY2ENT   to fill two entries                                  *
149 C  S   PY3ENT   to fill three entries                                *
150 C  S   PY4ENT   to fill four entries                                 *
151 C  S   PY2FRM   to interface to generic two-fermion generator        *
152 C  S   PY4FRM   to interface to generic four-fermion generator       *
153 C  S   PY6FRM   to interface to generic six-fermion generator        *
154 C  S   PY4JET   to generate a shower from a given 4-parton config    *
155 C  S   PY4JTW   to evaluate the weight od a shower history for above *
156 C  S   PY4JTS   to set up the parton configuration for above         *
157 C  S   PYJOIN   to connect entries with colour flow information      *
158 C  S   PYGIVE   to fill (or query) commonblock variables             *
159 C  S   PYEXEC   to administrate fragmentation and decay chain        *
160 C  S   PYPREP   to rearrange showered partons along strings          *
161 C  S   PYSTRF   to do string fragmentation of jet system             *
162 C  S   PYINDF   to do independent fragmentation of one or many jets  *
163 C  S   PYDECY   to do the decay of a particle                        *
164 C  S   PYDCYK   to select parton and hadron flavours in decays       *
165 C  S   PYKFDI   to select parton and hadron flavours in fragm        *
166 C  S   PYNMES   to select number of popcorn mesons                   *
167 C  S   PYKFIN   to calculate falvour prod. ratios from input params. *
168 C  S   PYPTDI   to select transverse momenta in fragm                *
169 C  S   PYZDIS   to select longitudinal scaling variable in fragm     *
170 C  S   PYSHOW   to do timelike parton shower evolution               *
171 C  S   PYBOEI   to include Bose-Einstein effects (crudely)           *
172 C  S   PYBESQ   auxiliary to PYBOEI                                  *
173 C  F   PYMASS   to give the mass of a particle or parton             *
174 C  F   PYMRUN   to give the running MSbar mass of a quark            *
175 C  S   PYNAME   to give the name of a particle or parton             *
176 C  F   PYCHGE   to give three times the electric charge              *
177 C  F   PYCOMP   to compress standard KF flavour code to internal KC  *
178 C  S   PYERRM   to write error messages and abort faulty run         *
179 C  F   PYALEM   to give the alpha_electromagnetic value              *
180 C  F   PYALPS   to give the alpha_strong value                       *
181 C  F   PYANGL   to give the angle from known x and y components      *
182 C  F   PYR      to provide a random number generator                 *
183 C  S   PYRGET   to save the state of the random number generator     *
184 C  S   PYRSET   to set the state of the random number generator      *
185 C  S   PYROBO   to rotate and/or boost an event                      *
186 C  S   PYEDIT   to remove unwanted entries from record               *
187 C  S   PYLIST   to list event record or particle data                *
188 C  S   PYLOGO   to write a logo                                      *
189 C  S   PYUPDA   to update particle data                              *
190 C  F   PYK      to provide integer-valued event information          *
191 C  F   PYP      to provide real-valued event information             *
192 C  S   PYSPHE   to perform sphericity analysis                       *
193 C  S   PYTHRU   to perform thrust analysis                           *
194 C  S   PYCLUS   to perform three-dimensional cluster analysis        *
195 C  S   PYCELL   to perform cluster analysis in (eta, phi, E_T)       *
196 C  S   PYJMAS   to give high and low jet mass of event               *
197 C  S   PYFOWO   to give Fox-Wolfram moments                          *
198 C  S   PYTABU   to analyze events, with tabular output               *
199 C                                                                    *
200 C  S   PYEEVT   to administrate the generation of an e+e- event      *
201 C  S   PYXTEE   to give the total cross-section at given CM energy   *
202 C  S   PYRADK   to generate initial state photon radiation           *
203 C  S   PYXKFL   to select flavour of primary qqbar pair              *
204 C  S   PYXJET   to select (matrix element) jet multiplicity          *
205 C  S   PYX3JT   to select kinematics of three-jet event              *
206 C  S   PYX4JT   to select kinematics of four-jet event               *
207 C  S   PYXDIF   to select angular orientation of event               *
208 C  S   PYONIA   to perform generation of onium decay to gluons       *
209 C                                                                    *
210 C  S   PYBOOK   to book a histogram                                  *
211 C  S   PYFILL   to fill an entry in a histogram                      *
212 C  S   PYFACT   to multiply histogram contents by a factor           *
213 C  S   PYOPER   to perform operations between histograms             *
214 C  S   PYHIST   to print and reset all histograms                    *
215 C  S   PYPLOT   to print a single histogram                          *
216 C  S   PYNULL   to reset contents of a single histogram              *
217 C  S   PYDUMP   to dump histogram contents onto a file               *
218 C                                                                    *
219 C  S   PYKCUT   dummy routine for user kinematical cuts              *
220 C  S   PYEVWT   dummy routine for weighting events                   *
221 C  S   PYUPIN   dummy routine to initialize a user process           *
222 C  S   PYUPEV   dummy routine to generate a user process event       *
223 C  S   PDFSET   dummy routine to be removed when using PDFLIB        *
224 C  S   STRUCTM  dummy routine to be removed when using PDFLIB        *
225 C  S   STRUCTP  dummy routine to be removed when using PDFLIB        *
226 C  S   PYTAUD   dummy routine for interface to tau decay libraries   *
227 C  S   PYTIME   dummy routine for giving date and time               *
228 C                                                                    *
229 C*********************************************************************
230  
231 C*********************************************************************
232  
233 C...PYDATA
234 C...Default values for switches and parameters,
235 C...and particle, decay and process data.
236  
237       BLOCK DATA PYDATA
238  
239 C...Double precision and integer declarations.
240       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
241       IMPLICIT INTEGER(I-N)
242       INTEGER PYK,PYCHGE,PYCOMP
243 C...Commonblocks.
244       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
245       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
246       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
247       COMMON/PYDAT4/CHAF(500,2)
248       CHARACTER CHAF*16
249       COMMON/PYDATR/MRPY(6),RRPY(100)
250       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
251       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
252       COMMON/PYINT1/MINT(400),VINT(400)
253       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
254       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
255       COMMON/PYINT4/MWID(500),WIDS(500,5)
256       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
257       COMMON/PYINT6/PROC(0:500)
258       CHARACTER PROC*28
259       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
260       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
261       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
262      &SFMIX(16,4)
263       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
264       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYDATR/,/PYSUBS/,
265      &/PYPARS/,/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,
266      &/PYINT6/,/PYINT7/,/PYMSSM/,/PYSSMT/,/PYBINS/
267  
268 C...PYDAT1, containing status codes and most parameters.
269       DATA MSTU/
270      &   0,    0,    0, 4000,10000,  500, 4000,    0,    0,    2,
271      1   6,    1,    1,    0,    1,    1,    0,    0,    0,    0,
272      2   2,   10,    0,    0,    1,   10,    0,    0,    0,    0,
273      3   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
274      4   2,    2,    1,    4,    2,    1,    1,    0,    0,    0,
275      5  25,   24,    0,    1,    0,    0,    0,    0,    0,    0,
276      6   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
277      7  30*0,
278      1   1,    0,    0,    0,    0,    0,    0,    0,    0,    0,
279      2   1,    5,    3,    5,    0,    0,    0,    0,    0,    0,
280      &  80*0/
281       DATA (PARU(I),I=1,100)/
282      &  3.141592653589793D0, 6.283185307179586D0,
283      &  0.197327D0, 5.06773D0, 0.389380D0, 2.56819D0,  4*0D0,
284      1  0.001D0, 0.09D0, 0.01D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
285      2  0D0,   0D0,   0D0,   0D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0,
286      3  0D0,   0D0,   0D0,   0D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0,
287      4  2.0D0,  1.0D0, 0.25D0,  2.5D0, 0.05D0,
288      4  0D0,   0D0, 0.0001D0, 0D0,   0D0,
289      5  2.5D0,1.5D0,7.0D0,1.0D0,0.5D0,2.0D0,3.2D0, 0D0, 0D0, 0D0,
290      6  40*0D0/
291       DATA (PARU(I),I=101,200)/
292      &  0.00729735D0, 0.232D0, 0.007764D0, 1.0D0, 1.16639D-5,
293      &  0D0, 0D0, 0D0, 0D0,  0D0,
294      1  0.20D0, 0.25D0, 1.0D0, 4.0D0, 10D0, 0D0, 0D0,  0D0, 0D0, 0D0,
295      2 -0.693D0, -1.0D0, 0.387D0, 1.0D0, -0.08D0,
296      2 -1.0D0,  1.0D0,  1.0D0,  1.0D0,  0D0,
297      3  1.0D0,-1.0D0, 1.0D0,-1.0D0, 1.0D0,  0D0,  0D0, 0D0, 0D0, 0D0,
298      4  5.0D0, 1.0D0, 1.0D0,  0D0, 1.0D0, 1.0D0,  0D0, 0D0, 0D0, 0D0,
299      5  1.0D0, 0D0, 0D0, 0D0, 1000D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0,0D0,
300      6  1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0,  0D0,  0D0, 0D0, 0D0, 0D0,
301      7  1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0, 0D0,0D0,0D0,
302      8  1.0D0, 1.0D0, 1.0D0, 0.0D0, 0.0D0, 1.0D0, 1.0D0, 0D0,0D0,0D0,
303      9  0D0,  0D0,  0D0,  0D0, 1.0D0,  0D0,  0D0, 0D0, 0D0, 0D0/
304       DATA MSTJ/
305      &  1,    3,    0,    0,    0,    0,    0,    0,    0,    0,
306      1  4,    2,    0,    1,    0,    2,    2,    0,    0,    0,
307      2  2,    1,    1,    2,    1,    2,    2,    0,    0,    0,
308      3  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
309      4  2,    2,    4,    2,    5,    3,    3,    0,    0,    3,
310      5  0,    3,    0,    2,    0,    0,    1,    0,    0,    0,
311      6  40*0,
312      &  5,    2,    7,    5,    1,    1,    0,    2,    0,    2,
313      1  0,    0,    0,    0,    1,    1,    0,    0,    0,    0,
314      2  80*0/
315       DATA PARJ/
316      &  0.10D0, 0.30D0, 0.40D0, 0.05D0, 0.50D0,
317      &  0.50D0, 0.50D0,   0.6D0,   1.2D0,   0.6D0,
318      1  0.50D0,0.60D0,0.75D0, 0D0, 0D0, 0D0, 0D0, 1.0D0, 1.0D0, 0D0,
319      2  0.36D0, 1.0D0,0.01D0, 2.0D0,1.0D0,0.4D0, 0D0, 0D0, 0D0, 0D0,
320      3  0.10D0, 1.0D0, 0.8D0, 1.5D0,0D0,2.0D0,0.2D0, 0D0,0.08D0,0D0,
321      4  0.3D0, 0.58D0, 0.5D0, 0.9D0,0.5D0,1.0D0,1.0D0,1.0D0,0D0,0D0,
322      5  0.77D0, 0.77D0, 0.77D0, -0.05D0, -0.005D0,
323      5 -0.00001D0, -0.00001D0, -0.00001D0, 1.0D0, 0D0,
324      6  4.5D0, 0.7D0, 0D0,0.003D0, 0.5D0, 0.5D0, 0D0, 0D0, 0D0, 0D0,
325      7  10D0, 1000D0, 100D0, 1000D0, 0D0, 0.7D0,10D0, 0D0, 0D0, 0D0,
326      8  0.29D0, 1.0D0, 1.0D0,  0D0,  10D0, 10D0, 0D0, 0D0, 0D0,1D-4,
327      9  0.02D0, 1.0D0, 0.2D0,  0D0,  0D0,  0D0,  0D0, 0D0, 0D0, 0D0,
328      &  0D0,  0D0,  0D0,  0D0,   0D0,   0D0,  0D0,  0D0,  0D0,  0D0,
329      1  0D0,  0D0,  0D0,  0D0,   0D0,   0D0,  0D0,  0D0,  0D0,  0D0,
330      2  1.0D0, 0.25D0,91.187D0,2.489D0, 0.01D0,
331      2  2.0D0,  1.0D0, 0.25D0,0.002D0,   0D0,
332      3  0D0, 0D0, 0D0, 0D0, 0.01D0, 0.99D0, 0D0, 0D0,  0.2D0,   0D0,
333      4  10*0D0,
334      5  10*0D0,
335      6  10*0D0,
336      7  0D0, 200D0, 200D0, .333D0, .05D0, 0D0, 0D0, 0D0, 0D0, -0.693D0, 
337      8 -1.0D0, 0.387D0, 1.0D0, -0.08D0, -1.0D0,  
338      8  1.0D0,  1.0D0, -0.693D0, -1.0D0, 0.387D0, 
339      9  1.0D0, -0.08D0, -1.0D0,   1.0D0, 1.0D0,  
340      9  5*0D0/  
341  
342 C...PYDAT2, with particle data and flavour treatment parameters.
343       DATA (KCHG(I,1),I=   1, 500)/-1,2,-1,2,-1,2,-1,2,2*0,-3,0,-3,0,   
344      &-3,0,-3,6*0,3,9*0,3,2*0,3,0,-1,12*0,3,2*0,3,5*0,2*6,3,20*0,2,-1,  
345      &20*0,4*3,8*0,3*3,4*0,3*3,3*0,3*3,7*0,3*3,3*0,3*3,3*0,-2,-3,2*1,   
346      &3*0,4,3*3,6,2*-2,2*-3,0,2*1,2*0,2*3,-2,2*-3,2*0,-3,2*1,2*0,3,0,   
347      &2*4,2*3,2*6,3,2*1,2*0,2*3,2*0,4,2*3,2*6,2*3,6,2*-2,2*-3,0,-3,0,   
348      &2*1,2*0,2*3,0,3,2*-2,2*-3,2*0,2*-3,0,2*1,2*0,2*3,2*0,2*3,-2,2*-3, 
349      &2*0,2*-3,2*0,-3,2*0,2*3,4*0,2*3,2*0,2*3,2*0,2*3,4*0,2*3,2*0,2*3,  
350      &3*0,3,2*0,3,0,3,0,3,2*0,3,0,3,3*0,-1,2,-1,2,-1,2,-3,0,-3,0,-3,    
351      &4*0,3,2*0,3,0,-1,2,-1,2,-1,2,-3,0,-3,0,-3,0,-1,2,-3,164*0/        
352       DATA (KCHG(I,2),I=   1, 500)/8*1,12*0,2,16*0,2,1,113*0,-1,0,2*-1, 
353      &3*0,-1,4*0,2*-1,3*0,2*-1,4*0,-1,5*0,2*-1,4*0,2*-1,5*0,2*-1,6*0,   
354      &-1,7*0,2*-1,5*0,2*-1,6*0,2*-1,7*0,2*-1,8*0,-1,56*0,6*1,6*0,2,7*0, 
355      &6*1,6*0,2*1,165*0/                                                
356       DATA (KCHG(I,3),I=   1, 500)/8*1,2*0,8*1,5*0,1,9*0,1,2*0,1,0,2*1, 
357      &11*0,1,2*0,1,5*0,6*1,15*0,1,0,2*1,20*0,4*1,5*0,6*1,4*0,9*1,4*0,   
358      &12*1,3*0,102*1,2*0,2*1,2*0,4*1,2*0,6*1,2*0,8*1,3*0,1,0,2*1,0,3*1, 
359      &0,4*1,3*0,12*1,3*0,1,2*0,1,0,16*1,163*0/                          
360       DATA (KCHG(I,4),I=   1, 293)/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 
361      &16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,   
362      &37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,   
363      &58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,   
364      &79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,   
365      &100,110,111,113,115,130,210,211,213,215,220,221,223,225,310,311,  
366      &313,315,321,323,325,330,331,333,335,411,413,415,421,423,425,431,  
367      &433,435,440,441,443,445,511,513,515,521,523,525,531,533,535,541,  
368      &543,545,551,553,555,1103,1114,2101,2103,2110,2112,2114,2203,2210, 
369      &2212,2214,2224,3101,3103,3112,3114,3122,3201,3203,3212,3214,3222, 
370      &3224,3303,3312,3314,3322,3324,3334,4101,4103,4112,4114,4122,4132, 
371      &4201,4203,4212,4214,4222,4224,4232,4301,4303,4312,4314,4322,4324, 
372      &4332,4334,4403,4412,4414,4422,4424,4432,4434,4444,5101,5103,5112, 
373      &5114,5122,5132,5142,5201,5203,5212,5214,5222,5224,5232,5242,5301, 
374      &5303,5312,5314,5322,5324,5332,5334,5342,5401,5403,5412,5414,5422, 
375      &5424,5432,5434,5442,5444,5503,5512,5514,5522,5524,5532,5534,5542, 
376      &5544,5554,10111,10113,10211,10213,10221,10223,10311,10313,10321,  
377      &10323,10331,10333,10411,10413,10421,10423,10431,10433,10441,      
378      &10443,10511,10513,10521,10523,10531,10533,10541,10543,10551,      
379      &10553,20113,20213,20223,20313,20323,20333,20413,20423,20433/      
380       DATA (KCHG(I,4),I= 294, 500)/20443,20513,20523,20533,20543,20553, 
381      &100443,100553,1000001,1000002,1000003,1000004,1000005,1000006,    
382      &1000011,1000012,1000013,1000014,1000015,1000016,1000021,1000022,  
383      &1000023,1000024,1000025,1000035,1000037,1000039,2000001,2000002,  
384      &2000003,2000004,2000005,2000006,2000011,2000012,2000013,2000014,  
385      &2000015,2000016,4000001,4000002,4000011,4000012,163*0/            
386       DATA (PMAS(I,1),I=   1, 211)/0.33D0,0.33D0,0.50D0,1.50D0,    
387      &4.80D0,175D0,2*400D0,2*0D0,0.00051D0,0D0,0.10566D0,0D0,1.777D0,  
388      &0D0,400D0,5*0D0,91.187D0,80.33D0,80D0,6*0D0,500D0,900D0,500D0,        
389      &3*300D0,350D0,200D0,5000D0,10*0D0,3*110D0,3*210D0,4*0D0,2*200D0,  
390      &4*750D0,16*0D0,1D0,2D0,5D0,16*0D0,0.13498D0,0.7685D0,1.318D0,     
391      &0.49767D0,0D0,0.13957D0,0.7669D0,1.318D0,0D0,0.54745D0,0.78194D0, 
392      &1.275D0,2*0.49767D0,0.8961D0,1.432D0,0.4936D0,0.8916D0,1.425D0,   
393      &0D0,0.95777D0,1.0194D0,1.525D0,1.8693D0,2.01D0,2.46D0,1.8645D0,   
394      &2.0067D0,2.46D0,1.9685D0,2.1124D0,2.5735D0,0D0,2.9798D0,          
395      &3.09688D0,3.5562D0,5.2792D0,5.3248D0,5.83D0,5.2789D0,5.3248D0,    
396      &5.83D0,5.3693D0,5.4163D0,6.07D0,6.594D0,6.602D0,7.35D0,9.4D0,     
397      &9.4603D0,9.9132D0,0.77133D0,1.234D0,0.57933D0,0.77133D0,0D0,      
398      &0.93957D0,1.233D0,0.77133D0,0D0,0.93827D0,1.232D0,1.231D0,        
399      &0.80473D0,0.92953D0,1.19744D0,1.3872D0,1.11568D0,0.80473D0,       
400      &0.92953D0,1.19255D0,1.3837D0,1.18937D0,1.3828D0,1.09361D0,        
401      &1.3213D0,1.535D0,1.3149D0,1.5318D0,1.67245D0,1.96908D0,2.00808D0, 
402      &2.4521D0,2.5D0,2.2849D0,2.4703D0,1.96908D0,2.00808D0,2.4535D0,    
403      &2.5D0,2.4529D0,2.5D0,2.4656D0,2.15432D0,2.17967D0,2.55D0,2.63D0,  
404      &2.55D0,2.63D0,2.704D0,2.8D0,3.27531D0,3.59798D0,3.65648D0,        
405      &3.59798D0,3.65648D0,3.78663D0,3.82466D0,4.91594D0,5.38897D0/      
406       DATA (PMAS(I,1),I= 212, 500)/5.40145D0,5.8D0,5.81D0,5.641D0,      
407      &5.84D0,7.00575D0,5.38897D0,5.40145D0,5.8D0,5.81D0,5.8D0,5.81D0,   
408      &5.84D0,7.00575D0,5.56725D0,5.57536D0,5.96D0,5.97D0,5.96D0,5.97D0, 
409      &6.12D0,6.13D0,7.19099D0,6.67143D0,6.67397D0,7.03724D0,7.0485D0,   
410      &7.03724D0,7.0485D0,7.21101D0,7.219D0,8.30945D0,8.31325D0,         
411      &10.07354D0,10.42272D0,10.44144D0,10.42272D0,10.44144D0,           
412      &10.60209D0,10.61426D0,11.70767D0,11.71147D0,15.11061D0,0.9835D0,  
413      &1.231D0,0.9835D0,1.231D0,1D0,1.17D0,1.429D0,1.29D0,1.429D0,       
414      &1.29D0,2*1.4D0,2.272D0,2.424D0,2.272D0,2.424D0,2.5D0,2.536D0,     
415      &3.4151D0,3.46D0,5.68D0,5.73D0,5.68D0,5.73D0,5.92D0,5.97D0,7.25D0, 
416      &7.3D0,9.8598D0,9.875D0,2*1.23D0,1.282D0,2*1.402D0,1.427D0,        
417      &2*2.372D0,2.56D0,3.5106D0,2*5.78D0,6.02D0,7.3D0,9.8919D0,3.686D0, 
418      &10.0233D0,32*500D0,4*400D0,163*0D0/                               
419       DATA (PMAS(I,2),I=   1, 500)/5*0D0,1.39883D0,16*0D0,2.48009D0,    
420      &2.07002D0,0.00237D0,6*0D0,14.54848D0,0D0,16.6708D0,8.42842D0,     
421      &4.92026D0,5.75967D0,0.10158D0,0.39162D0,417.4648D0,10*0D0,        
422      &0.04104D0,0.0105D0,0.02807D0,0.82101D0,0.64973D0,0.1575D0,4*0D0,  
423      &0.88161D0,0.88001D0,19.33905D0,39*0D0,0.151D0,0.107D0,3*0D0,      
424      &0.149D0,0.107D0,2*0D0,0.00843D0,0.185D0,2*0D0,0.0505D0,0.109D0,   
425      &0D0,0.0498D0,0.098D0,0D0,0.0002D0,0.00443D0,0.076D0,2*0D0,        
426      &0.023D0,2*0D0,0.023D0,2*0D0,0.015D0,0D0,0.0013D0,0D0,0.002D0,     
427      &2*0D0,0.02D0,2*0D0,0.02D0,2*0D0,0.02D0,2*0D0,0.02D0,4*0D0,0.12D0, 
428      &4*0D0,0.12D0,3*0D0,2*0.12D0,3*0D0,0.0394D0,4*0D0,0.036D0,0D0,     
429      &0.0358D0,2*0D0,0.0099D0,0D0,0.0091D0,74*0D0,0.06D0,0.142D0,       
430      &0.06D0,0.142D0,0D0,0.36D0,0.287D0,0.09D0,0.287D0,0.09D0,0.25D0,   
431      &0.08D0,0.05D0,0.02D0,0.05D0,0.02D0,0.05D0,0D0,0.014D0,0.01D0,     
432      &8*0.05D0,0D0,0.01D0,2*0.4D0,0.025D0,2*0.174D0,0.053D0,3*0.05D0,   
433      &0.0009D0,4*0.05D0,3*0D0,19*1D0,0D0,7*1D0,0D0,1D0,0D0,1D0,0D0,     
434      &2.65171D0,2.65499D0,0.42901D0,0.41917D0,163*0D0/                  
435       DATA (PMAS(I,3),I=   1, 500)/5*0D0,13.98835D0,16*0D0,24.8009D0,   
436      &20.70015D0,0.02369D0,6*0D0,145.48484D0,0D0,166.70801D0,           
437      &84.28416D0,49.20256D0,57.59671D0,1.0158D0,3.91624D0,4174.64797D0, 
438      &10*0D0,0.41042D0,0.10504D0,0.28068D0,8.21005D0,6.49728D0,         
439      &1.57496D0,4*0D0,8.81606D0,8.80013D0,193.39048D0,39*0D0,0.4D0,     
440      &0.25D0,3*0D0,0.4D0,0.25D0,2*0D0,0.1D0,0.17D0,2*0D0,0.2D0,0.12D0,  
441      &0D0,0.2D0,0.12D0,0D0,0.002D0,0.015D0,0.2D0,2*0D0,0.12D0,2*0D0,    
442      &0.12D0,2*0D0,0.05D0,0D0,0.005D0,0D0,0.01D0,2*0D0,0.05D0,2*0D0,    
443      &0.05D0,2*0D0,0.05D0,2*0D0,0.05D0,4*0D0,0.14D0,4*0D0,0.14D0,3*0D0, 
444      &2*0.14D0,3*0D0,0.04D0,4*0D0,0.035D0,0D0,0.035D0,2*0D0,0.05D0,0D0, 
445      &0.05D0,74*0D0,0.05D0,0.25D0,0.05D0,0.25D0,0D0,0.2D0,0.4D0,        
446      &0.005D0,0.4D0,0.01D0,0.35D0,0.001D0,0.1D0,0.08D0,0.1D0,0.08D0,    
447      &0.1D0,0D0,0.05D0,0.02D0,6*0.1D0,0.05D0,0.1D0,0D0,0.02D0,2*0.3D0,  
448      &0.05D0,2*0.3D0,0.02D0,2*0.1D0,0.03D0,0.001D0,4*0.1D0,3*0D0,       
449      &19*10D0,0.00001D0,7*10D0,0.00001D0,10D0,0.00001D0,10D0,0.00001D0, 
450      &26.51715D0,26.54994D0,4.29011D0,4.19173D0,163*0D0/                
451       DATA (PMAS(I,4),I=   1, 500)/12*0D0,658654D0,0D0,0.0872D0,68*0D0, 
452      &0.1D0,0.387D0,16*0D0,0.00003D0,2*0D0,15500D0,0D0,7804.5D0,6*0D0,  
453      &26.762D0,3*0D0,3709D0,6*0D0,0.317D0,2*0D0,0.1244D0,2*0D0,0.14D0,  
454      &6*0D0,0.468D0,2*0D0,0.462D0,2*0D0,0.483D0,2*0D0,0.15D0,19*0D0,    
455      &44.34D0,0D0,78.88D0,4*0D0,23.96D0,2*0D0,49.1D0,0D0,87.1D0,0D0,    
456      &24.6D0,4*0D0,0.0618D0,0.029D0,6*0D0,0.106D0,6*0D0,0.019D0,2*0D0,  
457      &7*0.1D0,4*0D0,0.342D0,2*0.387D0,6*0D0,2*0.387D0,6*0D0,0.387D0,    
458      &0D0,0.387D0,2*0D0,8*0.387D0,0D0,9*0.387D0,83*0D0,163*0D0/         
459       DATA PARF/
460      &  0.5D0,0.25D0, 0.5D0,0.25D0, 1D0, 0.5D0,  0D0,  0D0,  0D0, 0D0,
461      1  0.5D0,  0D0, 0.5D0,  0D0,  1D0,  1D0,  0D0,  0D0,  0D0, 0D0,
462      2  0.5D0,  0D0, 0.5D0,  0D0,  1D0,  1D0,  0D0,  0D0,  0D0, 0D0,
463      3  0.5D0,  0D0, 0.5D0,  0D0,  1D0,  1D0,  0D0,  0D0,  0D0, 0D0,
464      4  0.5D0,  0D0, 0.5D0,  0D0,  1D0,  1D0,  0D0,  0D0,  0D0, 0D0,
465      5  0.5D0,  0D0, 0.5D0,  0D0,  1D0,  1D0,  0D0,  0D0,  0D0, 0D0,
466      6  0.75D0, 0.5D0, 0D0,0.1667D0,0.0833D0,0.1667D0,0D0,0D0,0D0, 0D0,
467      7  0D0,  0D0,  1D0,0.3333D0,0.6667D0,0.3333D0,0D0,0D0,0D0, 0D0,
468      8  0D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0, 0D0,
469      9  0.0099D0, 0.0056D0, 0.199D0, 1.35D0, 4.5D0, 5*0D0,
470      & 0.325D0,0.325D0,0.5D0,1.6D0, 5.0D0,  0D0,  0D0,  0D0,  0D0, 0D0,
471      1 0D0,0.11D0,0.16D0,0.048D0,0.50D0,0.45D0,0.55D0,0.60D0,0D0,0D0,
472      2 0.2D0, 0.1D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0, 0D0,
473      3 60*0D0,
474      4 0.2D0,  0.5D0,  8*0D0,
475      5 1800*0D0/
476       DATA ((VCKM(I,J),J=1,4),I=1,4)/
477      &  0.95113D0,  0.04884D0,  0.00003D0,  0.00000D0,
478      &  0.04884D0,  0.94940D0,  0.00176D0,  0.00000D0,
479      &  0.00003D0,  0.00176D0,  0.99821D0,  0.00000D0,
480      &  0.00000D0,  0.00000D0,  0.00000D0,  1.00000D0/
481  
482 C...PYDAT3, with particle decay parameters and data.        
483       DATA (MDCY(I,1),I=   1, 500)/5*0,3*1,6*0,1,0,1,5*0,3*1,6*0,1,0,   
484      &7*1,10*0,6*1,4*0,3*1,19*0,3*1,16*0,3*1,3*0,2*1,0,7*1,0,2*1,0,     
485      &12*1,0,18*1,0,1,4*0,1,3*0,2*1,2*0,3*1,2*0,4*1,0,5*1,2*0,4*1,2*0,  
486      &5*1,2*0,6*1,0,7*1,2*0,5*1,2*0,6*1,2*0,7*1,2*0,8*1,0,75*1,0,7*1,0, 
487      &1,0,1,0,4*1,163*0/                                                
488       DATA (MDCY(I,2),I=   1, 500)/1,9,17,25,33,41,56,66,2*0,76,80,82,  
489      &87,89,143,145,150,2*0,153,162,174,190,210,6*0,289,0,311,334,416,  
490      &496,523,526,527,10*0,536,544,550,558,582,608,4*0,632,639,646,     
491      &19*0,658,659,663,16*0,672,674,679,688,0,697,699,701,0,708,716,    
492      &722,731,733,735,738,748,754,757,0,768,774,785,791,854,857,865,    
493      &926,928,936,969,971,0,975,976,979,981,1017,1018,1026,1062,1063,   
494      &1071,1110,1111,1115,1146,1147,1151,1152,1161,0,1163,4*0,1164,3*0, 
495      &1167,1170,2*0,1171,1173,1176,2*0,1180,1181,1184,1187,0,1190,1195, 
496      &1197,1200,1202,2*0,1206,1207,1208,1284,2*0,1288,1289,1290,1291,   
497      &1292,2*0,1296,1297,1299,1300,1302,1306,0,1307,1311,1315,1319,     
498      &1323,1327,1331,2*0,1335,1336,1337,1354,1363,2*0,1372,1373,1374,   
499      &1375,1376,1385,2*0,1394,1395,1396,1397,1398,1407,1408,2*0,1417,   
500      &1426,1435,1444,1453,1462,1471,1480,0,1489,1498,1507,1516,1525,    
501      &1534,1543,1552,1561,1570,1571,1572,1573,1574,1579,1582,1584,1589, 
502      &1591,1596,1603,1607,1609,1611,1613,1615,1617,1619,1621,1622,1624, 
503      &1626,1628,1630,1632,1634,1636,1638,1640,1641,1643,1645,1659,1661, 
504      &1663,1667,1669,1671,1673,1675,1677,1679,1681,1683,1685,1696,1710, 
505      &1722,1734,1746,1758,1770,1785,1796,1807,1818,1829,1840,1851,1912, 
506      &1919,2021,2077,2195,2329,0,2400,2416,2432,2448,2464,2480,2496,0,  
507      &2511,0,2526,0,2541,2545,2549,2552,163*0/                          
508       DATA (MDCY(I,3),I=   1, 500)/5*8,15,2*10,2*0,4,2,5,2,54,2,5,3,    
509      &2*0,9,12,16,20,79,6*0,22,0,23,82,80,27,3,1,9,10*0,8,6,8,24,26,24, 
510      &4*0,2*7,12,19*0,1,4,9,16*0,2,5,2*9,0,2*2,7,0,8,6,9,2*2,3,10,6,3,  
511      &11,0,6,11,6,63,3,8,61,2,8,33,2,4,0,1,3,2,36,1,8,36,1,8,39,1,4,31, 
512      &1,4,1,9,2,0,1,4*0,3,3*0,3,1,2*0,2,3,4,2*0,1,3*3,0,5,2,3,2,4,2*0,  
513      &2*1,76,4,2*0,4*1,4,2*0,1,2,1,2,4,1,0,7*4,2*0,2*1,17,2*9,2*0,4*1,  
514      &2*9,2*0,4*1,9,1,9,2*0,8*9,0,9*9,4*1,5,3,2,5,2,5,7,4,7*2,1,9*2,1,  
515      &2*2,14,2*2,4,9*2,11,14,5*12,15,6*11,61,7,102,56,118,134,71,0,     
516      &6*16,15,0,15,0,15,0,2*4,3,2,163*0/                                
517       DATA (MDME(I,1),I=   1,4000)/6*1,-1,7*1,-1,7*1,-1,7*1,-1,7*1,-1,  
518      &7*1,-1,1,7*-1,8*1,2*-1,8*1,2*-1,73*1,-1,2*1,-1,5*1,0,2*-1,6*1,0,
519      &2*-1, 3*1,-1,6*1,2*-1,6*1,2*-1,3*1,-1,3*1,-1,3*1,5*-1,3*1,-1,6*1,
520      &2*-1,3*1,-1,5*1,62*1,6*1,2*-1,6*1,8*-1,3*1,-1,3*1,-1,3*1,5*-1,3*1,    
521      &4*-1,6*1,2*-1,3*1,-1,8*1,62*1,6*1,2*-1,3*1,-1,6*1,62*1,3*1,-1,  
522      &3*1,-1,1,18*1,8*1,2*-1,2*1,-1,36*1,2*-1,6*1,2*-1,9*1,-1,3*1,-1,  
523      &3*1,5*-1,3*1,-1,14*1,2*-1,6*1,2*-1,1151*1,2*-1,132*1,2*-1,635*1,  
524      &1447*0/                                                           
525       DATA (MDME(I,2),I=   1,4000)/43*102,4*0,102,0,6*53,3*102,4*0,102, 
526      &2*0,3*102,4*0,102,2*0,6*102,42,6*102,2*42,2*0,8*41,2*0,36*41,     
527      &8*102,0,102,0,102,2*0,21*102,8*32,8*0,16*32,4*0,8*32,9*0,62*53,   
528      &8*32,14*0,16*32,7*0,8*32,12*0,62*53,8*32,10*0,62*53,4*32,5*0,     
529      &18*53,3*32,0,6*32,3*0,4*32,3*0,4*32,3*0,4*32,3*0,32,8*0,8*32,     
530      &14*0,16*32,12*0,8*32,22*0,9*32,3*0,12,2*42,2*11,9*42,0,2,3,15*0,  
531      &4*42,5*0,3,12*0,2,3*0,1,0,3,16*0,2*3,15*0,2*42,2*3,18*0,2*3,3*0,  
532      &1,11*0,22*42,41*0,2*3,9*0,16*42,45*0,3,10*0,10*42,20*0,2*13,6*0,  
533      &12,2*0,12,0,12,14*42,16*0,48,3*13,2*42,9*0,14*42,16*0,48,3*13,    
534      &2*42,9*0,14*42,19*0,48,3*13,2*42,6*0,2*11,28*42,5*0,32,3*0,4*32,  
535      &2*4,0,32,45*0,14*42,52*0,10*13,2*42,2*11,4*0,2*42,2*11,6*0,2*42,  
536      &2*11,0,2*42,2*11,2*42,2*11,2*42,2*11,2*42,2*11,2*42,2*11,2*42,    
537      &2*11,2*42,2*11,2*0,3*42,8*0,48,3*13,20*42,4*0,18*42,4*0,9*42,0,   
538      &162*42,50*0,2*12,17*0,2*32,33*0,12,9*0,32,2*0,12,11*0,4*32,2*4,   
539      &5*0,832*53,1459*0/                                                
540       DATA (BRAT(I)  ,I=   1, 348)/43*0D0,0.00003D0,0.001765D0,         
541      &0.998205D0,35*0D0,1D0,6*0D0,0.1783D0,0.1735D0,0.1131D0,0.2494D0,  
542      &0.003D0,0.09D0,0.0027D0,0.01D0,0.0014D0,0.0012D0,2*0.00025D0,     
543      &0.0071D0,0.012D0,0.0004D0,0.00075D0,0.00006D0,2*0.00078D0,        
544      &0.0034D0,0.08D0,0.011D0,0.0191D0,0.00006D0,0.005D0,0.0133D0,      
545      &0.0067D0,0.0005D0,0.0035D0,0.0006D0,0.0015D0,0.00021D0,0.0002D0,  
546      &0.00075D0,0.0001D0,0.0002D0,0.0011D0,3*0.0002D0,0.00022D0,        
547      &0.0004D0,0.0001D0,2*0.00205D0,2*0.00069D0,0.00025D0,0.00051D0,    
548      &0.00025D0,35*0D0,0.154075D0,0.119483D0,0.154072D0,0.119346D0,     
549      &0.152196D0,3*0D0,0.033549D0,0.066752D0,0.033549D0,0.066752D0,     
550      &0.033473D0,0.066752D0,2*0D0,0.321502D0,0.016502D0,2*0D0,          
551      &0.016509D0,0.320778D0,2*0D0,0.00001D0,0.000591D0,6*0D0,           
552      &2*0.108062D0,0.107983D0,0D0,0.000001D0,0D0,0.000327D0,0.053489D0, 
553      &0.852249D0,4*0D0,0.000244D0,0.06883D0,0D0,0.023981D0,0.000879D0,  
554      &65*0D0,0.145869D0,0.113303D0,0.145869D0,0.113298D0,0.14581D0,     
555      &0.049013D0,2*0D0,0.032007D0,0.063606D0,0.032007D0,0.063606D0,     
556      &0.032004D0,0.063606D0,8*0D0,0.251276D0,0.012903D0,0.000006D0,0D0, 
557      &0.012903D0,0.250816D0,0.00038D0,0D0,0.000008D0,0.000465D0,        
558      &0.215459D0,5*0D0,2*0.085262D0,0.08526D0,7*0D0,0.000046D0,         
559      &0.000754D0,5*0D0,0.000074D0,0D0,0.000439D0,0.000015D0,0.000061D0/ 
560       DATA (BRAT(I)  ,I= 349, 642)/0.306171D0,0.68864D0,0D0,0.003799D0, 
561      &66*0D0,0.000079D0,0.001292D0,5*0D0,0.000126D0,0D0,0.002256D0,     
562      &0.00001D0,0.000002D0,2*0D0,0.996233D0,63*0D0,0.000013D0,          
563      &0.067484D0,2*0D0,0.00001D0,0.002701D0,0D0,0.929792D0,18*0D0,      
564      &0.452899D0,0D0,0.547101D0,1D0,2*0.215134D0,0.215133D0,0.214738D0, 
565      &2*0D0,2*0.06993D0,0D0,0.000225D0,0.036777D0,0.596654D0,2*0D0,     
566      &0.000177D0,0.050055D0,0.316112D0,0.041762D0,0.90916D0,2*0D0,      
567      &0.000173D0,0.048905D0,0.000328D0,0.053776D0,0.872444D0,2*0D0,     
568      &0.000259D0,0.073192D0,0D0,0.153373D0,2*0.342801D0,0D0,0.086867D0, 
569      &0.03128D0,0.001598D0,0.000768D0,0.004789D0,0.006911D0,0.004789D0, 
570      &0.006911D0,0.004789D0,3*0D0,0.003077D0,0.00103D0,0.003077D0,      
571      &0.00103D0,0.003077D0,0.00103D0,2*0D0,0.138845D0,0.474102D0,       
572      &0.176299D0,0D0,0.109767D0,0.008161D0,0.028584D0,0.001468D0,2*0D0, 
573      &0.001468D0,0.02853D0,0.000007D0,0D0,0.000001D0,0.000053D0,        
574      &0.003735D0,5*0D0,2*0.009661D0,0.00966D0,0D0,0.163019D0,           
575      &0.004003D0,0.45294D0,0.008334D0,2*0.038042D0,0.001999D0,0D0,      
576      &0.017733D0,0.045908D0,0.017733D0,0.045908D0,0.017733D0,3*0D0,     
577      &0.038354D0,0.011181D0,0.038354D0,0.011181D0,0.038354D0,           
578      &0.011181D0,2*0D0,0.090264D0,2*0.001805D0,0.090264D0,0.001805D0,   
579      &0.81225D0,0.001806D0,0.090428D0,0.001809D0,0.001808D0,0.090428D0/ 
580       DATA (BRAT(I)  ,I= 643, 803)/0.001808D0,0.81372D0,0D0,0.325914D0, 
581      &0.016735D0,0.000009D0,0.016736D0,0.32532D0,0.000554D0,0.00001D0,  
582      &0.000603D0,0.314118D0,3*0D0,1D0,2*0.08D0,0.76D0,0.08D0,2*0.105D0, 
583      &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,0.988D0,        
584      &0.012D0,0.998739D0,0.00079D0,0.00038D0,0.000046D0,0.000045D0,     
585      &2*0.34725D0,0.144D0,0.104D0,0.0245D0,2*0.01225D0,0.0028D0,        
586      &0.0057D0,0.2112D0,0.1256D0,2*0.1939D0,2*0.1359D0,0.002D0,0.001D0, 
587      &0.0006D0,0.999877D0,0.000123D0,0.99955D0,0.00045D0,2*0.34725D0,   
588      &0.144D0,0.104D0,0.049D0,0.0028D0,0.0057D0,0.3923D0,0.321D0,       
589      &0.2317D0,0.0478D0,0.0049D0,0.0013D0,0.0003D0,0.0007D0,0.89D0,     
590      &0.08693D0,0.0221D0,0.00083D0,2*0.00007D0,0.564D0,0.282D0,0.072D0, 
591      &0.028D0,0.023D0,2*0.0115D0,0.005D0,0.003D0,0.6861D0,0.3139D0,     
592      &2*0.5D0,0.665D0,0.333D0,0.002D0,0.333D0,0.166D0,0.168D0,0.084D0,  
593      &0.087D0,0.043D0,0.059D0,2*0.029D0,0.002D0,0.6352D0,0.2116D0,      
594      &0.0559D0,0.0173D0,0.0482D0,0.0318D0,0.666D0,0.333D0,0.001D0,      
595      &0.332D0,0.166D0,0.168D0,0.084D0,0.086D0,0.043D0,0.059D0,          
596      &2*0.029D0,2*0.002D0,0.437D0,0.208D0,0.302D0,0.0302D0,0.0212D0,    
597      &0.0016D0,0.48947D0,0.34D0,3*0.043D0,0.027D0,0.0126D0,0.0013D0,    
598      &0.0003D0,0.00025D0,0.00008D0,0.444D0,2*0.222D0,0.104D0,2*0.004D0, 
599      &0.07D0,0.065D0,2*0.005D0,2*0.011D0,5*0.001D0,0.07D0,0.065D0/      
600       DATA (BRAT(I)  ,I= 804, 977)/2*0.005D0,2*0.011D0,5*0.001D0,       
601      &0.026D0,0.019D0,0.066D0,0.041D0,0.045D0,0.076D0,0.0073D0,         
602      &2*0.0047D0,0.026D0,0.001D0,0.0006D0,0.0066D0,0.005D0,2*0.003D0,   
603      &2*0.0006D0,2*0.001D0,0.006D0,0.005D0,0.012D0,0.0057D0,0.067D0,    
604      &0.008D0,0.0022D0,0.027D0,0.004D0,0.019D0,0.012D0,0.002D0,0.009D0, 
605      &0.0218D0,0.001D0,0.022D0,0.087D0,0.001D0,0.0019D0,0.0015D0,       
606      &0.0028D0,0.683D0,0.306D0,0.011D0,0.3D0,0.15D0,0.16D0,0.08D0,      
607      &0.13D0,0.06D0,0.08D0,0.04D0,0.034D0,0.027D0,2*0.002D0,2*0.004D0,  
608      &2*0.002D0,0.034D0,0.027D0,2*0.002D0,2*0.004D0,2*0.002D0,0.0365D0, 
609      &0.045D0,0.073D0,0.062D0,3*0.021D0,0.0061D0,0.015D0,0.025D0,       
610      &0.0088D0,0.074D0,0.0109D0,0.0041D0,0.002D0,0.0035D0,0.0011D0,     
611      &0.001D0,0.0027D0,2*0.0016D0,0.0018D0,0.011D0,0.0063D0,0.0052D0,   
612      &0.018D0,0.016D0,0.0034D0,0.0036D0,0.0009D0,0.0006D0,0.015D0,      
613      &0.0923D0,0.018D0,0.022D0,0.0077D0,0.009D0,0.0075D0,0.024D0,       
614      &0.0085D0,0.067D0,0.0511D0,0.017D0,0.0004D0,0.0028D0,0.619D0,      
615      &0.381D0,0.3D0,0.15D0,0.16D0,0.08D0,0.13D0,0.06D0,0.08D0,0.04D0,   
616      &0.01D0,2*0.02D0,0.03D0,2*0.005D0,2*0.02D0,0.03D0,2*0.005D0,       
617      &0.015D0,0.037D0,0.028D0,0.079D0,0.095D0,0.052D0,0.0078D0,         
618      &4*0.001D0,0.028D0,0.033D0,0.026D0,0.05D0,0.01D0,4*0.005D0,0.25D0, 
619      &0.0952D0,0.94D0,0.06D0,2*0.4D0,2*0.1D0,1D0,0.0602D0,0.0601D0/     
620       DATA (BRAT(I)  ,I= 978,1136)/0.8797D0,0.135D0,0.865D0,0.02D0,     
621      &0.055D0,2*0.005D0,0.008D0,0.012D0,0.02D0,0.055D0,2*0.005D0,       
622      &0.008D0,0.012D0,0.01D0,0.03D0,0.0035D0,0.011D0,0.0055D0,0.0042D0, 
623      &0.009D0,0.018D0,0.015D0,0.0185D0,0.0135D0,0.025D0,0.0004D0,       
624      &0.0007D0,0.0008D0,0.0014D0,0.0019D0,0.0025D0,0.4291D0,0.08D0,     
625      &0.07D0,0.02D0,0.015D0,0.005D0,1D0,0.3D0,0.15D0,0.16D0,0.08D0,     
626      &0.13D0,0.06D0,0.08D0,0.04D0,0.02D0,0.055D0,2*0.005D0,0.008D0,     
627      &0.012D0,0.02D0,0.055D0,2*0.005D0,0.008D0,0.012D0,0.01D0,0.03D0,   
628      &0.0035D0,0.011D0,0.0055D0,0.0042D0,0.009D0,0.018D0,0.015D0,       
629      &0.0185D0,0.0135D0,0.025D0,0.0004D0,0.0007D0,0.0008D0,0.0014D0,    
630      &0.0019D0,0.0025D0,0.4291D0,0.08D0,0.07D0,0.02D0,0.015D0,0.005D0,  
631      &1D0,0.3D0,0.15D0,0.16D0,0.08D0,0.13D0,0.06D0,0.08D0,0.04D0,       
632      &0.02D0,0.055D0,2*0.005D0,0.008D0,0.012D0,0.02D0,0.055D0,          
633      &2*0.005D0,0.008D0,0.012D0,0.01D0,0.03D0,0.0035D0,0.011D0,         
634      &0.0055D0,0.0042D0,0.009D0,0.018D0,0.015D0,0.0185D0,0.0135D0,      
635      &0.025D0,2*0.0002D0,0.0007D0,2*0.0004D0,0.0014D0,0.001D0,0.0009D0, 
636      &0.0025D0,0.4291D0,0.08D0,0.07D0,0.02D0,0.015D0,0.005D0,1D0,       
637      &2*0.3D0,2*0.2D0,0.047D0,0.122D0,0.006D0,0.012D0,0.035D0,0.012D0,  
638      &0.035D0,0.003D0,0.007D0,0.15D0,0.037D0,0.008D0,0.002D0,0.05D0,    
639      &0.015D0,0.003D0,0.001D0,0.014D0,0.042D0,0.014D0,0.042D0,0.24D0/   
640       DATA (BRAT(I)  ,I=1137,1341)/0.065D0,0.012D0,0.003D0,0.001D0,     
641      &0.002D0,0.001D0,0.002D0,0.014D0,0.003D0,1D0,2*0.3D0,2*0.2D0,1D0,  
642      &0.0252D0,0.0248D0,0.0267D0,0.015D0,0.045D0,0.015D0,0.045D0,       
643      &0.7743D0,0.029D0,0.22D0,0.78D0,1D0,0.331D0,0.663D0,0.006D0,       
644      &0.663D0,0.331D0,0.006D0,1D0,0.999D0,0.001D0,0.88D0,2*0.06D0,      
645      &0.639D0,0.358D0,0.002D0,0.001D0,1D0,0.88D0,2*0.06D0,0.516D0,      
646      &0.483D0,0.001D0,0.88D0,2*0.06D0,0.9988D0,0.0001D0,0.0006D0,       
647      &0.0004D0,0.0001D0,0.667D0,0.333D0,0.9954D0,0.0011D0,0.0035D0,     
648      &0.333D0,0.667D0,0.676D0,0.234D0,0.085D0,0.005D0,2*1D0,0.018D0,    
649      &2*0.005D0,0.003D0,0.002D0,2*0.006D0,0.018D0,2*0.005D0,0.003D0,    
650      &0.002D0,2*0.006D0,0.0066D0,0.025D0,0.016D0,0.0088D0,2*0.005D0,    
651      &0.0058D0,0.005D0,0.0055D0,4*0.004D0,2*0.002D0,2*0.004D0,0.003D0,  
652      &0.002D0,2*0.003D0,3*0.002D0,2*0.001D0,0.002D0,2*0.001D0,          
653      &2*0.002D0,0.0013D0,0.0018D0,5*0.001D0,4*0.003D0,2*0.005D0,        
654      &2*0.002D0,2*0.001D0,2*0.002D0,2*0.001D0,0.2432D0,0.057D0,         
655      &2*0.035D0,0.15D0,2*0.075D0,0.03D0,2*0.015D0,2*0.08D0,0.76D0,      
656      &0.08D0,4*1D0,2*0.08D0,0.76D0,0.08D0,1D0,2*0.5D0,1D0,2*0.5D0,      
657      &2*0.08D0,0.76D0,0.08D0,1D0,2*0.08D0,0.76D0,3*0.08D0,0.76D0,       
658      &3*0.08D0,0.76D0,3*0.08D0,0.76D0,3*0.08D0,0.76D0,3*0.08D0,0.76D0,  
659      &3*0.08D0,0.76D0,0.08D0,2*1D0,2*0.105D0,0.04D0,0.0077D0,0.02D0/    
660       DATA (BRAT(I)  ,I=1342,1522)/0.0235D0,0.0285D0,0.0435D0,0.0011D0, 
661      &0.0022D0,0.0044D0,0.4291D0,0.08D0,0.07D0,0.02D0,0.015D0,0.005D0,  
662      &2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,      
663      &2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,      
664      &4*1D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,        
665      &0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,      
666      &0.005D0,4*1D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,        
667      &0.015D0,0.005D0,1D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,  
668      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
669      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
670      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
671      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
672      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
673      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
674      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
675      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
676      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
677      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
678      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
679      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0/      
680       DATA (BRAT(I)  ,I=1523,2548)/0.015D0,0.005D0,2*0.105D0,0.04D0,    
681      &0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,0.04D0,      
682      &0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,0.04D0,      
683      &0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,0.04D0,      
684      &0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,0.04D0,      
685      &0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,4*1D0,0.52D0,0.26D0,   
686      &0.11D0,2*0.055D0,0.333D0,0.334D0,0.333D0,0.667D0,0.333D0,0.28D0,  
687      &0.14D0,0.313D0,0.157D0,0.11D0,0.667D0,0.333D0,0.28D0,0.14D0,      
688      &0.313D0,0.157D0,0.11D0,0.36D0,0.18D0,0.03D0,2*0.015D0,2*0.2D0,    
689      &4*0.25D0,0.667D0,0.333D0,0.667D0,0.333D0,0.667D0,0.333D0,0.667D0, 
690      &0.333D0,4*0.5D0,0.007D0,0.993D0,1D0,0.667D0,0.333D0,0.667D0,      
691      &0.333D0,0.667D0,0.333D0,0.667D0,0.333D0,8*0.5D0,0.02D0,0.98D0,    
692      &1D0,4*0.5D0,3*0.146D0,3*0.05D0,0.15D0,2*0.05D0,4*0.024D0,0.066D0, 
693      &0.667D0,0.333D0,0.667D0,0.333D0,4*0.25D0,0.667D0,0.333D0,0.667D0, 
694      &0.333D0,2*0.5D0,0.273D0,0.727D0,0.667D0,0.333D0,0.667D0,0.333D0,  
695      &4*0.5D0,0.35D0,0.65D0,2*0.0083D0,0.1866D0,0.324D0,0.184D0,        
696      &0.027D0,0.001D0,0.093D0,0.087D0,0.078D0,0.0028D0,3*0.014D0,       
697      &0.008D0,0.024D0,0.008D0,0.024D0,0.425D0,0.02D0,0.185D0,0.088D0,   
698      &0.043D0,0.067D0,0.066D0,831*0D0,0.85422D0,0.005292D0,0.044039D0,  
699      &0.096449D0,0.853165D0,0.021144D0,0.029361D0,0.096329D0/           
700       DATA (BRAT(I)  ,I=2549,4000)/0.294414D0,0.109437D0,0.596149D0,    
701      &0.389861D0,0.610139D0,1447*0D0/                                   
702       DATA (KFDP(I,1),I=   1, 374)/21,22,23,4*-24,25,21,22,23,4*24,25,  
703      &21,22,23,4*-24,25,21,22,23,4*24,25,21,22,23,4*-24,25,21,22,23,    
704      &4*24,25,37,1000022,1000023,1000025,1000035,1000021,1000039,21,22, 
705      &23,4*-24,25,2*-37,21,22,23,4*24,25,2*37,22,23,-24,25,23,24,-12,   
706      &22,23,-24,25,23,24,-12,-14,48*16,22,23,-24,25,23,24,22,23,-24,25, 
707      &-37,23,24,37,1,2,3,4,5,6,7,8,21,1,2,3,4,5,6,7,8,11,13,15,17,1,2,  
708      &3,4,5,6,7,8,11,12,13,14,15,16,17,18,4*-1,4*-3,4*-5,4*-7,-11,-13,  
709      &-15,-17,1,2,3,4,5,6,7,8,11,13,15,17,21,2*22,23,24,1000022,        
710      &2*1000023,3*1000025,4*1000035,2*1000024,2*1000037,1000001,        
711      &2000001,1000001,-1000001,1000002,2000002,1000002,-1000002,        
712      &1000003,2000003,1000003,-1000003,1000004,2000004,1000004,         
713      &-1000004,1000005,2000005,1000005,-1000005,1000006,2000006,        
714      &1000006,-1000006,1000011,2000011,1000011,-1000011,1000012,        
715      &2000012,1000012,-1000012,1000013,2000013,1000013,-1000013,        
716      &1000014,2000014,1000014,-1000014,1000015,2000015,1000015,         
717      &-1000015,1000016,2000016,1000016,-1000016,1,2,3,4,5,6,7,8,11,12,  
718      &13,14,15,16,17,18,24,37,2*23,25,35,4*-1,4*-3,4*-5,4*-7,-11,-13,   
719      &-15,-17,3*24,1,2,3,4,5,6,7,8,11,13,15,17,21,2*22,23,24,23,25,36,  
720      &1000022,2*1000023,3*1000025,4*1000035,2*1000024,2*1000037,        
721      &1000001,2000001,1000001,-1000001,1000002,2000002,1000002/         
722       DATA (KFDP(I,1),I= 375, 587)/-1000002,1000003,2000003,1000003,    
723      &-1000003,1000004,2000004,1000004,-1000004,1000005,2000005,        
724      &1000005,-1000005,1000006,2000006,1000006,-1000006,1000011,        
725      &2000011,1000011,-1000011,1000012,2000012,1000012,-1000012,        
726      &1000013,2000013,1000013,-1000013,1000014,2000014,1000014,         
727      &-1000014,1000015,2000015,1000015,-1000015,1000016,2000016,        
728      &1000016,-1000016,1,2,3,4,5,6,7,8,11,13,15,17,21,2*22,23,24,23,    
729      &1000022,2*1000023,3*1000025,4*1000035,2*1000024,2*1000037,        
730      &1000001,2000001,1000001,-1000001,1000002,2000002,1000002,         
731      &-1000002,1000003,2000003,1000003,-1000003,1000004,2000004,        
732      &1000004,-1000004,1000005,2000005,1000005,-1000005,1000006,        
733      &2000006,1000006,-1000006,1000011,2000011,1000011,-1000011,        
734      &1000012,2000012,1000012,-1000012,1000013,2000013,1000013,         
735      &-1000013,1000014,2000014,1000014,-1000014,1000015,2000015,        
736      &1000015,-1000015,1000016,2000016,1000016,-1000016,-1,-3,-5,-7,    
737      &-11,-13,-15,-17,24,2*1000022,2*1000023,2*1000025,2*1000035,       
738      &1000006,2000006,1000006,2000006,-1000001,-1000003,-1000011,       
739      &-1000013,-1000015,-2000015,5,6,21,2,1,2,3,4,5,6,11,13,15,3,4,5,6, 
740      &11,13,15,21,2*4,24,-11,-13,-15,3,4,5,6,11,13,15,21,2*24,2*52,     
741      &2*22,2*23,1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18,2*24,3*52,24/   
742       DATA (KFDP(I,1),I= 588, 979)/4*-1,4*-3,4*-5,4*-7,-11,-13,-15,-17, 
743      &22,23,22,23,24,52,24,52,1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18,  
744      &3*-11,2*-13,-15,24,3*-11,2*-13,-15,63,3*-1,3*-3,3*-5,-11,-13,-15, 
745      &82,-11,-13,2*2,-12,-14,-16,2*-2,2*-4,-2,-4,2*22,211,111,221,13,   
746      &11,213,-213,221,223,321,130,310,111,331,111,211,-12,12,-14,14,    
747      &211,111,22,-13,-11,2*211,213,113,221,223,321,211,331,22,111,211,  
748      &2*22,211,22,111,211,22,211,221,111,11,211,111,2*211,321,130,310,  
749      &221,111,211,111,130,310,321,2*311,321,311,323,313,323,313,321,    
750      &3*311,-13,3*211,12,14,311,2*321,311,321,313,323,313,323,311,      
751      &4*321,211,111,3*22,111,321,130,-213,113,213,211,22,111,11,13,211, 
752      &321,130,310,221,211,111,11*-11,11*-13,-311,-313,-311,-313,-20313, 
753      &2*-311,-313,-311,-313,2*111,2*221,2*331,2*113,2*223,2*333,-311,   
754      &-313,2*-321,211,-311,-321,333,-311,-313,-321,211,2*-321,2*-311,   
755      &-321,211,113,421,2*411,421,411,423,413,423,413,421,411,8*-11,     
756      &8*-13,-321,-323,-321,-323,-311,2*-313,-311,-313,2*-311,-321,      
757      &-10323,-321,-323,-321,-311,2*-313,211,111,333,3*-321,-311,-313,   
758      &-321,-313,310,333,211,2*-321,-311,-313,-311,211,-321,3*-311,211,  
759      &113,321,2*421,411,421,413,423,413,423,411,421,-15,5*-11,5*-13,    
760      &221,331,333,221,331,333,10221,211,213,211,213,321,323,321,323,    
761      &2212,221,331,333,221,2*2,2*431,421,411,423,413,82,11,13,82,443/   
762       DATA (KFDP(I,1),I= 980,1419)/82,6*12,6*14,2*16,3*-411,3*-413,     
763      &2*-411,2*-413,2*441,2*443,2*20443,2*2,2*4,2,4,511,521,511,523,    
764      &513,523,513,521,511,6*12,6*14,2*16,3*-421,3*-423,2*-421,2*-423,   
765      &2*441,2*443,2*20443,2*2,2*4,2,4,521,511,521,513,523,513,523,511,  
766      &521,6*12,6*14,2*16,3*-431,3*-433,2*-431,2*-433,3*441,3*443,       
767      &3*20443,2*2,2*4,2,4,531,521,511,523,513,16,2*4,2*12,2*14,2*16,    
768      &4*2,4*4,2*-11,2*-13,2*-1,2*-3,2*-11,2*-13,2*-1,541,511,521,513,   
769      &523,21,11,13,15,1,2,3,4,21,22,553,21,2112,2212,2*2112,2212,2112,  
770      &2*2212,2112,-12,3122,3212,3112,2212,2*2112,-12,2*3122,3222,3112,  
771      &2212,2112,2212,3122,3222,3212,3122,3112,-12,-14,-12,3322,3312,    
772      &2*3122,3212,3322,3312,3122,3322,3312,-12,2*4122,7*-11,7*-13,      
773      &2*2224,2*2212,2*2214,2*3122,2*3212,2*3214,5*3222,4*3224,2*3322,   
774      &3324,2*2224,7*2212,5*2214,2*2112,2*2114,2*3122,2*3212,2*3214,     
775      &2*3222,2*3224,4*2,3,2*2,1,2*2,-11,-13,2*2,4*4122,-11,-13,2*2,     
776      &3*4132,3*4232,-11,-13,2*2,4332,-11,-13,2*2,-11,-13,2*2,-11,-13,   
777      &2*2,-11,-13,2*2,-11,-13,2*2,-11,-13,2*2,-11,-13,2*2,2*5122,-12,   
778      &-14,-16,5*4122,441,443,20443,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,    
779      &2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,4*5122,-12,-14,-16,2*-2,   
780      &2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,2*5132,2*5232,-12,-14,-16, 
781      &2*-2,2*-4,-2,-4,5332,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16/     
782       DATA (KFDP(I,1),I=1420,1739)/2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,    
783      &2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,  
784      &-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,   
785      &-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,  
786      &2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,     
787      &2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,  
788      &-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,   
789      &-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,221,223,221,  
790      &223,211,111,321,130,310,213,113,-213,321,311,321,311,323,313,     
791      &2*311,321,311,321,313,323,321,211,111,321,130,310,2*211,313,-313, 
792      &323,-323,421,411,423,413,411,421,413,423,411,421,423,413,443,     
793      &2*82,521,511,523,513,511,521,513,523,521,511,523,513,511,521,513, 
794      &523,553,2*21,213,-213,113,213,10211,10111,-10211,2*221,213,2*113, 
795      &-213,2*321,2*311,113,323,2*313,323,313,-313,323,-323,423,2*413,   
796      &2*423,413,443,82,523,2*513,2*523,2*513,523,553,21,11,13,82,4*443, 
797      &10441,20443,445,441,11,13,15,1,2,3,4,21,22,2*553,10551,20553,555, 
798      &1000039,-1000024,-1000037,1000022,1000023,1000025,1000035,        
799      &1000002,2000002,1000002,2000002,1000021,1000039,1000024,1000037,  
800      &1000022,1000023,1000025,1000035,1000001,2000001,1000001,2000001,  
801      &1000021,1000039,-1000024,-1000037,1000022,1000023,1000025/        
802       DATA (KFDP(I,1),I=1740,1907)/1000035,1000004,2000004,1000004,     
803      &2000004,1000021,1000039,1000024,1000037,1000022,1000023,1000025,  
804      &1000035,1000003,2000003,1000003,2000003,1000021,1000039,-1000024, 
805      &-1000037,1000022,1000023,1000025,1000035,1000006,2000006,1000006, 
806      &2000006,1000021,1000039,1000024,1000037,1000022,1000023,1000025,  
807      &1000035,1000005,2000005,1000005,2000005,1000021,1000022,1000016,  
808      &-1000015,1000039,-1000024,-1000037,1000022,1000023,1000025,       
809      &1000035,1000012,2000012,1000012,2000012,1000039,1000024,1000037,  
810      &1000022,1000023,1000025,1000035,1000011,2000011,1000011,2000011,  
811      &1000039,-1000024,-1000037,1000022,1000023,1000025,1000035,        
812      &1000014,2000014,1000014,2000014,1000039,1000024,1000037,1000022,  
813      &1000023,1000025,1000035,1000013,2000013,1000013,2000013,1000039,  
814      &-1000024,-1000037,1000022,1000023,1000025,1000035,1000016,        
815      &2000016,1000016,2000016,1000039,1000024,1000037,1000022,1000023,  
816      &1000025,1000035,1000015,2000015,1000015,2000015,1000039,1000001,  
817      &-1000001,2000001,-2000001,1000002,-1000002,2000002,-2000002,      
818      &1000003,-1000003,2000003,-2000003,1000004,-1000004,2000004,       
819      &-2000004,1000005,-1000005,2000005,-2000005,1000006,-1000006,      
820      &2000006,-2000006,6*1000022,6*1000023,6*1000025,6*1000035,1000024, 
821      &-1000024,1000024,-1000024,1000024,-1000024,1000037,-1000037/      
822       DATA (KFDP(I,1),I=1908,2126)/1000037,-1000037,1000037,-1000037,   
823      &5*1000039,4,1,5*1000039,16*1000022,1000024,-1000024,1000024,      
824      &-1000024,1000024,-1000024,1000024,-1000024,1000024,-1000024,      
825      &1000024,-1000024,1000037,-1000037,1000037,-1000037,1000037,       
826      &-1000037,1000037,-1000037,1000037,-1000037,1000037,-1000037,      
827      &1000024,-1000024,1000037,-1000037,1000001,-1000001,2000001,       
828      &-2000001,1000002,-1000002,2000002,-2000002,1000003,-1000003,      
829      &2000003,-2000003,1000004,-1000004,2000004,-2000004,1000005,       
830      &-1000005,2000005,-2000005,1000006,-1000006,2000006,-2000006,      
831      &1000011,-1000011,2000011,-2000011,1000012,-1000012,2000012,       
832      &-2000012,1000013,-1000013,2000013,-2000013,1000014,-1000014,      
833      &2000014,-2000014,1000015,-1000015,2000015,-2000015,1000016,       
834      &-1000016,2000016,-2000016,5*1000021,2*1000039,6*1000022,          
835      &6*1000023,6*1000025,6*1000035,1000022,1000023,1000025,1000035,    
836      &1000002,2000002,-1000001,-2000001,1000004,2000004,-1000003,       
837      &-2000003,1000006,2000006,-1000005,-2000005,1000012,2000012,       
838      &-1000011,-2000011,1000014,2000014,-1000013,-2000013,1000016,      
839      &2000016,-1000015,-2000015,2*1000021,5*1000039,16*1000022,         
840      &16*1000023,1000024,-1000024,1000024,-1000024,1000024,-1000024,    
841      &1000024,-1000024,1000024,-1000024,1000024,-1000024,1000037/       
842       DATA (KFDP(I,1),I=2127,2315)/-1000037,1000037,-1000037,1000037,   
843      &-1000037,1000037,-1000037,1000037,-1000037,1000037,-1000037,      
844      &1000024,-1000024,1000037,-1000037,1000001,-1000001,2000001,       
845      &-2000001,1000002,-1000002,2000002,-2000002,1000003,-1000003,      
846      &2000003,-2000003,1000004,-1000004,2000004,-2000004,1000005,       
847      &-1000005,2000005,-2000005,1000006,-1000006,2000006,-2000006,      
848      &1000011,-1000011,2000011,-2000011,1000012,-1000012,2000012,       
849      &-2000012,1000013,-1000013,2000013,-2000013,1000014,-1000014,      
850      &2000014,-2000014,1000015,-1000015,2000015,-2000015,1000016,       
851      &-1000016,2000016,-2000016,5*1000021,5*1000039,16*1000022,         
852      &16*1000023,16*1000025,1000024,-1000024,1000024,-1000024,1000024,  
853      &-1000024,1000024,-1000024,1000024,-1000024,1000024,-1000024,      
854      &1000037,-1000037,1000037,-1000037,1000037,-1000037,1000037,       
855      &-1000037,1000037,-1000037,1000037,-1000037,1000024,-1000024,      
856      &1000037,-1000037,1000001,-1000001,2000001,-2000001,1000002,       
857      &-1000002,2000002,-2000002,1000003,-1000003,2000003,-2000003,      
858      &1000004,-1000004,2000004,-2000004,1000005,-1000005,2000005,       
859      &-2000005,1000006,-1000006,2000006,-2000006,1000011,-1000011,      
860      &2000011,-2000011,1000012,-1000012,2000012,-2000012,1000013,       
861      &-1000013,2000013,-2000013,1000014,-1000014,2000014,-2000014/      
862       DATA (KFDP(I,1),I=2316,2516)/1000015,-1000015,2000015,-2000015,   
863      &1000016,-1000016,2000016,-2000016,5*1000021,2*1000039,15*1000024, 
864      &6*1000022,6*1000023,6*1000025,6*1000035,1000022,1000023,1000025,  
865      &1000035,1000002,2000002,-1000001,-2000001,1000004,2000004,        
866      &-1000003,-2000003,1000006,2000006,-1000005,-2000005,1000012,      
867      &2000012,-1000011,-2000011,1000014,2000014,-1000013,-2000013,      
868      &1000016,2000016,-1000015,-2000015,2*1000021,1000039,-1000024,     
869      &-1000037,1000022,1000023,1000025,1000035,4*1000001,1000002,       
870      &2000002,1000002,2000002,1000021,1000039,1000024,1000037,1000022,  
871      &1000023,1000025,1000035,4*1000002,1000001,2000001,1000001,        
872      &2000001,1000021,1000039,-1000024,-1000037,1000022,1000023,        
873      &1000025,1000035,4*1000003,1000004,2000004,1000004,2000004,        
874      &1000021,1000039,1000024,1000037,1000022,1000023,1000025,1000035,  
875      &4*1000004,1000003,2000003,1000003,2000003,1000021,1000039,        
876      &-1000024,-1000037,1000022,1000023,1000025,1000035,4*1000005,      
877      &1000006,2000006,1000006,2000006,1000021,1000039,1000024,1000037,  
878      &1000022,1000023,1000025,1000035,4*1000006,1000005,2000005,        
879      &1000005,2000005,1000021,1000039,-1000024,-1000037,1000022,        
880      &1000023,1000025,1000035,4*1000011,1000012,2000012,1000012,        
881      &2000012,1000039,-1000024,-1000037,1000022,1000023,1000025/        
882       DATA (KFDP(I,1),I=2517,4000)/1000035,4*1000013,1000014,2000014,   
883      &1000014,2000014,1000039,-1000024,-1000037,1000022,1000023,        
884      &1000025,1000035,4*1000015,1000016,2000016,1000016,2000016,21,22,  
885      &23,-24,21,22,23,24,22,23,-24,23,24,1447*0/                        
886       DATA (KFDP(I,2),I=   1, 339)/3*1,2,4,6,8,1,3*2,1,3,5,7,2,3*3,2,4, 
887      &6,8,3,3*4,1,3,5,7,4,3*5,2,4,6,8,5,3*6,1,3,5,7,6,5,6*1000006,3*7,  
888      &2,4,6,8,7,4,6,3*8,1,3,5,7,8,5,7,2*11,12,11,12,2*11,2*13,14,13,14, 
889      &13,11,13,-211,-213,-211,-213,-211,-213,-211,-213,2*-211,-321,     
890      &-323,-321,2*-323,3*-321,4*-211,-213,-211,-213,-211,-213,-211,     
891      &-213,-211,-213,3*-211,-213,4*-211,-323,-321,2*-211,2*-321,3*-211, 
892      &2*15,16,15,16,15,2*17,18,17,2*18,2*17,-1,-2,-3,-4,-5,-6,-7,-8,21, 
893      &-1,-2,-3,-4,-5,-6,-7,-8,-11,-13,-15,-17,-1,-2,-3,-4,-5,-6,-7,-8,  
894      &-11,-12,-13,-14,-15,-16,-17,-18,2,4,6,8,2,4,6,8,2,4,6,8,2,4,6,8,  
895      &12,14,16,18,-1,-2,-3,-4,-5,-6,-7,-8,-11,-13,-15,-17,21,22,2*23,   
896      &-24,2*1000022,1000023,1000022,1000023,1000025,1000022,1000023,    
897      &1000025,1000035,-1000024,-1000037,-1000024,-1000037,-1000001,     
898      &2*-2000001,2000001,-1000002,2*-2000002,2000002,-1000003,          
899      &2*-2000003,2000003,-1000004,2*-2000004,2000004,-1000005,          
900      &2*-2000005,2000005,-1000006,2*-2000006,2000006,-1000011,          
901      &2*-2000011,2000011,-1000012,2*-2000012,2000012,-1000013,          
902      &2*-2000013,2000013,-1000014,2*-2000014,2000014,-1000015,          
903      &2*-2000015,2000015,-1000016,2*-2000016,2000016,-1,-2,-3,-4,-5,-6, 
904      &-7,-8,-11,-12,-13,-14,-15,-16,-17,-18,-24,-37,22,25,2*36,2,4,6,8, 
905      &2,4,6,8,2,4,6,8,2,4,6,8,12,14,16,18,23,22,25,-1,-2,-3,-4,-5,-6/   
906       DATA (KFDP(I,2),I= 340, 526)/-7,-8,-11,-13,-15,-17,21,22,2*23,    
907      &-24,2*25,36,2*1000022,1000023,1000022,1000023,1000025,1000022,    
908      &1000023,1000025,1000035,-1000024,-1000037,-1000024,-1000037,      
909      &-1000001,2*-2000001,2000001,-1000002,2*-2000002,2000002,-1000003, 
910      &2*-2000003,2000003,-1000004,2*-2000004,2000004,-1000005,          
911      &2*-2000005,2000005,-1000006,2*-2000006,2000006,-1000011,          
912      &2*-2000011,2000011,-1000012,2*-2000012,2000012,-1000013,          
913      &2*-2000013,2000013,-1000014,2*-2000014,2000014,-1000015,          
914      &2*-2000015,2000015,-1000016,2*-2000016,2000016,-1,-2,-3,-4,-5,-6, 
915      &-7,-8,-11,-13,-15,-17,21,22,2*23,-24,25,2*1000022,1000023,        
916      &1000022,1000023,1000025,1000022,1000023,1000025,1000035,-1000024, 
917      &-1000037,-1000024,-1000037,-1000001,2*-2000001,2000001,-1000002,  
918      &2*-2000002,2000002,-1000003,2*-2000003,2000003,-1000004,          
919      &2*-2000004,2000004,-1000005,2*-2000005,2000005,-1000006,          
920      &2*-2000006,2000006,-1000011,2*-2000011,2000011,-1000012,          
921      &2*-2000012,2000012,-1000013,2*-2000013,2000013,-1000014,          
922      &2*-2000014,2000014,-1000015,2*-2000015,2000015,-1000016,          
923      &2*-2000016,2000016,2,4,6,8,12,14,16,18,25,1000024,1000037,        
924      &1000024,1000037,1000024,1000037,1000024,1000037,2*-1000005,       
925      &2*-2000005,1000002,1000004,1000012,1000014,2*1000016,-5,-6,21,11/ 
926       DATA (KFDP(I,2),I= 527, 931)/-3,-4,-5,-6,-7,-8,-13,-15,-17,-3,-4, 
927      &-5,-6,-11,-13,-15,21,-3,-5,5,12,14,16,-3,-4,-5,-6,-11,-13,-15,21, 
928      &-24,-52,-24,-52,51,53,51,53,-1,-2,-3,-4,-5,-6,-7,-8,-11,-12,-13,  
929      &-14,-15,-16,-17,-18,23,51,23,51,22,53,2,4,6,8,2,4,6,8,2,4,6,8,2,  
930      &4,6,8,12,14,16,18,2*51,2*53,-52,2*-24,-52,-1,-2,-3,-4,-5,-6,-7,   
931      &-8,-11,-12,-13,-14,-15,-16,-17,-18,-11,-13,-15,-13,2*-15,24,-11,  
932      &-13,-15,-13,2*-15,63,2,4,6,2,4,6,2,4,6,64,65,66,-82,12,14,-1,-3,  
933      &11,13,15,1,4,3,4,1,3,22,11,-211,2*22,-13,-11,-211,211,111,211,    
934      &-321,130,310,22,2*111,-211,11,-11,13,-13,-211,111,22,14,12,111,   
935      &22,111,3*211,-311,22,211,22,111,-211,211,11,-211,13,22,-211,111,  
936      &-211,22,111,-11,-211,111,2*-211,-321,130,310,221,111,-211,111,    
937      &2*0,-211,111,22,-211,111,-211,111,-211,211,-213,113,223,221,14,   
938      &111,211,111,-11,-13,211,111,22,211,111,211,111,2*211,213,113,223, 
939      &221,22,-211,111,113,223,22,111,-321,310,211,111,2*-211,221,22,    
940      &-11,-13,-211,-321,130,310,221,-211,111,11*12,11*14,2*211,2*213,   
941      &211,20213,2*321,2*323,211,213,211,213,211,213,211,213,211,213,    
942      &211,213,3*211,213,211,2*321,8*211,2*113,3*211,111,22,211,111,211, 
943      &111,4*211,8*12,8*14,2*211,2*213,2*111,221,2*113,223,333,20213,    
944      &211,2*321,323,2*311,313,-211,111,113,2*211,321,2*211,311,321,310, 
945      &211,-211,4*211,321,4*211,113,2*211,-321,111,22,-211,111,-211,111/ 
946       DATA (KFDP(I,2),I= 932,1317)/-211,211,-211,211,16,5*12,5*14,      
947      &3*211,3*213,211,2*111,2*113,2*-311,2*-313,-2112,3*321,323,2*-1,   
948      &22,111,321,311,321,311,-82,-11,-13,-82,22,-82,6*-11,6*-13,2*-15,  
949      &211,213,20213,211,213,20213,431,433,431,433,311,313,311,313,311,  
950      &313,-1,-4,-3,-4,-1,-3,22,-211,111,-211,111,-211,211,-211,211,     
951      &6*-11,6*-13,2*-15,211,213,20213,211,213,20213,431,433,431,433,    
952      &321,323,321,323,321,323,-1,-4,-3,-4,-1,-3,22,211,111,211,111,     
953      &4*211,6*-11,6*-13,2*-15,211,213,20213,211,213,20213,431,433,431,  
954      &433,221,331,333,221,331,333,221,331,333,-1,-4,-3,-4,-1,-3,22,     
955      &-321,-311,-321,-311,-15,-3,-1,2*-11,2*-13,2*-15,-1,-4,-3,-4,-3,   
956      &-4,-1,-4,2*12,2*14,2,3,2,3,2*12,2*14,2,1,22,411,421,411,421,21,   
957      &-11,-13,-15,-1,-2,-3,-4,2*21,22,21,2*-211,111,22,111,211,22,211,  
958      &-211,11,2*-211,111,-211,111,22,11,22,111,-211,211,111,211,22,211, 
959      &111,211,-211,22,11,13,11,-211,2*111,2*22,111,211,-321,-211,111,   
960      &11,2*-211,7*12,7*14,-321,-323,-311,-313,-311,-313,211,213,211,    
961      &213,211,213,111,221,331,113,223,111,221,113,223,321,323,321,-211, 
962      &-213,111,221,331,113,223,333,10221,111,221,331,113,223,211,213,   
963      &211,213,321,323,321,323,321,323,311,313,311,313,2*-1,-3,-1,2203,  
964      &3201,3203,2203,2101,2103,12,14,-1,-3,2*111,2*211,12,14,-1,-3,22,  
965      &111,2*22,111,22,12,14,-1,-3,22,12,14,-1,-3,12,14,-1,-3,12,14,-1/  
966       DATA (KFDP(I,2),I=1318,1756)/-3,12,14,-1,-3,12,14,-1,-3,12,14,-1, 
967      &-3,12,14,-1,-3,2*-211,11,13,15,-211,-213,-20213,-431,-433,3*3122, 
968      &1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,2*111,      
969      &2*211,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,4*22,11,13,15,1,  
970      &4,3,4,1,3,22,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,  
971      &1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1, 
972      &4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4, 
973      &3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3, 
974      &4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4, 
975      &1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1,3,11,13,15,1,4,3,4,1, 
976      &3,2*111,2*211,-211,111,-321,130,310,-211,111,211,-211,111,-213,   
977      &113,-211,111,223,211,111,213,113,211,111,223,-211,111,-321,130,   
978      &310,2*-211,-311,311,-321,321,211,111,211,111,-211,111,-211,111,   
979      &311,2*321,311,22,2*-82,-211,111,-211,111,211,111,211,111,-321,    
980      &-311,-321,-311,411,421,411,421,22,2*21,-211,2*211,111,-211,111,   
981      &2*211,111,-211,211,111,211,-321,2*-311,-321,22,-211,111,211,111,  
982      &-311,311,-321,321,211,111,-211,111,321,311,22,-82,-211,111,211,   
983      &111,-321,-311,411,421,22,21,-11,-13,-82,211,111,221,111,4*22,-11, 
984      &-13,-15,-1,-2,-3,-4,2*21,211,111,3*22,1,2*2,4*1,2*-24,2*-37,1,2,  
985      &2*1,4*2,2*24,2*37,2,3,2*4,4*3,2*-24,2*-37,3,4,2*3,4*4,2*24,2*37/  
986       DATA (KFDP(I,2),I=1757,2220)/4,5,2*6,4*5,2*-24,2*-37,5,6,2*5,4*6, 
987      &2*24,2*37,6,4,-15,16,11,2*12,4*11,2*-24,2*-37,12,2*11,4*12,2*24,  
988      &2*37,13,2*14,4*13,2*-24,2*-37,14,2*13,4*14,2*24,2*37,15,2*16,     
989      &4*15,2*-24,2*-37,16,2*15,4*16,2*24,2*37,21,-1,1,-1,1,-2,2,-2,2,   
990      &-3,3,-3,3,-4,4,-4,4,-5,5,-5,5,-6,6,-6,6,1,3,5,2,4,6,1,3,5,2,4,6,  
991      &1,3,5,2,4,6,1,3,5,2,4,6,1,-1,3,-3,5,-5,1,-1,3,-3,5,-5,22,23,25,   
992      &35,36,-1,-3,22,23,25,35,36,22,23,11,13,15,12,14,16,1,3,5,2,4,25,  
993      &35,36,-24,24,11,-11,13,-13,15,-15,1,-1,3,-3,-24,24,11,-11,13,-13, 
994      &15,-15,1,-1,3,-3,-37,37,-37,37,-1,1,-1,1,-2,2,-2,2,-3,3,-3,3,-4,  
995      &4,-4,4,-5,5,-5,5,-6,6,-6,6,-11,11,-11,11,-12,12,-12,12,-13,13,    
996      &-13,13,-14,14,-14,14,-15,15,-15,15,-16,16,-16,16,1,3,5,2,4,24,37, 
997      &24,-11,-13,-15,-1,-3,24,-11,-13,-15,-1,-3,24,-11,-13,-15,-1,-3,   
998      &24,-11,-13,-15,-1,-3,4*37,2*-1,2*2,2*-3,2*4,2*-5,2*6,2*-11,2*12,  
999      &2*-13,2*14,2*-15,2*16,-1,-3,22,23,25,35,36,22,23,11,13,15,12,14,  
1000      &16,1,3,5,2,4,25,35,36,22,23,11,13,15,12,14,16,1,3,5,2,4,25,35,36, 
1001      &-24,24,11,-11,13,-13,15,-15,1,-1,3,-3,-24,24,11,-11,13,-13,15,    
1002      &-15,1,-1,3,-3,-37,37,-37,37,-1,1,-1,1,-2,2,-2,2,-3,3,-3,3,-4,4,   
1003      &-4,4,-5,5,-5,5,-6,6,-6,6,-11,11,-11,11,-12,12,-12,12,-13,13,-13,  
1004      &13,-14,14,-14,14,-15,15,-15,15,-16,16,-16,16,1,3,5,2,4,22,23,25,  
1005      &35,36,22,23,11,13,15,12,14,16,1,3,5,2,4,25,35,36,22,23,11,13,15/  
1006       DATA (KFDP(I,2),I=2221,4000)/12,14,16,1,3,5,2,4,25,35,36,22,23,   
1007      &11,13,15,12,14,16,1,3,5,2,4,25,35,36,-24,24,11,-11,13,-13,15,-15, 
1008      &1,-1,3,-3,-24,24,11,-11,13,-13,15,-15,1,-1,3,-3,-37,37,-37,37,-1, 
1009      &1,-1,1,-2,2,-2,2,-3,3,-3,3,-4,4,-4,4,-5,5,-5,5,-6,6,-6,6,-11,11,  
1010      &-11,11,-12,12,-12,12,-13,13,-13,13,-14,14,-14,14,-15,15,-15,15,   
1011      &-16,16,-16,16,1,3,5,2,4,24,37,23,11,13,15,12,14,16,1,3,5,2,4,25,  
1012      &35,36,24,-11,-13,-15,-1,-3,24,-11,-13,-15,-1,-3,24,-11,-13,-15,   
1013      &-1,-3,24,-11,-13,-15,-1,-3,4*37,2*-1,2*2,2*-3,2*4,2*-5,2*6,2*-11, 
1014      &2*12,2*-13,2*14,2*-15,2*16,-1,-3,1,2*2,4*1,23,25,35,36,2*-24,     
1015      &2*-37,1,2,2*1,4*2,23,25,35,36,2*24,2*37,2,3,2*4,4*3,23,25,35,36,  
1016      &2*-24,2*-37,3,4,2*3,4*4,23,25,35,36,2*24,2*37,4,5,2*6,4*5,23,25,  
1017      &35,36,2*-24,2*-37,5,6,2*5,4*6,23,25,35,36,2*24,2*37,6,11,2*12,    
1018      &4*11,23,25,35,36,2*-24,2*-37,13,2*14,4*13,23,25,35,36,2*-24,      
1019      &2*-37,15,2*16,4*15,23,25,35,36,2*-24,2*-37,3*1,4*2,1,2*11,2*12,   
1020      &11,1447*0/                                                        
1021       DATA (KFDP(I,3),I=   1,1134)/81*0,14,6*0,2*16,2*0,6*111,310,130,  
1022      &2*0,3*111,310,130,321,113,211,223,221,2*113,2*211,2*223,2*221,    
1023      &2*113,221,2*113,2*213,-213,113,2*111,310,130,310,130,2*310,130,   
1024      &407*0,-5,112*0,4*3,4*4,1,4,3,2*2,0,-11,8*0,-211,5*0,2*111,211,    
1025      &-211,211,-211,10*0,111,4*0,2*111,-211,-11,11,-13,22,111,3*0,22,   
1026      &3*0,111,211,4*0,111,11*0,111,-211,6*0,-211,3*111,7*0,111,-211,    
1027      &5*0,2*221,3*0,111,5*0,111,11*0,-311,-313,-311,-321,-313,-323,111, 
1028      &221,331,113,223,-311,-313,-311,-321,-313,-323,111,221,331,113,    
1029      &223,22*0,111,113,2*211,-211,-311,211,111,3*211,-211,7*211,7*0,    
1030      &111,-211,111,-211,-321,-323,-311,-321,-313,-323,-211,-213,-321,   
1031      &-323,-311,-321,-313,-323,-211,-213,22*0,111,113,-311,2*-211,211,  
1032      &-211,310,-211,2*111,211,2*-211,-321,-211,2*211,-211,111,-211,     
1033      &2*211,6*0,111,-211,111,-211,0,221,331,333,321,311,221,331,333,    
1034      &321,311,20*0,3,13*0,-411,-413,-10413,-10411,-20413,-415,-411,     
1035      &-413,-10413,-10411,-20413,-415,-411,-413,16*0,-4,-1,-4,-3,2*-2,   
1036      &5*0,111,-211,111,-211,-421,-423,-10423,-10421,-20423,-425,-421,   
1037      &-423,-10423,-10421,-20423,-425,-421,-423,16*0,-4,-1,-4,-3,2*-2,   
1038      &5*0,111,-211,111,-211,-431,-433,-10433,-10431,-20433,-435,-431,   
1039      &-433,-10433,-10431,-20433,-435,-431,-433,19*0,-4,-1,-4,-3,2*-2,   
1040      &8*0,441,443,441,443,441,443,-4,-1,-4,-3,-4,-3,-4,-1,531,533,531/  
1041       DATA (KFDP(I,3),I=1135,2233)/533,3,2,3,2,511,513,511,513,1,2,     
1042      &13*0,2*21,11*0,2112,6*0,2212,12*0,2*3122,3212,10*0,3322,2*0,3122, 
1043      &3212,3214,2112,2114,2212,2112,3122,3212,3214,2112,2114,2212,2112, 
1044      &52*0,3*3,1,6*0,4*3,4*0,4*3,6*0,4*3,0,28*3,2*0,3*4122,8*0,4,1,4,3, 
1045      &2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*0,4*4,1,4,3,2*2,4*4,1,4,3,2*2,  
1046      &4*0,4*4,1,4,3,2*2,0,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,    
1047      &4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,  
1048      &3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,    
1049      &4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,3,2*2,4*4,1,4,  
1050      &3,2*2,4*4,1,4,3,2*2,31*0,211,111,45*0,-211,2*111,-211,3*111,-211, 
1051      &111,211,30*0,-211,111,13*0,2*21,-211,111,76*0,2*5,91*0,-1,-3,-5,  
1052      &-2,-4,-6,-1,-3,-5,-2,-4,-6,-1,-3,-5,-2,-4,-6,-1,-3,-5,-2,-4,-6,   
1053      &-2,2,-4,4,-6,6,-2,2,-4,4,-6,6,5*0,11,12,7*0,-11,-13,-15,-12,-14,  
1054      &-16,-1,-3,-5,-2,-4,5*0,-12,12,-14,14,-16,16,-2,2,-4,4,2*0,-12,12, 
1055      &-14,14,-16,16,-2,2,-4,4,52*0,-1,-3,-5,-2,-4,3*0,12,14,16,2,4,0,   
1056      &12,14,16,2,4,0,12,14,16,2,4,0,12,14,16,2,4,28*0,2,4,7*0,-11,-13,  
1057      &-15,-12,-14,-16,-1,-3,-5,-2,-4,5*0,-11,-13,-15,-12,-14,-16,-1,-3, 
1058      &-5,-2,-4,5*0,-12,12,-14,14,-16,16,-2,2,-4,4,2*0,-12,12,-14,14,    
1059      &-16,16,-2,2,-4,4,52*0,-1,-3,-5,-2,-4,7*0,-11,-13,-15,-12,-14,-16, 
1060      &-1,-3,-5,-2,-4,5*0,-11,-13,-15,-12,-14,-16,-1,-3,-5,-2,-4,5*0/    
1061       DATA (KFDP(I,3),I=2234,4000)/-11,-13,-15,-12,-14,-16,-1,-3,-5,-2, 
1062      &-4,5*0,-12,12,-14,14,-16,16,-2,2,-4,4,2*0,-12,12,-14,14,-16,16,   
1063      &-2,2,-4,4,52*0,-1,-3,-5,-2,-4,3*0,-11,-13,-15,-12,-14,-16,-1,-3,  
1064      &-5,-2,-4,4*0,12,14,16,2,4,0,12,14,16,2,4,0,12,14,16,2,4,0,12,14,  
1065      &16,2,4,28*0,2,4,1601*0/                                           
1066       DATA (KFDP(I,4),I=   1,4000)/94*0,4*111,6*0,111,2*0,-211,0,-211,  
1067      &3*0,111,2*-211,0,111,0,2*111,113,221,2*111,-213,-211,211,113,     
1068      &6*111,310,2*130,520*0,13*81,41*0,-11,10*0,111,-211,4*0,111,62*0,  
1069      &111,211,111,211,7*0,111,211,111,211,35*0,2*-211,2*111,211,111,    
1070      &-211,2*211,2*-211,13*0,-211,111,-211,111,4*0,-211,111,-211,111,   
1071      &34*0,111,-211,3*111,3*-211,2*111,3*-211,14*0,-321,-311,3*0,-321,  
1072      &-311,20*0,-3,43*0,6*1,39*0,6*2,42*0,6*3,14*0,8*4,4*0,4*-5,4*0,    
1073      &2*-5,67*0,-211,111,5*0,-211,111,52*0,2101,2103,2*2101,6*0,4*81,   
1074      &4*0,4*81,6*0,4*81,0,28*81,13*0,6*2101,18*81,4*0,18*81,4*0,9*81,0, 
1075      &162*81,31*0,-211,111,2398*0/                                      
1076       DATA (KFDP(I,5),I=   1,4000)/96*0,2*111,17*0,111,7*0,2*111,0,     
1077      &3*111,0,111,715*0,-211,2*111,-211,111,-211,111,65*0,111,-211,     
1078      &3*111,-211,111,3075*0/                                            
1079        
1080 C...PYDAT4, with particle names (character strings). 
1081       DATA (CHAF(I,1),I=   1, 185)/'d','u','s','c','b','t','b''','t''', 
1082      &2*' ','e-','nu_e','mu-','nu_mu','tau-','nu_tau','tau''-',         
1083      &'nu''_tau',2*' ','g','gamma','Z0','W+','h0',2*' ','reggeon',      
1084      &'pomeron',2*' ','Z''0','Z"0','W''+','H0','A0','H+','eta_tech0',   
1085      &'LQ_ue','R0',10*' ','pi_tech0','pi_tech+','pi''_tech0',           
1086      &'rho_tech0','rho_tech+','omega_tech',4*' ','H_L++','H_R++',       
1087      &'W_R+','nu_Re','nu_Rmu','nu_Rtau',14*' ','specflav','rndmflav',   
1088      &'phasespa','c-hadron','b-hadron',5*' ','cluster','string',        
1089      &'indep.','CMshower','SPHEaxis','THRUaxis','CLUSjet','CELLjet',    
1090      &'table',' ','rho_diff0','pi0','rho0','a_20','K_L0','pi_diffr+',   
1091      &'pi+','rho+','a_2+','omega_di','eta','omega','f_2','K_S0','K0',   
1092      &'K*0','K*_20','K+','K*+','K*_2+','phi_diff','eta''','phi',        
1093      &'f''_2','D+','D*+','D*_2+','D0','D*0','D*_20','D_s+','D*_s+',     
1094      &'D*_2s+','J/psi_di','eta_c','J/psi','chi_2c','B0','B*0','B*_20',  
1095      &'B+','B*+','B*_2+','B_s0','B*_s0','B*_2s0','B_c+','B*_c+',        
1096      &'B*_2c+','eta_b','Upsilon','chi_2b','dd_1','Delta-','ud_0',       
1097      &'ud_1','n_diffr0','n0','Delta0','uu_1','p_diffr+','p+','Delta+',  
1098      &'Delta++','sd_0','sd_1','Sigma-','Sigma*-','Lambda0','su_0',      
1099      &'su_1','Sigma0','Sigma*0','Sigma+','Sigma*+','ss_1','Xi-','Xi*-', 
1100      &'Xi0','Xi*0','Omega-','cd_0','cd_1','Sigma_c0','Sigma*_c0'/       
1101       DATA (CHAF(I,1),I= 186, 315)/'Lambda_c+','Xi_c0','cu_0','cu_1',   
1102      &'Sigma_c+','Sigma*_c+','Sigma_c++','Sigma*_c++','Xi_c+','cs_0',   
1103      &'cs_1','Xi''_c0','Xi*_c0','Xi''_c+','Xi*_c+','Omega_c0',          
1104      &'Omega*_c0','cc_1','Xi_cc+','Xi*_cc+','Xi_cc++','Xi*_cc++',       
1105      &'Omega_cc+','Omega*_cc+','Omega*_ccc++','bd_0','bd_1','Sigma_b-', 
1106      &'Sigma*_b-','Lambda_b0','Xi_b-','Xi_bc0','bu_0','bu_1',           
1107      &'Sigma_b0','Sigma*_b0','Sigma_b+','Sigma*_b+','Xi_b0','Xi_bc+',   
1108      &'bs_0','bs_1','Xi''_b-','Xi*_b-','Xi''_b0','Xi*_b0','Omega_b-',   
1109      &'Omega*_b-','Omega_bc0','bc_0','bc_1','Xi''_bc0','Xi*_bc0',       
1110      &'Xi''_bc+','Xi*_bc+','Omega''_bc0','Omega*_bc0','Omega_bcc+',     
1111      &'Omega*_bcc+','bb_1','Xi_bb-','Xi*_bb-','Xi_bb0','Xi*_bb0',       
1112      &'Omega_bb-','Omega*_bb-','Omega_bbc0','Omega*_bbc0',              
1113      &'Omega*_bbb-','a_00','b_10','a_0+','b_1+','f_0','h_1','K*_00',    
1114      &'K_10','K*_0+','K_1+','f''_0','h''_1','D*_0+','D_1+','D*_00',     
1115      &'D_10','D*_0s+','D_1s+','chi_0c','h_1c','B*_00','B_10','B*_0+',   
1116      &'B_1+','B*_0s0','B_1s0','B*_0c+','B_1c+','chi_0b','h_1b','a_10',  
1117      &'a_1+','f_1','K*_10','K*_1+','f''_1','D*_1+','D*_10','D*_1s+',    
1118      &'chi_1c','B*_10','B*_1+','B*_1s0','B*_1c+','chi_1b','psi''',      
1119      &'Upsilon''','~d_L','~u_L','~s_L','~c_L','~b_1','~t_1','~e_L-',    
1120      &'~nu_eL','~mu_L-','~nu_muL','~tau_1-','~nu_tauL','~g','~chi_10'/  
1121       DATA (CHAF(I,1),I= 316, 500)/'~chi_20','~chi_1+','~chi_30',       
1122      &'~chi_40','~chi_2+','~gravitino','~d_R','~u_R','~s_R','~c_R',     
1123      &'~b_2','~t_2','~e_R-','~nu_eR','~mu_R-','~nu_muR','~tau_2-',      
1124      &'~nu_tauR','d*','u*','e*-','nu*_e0',163*' '/                      
1125       DATA (CHAF(I,2),I=   1, 198)/'dbar','ubar','sbar','cbar','bbar',  
1126      &'tbar','b''bar','t''bar',2*' ','e+','nu_ebar','mu+','nu_mubar',   
1127      &'tau+','nu_taubar','tau''+','nu''_taubar',5*' ','W-',9*' ',       
1128      &'W''-',2*' ','H-',' ','LQ_uebar','Rbar0',11*' ','pi_tech-',2*' ', 
1129      &'rho_tech-',5*' ','H_L--','H_R--','W_R-','nu_Rebar','nu_Rmubar',  
1130      &'nu_Rtaubar',15*' ','rndmflavbar',' ','c-hadronbar',              
1131      &'b-hadronbar',20*' ','pi_diffr-','pi-','rho-','a_2-',5*' ',       
1132      &'Kbar0','K*bar0','K*_2bar0','K-','K*-','K*_2-',4*' ','D-','D*-',  
1133      &'D*_2-','Dbar0','D*bar0','D*_2bar0','D_s-','D*_s-','D*_2s-',      
1134      &4*' ','Bbar0','B*bar0','B*_2bar0','B-','B*-','B*_2-','B_sbar0',   
1135      &'B*_sbar0','B*_2sbar0','B_c-','B*_c-','B*_2c-',3*' ','dd_1bar',   
1136      &'Deltabar+','ud_0bar','ud_1bar','n_diffrbar0','nbar0',            
1137      &'Deltabar0','uu_1bar','p_diffrbar-','pbar-','Deltabar-',          
1138      &'Deltabar--','sd_0bar','sd_1bar','Sigmabar+','Sigma*bar+',        
1139      &'Lambdabar0','su_0bar','su_1bar','Sigmabar0','Sigma*bar0',        
1140      &'Sigmabar-','Sigma*bar-','ss_1bar','Xibar+','Xi*bar+','Xibar0',   
1141      &'Xi*bar0','Omegabar+','cd_0bar','cd_1bar','Sigma_cbar0',          
1142      &'Sigma*_cbar0','Lambda_cbar-','Xi_cbar0','cu_0bar','cu_1bar',     
1143      &'Sigma_cbar-','Sigma*_cbar-','Sigma_cbar--','Sigma*_cbar--',      
1144      &'Xi_cbar-','cs_0bar','cs_1bar','Xi''_cbar0','Xi*_cbar0'/          
1145       DATA (CHAF(I,2),I= 199, 308)/'Xi''_cbar-','Xi*_cbar-',            
1146      &'Omega_cbar0','Omega*_cbar0','cc_1bar','Xi_ccbar-','Xi*_ccbar-',  
1147      &'Xi_ccbar--','Xi*_ccbar--','Omega_ccbar-','Omega*_ccbar-',        
1148      &'Omega*_cccbar-','bd_0bar','bd_1bar','Sigma_bbar+',               
1149      &'Sigma*_bbar+','Lambda_bbar0','Xi_bbar+','Xi_bcbar0','bu_0bar',   
1150      &'bu_1bar','Sigma_bbar0','Sigma*_bbar0','Sigma_bbar-',             
1151      &'Sigma*_bbar-','Xi_bbar0','Xi_bcbar-','bs_0bar','bs_1bar',        
1152      &'Xi''_bbar+','Xi*_bbar+','Xi''_bbar0','Xi*_bbar0','Omega_bbar+',  
1153      &'Omega*_bbar+','Omega_bcbar0','bc_0bar','bc_1bar','Xi''_bcbar0',  
1154      &'Xi*_bcbar0','Xi''_bcbar-','Xi*_bcbar-','Omega''_bcba',           
1155      &'Omega*_bcbar0','Omega_bccbar-','Omega*_bccbar-','bb_1bar',       
1156      &'Xi_bbbar+','Xi*_bbbar+','Xi_bbbar0','Xi*_bbbar0','Omega_bbbar+', 
1157      &'Omega*_bbbar+','Omega_bbcbar0','Omega*_bbcbar0',                 
1158      &'Omega*_bbbbar+',2*' ','a_0-','b_1-',2*' ','K*_0bar0','K_1bar0',  
1159      &'K*_0-','K_1-',2*' ','D*_0-','D_1-','D*_0bar0','D_1bar0',         
1160      &'D*_0s-','D_1s-',2*' ','B*_0bar0','B_1bar0','B*_0-','B_1-',       
1161      &'B*_0sbar0','B_1sbar0','B*_0c-','B_1c-',3*' ','a_1-',' ',         
1162      &'K*_1bar0','K*_1-',' ','D*_1-','D*_1bar0','D*_1s-',' ',           
1163      &'B*_1bar0','B*_1-','B*_1sbar0','B*_1c-',3*' ','~d_Lbar',          
1164      &'~u_Lbar','~s_Lbar','~c_Lbar','~b_1bar','~t_1bar','~e_L+'/        
1165       DATA (CHAF(I,2),I= 309, 500)/'~nu_eLbar','~mu_L+','~nu_muLbar',   
1166      &'~tau_1+','~nu_tauLbar',3*' ','~chi_1-',2*' ','~chi_2-',' ',      
1167      &'~d_Rbar','~u_Rbar','~s_Rbar','~c_Rbar','~b_2bar','~t_2bar',      
1168      &'~e_R+','~nu_eRbar','~mu_R+','~nu_muRbar','~tau_2+',              
1169      &'~nu_tauRbar','d*bar','u*bar','e*bar+','nu*_ebar0',163*' '/       
1170        
1171 C...PYDATR, with initial values for the random number generator.
1172       DATA MRPY/19780503,0,0,97,33,0/
1173  
1174 C...Default values for allowed processes and kinematics constraints.
1175       DATA MSEL/1/
1176       DATA MSUB/500*0/
1177       DATA ((KFIN(I,J),J=-40,40),I=1,2)/16*0,4*1,4*0,6*1,5*0,5*1,0,
1178      &5*1,5*0,6*1,4*0,4*1,16*0,16*0,4*1,4*0,6*1,5*0,5*1,0,5*1,5*0,
1179      &6*1,4*0,4*1,16*0/
1180       DATA CKIN/
1181      &  2.0D0, -1.0D0,  0.0D0, -1.0D0,  1.0D0,
1182      &  1.0D0,  -10D0,   10D0,  -40D0,   40D0,
1183      1  -40D0,   40D0,  -40D0,   40D0,  -40D0,
1184      1   40D0, -1.0D0,  1.0D0, -1.0D0,  1.0D0,
1185      2  0.0D0,  1.0D0,  0.0D0,  1.0D0, -1.0D0,
1186      2  1.0D0, -1.0D0,  1.0D0,    0D0,    0D0,
1187      3  2.0D0, -1.0D0,    0D0,    0D0,  0.0D0,
1188      3 -1.0D0,  0.0D0, -1.0D0,  4.0D0, -1.0D0,
1189      4 12.0D0, -1.0D0, 12.0D0, -1.0D0, 12.0D0,
1190      4 -1.0D0, 12.0D0, -1.0D0,    0D0,    0D0,
1191      5  0.0D0, -1.0D0,  0.0D0, -1.0D0,  0.0D0,
1192      5 -1.0D0,    0D0,    0D0,    0D0,    0D0,
1193      6 0.0001D0, 0.99D0, 0.0001D0, 0.99D0,    0D0,
1194      6   -1D0,    0D0,   -1D0,    0D0,   -1D0,
1195      7    0D0,   -1D0, 0.0001D0, 0.99D0, 0.0001D0,
1196      7 0.99D0,    2D0,   -1D0,    0D0,    0D0,
1197      8  120*0D0/
1198  
1199 C...Default values for main switches and parameters. Reset information.
1200       DATA (MSTP(I),I=1,100)/
1201      &  3,    1,    2,    0,    0,    0,    0,    0,    0,    0,
1202      1  1,    0,    1,   30,    0,    1,    4,    3,    4,    3,
1203      2  1,    0,    1,    0,    0,    0,    0,    0,    0,    1,
1204      3  1,    8,    0,    1,    0,    2,    1,    5,    2,    0,
1205      4  1,    1,    3,    7,    3,    1,    1,    0,    1,    0,
1206      5  4,    1,    3,    1,    5,    1,    1,    5,    1,    7,
1207      6  1,    3,    2,    2,    1,    5,    2,    1,    0,    0,
1208      7  1,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1209      8  1,    1,  100,    0,    0,    2,    0,    0,    0,    0,
1210      9  1,    3,    1,    3,    0,    0,    0,    0,    0,    0/
1211       DATA (MSTP(I),I=101,200)/
1212      &  3,    1,    0,    0,    0,    0,    0,    0,    0,    0,
1213      1  1,    1,    1,    0,    0,    0,    0,    0,    0,    0,
1214      2  0,    1,    2,    1,    1,   50,    0,    0,   10,    0,
1215      3  0,    4,    0,    1,    0,    0,    0,    0,    0,    0,
1216      4  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1217      5  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1218      6  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1219      7  0,    2,    0,    0,    0,    0,    0,    0,    0,    0,
1220      8  6,  150, 2000,   06,   30,    0,    0,    0,    0,    0,
1221      9  0,    0,    0,    0,    0,    0,    0,    0,    0,    0/
1222       DATA (PARP(I),I=1,100)/
1223      &  0.25D0,  10D0, 8*0D0,
1224      1  0D0, 0D0, 1.0D0, 0.01D0, 0.5D0, 1.0D0, 1.0D0, 0.4D0, 2*0D0,
1225      2  10*0D0,
1226      3  1.5D0,2.0D0,0.075D0,1.0D0,0.2D0,0D0,2.0D0,0.70D0,0.006D0,0D0,
1227      4  0.02D0,2.0D0,0.10D0,1000D0,2054D0, 123D0, 246D0, 50D0, 2*0D0,
1228      5  10*0D0,
1229      6  0.25D0, 1.0D0,0.25D0, 1.0D0, 2.0D0,1D-3, 1.0D0,1D-3,2*0D0,
1230      7  4.0D0, 0.25D0, 8*0D0,
1231      8  1.90D0, 2.10D0, 0.5D0, 0.2D0, 0.33D0, 
1232      8  0.66D0, 0.7D0, 0.5D0, 1000D0, 0.16D0,
1233      9  1.0D0,0.40D0,5.0D0,1.0D0,0D0,3.0D0,1.0D0,0.75D0,1.0D0,5.0D0/
1234       DATA (PARP(I),I=101,200)/
1235      &  0.5D0, 0.28D0,  1.0D0, 0.8D0, 6*0D0,
1236      1  2.0D0, 3*0D0, 1.5D0, 0.5D0, 0.6D0, 2.5D0, 2.0D0, 1.0D0,
1237      2  1.0D0,  0.4D0, 8*0D0,
1238      3  0.01D0, 8*0D0, 0D0,
1239      4  0.33333D0, 82D0, 1.33333D0, 4D0, 1D0, 
1240      4  1D0,  .0182D0, 1D0, 0D0, 1.33333D0,
1241      5  0D0,   0D0,   0D0,   0D0, 6*0D0,
1242      6  2.20D0, 23.6D0, 18.4D0, 11.5D0, 0.5D0, 0D0, 0D0, 0D0, 2*0D0,
1243      7  0D0,   0D0,   0D0,  1.0D0, 6*0D0,
1244      8  0.1D0, 0.01D0, 0.01D0, 0.01D0, 0.1D0, 0.01D0, 0.01D0, 0.01D0,
1245      8  0.3D0, 0.64D0,    
1246      9  0.64D0, 5.0D0, 8*0D0/
1247       DATA MSTI/200*0/
1248       DATA PARI/200*0D0/
1249       DATA MINT/400*0/
1250       DATA VINT/400*0D0/
1251  
1252 C...Constants for the generation of the various processes.
1253       DATA (ISET(I),I=1,100)/
1254      &  1,    1,    1,   -1,    3,   -1,   -1,    3,   -2,    2,
1255      1  2,    2,    2,    2,    2,    2,   -1,    2,    2,    2,
1256      2 -1,    2,    2,    2,    2,    2,   -1,    2,    2,    2,
1257      3  2,    2,    2,    2,    2,    2,   -1,   -1,   -1,   -1,
1258      4 -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1259      5 -1,   -1,    2,    2,   -1,   -1,   -1,    2,   -1,   -1,
1260      6 -1,   -1,   -1,   -1,   -1,   -1,   -1,    2,    2,    2,
1261      7  4,    4,    4,   -1,   -1,    4,    4,   -1,   -1,    2,
1262      8  2,    2,    2,    2,    2,    2,    2,    2,    2,   -2,
1263      9  0,    0,    0,    0,    0,    9,   -2,   -2,    8,   -2/
1264       DATA (ISET(I),I=101,200)/
1265      & -1,    1,    1,    1,    1,    2,    2,    2,   -2,    2,
1266      1  2,    2,    2,    2,    2,   -1,   -1,   -1,   -2,   -2,
1267      2  5,    5,    5,    5,   -2,   -2,   -2,   -2,   -2,   -2,
1268      3  2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1269      4  1,    1,    1,    1,    1,    1,    1,    1,    1,   -2,
1270      5  1,    1,    1,   -2,   -2,    1,    1,    1,   -2,   -2,
1271      6  2,    2,    2,    2,    2,    2,    2,    2,    2,   -2,
1272      7  2,    2,    5,    5,   -2,    2,    2,    5,    5,   -2,
1273      8  5,    5,   -2,   -2,   -2,    5,    5,   -2,   -2,   -2,
1274      9  1,    1,    1,    2,    2,   -2,   -2,   -2,   -2,   -2/
1275       DATA (ISET(I),I=201,300)/
1276      &  2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1277      1  2,    2,    2,    2,   -2,    2,    2,    2,    2,    2,
1278      2  2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1279      3  2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1280      4  2,    2,    2,    2,   -1,    2,    2,    2,    2,    2,
1281      5  2,    2,    2,    2,   -1,    2,   -1,    2,    2,   -2,
1282      6  2,    2,    2,    2,    2,   -1,   -1,   -1,   -1,   -1,
1283      7  2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1284      8  2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1285      9  2,    2,    2,    2,    2,    2,    2,    2,    2,    2/
1286       DATA (ISET(I),I=301,500)/
1287      &  2,   39*-2,
1288      4  1,    1,    2,    2,    2,    2,    2,    2,    2,    2,
1289      5  5,    5,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
1290      6  2,    2,    2,    2,    2,    2,    2,    2,   -1,    2,
1291      7  2,    2,    2,    2,    2,    2,    2,   -1,   -1,   -1,
1292      8  120*-2/
1293       DATA ((KFPR(I,J),J=1,2),I=1,50)/
1294      &  23,    0,   24,    0,   25,    0,   24,    0,   25,    0,
1295      &  24,    0,   23,    0,   25,    0,    0,    0,    0,    0,
1296      1   0,    0,    0,    0,   21,   21,   21,   22,   21,   23,
1297      1  21,   24,   21,   25,   22,   22,   22,   23,   22,   24,
1298      2  22,   25,   23,   23,   23,   24,   23,   25,   24,   24,
1299      2  24,   25,   25,   25,    0,   21,    0,   22,    0,   23,
1300      3   0,   24,    0,   25,    0,   21,    0,   22,    0,   23,
1301      3   0,   24,    0,   25,    0,   21,    0,   22,    0,   23,
1302      4   0,   24,    0,   25,    0,   21,    0,   22,    0,   23,
1303      4   0,   24,    0,   25,    0,   21,    0,   22,    0,   23/
1304       DATA ((KFPR(I,J),J=1,2),I=51,100)/
1305      5   0,   24,    0,   25,    0,    0,    0,    0,    0,    0,
1306      5   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1307      6   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1308      6   0,    0,    0,    0,   21,   21,   24,   24,   23,   24,
1309      7  23,   23,   24,   24,   23,   24,   23,   25,   22,   22,
1310      7  23,   23,   24,   24,   24,   25,   25,   25,    0,  211,
1311      8   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1312      8 443,   21,10441,   21,20443,   21,  445,   21,    0,    0,
1313      9   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1314      9   0,    0,    0,    0,    0,    0,    0,    0,    0,    0/
1315       DATA ((KFPR(I,J),J=1,2),I=101,150)/
1316      &  23,    0,   25,    0,   25,    0,10441,    0,  445,    0,
1317      & 443,   22,  443,   21,  443,   22,    0,    0,   22,   25,
1318      1  21,   25,    0,   25,   21,   25,   22,   22,   21,   22,
1319      1  22,   23,   23,   23,   24,   24,    0,    0,    0,    0,
1320      2  25,    6,   25,    6,   25,    0,   25,    0,    0,    0,
1321      2   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1322      3   0,   21,    0,   21,    0,   22,    0,   22,    0,    0,
1323      3   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1324      4  32,    0,   34,    0,   37,    0,   40,    0,   39,    0,
1325      4 4000011, 0, 4000001, 0, 4000002, 0,  38,    0,    0,    0/
1326       DATA ((KFPR(I,J),J=1,2),I=151,200)/
1327      5  35,    0,   35,    0,   35,    0,    0,    0,    0,    0,
1328      5  36,    0,   36,    0,   36,    0,    0,    0,    0,    0,
1329      6   6,   37,   39,    0,   39,   39,   39,   39,   11,    0,
1330      6  11,    0, 0, 4000001, 0, 4000002, 0, 4000011,    0,    0,
1331      7  23,   35,   24,   35,   35,    0,   35,    0,    0,    0,
1332      7  23,   36,   24,   36,   36,    0,   36,    0,    0,    0,
1333      8  35,    6,   35,    6,    0,    0,    0,    0,    0,    0,
1334      8  36,    6,   36,    6,    0,    0,    0,    0,    0,    0,
1335      9  54,    0,   55,    0,   56,    0,   11,    0,   11,    0,
1336      9   0,    0,    0,    0,    0,    0,    0,    0,    0,    0/
1337       DATA ((KFPR(I,J),J=1,2),I=201,250)/
1338      &  1000011,   1000011,   2000011,   2000011,   1000011,
1339      &  2000011,   1000013,   1000013,   2000013,   2000013,
1340      &  1000013,   2000013,   1000015,   1000015,   2000015,
1341      &  2000015,   1000015,   2000015,   1000011,   1000012,
1342      1  1000015,   1000016,   2000015,   1000016,   1000012,
1343      1  1000012,   1000016,   1000016,         0,         0,
1344      1  1000022,   1000022,   1000023,   1000023,   1000025,
1345      1  1000025,   1000035,   1000035,   1000022,   1000023,
1346      2  1000022,   1000025,   1000022,   1000035,   1000023,
1347      2  1000025,   1000023,   1000035,   1000025,   1000035,
1348      2  1000024,   1000024,   1000037,   1000037,   1000024,
1349      2  1000037,   1000022,   1000024,   1000023,   1000024,
1350      3  1000025,   1000024,   1000035,   1000024,   1000022,
1351      3  1000037,   1000023,   1000037,   1000025,   1000037,
1352      3  1000035,   1000037,   1000021,   1000022,   1000021,
1353      3  1000023,   1000021,   1000025,   1000021,   1000035,
1354      4  1000021,   1000024,   1000021,   1000037,   1000021,
1355      4  1000021,   1000021,   1000021,         0,         0,
1356      4  1000002,   1000022,   2000002,   1000022,   1000002,
1357      4  1000023,   2000002,   1000023,   1000002,   1000025/
1358       DATA ((KFPR(I,J),J=1,2),I=251,300)/
1359      5  2000002,   1000025,   1000002,   1000035,   2000002,
1360      5  1000035,   1000001,   1000024,   2000005,   1000024,
1361      5  1000001,   1000037,   2000005,   1000037,   1000002,
1362      5  1000021,   2000002,   1000021,         0,         0,
1363      6  1000006,   1000006,   2000006,   2000006,   1000006,
1364      6  2000006,   1000006,   1000006,   2000006,   2000006,
1365      6        0,         0,         0,         0,         0,
1366      6        0,         0,         0,         0,         0,
1367      7  1000002,   1000002,   2000002,   2000002,   1000002,
1368      7  2000002,   1000002,   1000002,   2000002,   2000002,
1369      7  1000002,   2000002,   1000002,   1000002,   2000002,
1370      7  2000002,   1000002,   1000002,   2000002,   2000002,
1371      8  1000005,   1000002,   2000005,   2000002,   1000005,
1372      8  2000002,   1000005,   1000002,   2000005,   2000002,
1373      8  1000005,   2000002,   1000005,   1000005,   2000005,
1374      8  2000005,   1000005,   1000005,   2000005,   2000005,
1375      9  1000005,   1000005,   2000005,   2000005,   1000005,
1376      9  2000005,   1000005,   1000021,   2000005,   1000021,
1377      9  1000005,   2000005,        37,        25,        37,
1378      9       35,        36,        25,        36,        35/
1379       DATA ((KFPR(I,J),J=1,2),I=301,500)/
1380      &       37,        37,      78*0,
1381      4       61,         0,        62,         0,        61,
1382      4       11,        62,        11,        61,        13,
1383      4       62,        13,        61,        15,        62,  
1384      4       15,        61,        61,        62,        62,
1385      5       61,         0,        62,         0,         0,
1386      5        0,         0,         0,         0,         0,
1387      5        0,         0,         0,         0,         0,
1388      5        0,         0,         0,         0,         0,
1389      6       24,        24,        24,        52,        52,        
1390      6       52,        22,        51,        22,        53,        
1391      6       23,        51,        23,        53,        24,        
1392      6       52,         0,         0,        24,        23,        
1393      7       24,        51,        52,        23,        52,        
1394      7       51,        22,        52,        23,        52,        
1395      7       24,        51,        24,        53,         0,         
1396      7        0,         0,         0,         0,         0,
1397      8    240*0/      
1398       DATA COEF/10000*0D0/
1399       DATA (((ICOL(I,J,K),K=1,2),J=1,4),I=1,40)/
1400      &4,0,3,0,2,0,1,0,3,0,4,0,1,0,2,0,2,0,0,1,4,0,0,3,3,0,0,4,1,0,0,2,
1401      &3,0,0,4,1,4,3,2,4,0,0,3,4,2,1,3,2,0,4,1,4,0,2,3,4,0,3,4,2,0,1,2,
1402      &3,2,1,0,1,4,3,0,4,3,3,0,2,1,1,0,3,2,1,4,1,0,0,2,2,4,3,1,2,0,0,1,
1403      &3,2,1,4,1,4,3,2,4,2,1,3,4,2,1,3,3,4,4,3,1,2,2,1,2,0,3,1,2,0,0,0,
1404      &4,2,1,0,0,0,1,0,3,0,0,3,1,2,0,0,4,0,0,4,0,0,1,2,2,0,0,1,4,4,3,3,
1405      &2,2,1,1,4,4,3,3,3,3,4,4,1,1,2,2,3,2,1,3,1,2,0,0,4,2,1,4,0,0,1,2,
1406      &4,0,0,0,4,0,1,3,0,0,3,0,2,4,3,0,3,4,0,0,1,0,0,1,0,0,3,4,2,0,0,2,
1407      &3,0,0,0,1,0,0,0,0,0,3,0,2,0,0,0,2,0,3,1,2,0,0,0,3,2,1,0,1,0,0,0,
1408      &4,4,3,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1409      &0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0/
1410  
1411 C...Treatment of resonances.
1412       DATA (MWID(I)  ,I=   1, 500)/5*0,3*1,8*0,1,5*0,3*1,6*0,1,0,7*1,   
1413      &10*0,6*1,4*0,3*1,238*0,19*2,0,7*2,0,2,0,2,0,4*1,163*0/            
1414  
1415 C...Character constants: name of processes.
1416       DATA PROC(0)/                    'All included subprocesses   '/
1417       DATA (PROC(I),I=1,20)/
1418      &'f + fbar -> gamma*/Z0       ',  'f + fbar'' -> W+/-           ',
1419      &'f + fbar -> h0              ',  'gamma + W+/- -> W+/-        ',
1420      &'Z0 + Z0 -> h0               ',  'Z0 + W+/- -> W+/-           ',
1421      &'                            ',  'W+ + W- -> h0               ',
1422      &'                            ',  'f + f'' -> f + f'' (QFD)      ',
1423      1'f + f'' -> f + f'' (QCD)      ','f + fbar -> f'' + fbar''      ',
1424      1'f + fbar -> g + g           ',  'f + fbar -> g + gamma       ',
1425      1'f + fbar -> g + Z0          ',  'f + fbar'' -> g + W+/-       ',
1426      1'f + fbar -> g + h0          ',  'f + fbar -> gamma + gamma   ',
1427      1'f + fbar -> gamma + Z0      ',  'f + fbar'' -> gamma + W+/-   '/
1428       DATA (PROC(I),I=21,40)/
1429      2'f + fbar -> gamma + h0      ',  'f + fbar -> Z0 + Z0         ',
1430      2'f + fbar'' -> Z0 + W+/-      ', 'f + fbar -> Z0 + h0         ',
1431      2'f + fbar -> W+ + W-         ',  'f + fbar'' -> W+/- + h0      ',
1432      2'f + fbar -> h0 + h0         ',  'f + g -> f + g              ',
1433      2'f + g -> f + gamma          ',  'f + g -> f + Z0             ',
1434      3'f + g -> f'' + W+/-          ', 'f + g -> f + h0             ',
1435      3'f + gamma -> f + g          ',  'f + gamma -> f + gamma      ',
1436      3'f + gamma -> f + Z0         ',  'f + gamma -> f'' + W+/-      ',
1437      3'f + gamma -> f + h0         ',  'f + Z0 -> f + g             ',
1438      3'f + Z0 -> f + gamma         ',  'f + Z0 -> f + Z0            '/
1439       DATA (PROC(I),I=41,60)/
1440      4'f + Z0 -> f'' + W+/-         ', 'f + Z0 -> f + h0            ',
1441      4'f + W+/- -> f'' + g          ', 'f + W+/- -> f'' + gamma      ',
1442      4'f + W+/- -> f'' + Z0         ', 'f + W+/- -> f'' + W+/-       ',
1443      4'f + W+/- -> f'' + h0         ', 'f + h0 -> f + g             ',
1444      4'f + h0 -> f + gamma         ',  'f + h0 -> f + Z0            ',
1445      5'f + h0 -> f'' + W+/-         ', 'f + h0 -> f + h0            ',
1446      5'g + g -> f + fbar           ',  'g + gamma -> f + fbar       ',
1447      5'g + Z0 -> f + fbar          ',  'g + W+/- -> f + fbar''       ',
1448      5'g + h0 -> f + fbar          ',  'gamma + gamma -> f + fbar   ',
1449      5'gamma + Z0 -> f + fbar      ',  'gamma + W+/- -> f + fbar''   '/
1450       DATA (PROC(I),I=61,80)/
1451      6'gamma + h0 -> f + fbar      ',  'Z0 + Z0 -> f + fbar         ',
1452      6'Z0 + W+/- -> f + fbar''      ', 'Z0 + h0 -> f + fbar         ',
1453      6'W+ + W- -> f + fbar         ',  'W+/- + h0 -> f + fbar''      ',
1454      6'h0 + h0 -> f + fbar         ',  'g + g -> g + g              ',
1455      6'gamma + gamma -> W+ + W-    ',  'gamma + W+/- -> Z0 + W+/-   ',
1456      7'Z0 + Z0 -> Z0 + Z0          ',  'Z0 + Z0 -> W+ + W-          ',
1457      7'Z0 + W+/- -> Z0 + W+/-      ',  'Z0 + Z0 -> Z0 + h0          ',
1458      7'W+ + W- -> gamma + gamma    ',  'W+ + W- -> Z0 + Z0          ',
1459      7'W+/- + W+/- -> W+/- + W+/-  ',  'W+/- + h0 -> W+/- + h0      ',
1460      7'h0 + h0 -> h0 + h0          ',  'q + gamma -> q'' + pi+/-     '/
1461       DATA (PROC(I),I=81,100)/
1462      8'q + qbar -> Q + Qbar, mass  ',  'g + g -> Q + Qbar, massive  ',
1463      8'f + q -> f'' + Q, massive    ', 'g + gamma -> Q + Qbar, mass ',
1464      8'gamma + gamma -> F + Fbar, m',  'g + g -> J/Psi + g          ',
1465      8'g + g -> chi_0c + g         ',  'g + g -> chi_1c + g         ',
1466      8'g + g -> chi_2c + g         ',  '                            ',
1467      9'Elastic scattering          ',  'Single diffractive (XB)     ',
1468      9'Single diffractive (AX)     ',  'Double  diffractive         ',
1469      9'Low-pT scattering           ',  'Semihard QCD 2 -> 2         ',
1470      9'                            ',  '                            ',
1471      9'q + gamma* -> q             ',  '                            '/
1472       DATA (PROC(I),I=101,120)/
1473      &'g + g -> gamma*/Z0          ',  'g + g -> h0                 ',
1474      &'gamma + gamma -> h0         ',  'g + g -> chi_0c             ',
1475      &'g + g -> chi_2c             ',  'g + g -> J/Psi + gamma      ',
1476      &'gamma + g -> J/Psi + g      ',  'gamma+gamma -> J/Psi + gamma',
1477      &'                            ',  'f + fbar -> gamma + h0      ',
1478      1'f + fbar -> g + h0          ',  'q + g -> q + h0             ',
1479      1'g + g -> g + h0             ',  'g + g -> gamma + gamma      ',
1480      1'g + g -> g + gamma          ',  'g + g -> gamma + Z0         ',
1481      1'g + g -> Z0 + Z0            ',  'g + g -> W+ + W-            ',
1482      1'                            ',  '                            '/
1483       DATA (PROC(I),I=121,140)/
1484      2'g + g -> Q + Qbar + h0      ',  'q + qbar -> Q + Qbar + h0   ',
1485      2'f + f'' -> f + f'' + h0       ',
1486      2'f + f'' -> f" + f"'' + h0     ',
1487      2'                            ',  '                            ',
1488      2'                            ',  '                            ',
1489      2'                            ',  '                            ',
1490      3'f + gamma*_T -> f + g       ',  'f + gamma*_L -> f + g       ',
1491      3'f + gamma*_T -> f + gamma   ',  'f + gamma*_L -> f + gamma   ',
1492      3'g + gamma*_T -> f + fbar    ',  'g + gamma*_L -> f + fbar    ',
1493      3'gamma*_T+gamma*_T -> f+fbar ',  'gamma*_T+gamma*_L -> f+fbar ',
1494      3'gamma*_L+gamma*_T -> f+fbar ',  'gamma*_L+gamma*_L -> f+fbar '/
1495       DATA (PROC(I),I=141,160)/
1496      4'f + fbar -> gamma*/Z0/Z''0   ', 'f + fbar'' -> W''+/-          ',
1497      4'f + fbar'' -> H+/-           ', 'f + fbar'' -> R              ',
1498      4'q + l -> LQ                 ',  'e + gamma -> e*             ',
1499      4'd + g -> d*                 ',  'u + g -> u*                 ',
1500      4'g + g -> eta_techni         ',  '                            ',
1501      5'f + fbar -> H0              ',  'g + g -> H0                 ',
1502      5'gamma + gamma -> H0         ',  '                            ',
1503      5'                            ',  'f + fbar -> A0              ',
1504      5'g + g -> A0                 ',  'gamma + gamma -> A0         ',
1505      5'                            ',  '                            '/
1506       DATA (PROC(I),I=161,180)/
1507      6'f + g -> f'' + H+/-          ', 'q + g -> LQ + lbar          ',
1508      6'g + g -> LQ + LQbar         ',  'q + qbar -> LQ + LQbar      ',
1509      6'f + fbar -> f'' + fbar'' (g/Z)',
1510      6'f +fbar'' -> f" + fbar"'' (W) ',
1511      6'q + q'' -> q" + d*           ',  'q + q'' -> q" + u*           ',
1512      6'q + qbar -> e + e*          ',  '                            ',
1513      7'f + fbar -> Z0 + H0         ', 'f + fbar'' -> W+/- + H0      ',
1514      7'f + f'' -> f + f'' + H0       ',
1515      7'f + f'' -> f" + f"'' + H0     ',
1516      7'                            ',  'f + fbar -> Z0 + A0         ',
1517      7'f + fbar'' -> W+/- + A0      ',
1518      7'f + f'' -> f + f'' + A0       ',
1519      7'f + f'' -> f" + f"'' + A0     ',
1520      7'                            '/
1521       DATA (PROC(I),I=181,200)/
1522      8'g + g -> Q + Qbar + H0      ',  'q + qbar -> Q + Qbar + H0   ',
1523      8'                            ',  '                            ',
1524      8'                            ',  'g + g -> Q + Qbar + A0      ',
1525      8'q + qbar -> Q + Qbar + A0   ',  '                            ',
1526      8'                            ',  '                            ',
1527      9'f + fbar -> rho_tech0       ',  'f + f'' -> rho_tech+/-       ',
1528      9'f + fbar -> omega_tech0     ',  'f+fbar -> f''+fbar'' (ETC)  ',
1529      9'f+fbar'' -> f"+fbar"'' (ETC)','                          ',
1530      9'                            ',  '                            ',
1531      9'                            ',  '                            '/
1532       DATA (PROC(I),I=201,220)/
1533      &'f + fbar -> ~e_L + ~e_Lbar  ',  'f + fbar -> ~e_R + ~e_Rbar  ',
1534      &'f + fbar -> ~e_R + ~e_Lbar  ',  'f + fbar -> ~mu_L + ~mu_Lbar',
1535      &'f + fbar -> ~mu_R + ~mu_Rbar',  'f + fbar -> ~mu_L + ~mu_Rbar',
1536      &'f+fbar -> ~tau_1 + ~tau_1bar',  'f+fbar -> ~tau_2 + ~tau_2bar',
1537      &'f+fbar -> ~tau_1 + ~tau_2bar',  'q + qbar'' -> ~l_L + ~nulbar ',
1538      1'q+qbar''-> ~tau_1 + ~nutaubar', 'q+qbar''-> ~tau_2 + ~nutaubar',
1539      1'f + fbar -> ~nul + ~nulbar  ',  'f+fbar -> ~nutau + ~nutaubar',
1540      1'                            ',  'f + fbar -> ~chi1 + ~chi1   ',
1541      1'f + fbar -> ~chi2 + ~chi2   ',  'f + fbar -> ~chi3 + ~chi3   ',
1542      1'f + fbar -> ~chi4 + ~chi4   ',  'f + fbar -> ~chi1 + ~chi2   '/
1543       DATA (PROC(I),I=221,240)/
1544      2'f + fbar -> ~chi1 + ~chi3   ',  'f + fbar -> ~chi1 + ~chi4   ',
1545      2'f + fbar -> ~chi2 + ~chi3   ',  'f + fbar -> ~chi2 + ~chi4   ',
1546      2'f + fbar -> ~chi3 + ~chi4   ',  'f+fbar -> ~chi+-1 + ~chi-+1 ',
1547      2'f+fbar -> ~chi+-2 + ~chi-+2 ',  'f+fbar -> ~chi+-1 + ~chi-+2 ',
1548      2'q + qbar'' -> ~chi1 + ~chi+-1', 'q + qbar'' -> ~chi2 + ~chi+-1',
1549      3'q + qbar'' -> ~chi3 + ~chi+-1', 'q + qbar'' -> ~chi4 + ~chi+-1',
1550      3'q + qbar'' -> ~chi1 + ~chi+-2', 'q + qbar'' -> ~chi2 + ~chi+-2',
1551      3'q + qbar'' -> ~chi3 + ~chi+-2', 'q + qbar'' -> ~chi4 + ~chi+-2',
1552      3'q + qbar -> ~chi1 + ~g      ',  'q + qbar -> ~chi2 + ~g      ',
1553      3'q + qbar -> ~chi3 + ~g      ',  'q + qbar -> ~chi4 + ~g      '/
1554       DATA (PROC(I),I=241,260)/
1555      4'q + qbar'' -> ~chi+-1 + ~g   ', 'q + qbar'' -> ~chi+-2 + ~g  ',
1556      4'q + qbar -> ~g + ~g         ',  'g + g -> ~g + ~g            ',
1557      4'                            ',  'qj + g -> ~qj_L + ~chi1     ',
1558      4'qj + g -> ~qj_R + ~chi1     ',  'qj + g -> ~qj_L + ~chi2     ',
1559      4'qj + g -> ~qj_R + ~chi2     ',  'qj + g -> ~qj_L + ~chi3     ',
1560      5'qj + g -> ~qj_R + ~chi3     ',  'qj + g -> ~qj_L + ~chi4     ',
1561      5'qj + g -> ~qj_R + ~chi4     ',  'qj + g -> ~qk_L + ~chi+-1   ',
1562      5'qj + g -> ~qk_R + ~chi+-1   ',  'qj + g -> ~qk_L + ~chi+-2   ',
1563      5'qj + g -> ~qk_R + ~chi+-2   ',  'qj + g -> ~qj_L + ~g        ',
1564      5'qj + g -> ~qj_R + ~g        ',  '                            '/
1565       DATA (PROC(I),I=261,300)/
1566      6'f + fbar -> ~t_1 + ~t_1bar  ',  'f + fbar -> ~t_2 + ~t_2bar  ',
1567      6'f + fbar -> ~t_1 + ~t_2bar  ',  'g + g -> ~t_1 + ~t_1bar     ',
1568      6'g + g -> ~t_2 + ~t_2bar     ',  '                            ',
1569      6'                            ',  '                            ',
1570      6'                            ',  '                            ',
1571      7'qi + qj -> ~qi_L + ~qj_L    ',  'qi + qj -> ~qi_R + ~qj_R    ',
1572      7'qi + qj -> ~qi_L + ~qj_R    ',  'qi+qjbar -> ~qi_L + ~qj_Lbar',
1573      7'qi+qjbar -> ~qi_R + ~qj_Rbar',  'qi+qjbar -> ~qi_L + ~qj_Rbar',
1574      7'f + fbar -> ~qi_L + ~qi_Lbar',  'f + fbar -> ~qi_R + ~qi_Rbar',
1575      7'g + g -> ~qi_L + ~qi_Lbar   ',  'g + g -> ~qi_R + ~qi_Rbar   ',
1576      8'b + qj -> ~b_1 + ~qj_L      ',  'b + qj -> ~b_2 + ~qj_R      ',
1577      8'b + qj -> ~b_1 + ~qj_R      ',  'b + qjbar -> ~b_1 + ~qj_Lbar',
1578      8'b + qjbar -> ~b_2 + ~qj_Rbar',  'b + qjbar -> ~b_1 + ~qj_Rbar',
1579      8'f + fbar -> ~b_1 + ~b_1bar  ',  'f + fbar -> ~b_2 + ~b_2bar  ',
1580      8'g + g -> ~b_1 + ~b_1bar     ',  'g + g -> ~b_2 + ~b_2bar     ',
1581      9'b + b -> ~b_1 + ~b_1        ',  'b + b -> ~b_2 + ~b_2        ',
1582      9'b + b -> ~b_1 + ~b_2        ',  'b + g -> ~b_1 + ~g          ',
1583      9'b + g -> ~b_2 + ~g          ',  'b + bbar -> ~b_1 + ~b_2bar  ',
1584      9'f + fbar'' -> H+/- + h0     ',  'f + fbar -> H+/- + H0       ',
1585      9'f + fbar -> A0 + h0         ',  'f + fbar -> A0 + H0         '/
1586       DATA (PROC(I),I=301,340)/
1587      &'f + fbar -> H+ + H-         ', 39*'                          '/
1588       DATA (PROC(I),I=341,500)/
1589      4'l + l -> H_L++/--           ',  'l + l -> H_R++/--           ',
1590      4'l + gamma -> H_L++/-- e-/+  ',  'l + gamma -> H_R++/-- e-/+  ',
1591      4'l + gamma -> H_L++/-- mu-/+ ',  'l + gamma -> H_R++/-- mu-/+ ',
1592      4'l + gamma -> H_L++/-- tau-/+',  'l + gamma -> H_R++/-- tau-/+',
1593      4'f + fbar -> H_L++ + H_L--   ',  'f + fbar -> H_R++ + H_R--   ',
1594      5'f + f -> f'' + f'' + H_L++/-- ',  
1595      5'f + f -> f'' + f'' + H_R++/-- ', 7*'                         ',
1596      6'                            ',  'f + fbar -> W_L+ W_L-       ',
1597      6'f + fbar -> W_L+/- pi_T-/+  ',  'f + fbar -> pi_T+ pi_T-     ',
1598      6'f + fbar -> gamma pi_T0     ',  'f + fbar -> gamma pi_T0''    ',
1599      6'f + fbar -> Z0 pi_T0        ',  'f + fbar -> Z0 pi_T0''       ',
1600      6'f + fbar -> W+/- pi_T-/+    ',  '                            ',
1601      7'f + fbar'' -> W_L+/- Z_L0    ', 'f + fbar'' -> W_L+/- pi_T0   ',
1602      7'f + fbar'' -> pi_T+/- Z_L0   ', 'f + fbar'' -> pi_T+/- pi_T0  ',
1603      7'f + fbar'' -> gamma pi_T+/-  ', 'f + fbar'' -> Z0 pi_T+/-     ',
1604      7'f + fbar'' -> W+/- pi_T0     ',  
1605      7'f + fbar'' -> W+/- pi_T0''    ',
1606      7'                            ','                              ',
1607      8 121*'                      '/    
1608  
1609 C...Cross sections and slope offsets.
1610       DATA SIGT/294*0D0/
1611  
1612 C...Supersymmetry switches and parameters.
1613       DATA IMSS/0,
1614      &  0,  0,  0,  1,  0,  0,  0,  1,  0,  0,
1615      1  89*0/
1616       DATA RMSS/0D0,
1617      &  80D0,160D0,500D0,800D0,2D0,250D0,200D0,800D0,700D0,800D0,
1618      1  700D0,500D0,250D0,200D0,800D0,400D0,0D0,0.1D0,850D0,0.041D0,
1619      2   1D0,800D0,1D4,1D4,1D4,0D0,0D0,0D0,24D17,0D0,
1620      3  69*0D0/
1621  
1622 C...Data for histogramming routines.
1623       DATA IHIST/1000,20000,55,1/
1624       DATA INDX/1000*0/
1625  
1626       END
1627  
1628 C...PYTEST
1629 C...A simple program (disguised as subroutine) to run at installation
1630 C...as a check that the program works as intended.
1631  
1632       SUBROUTINE PYTEST(MTEST)
1633  
1634 C...Double precision and integer declarations.
1635       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
1636       IMPLICIT INTEGER(I-N)
1637       INTEGER PYK,PYCHGE,PYCOMP
1638 C...Commonblocks.
1639       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
1640       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
1641       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
1642       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
1643       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
1644       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
1645       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/
1646 C...Local arrays.
1647       DIMENSION PSUM(5),PINI(6),PFIN(6)
1648  
1649 C...Save defaults for values that are changed.
1650       MSTJ1=MSTJ(1)
1651       MSTJ3=MSTJ(3)
1652       MSTJ11=MSTJ(11)
1653       MSTJ42=MSTJ(42)
1654       MSTJ43=MSTJ(43)
1655       MSTJ44=MSTJ(44)
1656       PARJ17=PARJ(17)
1657       PARJ22=PARJ(22)
1658       PARJ43=PARJ(43)
1659       PARJ54=PARJ(54)
1660       MST101=MSTJ(101)
1661       MST104=MSTJ(104)
1662       MST105=MSTJ(105)
1663       MST107=MSTJ(107)
1664       MST116=MSTJ(116)
1665  
1666 C...First part: loop over simple events to be generated.
1667       IF(MTEST.GE.1) CALL PYTABU(20)
1668       NERR=0
1669       DO 180 IEV=1,500
1670  
1671 C...Reset parameter values. Switch on some nonstandard features.
1672         MSTJ(1)=1
1673         MSTJ(3)=0
1674         MSTJ(11)=1
1675         MSTJ(42)=2
1676         MSTJ(43)=4
1677         MSTJ(44)=2
1678         PARJ(17)=0.1D0
1679         PARJ(22)=1.5D0
1680         PARJ(43)=1D0
1681         PARJ(54)=-0.05D0
1682         MSTJ(101)=5
1683         MSTJ(104)=5
1684         MSTJ(105)=0
1685         MSTJ(107)=1
1686         IF(IEV.EQ.301.OR.IEV.EQ.351.OR.IEV.EQ.401) MSTJ(116)=3
1687  
1688 C...Ten events each for some single jets configurations.
1689         IF(IEV.LE.50) THEN
1690           ITY=(IEV+9)/10
1691           MSTJ(3)=-1
1692           IF(ITY.EQ.3.OR.ITY.EQ.4) MSTJ(11)=2
1693           IF(ITY.EQ.1) CALL PY1ENT(1,1,15D0,0D0,0D0)
1694           IF(ITY.EQ.2) CALL PY1ENT(1,3101,15D0,0D0,0D0)
1695           IF(ITY.EQ.3) CALL PY1ENT(1,-2203,15D0,0D0,0D0)
1696           IF(ITY.EQ.4) CALL PY1ENT(1,-4,30D0,0D0,0D0)
1697           IF(ITY.EQ.5) CALL PY1ENT(1,21,15D0,0D0,0D0)
1698  
1699 C...Ten events each for some simple jet systems; string fragmentation.
1700         ELSEIF(IEV.LE.130) THEN
1701           ITY=(IEV-41)/10
1702           IF(ITY.EQ.1) CALL PY2ENT(1,1,-1,40D0)
1703           IF(ITY.EQ.2) CALL PY2ENT(1,4,-4,30D0)
1704           IF(ITY.EQ.3) CALL PY2ENT(1,2,2103,100D0)
1705           IF(ITY.EQ.4) CALL PY2ENT(1,21,21,40D0)
1706           IF(ITY.EQ.5) CALL PY3ENT(1,2101,21,-3203,30D0,0.6D0,0.8D0)
1707           IF(ITY.EQ.6) CALL PY3ENT(1,5,21,-5,40D0,0.9D0,0.8D0)
1708           IF(ITY.EQ.7) CALL PY3ENT(1,21,21,21,60D0,0.7D0,0.5D0)
1709           IF(ITY.EQ.8) CALL PY4ENT(1,2,21,21,-2,40D0,
1710      &    0.4D0,0.64D0,0.6D0,0.12D0,0.2D0)
1711  
1712 C...Seventy events with independent fragmentation and momentum cons.
1713         ELSEIF(IEV.LE.200) THEN
1714           ITY=1+(IEV-131)/16
1715           MSTJ(2)=1+MOD(IEV-131,4)
1716           MSTJ(3)=1+MOD((IEV-131)/4,4)
1717           IF(ITY.EQ.1) CALL PY2ENT(1,4,-5,40D0)
1718           IF(ITY.EQ.2) CALL PY3ENT(1,3,21,-3,40D0,0.9D0,0.4D0)
1719           IF(ITY.EQ.3) CALL PY4ENT(1,2,21,21,-2,40D0,
1720      &    0.4D0,0.64D0,0.6D0,0.12D0,0.2D0)
1721           IF(ITY.GE.4) CALL PY4ENT(1,2,-3,3,-2,40D0,
1722      &    0.4D0,0.64D0,0.6D0,0.12D0,0.2D0)
1723  
1724 C...A hundred events with random jets (check invariant mass).
1725         ELSEIF(IEV.LE.300) THEN
1726   100     DO 110 J=1,5
1727             PSUM(J)=0D0
1728   110     CONTINUE
1729           NJET=2D0+6D0*PYR(0)
1730           DO 130 I=1,NJET
1731             KFL=21
1732             IF(I.EQ.1) KFL=INT(1D0+4D0*PYR(0))
1733             IF(I.EQ.NJET) KFL=-INT(1D0+4D0*PYR(0))
1734             EJET=5D0+20D0*PYR(0)
1735             THETA=ACOS(2D0*PYR(0)-1D0)
1736             PHI=6.2832D0*PYR(0)
1737             IF(I.LT.NJET) CALL PY1ENT(-I,KFL,EJET,THETA,PHI)
1738             IF(I.EQ.NJET) CALL PY1ENT(I,KFL,EJET,THETA,PHI)
1739             IF(I.EQ.1.OR.I.EQ.NJET) MSTJ(93)=1
1740             IF(I.EQ.1.OR.I.EQ.NJET) PSUM(5)=PSUM(5)+PYMASS(KFL)
1741             DO 120 J=1,4
1742               PSUM(J)=PSUM(J)+P(I,J)
1743   120       CONTINUE
1744   130     CONTINUE
1745           IF(PSUM(4)**2-PSUM(1)**2-PSUM(2)**2-PSUM(3)**2.LT.
1746      &    (PSUM(5)+PARJ(32))**2) GOTO 100
1747  
1748 C...Fifty e+e- continuum events with matrix elements.
1749         ELSEIF(IEV.LE.350) THEN
1750           MSTJ(101)=2
1751           CALL PYEEVT(0,40D0)
1752  
1753 C...Fifty e+e- continuum event with varying shower options.
1754         ELSEIF(IEV.LE.400) THEN
1755           MSTJ(42)=1+MOD(IEV,2)
1756           MSTJ(43)=1+MOD(IEV/2,4)
1757           MSTJ(44)=MOD(IEV/8,3)
1758           CALL PYEEVT(0,90D0)
1759  
1760 C...Fifty e+e- continuum events with coherent shower.
1761         ELSEIF(IEV.LE.450) THEN
1762           CALL PYEEVT(0,500D0)
1763  
1764 C...Fifty Upsilon decays to ggg or gammagg with coherent shower.
1765         ELSE
1766           CALL PYONIA(5,9.46D0)
1767         ENDIF
1768  
1769 C...Generate event. Find total momentum, energy and charge.
1770         DO 140 J=1,4
1771           PINI(J)=PYP(0,J)
1772   140   CONTINUE
1773         PINI(6)=PYP(0,6)
1774         CALL PYEXEC
1775         DO 150 J=1,4
1776           PFIN(J)=PYP(0,J)
1777   150   CONTINUE
1778         PFIN(6)=PYP(0,6)
1779  
1780 C...Check conservation of energy, momentum and charge;
1781 C...usually exact, but only approximate for single jets.
1782         MERR=0
1783         IF(IEV.LE.50) THEN
1784           IF((PFIN(1)-PINI(1))**2+(PFIN(2)-PINI(2))**2.GE.10D0)
1785      &    MERR=MERR+1
1786           EPZREM=PINI(4)+PINI(3)-PFIN(4)-PFIN(3)
1787           IF(EPZREM.LT.0D0.OR.EPZREM.GT.2D0*PARJ(31)) MERR=MERR+1
1788           IF(ABS(PFIN(6)-PINI(6)).GT.2.1D0) MERR=MERR+1
1789         ELSE
1790           DO 160 J=1,4
1791             IF(ABS(PFIN(J)-PINI(J)).GT.0.0001D0*PINI(4)) MERR=MERR+1
1792   160     CONTINUE
1793           IF(ABS(PFIN(6)-PINI(6)).GT.0.1D0) MERR=MERR+1
1794         ENDIF
1795         IF(MERR.NE.0) WRITE(MSTU(11),5000) (PINI(J),J=1,4),PINI(6),
1796      &  (PFIN(J),J=1,4),PFIN(6)
1797  
1798 C...Check that all KF codes are known ones, and that partons/particles
1799 C...satisfy energy-momentum-mass relation. Store particle statistics.
1800         DO 170 I=1,N
1801           IF(K(I,1).GT.20) GOTO 170
1802           IF(PYCOMP(K(I,2)).EQ.0) THEN
1803             WRITE(MSTU(11),5100) I
1804             MERR=MERR+1
1805           ENDIF
1806           PD=P(I,4)**2-P(I,1)**2-P(I,2)**2-P(I,3)**2-P(I,5)**2
1807           IF(ABS(PD).GT.MAX(0.1D0,0.001D0*P(I,4)**2).OR.P(I,4).LT.0D0)
1808      &    THEN
1809             WRITE(MSTU(11),5200) I
1810             MERR=MERR+1
1811           ENDIF
1812   170   CONTINUE
1813         IF(MTEST.GE.1) CALL PYTABU(21)
1814  
1815 C...List all erroneous events and some normal ones.
1816         IF(MERR.NE.0.OR.MSTU(24).NE.0.OR.MSTU(28).NE.0) THEN
1817           IF(MERR.GE.1) WRITE(MSTU(11),6400)
1818           CALL PYLIST(2)
1819         ELSEIF(MTEST.GE.1.AND.MOD(IEV-5,100).EQ.0) THEN
1820           CALL PYLIST(1)
1821         ENDIF
1822  
1823 C...Stop execution if too many errors.
1824         IF(MERR.NE.0) NERR=NERR+1
1825         IF(NERR.GE.10) THEN
1826           WRITE(MSTU(11),6300)
1827           CALL PYLIST(1)
1828           STOP
1829         ENDIF
1830   180 CONTINUE
1831  
1832 C...Summarize result of run.
1833       IF(MTEST.GE.1) CALL PYTABU(22)
1834  
1835 C...Reset commonblock variables changed during run.
1836       MSTJ(1)=MSTJ1
1837       MSTJ(3)=MSTJ3
1838       MSTJ(11)=MSTJ11
1839       MSTJ(42)=MSTJ42
1840       MSTJ(43)=MSTJ43
1841       MSTJ(44)=MSTJ44
1842       PARJ(17)=PARJ17
1843       PARJ(22)=PARJ22
1844       PARJ(43)=PARJ43
1845       PARJ(54)=PARJ54
1846       MSTJ(101)=MST101
1847       MSTJ(104)=MST104
1848       MSTJ(105)=MST105
1849       MSTJ(107)=MST107
1850       MSTJ(116)=MST116
1851  
1852 C...Second part: complete events of various kinds.
1853 C...Common initial values. Loop over initiating conditions.
1854       MSTP(122)=MAX(0,MIN(2,MTEST))
1855       MDCY(PYCOMP(111),1)=0
1856       DO 230 IPROC=1,8
1857  
1858 C...Reset process type, kinematics cuts, and the flags used.
1859         MSEL=0
1860         DO 190 ISUB=1,500
1861           MSUB(ISUB)=0
1862   190   CONTINUE
1863         CKIN(1)=2D0
1864         CKIN(3)=0D0
1865         MSTP(2)=1
1866         MSTP(11)=0
1867         MSTP(33)=0
1868         MSTP(81)=1
1869         MSTP(82)=1
1870         MSTP(111)=1
1871         MSTP(131)=0
1872         MSTP(133)=0
1873         PARP(131)=0.01D0
1874  
1875 C...Prompt photon production at fixed target.
1876         IF(IPROC.EQ.1) THEN
1877           PZSUM=300D0
1878           PESUM=SQRT(PZSUM**2+PYMASS(211)**2)+PYMASS(2212)
1879           PQSUM=2D0
1880           MSEL=10
1881           CKIN(3)=5D0
1882           CALL PYINIT('FIXT','pi+','p',PZSUM)
1883  
1884 C...QCD processes at ISR energies.
1885         ELSEIF(IPROC.EQ.2) THEN
1886           PESUM=63D0
1887           PZSUM=0D0
1888           PQSUM=2D0
1889           MSEL=1
1890           CKIN(3)=5D0
1891           CALL PYINIT('CMS','p','p',PESUM)
1892  
1893 C...W production + multiple interactions at CERN Collider.
1894         ELSEIF(IPROC.EQ.3) THEN
1895           PESUM=630D0
1896           PZSUM=0D0
1897           PQSUM=0D0
1898           MSEL=12
1899           CKIN(1)=20D0
1900           MSTP(82)=4
1901           MSTP(2)=2
1902           MSTP(33)=3
1903           CALL PYINIT('CMS','p','pbar',PESUM)
1904  
1905 C...W/Z gauge boson pairs + pileup events at the Tevatron.
1906         ELSEIF(IPROC.EQ.4) THEN
1907           PESUM=1800D0
1908           PZSUM=0D0
1909           PQSUM=0D0
1910           MSUB(22)=1
1911           MSUB(23)=1
1912           MSUB(25)=1
1913           CKIN(1)=200D0
1914           MSTP(111)=0
1915           MSTP(131)=1
1916           MSTP(133)=2
1917           PARP(131)=0.04D0
1918           CALL PYINIT('CMS','p','pbar',PESUM)
1919  
1920 C...Higgs production at LHC.
1921         ELSEIF(IPROC.EQ.5) THEN
1922           PESUM=15400D0
1923           PZSUM=0D0
1924           PQSUM=2D0
1925           MSUB(3)=1
1926           MSUB(102)=1
1927           MSUB(123)=1
1928           MSUB(124)=1
1929           PMAS(25,1)=300D0
1930           CKIN(1)=200D0
1931           MSTP(81)=0
1932           MSTP(111)=0
1933           CALL PYINIT('CMS','p','p',PESUM)
1934  
1935 C...Z' production at SSC.
1936         ELSEIF(IPROC.EQ.6) THEN
1937           PESUM=40000D0
1938           PZSUM=0D0
1939           PQSUM=2D0
1940           MSEL=21
1941           PMAS(32,1)=600D0
1942           CKIN(1)=400D0
1943           MSTP(81)=0
1944           MSTP(111)=0
1945           CALL PYINIT('CMS','p','p',PESUM)
1946  
1947 C...W pair production at 1 TeV e+e- collider.
1948         ELSEIF(IPROC.EQ.7) THEN
1949           PESUM=1000D0
1950           PZSUM=0D0
1951           PQSUM=0D0
1952           MSUB(25)=1
1953           MSUB(69)=1
1954           MSTP(11)=1
1955           CALL PYINIT('CMS','e+','e-',PESUM)
1956  
1957 C...Deep inelastic scattering at a LEP+LHC ep collider.
1958         ELSEIF(IPROC.EQ.8) THEN
1959           P(1,1)=0D0
1960           P(1,2)=0D0
1961           P(1,3)=8000D0
1962           P(2,1)=0D0
1963           P(2,2)=0D0
1964           P(2,3)=-80D0
1965           PESUM=8080D0
1966           PZSUM=7920D0
1967           PQSUM=0D0
1968           MSUB(10)=1
1969           CKIN(3)=50D0
1970           MSTP(111)=0
1971           CALL PYINIT('USER','p','e-',PESUM)
1972         ENDIF
1973  
1974 C...Generate 20 events of each required type.
1975         DO 220 IEV=1,20
1976           CALL PYEVNT
1977           PESUMM=PESUM
1978           IF(IPROC.EQ.4) PESUMM=MSTI(41)*PESUM
1979  
1980 C...Check conservation of energy/momentum/flavour.
1981           PINI(1)=0D0
1982           PINI(2)=0D0
1983           PINI(3)=PZSUM
1984           PINI(4)=PESUMM
1985           PINI(6)=PQSUM
1986           DO 200 J=1,4
1987             PFIN(J)=PYP(0,J)
1988   200     CONTINUE
1989           PFIN(6)=PYP(0,6)
1990           MERR=0
1991           DEVE=ABS(PFIN(4)-PINI(4))+ABS(PFIN(3)-PINI(3))
1992           DEVT=ABS(PFIN(1)-PINI(1))+ABS(PFIN(2)-PINI(2))
1993           DEVQ=ABS(PFIN(6)-PINI(6))
1994           IF(DEVE.GT.2D-3*PESUM.OR.DEVT.GT.MAX(0.01D0,1D-4*PESUM).OR.
1995      &    DEVQ.GT.0.1D0) MERR=1
1996           IF(MERR.NE.0) WRITE(MSTU(11),5000) (PINI(J),J=1,4),PINI(6),
1997      &    (PFIN(J),J=1,4),PFIN(6)
1998  
1999 C...Check that all KF codes are known ones, and that partons/particles
2000 C...satisfy energy-momentum-mass relation.
2001           DO 210 I=1,N
2002             IF(K(I,1).GT.20) GOTO 210
2003             IF(PYCOMP(K(I,2)).EQ.0) THEN
2004               WRITE(MSTU(11),5100) I
2005               MERR=MERR+1
2006             ENDIF
2007             PD=P(I,4)**2-P(I,1)**2-P(I,2)**2-P(I,3)**2-P(I,5)**2*
2008      &      SIGN(1D0,P(I,5))
2009             IF(ABS(PD).GT.MAX(0.1D0,0.002D0*P(I,4)**2,0.002D0*P(I,5)**2)
2010      &      .OR.(P(I,5).GE.0D0.AND.P(I,4).LT.0D0)) THEN
2011               WRITE(MSTU(11),5200) I
2012               MERR=MERR+1
2013             ENDIF
2014   210     CONTINUE
2015  
2016 C...Listing of erroneous events, and first event of each type.
2017           IF(MERR.GE.1) NERR=NERR+1
2018           IF(NERR.GE.10) THEN
2019             WRITE(MSTU(11),6300)
2020             CALL PYLIST(1)
2021             STOP
2022           ENDIF
2023           IF(MTEST.GE.1.AND.(MERR.GE.1.OR.IEV.EQ.1)) THEN
2024             IF(MERR.GE.1) WRITE(MSTU(11),6400)
2025             CALL PYLIST(1)
2026           ENDIF
2027   220   CONTINUE
2028  
2029 C...List statistics for each process type.
2030         IF(MTEST.GE.1) CALL PYSTAT(1)
2031   230 CONTINUE
2032  
2033 C...Summarize result of run.
2034       IF(NERR.EQ.0) WRITE(MSTU(11),6500)
2035       IF(NERR.GT.0) WRITE(MSTU(11),6600) NERR
2036  
2037 C...Format statements for output.
2038  5000 FORMAT(/' Momentum, energy and/or charge were not conserved ',
2039      &'in following event'/' sum of',9X,'px',11X,'py',11X,'pz',11X,
2040      &'E',8X,'charge'/' before',2X,4(1X,F12.5),1X,F8.2/' after',3X,
2041      &4(1X,F12.5),1X,F8.2)
2042  5100 FORMAT(/5X,'Entry no.',I4,' in following event not known code')
2043  5200 FORMAT(/5X,'Entry no.',I4,' in following event has faulty ',
2044      &'kinematics')
2045  6300 FORMAT(/5X,'This is the tenth error experienced! Something is ',
2046      &'wrong.'/5X,'Execution will be stopped after listing of event.')
2047  6400 FORMAT(5X,'Faulty event follows:')
2048  6500 FORMAT(//5X,'End result of PYTEST: no errors detected.')
2049  6600 FORMAT(//5X,'End result of PYTEST:',I2,' errors detected.'/
2050      &5X,'This should not have happened!')
2051  
2052       RETURN
2053       END
2054  
2055 C*********************************************************************
2056  
2057 C...PYHEPC
2058 C...Converts PYTHIA event record contents to or from
2059 C...the standard event record commonblock.
2060  
2061       SUBROUTINE PYHEPC(MCONV)
2062  
2063 C...Double precision and integer declarations.
2064       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
2065       IMPLICIT INTEGER(I-N)
2066       INTEGER PYK,PYCHGE,PYCOMP
2067 C...Commonblocks.
2068       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
2069       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
2070       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
2071       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
2072 C...HEPEVT commonblock.
2073       PARAMETER (NMXHEP=4000)
2074       COMMON/HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
2075      &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
2076       DOUBLE PRECISION PHEP,VHEP
2077       SAVE /HEPEVT/
2078  
2079 C...Conversion from PYTHIA to standard, the easy part.
2080       IF(MCONV.EQ.1) THEN
2081         NEVHEP=0
2082         IF(N.GT.NMXHEP) CALL PYERRM(8,
2083      &  '(PYHEPC:) no more space in /HEPEVT/')
2084         NHEP=MIN(N,NMXHEP)
2085         DO 140 I=1,NHEP
2086           ISTHEP(I)=0
2087           IF(K(I,1).GE.1.AND.K(I,1).LE.10) ISTHEP(I)=1
2088           IF(K(I,1).GE.11.AND.K(I,1).LE.20) ISTHEP(I)=2
2089           IF(K(I,1).GE.21.AND.K(I,1).LE.30) ISTHEP(I)=3
2090           IF(K(I,1).GE.31.AND.K(I,1).LE.100) ISTHEP(I)=K(I,1)
2091           IDHEP(I)=K(I,2)
2092           JMOHEP(1,I)=K(I,3)
2093           JMOHEP(2,I)=0
2094           IF(K(I,1).NE.3.AND.K(I,1).NE.13.AND.K(I,1).NE.14) THEN
2095             JDAHEP(1,I)=K(I,4)
2096             JDAHEP(2,I)=K(I,5)
2097           ELSE
2098             JDAHEP(1,I)=0
2099             JDAHEP(2,I)=0
2100           ENDIF
2101           DO 100 J=1,5
2102             PHEP(J,I)=P(I,J)
2103   100     CONTINUE
2104           DO 110 J=1,4
2105             VHEP(J,I)=V(I,J)
2106   110     CONTINUE
2107  
2108 C...Check if new event (from pileup).
2109           IF(I.EQ.1) THEN
2110             INEW=1
2111           ELSE
2112             IF(K(I,1).EQ.21.AND.K(I-1,1).NE.21) INEW=I
2113           ENDIF
2114  
2115 C...Fill in missing mother information.
2116           IF(I.GE.INEW+2.AND.K(I,1).EQ.21.AND.K(I,3).EQ.0) THEN
2117             IMO1=I-2
2118             IF(I.GE.INEW+3.AND.K(I-1,1).EQ.21.AND.K(I-1,3).EQ.0)
2119      &      IMO1=IMO1-1
2120             JMOHEP(1,I)=IMO1
2121             JMOHEP(2,I)=IMO1+1
2122           ELSEIF(K(I,2).GE.91.AND.K(I,2).LE.93) THEN
2123             I1=K(I,3)-1
2124   120       I1=I1+1
2125             IF(I1.GE.I) CALL PYERRM(8,
2126      &      '(PYHEPC:) translation of inconsistent event history')
2127             IF(I1.LT.I.AND.K(I1,1).NE.1.AND.K(I1,1).NE.11) GOTO 120
2128             KC=PYCOMP(K(I1,2))
2129             IF(I1.LT.I.AND.KC.EQ.0) GOTO 120
2130             IF(I1.LT.I.AND.KCHG(KC,2).EQ.0) GOTO 120
2131             JMOHEP(2,I)=I1
2132           ELSEIF(K(I,2).EQ.94) THEN
2133             NJET=2
2134             IF(NHEP.GE.I+3.AND.K(I+3,3).LE.I) NJET=3
2135             IF(NHEP.GE.I+4.AND.K(I+4,3).LE.I) NJET=4
2136             JMOHEP(2,I)=MOD(K(I+NJET,4)/MSTU(5),MSTU(5))
2137             IF(JMOHEP(2,I).EQ.JMOHEP(1,I)) JMOHEP(2,I)=
2138      &      MOD(K(I+1,4)/MSTU(5),MSTU(5))
2139           ENDIF
2140  
2141 C...Fill in missing daughter information.
2142           IF(K(I,2).EQ.94.AND.MSTU(16).NE.2) THEN
2143             DO 130 I1=JDAHEP(1,I),JDAHEP(2,I)
2144               I2=MOD(K(I1,4)/MSTU(5),MSTU(5))
2145               JDAHEP(1,I2)=I
2146   130       CONTINUE
2147           ENDIF
2148           IF(K(I,2).GE.91.AND.K(I,2).LE.94) GOTO 140
2149           I1=JMOHEP(1,I)
2150           IF(I1.LE.0.OR.I1.GT.NHEP) GOTO 140
2151           IF(K(I1,1).NE.13.AND.K(I1,1).NE.14) GOTO 140
2152           IF(JDAHEP(1,I1).EQ.0) THEN
2153             JDAHEP(1,I1)=I
2154           ELSE
2155             JDAHEP(2,I1)=I
2156           ENDIF
2157   140   CONTINUE
2158         DO 150 I=1,NHEP
2159           IF(K(I,1).NE.13.AND.K(I,1).NE.14) GOTO 150
2160           IF(JDAHEP(2,I).EQ.0) JDAHEP(2,I)=JDAHEP(1,I)
2161   150   CONTINUE
2162  
2163 C...Conversion from standard to PYTHIA, the easy part.
2164       ELSE
2165         IF(NHEP.GT.MSTU(4)) CALL PYERRM(8,
2166      &  '(PYHEPC:) no more space in /PYJETS/')
2167         N=MIN(NHEP,MSTU(4))
2168         NKQ=0
2169         KQSUM=0
2170         DO 180 I=1,N
2171           K(I,1)=0
2172           IF(ISTHEP(I).EQ.1) K(I,1)=1
2173           IF(ISTHEP(I).EQ.2) K(I,1)=11
2174           IF(ISTHEP(I).EQ.3) K(I,1)=21
2175           K(I,2)=IDHEP(I)
2176           K(I,3)=JMOHEP(1,I)
2177           K(I,4)=JDAHEP(1,I)
2178           K(I,5)=JDAHEP(2,I)
2179           DO 160 J=1,5
2180             P(I,J)=PHEP(J,I)
2181   160     CONTINUE
2182           DO 170 J=1,4
2183             V(I,J)=VHEP(J,I)
2184   170     CONTINUE
2185           V(I,5)=0D0
2186           IF(ISTHEP(I).EQ.2.AND.PHEP(4,I).GT.PHEP(5,I)) THEN
2187             I1=JDAHEP(1,I)
2188             IF(I1.GT.0.AND.I1.LE.NHEP) V(I,5)=(VHEP(4,I1)-VHEP(4,I))*
2189      &      PHEP(5,I)/PHEP(4,I)
2190           ENDIF
2191  
2192 C...Fill in missing information on colour connection in jet systems.
2193           IF(ISTHEP(I).EQ.1) THEN
2194             KC=PYCOMP(K(I,2))
2195             KQ=0
2196             IF(KC.NE.0) KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
2197             IF(KQ.NE.0) NKQ=NKQ+1
2198             IF(KQ.NE.2) KQSUM=KQSUM+KQ
2199             IF(KQ.NE.0.AND.KQSUM.NE.0) THEN
2200               K(I,1)=2
2201             ELSEIF(KQ.EQ.2.AND.I.LT.N) THEN
2202               IF(K(I+1,2).EQ.21) K(I,1)=2
2203             ENDIF
2204           ENDIF
2205   180   CONTINUE
2206         IF(NKQ.EQ.1.OR.KQSUM.NE.0) CALL PYERRM(8,
2207      &  '(PYHEPC:) input parton configuration not colour singlet')
2208       ENDIF
2209  
2210       END
2211  
2212 C*********************************************************************
2213  
2214 C...PYINIT
2215 C...Initializes the generation procedure; finds maxima of the
2216 C...differential cross-sections to be used for weighting.
2217  
2218       SUBROUTINE PYINIT(FRAME,BEAM,TARGET,WIN)
2219  
2220 C...Double precision and integer declarations.
2221       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
2222       IMPLICIT INTEGER(I-N)
2223       INTEGER PYK,PYCHGE,PYCOMP
2224 C...Commonblocks.
2225       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
2226       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
2227       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
2228       COMMON/PYDAT4/CHAF(500,2)
2229       CHARACTER CHAF*16
2230       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
2231       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
2232       COMMON/PYINT1/MINT(400),VINT(400)
2233       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
2234       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
2235       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYSUBS/,/PYPARS/,
2236      &/PYINT1/,/PYINT2/,/PYINT5/
2237 C...Local arrays and character variables.
2238       DIMENSION ALAMIN(20),NFIN(20)
2239       CHARACTER*(*) FRAME,BEAM,TARGET
2240       CHARACTER CHFRAM*12,CHBEAM*12,CHTARG*12,CHLH(2)*6
2241  
2242 C...Interface to PDFLIB.
2243       COMMON/W50512/QCDL4,QCDL5
2244       SAVE /W50512/
2245       DOUBLE PRECISION VALUE(20),QCDL4,QCDL5
2246       CHARACTER*20 PARM(20)
2247       DATA VALUE/20*0D0/,PARM/20*' '/
2248  
2249 C...Data:Lambda and n_f values for parton distributions..
2250       DATA ALAMIN/0.177D0,0.239D0,0.247D0,0.2322D0,0.248D0,0.248D0,
2251      &0.192D0,0.326D0,2*0.2D0,0.2D0,0.2D0,0.29D0,0.2D0,0.4D0,5*0.2D0/,
2252      &NFIN/20*4/
2253       DATA CHLH/'lepton','hadron'/
2254  
2255 C...Reset MINT and VINT arrays. Write headers.
2256       DO 100 J=1,400
2257         MINT(J)=0
2258         VINT(J)=0D0
2259   100 CONTINUE
2260       IF(MSTU(12).GE.1) CALL PYLIST(0)
2261       IF(MSTP(122).GE.1) WRITE(MSTU(11),5100)
2262  
2263 C...Maximum 4 generations; set maximum number of allowed flavours.
2264       MSTP(1)=MIN(4,MSTP(1))
2265       MSTU(114)=MIN(MSTU(114),2*MSTP(1))
2266       MSTP(58)=MIN(MSTP(58),2*MSTP(1))
2267  
2268 C...Sum up Cabibbo-Kobayashi-Maskawa factors for each quark/lepton.
2269       DO 120 I=-20,20
2270         VINT(180+I)=0D0
2271         IA=IABS(I)
2272         IF(IA.GE.1.AND.IA.LE.2*MSTP(1)) THEN
2273           DO 110 J=1,MSTP(1)
2274             IB=2*J-1+MOD(IA,2)
2275             IF(IB.GE.6.AND.MSTP(9).EQ.0) GOTO 110
2276             IPM=(5-ISIGN(1,I))/2
2277             IDC=J+MDCY(IA,2)+2
2278             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.IPM) VINT(180+I)=
2279      &      VINT(180+I)+VCKM((IA+1)/2,(IB+1)/2)
2280   110     CONTINUE
2281         ELSEIF(IA.GE.11.AND.IA.LE.10+2*MSTP(1)) THEN
2282           VINT(180+I)=1D0
2283         ENDIF
2284   120 CONTINUE
2285  
2286 C...Initialize parton distributions: PDFLIB.
2287       IF(MSTP(52).EQ.2) THEN
2288         PARM(1)='NPTYPE'
2289         VALUE(1)=1
2290         PARM(2)='NGROUP'
2291         VALUE(2)=MSTP(51)/1000
2292         PARM(3)='NSET'
2293         VALUE(3)=MOD(MSTP(51),1000)
2294         PARM(4)='TMAS'
2295         VALUE(4)=PMAS(6,1)
2296 C...ALICE
2297         CALL PDFSET_ALICE(PARM,VALUE)
2298         MINT(93)=1000000+MSTP(51)
2299       ENDIF
2300  
2301 C...Choose Lambda value to use in alpha-strong.
2302       MSTU(111)=MSTP(2)
2303       IF(MSTP(3).GE.2) THEN
2304         ALAM=0.2D0
2305         NF=4
2306         IF(MSTP(52).EQ.1.AND.MSTP(51).GE.1.AND.MSTP(51).LE.20) THEN
2307           ALAM=ALAMIN(MSTP(51))
2308           NF=NFIN(MSTP(51))
2309         ELSEIF(MSTP(52).EQ.2) THEN
2310           ALAM=QCDL4
2311           NF=4
2312         ENDIF
2313         PARP(1)=ALAM
2314         PARP(61)=ALAM
2315         PARP(72)=ALAM
2316         PARU(112)=ALAM
2317         MSTU(112)=NF
2318         IF(MSTP(3).EQ.3) PARJ(81)=ALAM
2319       ENDIF
2320  
2321 C...Initialize the SUSY generation: couplings, masses,
2322 C...decay modes, branching ratios, and so on.
2323       CALL PYMSIN
2324  
2325 C...Initialize widths and partial widths for resonances.
2326       CALL PYINRE
2327 C...Set Z0 mass and width for e+e- routines.
2328       PARJ(123)=PMAS(23,1)
2329       PARJ(124)=PMAS(23,2)
2330  
2331 C...Identify beam and target particles and frame of process.
2332       CHFRAM=FRAME//' '
2333       CHBEAM=BEAM//' '
2334       CHTARG=TARGET//' '
2335       CALL PYINBM(CHFRAM,CHBEAM,CHTARG,WIN)
2336       IF(MINT(65).EQ.1) GOTO 170
2337  
2338 C...For gamma-p or gamma-gamma allow many (3 or 6) alternatives.
2339 C...For e-gamma allow 2 alternatives.
2340       MINT(121)=1
2341       IF(MSTP(14).EQ.10.AND.(MSEL.EQ.1.OR.MSEL.EQ.2)) THEN
2342         IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.
2343      &  (IABS(MINT(11)).GE.28.OR.IABS(MINT(12)).GE.28)) MINT(121)=3
2344         IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) MINT(121)=6
2345         IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.
2346      &  (IABS(MINT(11)).EQ.11.OR.IABS(MINT(12)).EQ.11)) MINT(121)=2
2347       ELSEIF(MSTP(14).EQ.20.AND.(MSEL.EQ.1.OR.MSEL.EQ.2)) THEN
2348         IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.
2349      &  (IABS(MINT(11)).GE.28.OR.IABS(MINT(12)).GE.28)) MINT(121)=3
2350         IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) MINT(121)=9
2351       ELSEIF(MSTP(14).EQ.25.AND.(MSEL.EQ.1.OR.MSEL.EQ.2)) THEN
2352         IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.
2353      &  (IABS(MINT(11)).GE.28.OR.IABS(MINT(12)).GE.28)) MINT(121)=2
2354         IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) MINT(121)=4
2355       ELSEIF(MSTP(14).EQ.30.AND.(MSEL.EQ.1.OR.MSEL.EQ.2)) THEN
2356         IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.
2357      &  (IABS(MINT(11)).GE.28.OR.IABS(MINT(12)).GE.28)) MINT(121)=4
2358         IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) MINT(121)=13
2359       ENDIF
2360       MINT(123)=MSTP(14)
2361       IF((MSTP(14).EQ.10.OR.MSTP(14).EQ.20.OR.MSTP(14).EQ.25.OR.
2362      &MSTP(14).EQ.30).AND.MSEL.NE.1.AND.MSEL.NE.2) MINT(123)=0
2363       IF(MSTP(14).GE.11.AND.MSTP(14).LE.19) THEN
2364         IF(MSTP(14).EQ.11) MINT(123)=0
2365         IF(MSTP(14).EQ.12.OR.MSTP(14).EQ.14) MINT(123)=5
2366         IF(MSTP(14).EQ.13.OR.MSTP(14).EQ.17) MINT(123)=6
2367         IF(MSTP(14).EQ.15) MINT(123)=2
2368         IF(MSTP(14).EQ.16.OR.MSTP(14).EQ.18) MINT(123)=7
2369         IF(MSTP(14).EQ.19) MINT(123)=3
2370       ELSEIF(MSTP(14).GE.21.AND.MSTP(14).LE.24) THEN
2371         IF(MSTP(14).EQ.21) MINT(123)=0
2372         IF(MSTP(14).EQ.22.OR.MSTP(14).EQ.23) MINT(123)=4
2373         IF(MSTP(14).EQ.24) MINT(123)=1
2374       ELSEIF(MSTP(14).GE.26.AND.MSTP(14).LE.29) THEN
2375         IF(MSTP(14).EQ.26.OR.MSTP(14).EQ.28) MINT(123)=8
2376         IF(MSTP(14).EQ.27.OR.MSTP(14).EQ.29) MINT(123)=9
2377       ENDIF
2378  
2379 C...Set up kinematics of process.
2380       CALL PYINKI(0)
2381  
2382 C...Set up kinematics for photons inside leptons.
2383       IF(MINT(141).NE.0.OR.MINT(142).NE.0) CALL PYGAGA(1,WTGAGA)
2384  
2385 C...Precalculate flavour selection weights.
2386       CALL PYKFIN
2387  
2388 C...Loop over gamma-p or gamma-gamma alternatives.
2389       CKIN3=CKIN(3)
2390       MSAV48=0  
2391       DO 160 IGA=1,MINT(121)
2392         CKIN(3)=CKIN3 
2393         MINT(122)=IGA
2394  
2395 C...Select partonic subprocesses to be included in the simulation.
2396         CALL PYINPR
2397         MINT(101)=1
2398         MINT(102)=1
2399         MINT(103)=MINT(11)
2400         MINT(104)=MINT(12)
2401   
2402 C...Count number of subprocesses on.
2403         MINT(48)=0
2404         DO 130 ISUB=1,500
2405           IF(MINT(50).EQ.0.AND.ISUB.GE.91.AND.ISUB.LE.96.AND.
2406      &    MSUB(ISUB).EQ.1.AND.MINT(121).GT.1) THEN
2407             MSUB(ISUB)=0 
2408           ELSEIF(MINT(50).EQ.0.AND.ISUB.GE.91.AND.ISUB.LE.96.AND.
2409      &    MSUB(ISUB).EQ.1) THEN
2410             WRITE(MSTU(11),5200) ISUB,CHLH(MINT(41)),CHLH(MINT(42))
2411             STOP
2412           ELSEIF(MSUB(ISUB).EQ.1.AND.ISET(ISUB).EQ.-1) THEN
2413             WRITE(MSTU(11),5300) ISUB
2414             STOP
2415           ELSEIF(MSUB(ISUB).EQ.1.AND.ISET(ISUB).LE.-2) THEN
2416             WRITE(MSTU(11),5400) ISUB
2417             STOP
2418           ELSEIF(MSUB(ISUB).EQ.1) THEN
2419             MINT(48)=MINT(48)+1
2420           ENDIF
2421   130   CONTINUE
2422         IF(MINT(121).EQ.1.AND.MINT(48).EQ.0) THEN
2423           WRITE(MSTU(11),5500)
2424           STOP
2425         ENDIF
2426         MINT(49)=MINT(48)-MSUB(91)-MSUB(92)-MSUB(93)-MSUB(94)
2427         MSAV48=MSAV48+MINT(48)
2428  
2429 C...Reset variables for cross-section calculation.
2430         DO 150 I=0,500
2431           DO 140 J=1,3
2432             NGEN(I,J)=0
2433             XSEC(I,J)=0D0
2434   140     CONTINUE
2435   150   CONTINUE
2436
2437 C...Find parametrized total cross-sections.
2438         CALL PYXTOT
2439         VINT(318)=VINT(317)
2440  
2441 C...Maxima of differential cross-sections.
2442         IF(MSTP(121).LE.1) CALL PYMAXI
2443  
2444 C...Initialize possibility of pileup events.
2445         IF(MINT(121).GT.1) MSTP(131)=0
2446         IF(MSTP(131).NE.0) CALL PYPILE(1)
2447  
2448 C...Initialize multiple interactions with variable impact parameter.
2449         IF(MINT(50).EQ.1.AND.(MINT(49).NE.0.OR.MSTP(131).NE.0).AND.
2450      &  MSTP(82).GE.2) CALL PYMULT(1)
2451  
2452 C...Save results for gamma-p and gamma-gamma alternatives.
2453         IF(MINT(121).GT.1) CALL PYSAVE(1,IGA)
2454   160 CONTINUE
2455  
2456 C...Initialization finished.
2457       IF(MSAV48.EQ.0) THEN
2458         WRITE(MSTU(11),5500)
2459         STOP
2460       ENDIF
2461   170 IF(MSTP(122).GE.1) WRITE(MSTU(11),5600)
2462  
2463 C...Formats for initialization information.
2464  5100 FORMAT('1',18('*'),1X,'PYINIT: initialization of PYTHIA ',
2465      &'routines',1X,17('*'))
2466  5200 FORMAT(1X,'Error: process number ',I3,' not meaningful for ',A6,
2467      &'-',A6,' interactions.'/1X,'Execution stopped!')
2468  5300 FORMAT(1X,'Error: requested subprocess',I4,' not implemented.'/
2469      &1X,'Execution stopped!')
2470  5400 FORMAT(1X,'Error: requested subprocess',I4,' not existing.'/
2471      &1X,'Execution stopped!')
2472  5500 FORMAT(1X,'Error: no subprocess switched on.'/
2473      &1X,'Execution stopped.')
2474  5600 FORMAT(/1X,22('*'),1X,'PYINIT: initialization completed',1X,
2475      &22('*'))
2476  
2477       RETURN
2478       END
2479  
2480 C*********************************************************************
2481  
2482 C...PYEVNT
2483 C...Administers the generation of a high-pT event via calls to
2484 C...a number of subroutines.
2485  
2486       SUBROUTINE PYEVNT
2487  
2488 C...Double precision and integer declarations.
2489       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
2490       IMPLICIT INTEGER(I-N)
2491       INTEGER PYK,PYCHGE,PYCOMP
2492 C...Commonblocks.
2493       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
2494       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
2495       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
2496       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
2497       COMMON/PYINT1/MINT(400),VINT(400)
2498       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
2499       COMMON/PYINT4/MWID(500),WIDS(500,5)
2500       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
2501       COMMON/PYUPPR/NUP,KUP(20,7),NFUP,IFUP(10,2),PUP(20,5),Q2UP(0:10)
2502       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/,/PYINT2/,
2503      &/PYINT4/,/PYINT5/,/PYUPPR/
2504 C...Local array.
2505       DIMENSION VTX(4)
2506  
2507 C...Initial values for some counters.
2508       N=0
2509       MINT(5)=MINT(5)+1
2510       MINT(7)=0
2511       MINT(8)=0
2512       MINT(83)=0
2513       MINT(84)=MSTP(126)
2514       MSTU(24)=0
2515       MSTU70=0
2516       MSTJ14=MSTJ(14)
2517  
2518 C...If variable energies: redo incoming kinematics and cross-section.
2519       MSTI(61)=0
2520       IF(MSTP(171).EQ.1) THEN
2521         CALL PYINKI(1)
2522         IF(MSTI(61).EQ.1) THEN
2523           MINT(5)=MINT(5)-1
2524           RETURN
2525         ENDIF
2526         IF(MINT(121).GT.1) CALL PYSAVE(3,1)
2527         CALL PYXTOT
2528       ENDIF
2529  
2530 C...Loop over number of pileup events; check space left.
2531       IF(MSTP(131).LE.0) THEN
2532         NPILE=1
2533       ELSE
2534         CALL PYPILE(2)
2535         NPILE=MINT(81)
2536       ENDIF
2537       DO 260 IPILE=1,NPILE
2538         IF(MINT(84)+100.GE.MSTU(4)) THEN
2539           CALL PYERRM(11,
2540      &    '(PYEVNT:) no more space in PYJETS for pileup events')
2541           IF(MSTU(21).GE.1) GOTO 270
2542         ENDIF
2543         MINT(82)=IPILE
2544  
2545 C...Generate variables of hard scattering.
2546         MINT(51)=0
2547         MSTI(52)=0
2548   100   CONTINUE
2549         IF(MINT(51).NE.0.OR.MSTU(24).NE.0) MSTI(52)=MSTI(52)+1
2550         MINT(31)=0
2551         MINT(51)=0
2552         MINT(57)=0
2553         CALL PYRAND
2554         IF(MSTI(61).EQ.1) THEN
2555           MINT(5)=MINT(5)-1
2556           RETURN
2557         ENDIF
2558         IF(MINT(51).EQ.2) RETURN
2559         ISUB=MINT(1)
2560         IF(MSTP(111).EQ.-1) GOTO 250
2561  
2562         IF((ISUB.LE.90.OR.ISUB.GE.95).AND.ISUB.NE.99) THEN
2563 C...Hard scattering (including low-pT):
2564 C...reconstruct kinematics and colour flow of hard scattering.
2565           MINT31=MINT(31)
2566   110     MINT(31)=MINT31
2567           MINT(51)=0
2568           CALL PYSCAT
2569           IF(MINT(51).EQ.1) GOTO 100
2570           IPU1=MINT(84)+1
2571           IPU2=MINT(84)+2
2572           IF(ISUB.EQ.95) GOTO 130
2573  
2574 C...Showering of initial state partons (optional).
2575           ALAMSV=PARJ(81)
2576           PARJ(81)=PARP(72)
2577           IF(MSTP(61).GE.1.AND.MINT(47).GE.2) CALL PYSSPA(IPU1,IPU2)
2578           PARJ(81)=ALAMSV
2579           IF(MINT(51).EQ.1) GOTO 100
2580  
2581 C...Showering of final state partons (optional).
2582           ALAMSV=PARJ(81)
2583           PARJ(81)=PARP(72)
2584           IF(MSTP(71).GE.1.AND.ISET(ISUB).GE.2.AND.ISET(ISUB).LE.10)
2585      &    THEN
2586             IPU3=MINT(84)+3
2587             IPU4=MINT(84)+4
2588             IF(ISET(ISUB).EQ.5) IPU4=-3
2589             QMAX=VINT(55)
2590             IF(ISET(ISUB).EQ.2) QMAX=SQRT(PARP(71))*VINT(55)
2591             CALL PYSHOW(IPU3,IPU4,QMAX)
2592           ELSEIF(MSTP(71).GE.1.AND.ISET(ISUB).EQ.11.AND.NFUP.GE.1) THEN
2593             DO 120 IUP=1,NFUP
2594               IPU3=IFUP(IUP,1)+MINT(84)
2595               IPU4=IFUP(IUP,2)+MINT(84)
2596               QMAX=SQRT(MAX(0D0,Q2UP(IUP)))
2597               CALL PYSHOW(IPU3,IPU4,QMAX)
2598   120       CONTINUE
2599           ENDIF
2600           PARJ(81)=ALAMSV
2601  
2602 C...Decay of final state resonances.
2603           MINT(32)=0
2604           IF(MSTP(41).GE.1.AND.ISET(ISUB).LE.10) CALL PYRESD(0)
2605           IF(MINT(51).EQ.1) GOTO 100
2606           MINT(52)=N
2607  
2608 C...Multiple interactions.
2609           IF(MSTP(81).GE.1.AND.MINT(50).EQ.1) CALL PYMULT(6)
2610           MINT(53)=N
2611  
2612 C...Hadron remnants and primordial kT.
2613   130     CALL PYREMN(IPU1,IPU2)
2614           IF(MINT(51).EQ.1.AND.MINT(57).GE.1.AND.MINT(57).LE.5) GOTO 110
2615           IF(MINT(51).EQ.1) GOTO 100
2616  
2617          ELSEIF(ISUB.NE.99) THEN
2618 C...Diffractive and elastic scattering.
2619           CALL PYDIFF
2620
2621         ELSE
2622 C...DIS scattering (photon flux external).
2623           CALL PYDISG
2624           IF(MINT(51).EQ.1) GOTO 100
2625         ENDIF
2626  
2627 C...Check that no odd resonance left undecayed.
2628         IF(MSTP(111).GE.1) THEN
2629           NFIX=N
2630           DO 140 I=MINT(84)+1,NFIX
2631             IF(K(I,1).GE.1.AND.K(I,1).LE.10.AND.K(I,2).NE.21.AND.
2632      &      K(I,2).NE.22) THEN
2633               IF(MWID(PYCOMP(K(I,2))).NE.0) THEN
2634                 CALL PYRESD(I)
2635                 IF(MINT(51).EQ.1) GOTO 100
2636               ENDIF
2637             ENDIF
2638   140     CONTINUE
2639         ENDIF
2640  
2641 C...Boost hadronic subsystem to overall rest frame.
2642 C..(Only relevant when photon inside lepton beam.)
2643         IF(MINT(141).NE.0.OR.MINT(142).NE.0) CALL PYGAGA(4,WTGAGA)
2644  
2645 C...Recalculate energies from momenta and masses (if desired).
2646         IF(MSTP(113).GE.1) THEN
2647           DO 150 I=MINT(83)+1,N
2648             IF(K(I,1).GT.0.AND.K(I,1).LE.10) P(I,4)=SQRT(P(I,1)**2+
2649      &      P(I,2)**2+P(I,3)**2+P(I,5)**2)
2650   150     CONTINUE
2651           NRECAL=N
2652         ENDIF
2653  
2654 C...Rearrange partons along strings, check invariant mass cuts.
2655         MSTU(28)=0
2656         IF(MSTP(111).LE.0) MSTJ(14)=-1
2657         CALL PYPREP(MINT(84)+1)
2658         MSTJ(14)=MSTJ14
2659         IF(MSTP(112).EQ.1.AND.MSTU(28).EQ.3) GOTO 100
2660         IF(MSTP(125).EQ.0.OR.MSTP(125).EQ.1) THEN
2661           DO 180 I=MINT(84)+1,N
2662             IF(K(I,2).EQ.94) THEN
2663               DO 170 I1=I+1,MIN(N,I+3)
2664                 IF(K(I1,3).EQ.I) THEN
2665                   K(I1,3)=MOD(K(I1,4)/MSTU(5),MSTU(5))
2666                   IF(K(I1,3).EQ.0) THEN
2667                     DO 160 II=MINT(84)+1,I-1
2668                         IF(K(II,2).EQ.K(I1,2)) THEN
2669                           IF(MOD(K(II,4),MSTU(5)).EQ.I1.OR.
2670      &                    MOD(K(II,5),MSTU(5)).EQ.I1) K(I1,3)=II
2671                         ENDIF
2672   160               CONTINUE
2673                     IF(K(I+1,3).EQ.0) K(I+1,3)=K(I,3)
2674                   ENDIF
2675                 ENDIF
2676   170         CONTINUE
2677             ENDIF
2678   180     CONTINUE
2679           CALL PYEDIT(12)
2680           CALL PYEDIT(14)
2681           IF(MSTP(125).EQ.0) CALL PYEDIT(15)
2682           IF(MSTP(125).EQ.0) MINT(4)=0
2683           DO 200 I=MINT(83)+1,N
2684             IF(K(I,1).EQ.11.AND.K(I,4).EQ.0.AND.K(I,5).EQ.0) THEN
2685               DO 190 I1=I+1,N
2686                 IF(K(I1,3).EQ.I.AND.K(I,4).EQ.0) K(I,4)=I1
2687                 IF(K(I1,3).EQ.I) K(I,5)=I1
2688   190         CONTINUE
2689             ENDIF
2690   200     CONTINUE
2691         ENDIF
2692  
2693 C...Introduce separators between sections in PYLIST event listing.
2694         IF(IPILE.EQ.1.AND.MSTP(125).LE.0) THEN
2695           MSTU70=1
2696           MSTU(71)=N
2697         ELSEIF(IPILE.EQ.1) THEN
2698           MSTU70=3
2699           MSTU(71)=2
2700           MSTU(72)=MINT(4)
2701           MSTU(73)=N
2702         ENDIF
2703  
2704 C...Go back to lab frame (needed for vertices, also in fragmentation).
2705         CALL PYFRAM(1)
2706  
2707 C...Set nonvanishing production vertex (optional).
2708         IF(MSTP(151).EQ.1) THEN
2709           DO 210 J=1,4
2710             VTX(J)=PARP(150+J)*SQRT(-2D0*LOG(MAX(1D-10,PYR(0))))*
2711      &      SIN(PARU(2)*PYR(0))
2712   210     CONTINUE
2713           DO 230 I=MINT(83)+1,N
2714             DO 220 J=1,4
2715               V(I,J)=V(I,J)+VTX(J)
2716   220       CONTINUE
2717   230     CONTINUE
2718         ENDIF
2719  
2720 C...Perform hadronization (if desired).
2721         IF(MSTP(111).GE.1) THEN
2722           CALL PYEXEC
2723           IF(MSTU(24).NE.0) GOTO 100
2724         ENDIF
2725         IF(MSTP(113).GE.1) THEN
2726           DO 240 I=NRECAL,N
2727             IF(P(I,5).GT.0D0) P(I,4)=SQRT(P(I,1)**2+
2728      &      P(I,2)**2+P(I,3)**2+P(I,5)**2)
2729   240     CONTINUE
2730         ENDIF
2731         IF(MSTP(125).EQ.0.OR.MSTP(125).EQ.1) CALL PYEDIT(14)
2732  
2733 C...Store event information and calculate Monte Carlo estimates of
2734 C...subprocess cross-sections.
2735   250   IF(IPILE.EQ.1) CALL PYDOCU
2736  
2737 C...Set counters for current pileup event and loop to next one.
2738         MSTI(41)=IPILE
2739         IF(IPILE.GE.2.AND.IPILE.LE.10) MSTI(40+IPILE)=ISUB
2740         IF(MSTU70.LT.10) THEN
2741           MSTU70=MSTU70+1
2742           MSTU(70+MSTU70)=N
2743         ENDIF
2744         MINT(83)=N
2745         MINT(84)=N+MSTP(126)
2746         IF(IPILE.LT.NPILE) CALL PYFRAM(2)
2747   260 CONTINUE
2748  
2749 C...Generic information on pileup events. Reconstruct missing history.
2750       IF(MSTP(131).EQ.1.AND.MSTP(133).GE.1) THEN
2751         PARI(91)=VINT(132)
2752         PARI(92)=VINT(133)
2753         PARI(93)=VINT(134)
2754         IF(MSTP(133).GE.2) PARI(93)=PARI(93)*XSEC(0,3)/VINT(131)
2755       ENDIF
2756       CALL PYEDIT(16)
2757  
2758 C...Transform to the desired coordinate frame.
2759   270 CALL PYFRAM(MSTP(124))
2760       MSTU(70)=MSTU70
2761       PARU(21)=VINT(1)
2762  
2763       RETURN
2764       END
2765  
2766 C***********************************************************************
2767  
2768 C...PYSTAT
2769 C...Prints out information about cross-sections, decay widths, branching
2770 C...ratios, kinematical limits, status codes and parameter values.
2771  
2772       SUBROUTINE PYSTAT(MSTAT)
2773  
2774 C...Double precision and integer declarations.
2775       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
2776       IMPLICIT INTEGER(I-N)
2777       INTEGER PYK,PYCHGE,PYCOMP
2778 C...Parameter statement to help give large particle numbers.
2779       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
2780 C...Commonblocks.
2781       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
2782       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
2783       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
2784       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
2785       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
2786       COMMON/PYINT1/MINT(400),VINT(400)
2787       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
2788       COMMON/PYINT4/MWID(500),WIDS(500,5)
2789       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
2790       COMMON/PYINT6/PROC(0:500)
2791       CHARACTER PROC*28
2792       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
2793       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
2794      &/PYINT2/,/PYINT4/,/PYINT5/,/PYINT6/,/PYMSSM/
2795 C...Local arrays, character variables and data.
2796       DIMENSION WDTP(0:200),WDTE(0:200,0:5)
2797       CHARACTER PROGA(6)*28,CHAU*16,CHKF*16,CHD1*16,CHD2*16,CHD3*16,
2798      &CHIN(2)*12,STATE(-1:5)*4,CHKIN(21)*18,DISGA(2)*28,
2799      &PROGG9(13)*28,PROGG4(4)*28,PROGG2(2)*28,PROGP4(4)*28
2800       DATA PROGA/
2801      &'VMD/hadron * VMD            ','VMD/hadron * direct         ',
2802      &'VMD/hadron * anomalous      ','direct * direct             ',
2803      &'direct * anomalous          ','anomalous * anomalous       '/
2804       DATA DISGA/'e * VMD','e * anomalous'/
2805       DATA PROGG9/
2806      &'direct * direct             ','direct * VMD                ',
2807      &'direct * anomalous          ','VMD * direct                ',
2808      &'VMD * VMD                   ','VMD * anomalous             ',
2809      &'anomalous * direct          ','anomalous * VMD             ',
2810      &'anomalous * anomalous       ','DIS * VMD                   ',
2811      &'DIS * anomalous             ','VMD * DIS                   ',
2812      &'anomalous * DIS             '/
2813       DATA PROGG4/
2814      &'direct * direct             ','direct * resolved           ',
2815      &'resolved * direct           ','resolved * resolved         '/
2816       DATA PROGG2/
2817      &'direct * hadron             ','resolved * hadron           '/
2818       DATA PROGP4/
2819      &'VMD * hadron                ','direct * hadron             ',
2820      &'anomalous * hadron          ','DIS * hadron                '/
2821       DATA STATE/'----','off ','on  ','on/+','on/-','on/1','on/2'/,
2822      &CHKIN/' m_hard (GeV/c^2) ',' p_T_hard (GeV/c) ',
2823      &'m_finite (GeV/c^2)','   y*_subsystem   ','     y*_large     ',
2824      &'     y*_small     ','    eta*_large    ','    eta*_small    ',
2825      &'cos(theta*)_large ','cos(theta*)_small ','       x_1        ',
2826      &'       x_2        ','       x_F        ',' cos(theta_hard)  ',
2827      &'m''_hard (GeV/c^2) ','       tau        ','        y*        ',
2828      &'cos(theta_hard^-) ','cos(theta_hard^+) ','      x_T^2       ',
2829      &'       tau''       '/
2830  
2831 C...Cross-sections.
2832       IF(MSTAT.LE.1) THEN
2833         IF(MINT(121).GT.1) CALL PYSAVE(5,0)
2834         WRITE(MSTU(11),5000)
2835         WRITE(MSTU(11),5100)
2836         WRITE(MSTU(11),5200) 0,PROC(0),NGEN(0,3),NGEN(0,1),XSEC(0,3)
2837         DO 100 I=1,500
2838           IF(MSUB(I).NE.1) GOTO 100
2839           WRITE(MSTU(11),5200) I,PROC(I),NGEN(I,3),NGEN(I,1),XSEC(I,3)
2840   100   CONTINUE
2841         IF(MINT(121).GT.1) THEN
2842           WRITE(MSTU(11),5300)
2843           DO 110 IGA=1,MINT(121)
2844             CALL PYSAVE(3,IGA)
2845             IF(MINT(121).EQ.2.AND.MSTP(14).EQ.10) THEN
2846               WRITE(MSTU(11),5200) IGA,DISGA(IGA),NGEN(0,3),NGEN(0,1),
2847      &        XSEC(0,3)
2848             ELSEIF(MINT(121).EQ.9.OR.MINT(121).EQ.13) THEN
2849               WRITE(MSTU(11),5200) IGA,PROGG9(IGA),NGEN(0,3),NGEN(0,1),
2850      &        XSEC(0,3)
2851             ELSEIF(MINT(121).EQ.4.AND.MSTP(14).EQ.30) THEN
2852               WRITE(MSTU(11),5200) IGA,PROGP4(IGA),NGEN(0,3),NGEN(0,1),
2853      &        XSEC(0,3)
2854             ELSEIF(MINT(121).EQ.4) THEN
2855               WRITE(MSTU(11),5200) IGA,PROGG4(IGA),NGEN(0,3),NGEN(0,1),
2856      &        XSEC(0,3)
2857             ELSEIF(MINT(121).EQ.2) THEN
2858               WRITE(MSTU(11),5200) IGA,PROGG2(IGA),NGEN(0,3),NGEN(0,1),
2859      &        XSEC(0,3)
2860             ELSE
2861               WRITE(MSTU(11),5200) IGA,PROGA(IGA),NGEN(0,3),NGEN(0,1),
2862      &        XSEC(0,3)
2863             ENDIF
2864   110     CONTINUE
2865           CALL PYSAVE(5,0)
2866         ENDIF
2867         WRITE(MSTU(11),5400) 1D0-DBLE(NGEN(0,3))/
2868      &  MAX(1D0,DBLE(NGEN(0,2)))
2869  
2870 C...Decay widths and branching ratios.
2871       ELSEIF(MSTAT.EQ.2) THEN
2872         WRITE(MSTU(11),5500)
2873         WRITE(MSTU(11),5600)
2874         DO 140 KC=1,500
2875           KF=KCHG(KC,4)
2876           CALL PYNAME(KF,CHKF)
2877           IOFF=0
2878           IF(KC.LE.22) THEN
2879             IF(KC.GT.2*MSTP(1).AND.KC.LE.10) GOTO 140
2880             IF(KC.GT.10+2*MSTP(1).AND.KC.LE.20) GOTO 140
2881             IF(KC.LE.5.OR.(KC.GE.11.AND.KC.LE.16)) IOFF=1
2882             IF(KC.EQ.18.AND.PMAS(18,1).LT.1D0) IOFF=1
2883             IF(KC.EQ.21.OR.KC.EQ.22) IOFF=1
2884           ELSE
2885             IF(MWID(KC).LE.0) GOTO 140
2886             IF(IMSS(1).LE.0.AND.(KF/KSUSY1.EQ.1.OR.
2887      &      KF/KSUSY1.EQ.2)) GOTO 140
2888           ENDIF
2889 C...Off-shell branchings.
2890           IF(IOFF.EQ.1) THEN
2891             NGP=0
2892             IF(KC.LE.20) NGP=(MOD(KC,10)+1)/2
2893             IF(NGP.LE.MSTP(1)) WRITE(MSTU(11),5700) KF,CHKF(1:10),
2894      &      PMAS(KC,1),0D0,0D0,STATE(MDCY(KC,1)),0D0
2895             DO 120 J=1,MDCY(KC,3)
2896               IDC=J+MDCY(KC,2)-1
2897               NGP1=0
2898               IF(IABS(KFDP(IDC,1)).LE.20) NGP1=
2899      &        (MOD(IABS(KFDP(IDC,1)),10)+1)/2
2900               NGP2=0
2901               IF(IABS(KFDP(IDC,2)).LE.20) NGP2=
2902      &        (MOD(IABS(KFDP(IDC,2)),10)+1)/2
2903               CALL PYNAME(KFDP(IDC,1),CHD1)
2904               CALL PYNAME(KFDP(IDC,2),CHD2)
2905               IF(KFDP(IDC,3).EQ.0) THEN
2906                 IF(MDME(IDC,2).EQ.102.AND.NGP1.LE.MSTP(1).AND.
2907      &          NGP2.LE.MSTP(1)) WRITE(MSTU(11),5800) IDC,CHD1(1:10),
2908      &          CHD2(1:10),0D0,0D0,STATE(MDME(IDC,1)),0D0
2909               ELSE
2910                 CALL PYNAME(KFDP(IDC,3),CHD3)
2911                 IF(MDME(IDC,2).EQ.102.AND.NGP1.LE.MSTP(1).AND.
2912      &          NGP2.LE.MSTP(1)) WRITE(MSTU(11),5900) IDC,CHD1(1:10),
2913      &          CHD2(1:10),CHD3(1:10),0D0,0D0,STATE(MDME(IDC,1)),0D0
2914               ENDIF
2915   120       CONTINUE
2916 C...On-shell decays.
2917           ELSE
2918             CALL PYWIDT(KF,PMAS(KC,1)**2,WDTP,WDTE)
2919             BRFIN=1D0
2920             IF(WDTE(0,0).LE.0D0) BRFIN=0D0
2921             WRITE(MSTU(11),5700) KF,CHKF(1:10),PMAS(KC,1),WDTP(0),1D0,
2922      &      STATE(MDCY(KC,1)),BRFIN
2923             DO 130 J=1,MDCY(KC,3)
2924               IDC=J+MDCY(KC,2)-1
2925               NGP1=0
2926               IF(IABS(KFDP(IDC,1)).LE.20) NGP1=
2927      &        (MOD(IABS(KFDP(IDC,1)),10)+1)/2
2928               NGP2=0
2929               IF(IABS(KFDP(IDC,2)).LE.20) NGP2=
2930      &        (MOD(IABS(KFDP(IDC,2)),10)+1)/2
2931               BRFIN=0D0
2932               IF(WDTE(0,0).GT.0D0) BRFIN=WDTE(J,0)/WDTE(0,0)
2933               CALL PYNAME(KFDP(IDC,1),CHD1)
2934               CALL PYNAME(KFDP(IDC,2),CHD2)
2935               IF(KFDP(IDC,3).EQ.0) THEN
2936                 IF(NGP1.LE.MSTP(1).AND.NGP2.LE.MSTP(1))
2937      &          WRITE(MSTU(11),5800) IDC,CHD1(1:10),
2938      &          CHD2(1:10),WDTP(J),WDTP(J)/WDTP(0),
2939      &          STATE(MDME(IDC,1)),BRFIN
2940               ELSE
2941                 CALL PYNAME(KFDP(IDC,3),CHD3)
2942                 IF(NGP1.LE.MSTP(1).AND.NGP2.LE.MSTP(1))
2943      &          WRITE(MSTU(11),5900) IDC,CHD1(1:10),
2944      &          CHD2(1:10),CHD3(1:10),WDTP(J),WDTP(J)/WDTP(0),
2945      &          STATE(MDME(IDC,1)),BRFIN
2946               ENDIF
2947   130       CONTINUE
2948           ENDIF
2949   140   CONTINUE
2950         WRITE(MSTU(11),6000)
2951  
2952 C...Allowed incoming partons/particles at hard interaction.
2953       ELSEIF(MSTAT.EQ.3) THEN
2954         WRITE(MSTU(11),6100)
2955         CALL PYNAME(MINT(11),CHAU)
2956         CHIN(1)=CHAU(1:12)
2957         CALL PYNAME(MINT(12),CHAU)
2958         CHIN(2)=CHAU(1:12)
2959         WRITE(MSTU(11),6200) CHIN(1),CHIN(2)
2960         DO 150 I=-20,22
2961           IF(I.EQ.0) GOTO 150
2962           IA=IABS(I)
2963           IF(IA.GT.MSTP(58).AND.IA.LE.10) GOTO 150
2964           IF(IA.GT.10+2*MSTP(1).AND.IA.LE.20) GOTO 150
2965           CALL PYNAME(I,CHAU)
2966           WRITE(MSTU(11),6300) CHAU,STATE(KFIN(1,I)),CHAU,
2967      &    STATE(KFIN(2,I))
2968   150   CONTINUE
2969         WRITE(MSTU(11),6400)
2970  
2971 C...User-defined limits on kinematical variables.
2972       ELSEIF(MSTAT.EQ.4) THEN
2973         WRITE(MSTU(11),6500)
2974         WRITE(MSTU(11),6600)
2975         SHRMAX=CKIN(2)
2976         IF(SHRMAX.LT.0D0) SHRMAX=VINT(1)
2977         WRITE(MSTU(11),6700) CKIN(1),CHKIN(1),SHRMAX
2978         PTHMIN=MAX(CKIN(3),CKIN(5))
2979         PTHMAX=CKIN(4)
2980         IF(PTHMAX.LT.0D0) PTHMAX=0.5D0*SHRMAX
2981         WRITE(MSTU(11),6800) CKIN(3),PTHMIN,CHKIN(2),PTHMAX
2982         WRITE(MSTU(11),6900) CHKIN(3),CKIN(6)
2983         DO 160 I=4,14
2984           WRITE(MSTU(11),6700) CKIN(2*I-1),CHKIN(I),CKIN(2*I)
2985   160   CONTINUE
2986         SPRMAX=CKIN(32)
2987         IF(SPRMAX.LT.0D0) SPRMAX=VINT(1)
2988         WRITE(MSTU(11),6700) CKIN(31),CHKIN(15),SPRMAX
2989         WRITE(MSTU(11),7000)
2990  
2991 C...Status codes and parameter values.
2992       ELSEIF(MSTAT.EQ.5) THEN
2993         WRITE(MSTU(11),7100)
2994         WRITE(MSTU(11),7200)
2995         DO 170 I=1,100
2996           WRITE(MSTU(11),7300) I,MSTP(I),PARP(I),100+I,MSTP(100+I),
2997      &    PARP(100+I)
2998   170   CONTINUE
2999  
3000 C...List of all processes implemented in the program.
3001       ELSEIF(MSTAT.EQ.6) THEN
3002         WRITE(MSTU(11),7400)
3003         WRITE(MSTU(11),7500)
3004         DO 180 I=1,500
3005           IF(ISET(I).LT.0) GOTO 180
3006           WRITE(MSTU(11),7600) I,PROC(I),ISET(I),KFPR(I,1),KFPR(I,2)
3007   180   CONTINUE
3008         WRITE(MSTU(11),7700)
3009       ENDIF
3010  
3011 C...Formats for printouts.
3012  5000 FORMAT('1',9('*'),1X,'PYSTAT:  Statistics on Number of ',
3013      &'Events and Cross-sections',1X,9('*'))
3014  5100 FORMAT(/1X,78('=')/1X,'I',34X,'I',28X,'I',12X,'I'/1X,'I',12X,
3015      &'Subprocess',12X,'I',6X,'Number of points',6X,'I',4X,'Sigma',3X,
3016      &'I'/1X,'I',34X,'I',28X,'I',12X,'I'/1X,'I',34('-'),'I',28('-'),
3017      &'I',4X,'(mb)',4X,'I'/1X,'I',34X,'I',28X,'I',12X,'I'/1X,'I',1X,
3018      &'N:o',1X,'Type',25X,'I',4X,'Generated',9X,'Tried',1X,'I',12X,
3019      &'I'/1X,'I',34X,'I',28X,'I',12X,'I'/1X,78('=')/1X,'I',34X,'I',28X,
3020      &'I',12X,'I')
3021  5200 FORMAT(1X,'I',1X,I3,1X,A28,1X,'I',1X,I12,1X,I13,1X,'I',1X,1P,
3022      &D10.3,1X,'I')
3023  5300 FORMAT(1X,'I',34X,'I',28X,'I',12X,'I'/1X,78('=')/
3024      &1X,'I',34X,'I',28X,'I',12X,'I')
3025  5400 FORMAT(1X,'I',34X,'I',28X,'I',12X,'I'/1X,78('=')//
3026      &1X,'********* Fraction of events that fail fragmentation ',
3027      &'cuts =',1X,F8.5,' *********'/)
3028  5500 FORMAT('1',27('*'),1X,'PYSTAT:  Decay Widths and Branching ',
3029      &'Ratios',1X,27('*'))
3030  5600 FORMAT(/1X,98('=')/1X,'I',49X,'I',13X,'I',12X,'I',6X,'I',12X,'I'/
3031      &1X,'I',5X,'Mother  -->  Branching/Decay Channel',8X,'I',1X,
3032      &'Width (GeV)',1X,'I',7X,'B.R.',1X,'I',1X,'Stat',1X,'I',2X,
3033      &'Eff. B.R.',1X,'I'/1X,'I',49X,'I',13X,'I',12X,'I',6X,'I',12X,'I'/
3034      &1X,98('='))
3035  5700 FORMAT(1X,'I',49X,'I',13X,'I',12X,'I',6X,'I',12X,'I'/1X,'I',1X,
3036      &I8,2X,A10,3X,'(m =',F10.3,')',2X,'-->',5X,'I',2X,1P,D10.3,0P,1X,
3037      &'I',1X,1P,D10.3,0P,1X,'I',1X,A4,1X,'I',1X,1P,D10.3,0P,1X,'I')
3038  5800 FORMAT(1X,'I',1X,I8,2X,A10,1X,'+',1X,A10,15X,'I',2X,
3039      &1P,D10.3,0P,1X,'I',1X,1P,D10.3,0P,1X,'I',1X,A4,1X,'I',1X,
3040      &1P,D10.3,0P,1X,'I')
3041  5900 FORMAT(1X,'I',1X,I8,2X,A10,1X,'+',1X,A10,1X,'+',1X,A10,2X,'I',2X,
3042      &1P,D10.3,0P,1X,'I',1X,1P,D10.3,0P,1X,'I',1X,A4,1X,'I',1X,
3043      &1P,D10.3,0P,1X,'I')
3044  6000 FORMAT(1X,'I',49X,'I',13X,'I',12X,'I',6X,'I',12X,'I'/1X,98('='))
3045  6100 FORMAT('1',7('*'),1X,'PYSTAT: Allowed Incoming Partons/',
3046      &'Particles at Hard Interaction',1X,7('*'))
3047  6200 FORMAT(/1X,78('=')/1X,'I',38X,'I',37X,'I'/1X,'I',1X,
3048      &'Beam particle:',1X,A12,10X,'I',1X,'Target particle:',1X,A12,7X,
3049      &'I'/1X,'I',38X,'I',37X,'I'/1X,'I',1X,'Content',6X,'State',19X,
3050      &'I',1X,'Content',6X,'State',18X,'I'/1X,'I',38X,'I',37X,'I'/1X,
3051      &78('=')/1X,'I',38X,'I',37X,'I')
3052  6300 FORMAT(1X,'I',1X,A9,5X,A4,19X,'I',1X,A9,5X,A4,18X,'I')
3053  6400 FORMAT(1X,'I',38X,'I',37X,'I'/1X,78('='))
3054  6500 FORMAT('1',12('*'),1X,'PYSTAT: User-Defined Limits on ',
3055      &'Kinematical Variables',1X,12('*'))
3056  6600 FORMAT(/1X,78('=')/1X,'I',76X,'I')
3057  6700 FORMAT(1X,'I',16X,1P,D10.3,0P,1X,'<',1X,A,1X,'<',1X,1P,D10.3,0P,
3058      &16X,'I')
3059  6800 FORMAT(1X,'I',3X,1P,D10.3,0P,1X,'(',1P,D10.3,0P,')',1X,'<',1X,A,
3060      &1X,'<',1X,1P,D10.3,0P,16X,'I')
3061  6900 FORMAT(1X,'I',29X,A,1X,'=',1X,1P,D10.3,0P,16X,'I')
3062  7000 FORMAT(1X,'I',76X,'I'/1X,78('='))
3063  7100 FORMAT('1',12('*'),1X,'PYSTAT: Summary of Status Codes and ',
3064      &'Parameter Values',1X,12('*'))
3065  7200 FORMAT(/3X,'I',4X,'MSTP(I)',9X,'PARP(I)',20X,'I',4X,'MSTP(I)',9X,
3066      &'PARP(I)'/)
3067  7300 FORMAT(1X,I3,5X,I6,6X,1P,D10.3,0P,18X,I3,5X,I6,6X,1P,D10.3)
3068  7400 FORMAT('1',13('*'),1X,'PYSTAT: List of implemented processes',
3069      &1X,13('*'))
3070  7500 FORMAT(/1X,65('=')/1X,'I',34X,'I',28X,'I'/1X,'I',12X,
3071      &'Subprocess',12X,'I',1X,'ISET',2X,'KFPR(I,1)',2X,'KFPR(I,2)',1X,
3072      &'I'/1X,'I',34X,'I',28X,'I'/1X,65('=')/1X,'I',34X,'I',28X,'I')
3073  7600 FORMAT(1X,'I',1X,I3,1X,A28,1X,'I',1X,I4,1X,I10,1X,I10,1X,'I')
3074  7700 FORMAT(1X,'I',34X,'I',28X,'I'/1X,65('='))
3075  
3076       RETURN
3077       END
3078  
3079 C*********************************************************************
3080  
3081 C...PYINRE
3082 C...Calculates full and effective widths of gauge bosons, stores
3083 C...masses and widths, rescales coefficients to be used for
3084 C...resonance production generation.
3085  
3086       SUBROUTINE PYINRE
3087  
3088 C...Double precision and integer declarations.
3089       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
3090       IMPLICIT INTEGER(I-N)
3091       INTEGER PYK,PYCHGE,PYCOMP
3092 C...Parameter statement to help give large particle numbers.
3093       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
3094 C...Commonblocks.
3095       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
3096       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
3097       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
3098       COMMON/PYDAT4/CHAF(500,2)
3099       CHARACTER CHAF*16
3100       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
3101       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
3102       COMMON/PYINT1/MINT(400),VINT(400)
3103       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
3104       COMMON/PYINT4/MWID(500),WIDS(500,5)
3105       COMMON/PYINT6/PROC(0:500)
3106       CHARACTER PROC*28
3107       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
3108       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYSUBS/,/PYPARS/,
3109      &/PYINT1/,/PYINT2/,/PYINT4/,/PYINT6/,/PYMSSM/
3110 C...Local arrays and data.
3111       DIMENSION WDTP(0:200),WDTE(0:200,0:5),WDTPM(0:200),
3112      &WDTEM(0:200,0:5),KCORD(500),PMORD(500)
3113  
3114 C...Born level couplings in MSSM Higgs doublet sector.
3115       XW=PARU(102)
3116       XWV=XW
3117       IF(MSTP(8).GE.2) XW=1D0-(PMAS(24,1)/PMAS(23,1))**2
3118       XW1=1D0-XW
3119       IF(MSTP(4).EQ.2) THEN
3120         TANBE=PARU(141)
3121         RATBE=((1D0-TANBE**2)/(1D0+TANBE**2))**2
3122         SQMZ=PMAS(23,1)**2
3123         SQMW=PMAS(24,1)**2
3124         SQMH=PMAS(25,1)**2
3125         SQMA=SQMH*(SQMZ-SQMH)/(SQMZ*RATBE-SQMH)
3126         SQMHP=0.5D0*(SQMA+SQMZ+SQRT((SQMA+SQMZ)**2-4D0*SQMA*SQMZ*RATBE))
3127         SQMHC=SQMA+SQMW
3128         IF(SQMH.GE.SQMZ.OR.MIN(SQMA,SQMHP,SQMHC).LE.0D0) THEN
3129           WRITE(MSTU(11),5000)
3130           STOP
3131         ENDIF
3132         PMAS(35,1)=SQRT(SQMHP)
3133         PMAS(36,1)=SQRT(SQMA)
3134         PMAS(37,1)=SQRT(SQMHC)
3135         ALSU=0.5D0*ATAN(2D0*TANBE*(SQMA+SQMZ)/((1D0-TANBE**2)*
3136      &  (SQMA-SQMZ)))
3137         BESU=ATAN(TANBE)
3138         PARU(142)=1D0
3139         PARU(143)=1D0
3140         PARU(161)=-SIN(ALSU)/COS(BESU)
3141         PARU(162)=COS(ALSU)/SIN(BESU)
3142         PARU(163)=PARU(161)
3143         PARU(164)=SIN(BESU-ALSU)
3144         PARU(165)=PARU(164)
3145         PARU(168)=SIN(BESU-ALSU)+0.5D0*COS(2D0*BESU)*SIN(BESU+ALSU)/XW
3146         PARU(171)=COS(ALSU)/COS(BESU)
3147         PARU(172)=SIN(ALSU)/SIN(BESU)
3148         PARU(173)=PARU(171)
3149         PARU(174)=COS(BESU-ALSU)
3150         PARU(175)=PARU(174)
3151         PARU(176)=COS(2D0*ALSU)*COS(BESU+ALSU)-2D0*SIN(2D0*ALSU)*
3152      &  SIN(BESU+ALSU)
3153         PARU(177)=COS(2D0*BESU)*COS(BESU+ALSU)
3154         PARU(178)=COS(BESU-ALSU)-0.5D0*COS(2D0*BESU)*COS(BESU+ALSU)/XW
3155         PARU(181)=TANBE
3156         PARU(182)=1D0/TANBE
3157         PARU(183)=PARU(181)
3158         PARU(184)=0D0
3159         PARU(185)=PARU(184)
3160         PARU(186)=COS(BESU-ALSU)
3161         PARU(187)=SIN(BESU-ALSU)
3162         PARU(188)=PARU(186)
3163         PARU(189)=PARU(187)
3164         PARU(190)=0D0
3165         PARU(195)=COS(BESU-ALSU)
3166       ENDIF
3167  
3168 C...Reset effective widths of gauge bosons.
3169       DO 110 I=1,500
3170         DO 100 J=1,5
3171           WIDS(I,J)=1D0
3172   100   CONTINUE
3173   110 CONTINUE
3174  
3175 C...Order resonances by increasing mass (except Z0 and W+/-).
3176       NRES=0
3177       DO 140 KC=1,500
3178         KF=KCHG(KC,4)
3179         IF(KF.EQ.0) GOTO 140
3180         IF(MWID(KC).EQ.0) GOTO 140
3181         IF(KC.EQ.7.OR.KC.EQ.8.OR.KC.EQ.17.OR.KC.EQ.18) THEN
3182           IF(MSTP(1).LE.3) GOTO 140
3183         ENDIF
3184         IF(KF/KSUSY1.EQ.1.OR.KF/KSUSY1.EQ.2) THEN
3185           IF(IMSS(1).LE.0) GOTO 140
3186         ENDIF
3187         NRES=NRES+1
3188         PMRES=PMAS(KC,1)
3189         IF(KC.EQ.23.OR.KC.EQ.24) PMRES=0D0
3190         DO 120 I1=NRES-1,1,-1
3191           IF(PMRES.GE.PMORD(I1)) GOTO 130
3192           KCORD(I1+1)=KCORD(I1)
3193           PMORD(I1+1)=PMORD(I1)
3194   120   CONTINUE
3195   130   KCORD(I1+1)=KC
3196         PMORD(I1+1)=PMRES
3197   140 CONTINUE
3198  
3199 C...Loop over possible resonances.
3200       DO 180 I=1,NRES
3201         KC=KCORD(I)
3202         KF=KCHG(KC,4)
3203  
3204 C...Check that no fourth generation channels on by mistake.
3205         IF(MSTP(1).LE.3) THEN
3206           DO 150 J=1,MDCY(KC,3)
3207             IDC=J+MDCY(KC,2)-1
3208             KFA1=IABS(KFDP(IDC,1))
3209             KFA2=IABS(KFDP(IDC,2))
3210             IF(KFA1.EQ.7.OR.KFA1.EQ.8.OR.KFA1.EQ.17.OR.KFA1.EQ.18.OR.
3211      &      KFA2.EQ.7.OR.KFA2.EQ.8.OR.KFA2.EQ.17.OR.KFA2.EQ.18)
3212      &      MDME(IDC,1)=-1
3213   150     CONTINUE
3214         ENDIF
3215  
3216 C...Check that no supersymmetric channels on by mistake.
3217         IF(IMSS(1).LE.0) THEN
3218           DO 160 J=1,MDCY(KC,3)
3219             IDC=J+MDCY(KC,2)-1
3220             KFA1S=IABS(KFDP(IDC,1))/KSUSY1
3221             KFA2S=IABS(KFDP(IDC,2))/KSUSY1
3222             IF(KFA1S.EQ.1.OR.KFA1S.EQ.2.OR.KFA2S.EQ.1.OR.KFA2S.EQ.2)
3223      &      MDME(IDC,1)=-1
3224   160     CONTINUE
3225         ENDIF
3226  
3227 C...Find mass and evaluate width.
3228         PMR=PMAS(KC,1)
3229         IF(KF.EQ.25.OR.KF.EQ.35.OR.KF.EQ.36) MINT(62)=1
3230         IF(MWID(KC).EQ.3) MINT(63)=1
3231         CALL PYWIDT(KF,PMR**2,WDTP,WDTE)
3232         MINT(51)=0
3233  
3234 C...Evaluate suppression factors due to non-simulated channels.
3235         IF(KCHG(KC,3).EQ.0) THEN
3236           WIDS(KC,1)=((WDTE(0,1)+WDTE(0,2))**2+
3237      &    2D0*(WDTE(0,1)+WDTE(0,2))*(WDTE(0,4)+WDTE(0,5))+
3238      &    2D0*WDTE(0,4)*WDTE(0,5))/WDTP(0)**2
3239           WIDS(KC,2)=(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))/WDTP(0)
3240           WIDS(KC,3)=0D0
3241           WIDS(KC,4)=0D0
3242           WIDS(KC,5)=0D0
3243         ELSE
3244           IF(MWID(KC).EQ.3) MINT(63)=1
3245           CALL PYWIDT(-KF,PMR**2,WDTPM,WDTEM)
3246           MINT(51)=0
3247           WIDS(KC,1)=((WDTE(0,1)+WDTE(0,2))*(WDTEM(0,1)+WDTEM(0,3))+
3248      &    (WDTE(0,1)+WDTE(0,2))*(WDTEM(0,4)+WDTEM(0,5))+
3249      &    (WDTE(0,4)+WDTE(0,5))*(WDTEM(0,1)+WDTEM(0,3))+
3250      &    WDTE(0,4)*WDTEM(0,5)+WDTE(0,5)*WDTEM(0,4))/WDTP(0)**2
3251           WIDS(KC,2)=(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))/WDTP(0)
3252           WIDS(KC,3)=(WDTEM(0,1)+WDTEM(0,3)+WDTEM(0,4))/WDTP(0)
3253           WIDS(KC,4)=((WDTE(0,1)+WDTE(0,2))**2+
3254      &    2D0*(WDTE(0,1)+WDTE(0,2))*(WDTE(0,4)+WDTE(0,5))+
3255      &    2D0*WDTE(0,4)*WDTE(0,5))/WDTP(0)**2
3256           WIDS(KC,5)=((WDTEM(0,1)+WDTEM(0,3))**2+
3257      &    2D0*(WDTEM(0,1)+WDTEM(0,3))*(WDTEM(0,4)+WDTEM(0,5))+
3258      &    2D0*WDTEM(0,4)*WDTEM(0,5))/WDTP(0)**2
3259         ENDIF
3260  
3261 C...Set resonance widths and branching ratios;
3262 C...also on/off switch for decays.
3263         IF(MWID(KC).EQ.1.OR.MWID(KC).EQ.3) THEN
3264           PMAS(KC,2)=WDTP(0)
3265           PMAS(KC,3)=MIN(0.9D0*PMAS(KC,1),10D0*PMAS(KC,2))
3266           MDCY(KC,1)=MSTP(41)
3267           DO 170 J=1,MDCY(KC,3)
3268             IDC=J+MDCY(KC,2)-1
3269             BRAT(IDC)=0D0
3270             IF(WDTP(0).GT.0D0) BRAT(IDC)=WDTP(J)/WDTP(0)
3271   170     CONTINUE
3272         ENDIF
3273   180 CONTINUE
3274  
3275 C...Flavours of leptoquark: redefine charge and name.
3276       KFLQQ=KFDP(MDCY(39,2),1)
3277       KFLQL=KFDP(MDCY(39,2),2)
3278       KCHG(39,1)=KCHG(PYCOMP(KFLQQ),1)*ISIGN(1,KFLQQ)+
3279      &KCHG(PYCOMP(KFLQL),1)*ISIGN(1,KFLQL)
3280       LL=1
3281       IF(IABS(KFLQL).EQ.13) LL=2
3282       IF(IABS(KFLQL).EQ.15) LL=3
3283       CHAF(39,1)='LQ_'//CHAF(IABS(KFLQQ),1)(1:1)//
3284      &CHAF(IABS(KFLQL),1)(1:LL)//' '
3285       CHAF(39,2)=CHAF(39,2)(1:4+LL)//'bar '
3286  
3287 C...Special cases in treatment of gamma*/Z0: redefine process name.
3288       IF(MSTP(43).EQ.1) THEN
3289         PROC(1)='f + fbar -> gamma*'
3290         PROC(15)='f + fbar -> g + gamma*'
3291         PROC(19)='f + fbar -> gamma + gamma*'
3292         PROC(30)='f + g -> f + gamma*'
3293         PROC(35)='f + gamma -> f + gamma*'
3294       ELSEIF(MSTP(43).EQ.2) THEN
3295         PROC(1)='f + fbar -> Z0'
3296         PROC(15)='f + fbar -> g + Z0'
3297         PROC(19)='f + fbar -> gamma + Z0'
3298         PROC(30)='f + g -> f + Z0'
3299         PROC(35)='f + gamma -> f + Z0'
3300       ELSEIF(MSTP(43).EQ.3) THEN
3301         PROC(1)='f + fbar -> gamma*/Z0'
3302         PROC(15)='f + fbar -> g + gamma*/Z0'
3303         PROC(19)='f + fbar -> gamma + gamma*/Z0'
3304         PROC(30)='f + g -> f + gamma*/Z0'
3305         PROC(35)='f + gamma -> f + gamma*/Z0'
3306       ENDIF
3307  
3308 C...Special cases in treatment of gamma*/Z0/Z'0: redefine process name.
3309       IF(MSTP(44).EQ.1) THEN
3310         PROC(141)='f + fbar -> gamma*'
3311       ELSEIF(MSTP(44).EQ.2) THEN
3312         PROC(141)='f + fbar -> Z0'
3313       ELSEIF(MSTP(44).EQ.3) THEN
3314         PROC(141)='f + fbar -> Z''0'
3315       ELSEIF(MSTP(44).EQ.4) THEN
3316         PROC(141)='f + fbar -> gamma*/Z0'
3317       ELSEIF(MSTP(44).EQ.5) THEN
3318         PROC(141)='f + fbar -> gamma*/Z''0'
3319       ELSEIF(MSTP(44).EQ.6) THEN
3320         PROC(141)='f + fbar -> Z0/Z''0'
3321       ELSEIF(MSTP(44).EQ.7) THEN
3322         PROC(141)='f + fbar -> gamma*/Z0/Z''0'
3323       ENDIF
3324  
3325 C...Special cases in treatment of WW -> WW: redefine process name.
3326       IF(MSTP(45).EQ.1) THEN
3327         PROC(77)='W+ + W+ -> W+ + W+'
3328       ELSEIF(MSTP(45).EQ.2) THEN
3329         PROC(77)='W+ + W- -> W+ + W-'
3330       ELSEIF(MSTP(45).EQ.3) THEN
3331         PROC(77)='W+/- + W+/- -> W+/- + W+/-'
3332       ENDIF
3333  
3334 C...Format for error information.
3335  5000 FORMAT(1X,'Error: unphysical input tan^2(beta) and m_H ',
3336      &'combination'/1X,'Execution stopped!')
3337  
3338       RETURN
3339       END
3340  
3341 C*********************************************************************
3342  
3343 C...PYINBM
3344 C...Identifies the two incoming particles and the choice of frame.
3345  
3346        SUBROUTINE PYINBM(CHFRAM,CHBEAM,CHTARG,WIN)
3347  
3348 C...Double precision and integer declarations.
3349       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
3350       IMPLICIT INTEGER(I-N)
3351       INTEGER PYK,PYCHGE,PYCOMP
3352 C...Commonblocks.
3353       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
3354       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
3355       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
3356       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
3357       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
3358       COMMON/PYINT1/MINT(400),VINT(400)
3359       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/
3360 C...Local arrays, character variables and data.
3361       CHARACTER CHFRAM*12,CHBEAM*12,CHTARG*12,CHCOM(3)*12,CHALP(2)*26,
3362      &CHIDNT(3)*12,CHTEMP*12,CHCDE(35)*12,CHINIT*76
3363       DIMENSION LEN(3),KCDE(35),PM(2)
3364       DATA CHALP/'abcdefghijklmnopqrstuvwxyz',
3365      &'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
3366       DATA CHCDE/    'e-          ','e+          ','nu_e        ',
3367      &'nu_ebar     ','mu-         ','mu+         ','nu_mu       ',
3368      &'nu_mubar    ','tau-        ','tau+        ','nu_tau      ',
3369      &'nu_taubar   ','pi+         ','pi-         ','n0          ',
3370      &'nbar0       ','p+          ','pbar-       ','gamma       ',
3371      &'lambda0     ','sigma-      ','sigma0      ','sigma+      ',
3372      &'xi-         ','xi0         ','omega-      ','pi0         ',
3373      &'reggeon     ','pomeron     ','gamma/e-    ','gamma/e+    ',
3374      &'gamma/mu-   ','gamma/mu+   ','gamma/tau-  ','gamma/tau+  '/
3375       DATA KCDE/11,-11,12,-12,13,-13,14,-14,15,-15,16,-16,
3376      &211,-211,2112,-2112,2212,-2212,22,3122,3112,3212,3222,
3377      &3312,3322,3334,111,28,29,6*22/
3378  
3379 C...Store initial energy. Default frame.
3380       VINT(290)=WIN
3381       MINT(111)=0
3382  
3383 C...Convert character variables to lowercase and find their length.
3384       CHCOM(1)=CHFRAM
3385       CHCOM(2)=CHBEAM
3386       CHCOM(3)=CHTARG
3387       DO 130 I=1,3
3388         LEN(I)=12
3389         DO 110 LL=12,1,-1
3390           IF(LEN(I).EQ.LL.AND.CHCOM(I)(LL:LL).EQ.' ') LEN(I)=LL-1
3391           DO 100 LA=1,26
3392             IF(CHCOM(I)(LL:LL).EQ.CHALP(2)(LA:LA)) CHCOM(I)(LL:LL)=
3393      &      CHALP(1)(LA:LA)
3394   100     CONTINUE
3395   110   CONTINUE
3396         CHIDNT(I)=CHCOM(I)
3397  
3398 C...Fix up bar, underscore and charge in particle name (if needed).
3399         DO 120 LL=1,10
3400           IF(CHIDNT(I)(LL:LL).EQ.'~') THEN
3401             CHTEMP=CHIDNT(I)
3402             CHIDNT(I)=CHTEMP(1:LL-1)//'bar'//CHTEMP(LL+1:10)//'  '
3403           ENDIF
3404   120   CONTINUE
3405         IF(CHIDNT(I)(1:2).EQ.'nu'.AND.CHIDNT(I)(3:3).NE.'_') THEN
3406           CHTEMP=CHIDNT(I)
3407           CHIDNT(I)='nu_'//CHTEMP(3:7)
3408         ELSEIF(CHIDNT(I)(1:2).EQ.'n ') THEN
3409           CHIDNT(I)(1:3)='n0 '
3410         ELSEIF(CHIDNT(I)(1:4).EQ.'nbar') THEN
3411           CHIDNT(I)(1:5)='nbar0'
3412         ELSEIF(CHIDNT(I)(1:2).EQ.'p ') THEN
3413           CHIDNT(I)(1:3)='p+ '
3414         ELSEIF(CHIDNT(I)(1:4).EQ.'pbar'.OR.
3415      &    CHIDNT(I)(1:2).EQ.'p-') THEN
3416           CHIDNT(I)(1:5)='pbar-'
3417         ELSEIF(CHIDNT(I)(1:6).EQ.'lambda') THEN
3418           CHIDNT(I)(7:7)='0'
3419         ELSEIF(CHIDNT(I)(1:3).EQ.'reg') THEN
3420           CHIDNT(I)(1:7)='reggeon'
3421         ELSEIF(CHIDNT(I)(1:3).EQ.'pom') THEN
3422           CHIDNT(I)(1:7)='pomeron'
3423         ENDIF
3424   130 CONTINUE
3425  
3426 C...Identify free initialization.
3427       IF(CHCOM(1)(1:2).EQ.'no') THEN
3428         MINT(65)=1
3429         RETURN
3430       ENDIF
3431  
3432 C...Identify incoming beam and target particles.
3433       DO 160 I=1,2
3434         DO 140 J=1,35
3435           IF(CHIDNT(I+1).EQ.CHCDE(J)) MINT(10+I)=KCDE(J)
3436   140   CONTINUE
3437         PM(I)=PYMASS(MINT(10+I))
3438         VINT(2+I)=PM(I)
3439         MINT(140+I)=0
3440         IF(MINT(10+I).EQ.22.AND.CHIDNT(I+1)(6:6).EQ.'/') THEN
3441           CHTEMP=CHIDNT(I+1)(7:12)//' '
3442           DO 150 J=1,12
3443             IF(CHTEMP.EQ.CHCDE(J)) MINT(140+I)=KCDE(J)
3444   150     CONTINUE
3445           PM(I)=PYMASS(MINT(140+I))
3446           VINT(302+I)=PM(I)
3447         ENDIF
3448   160 CONTINUE
3449       IF(MINT(11).EQ.0) WRITE(MSTU(11),5000) CHBEAM(1:LEN(2))
3450       IF(MINT(12).EQ.0) WRITE(MSTU(11),5100) CHTARG(1:LEN(3))
3451       IF(MINT(11).EQ.0.OR.MINT(12).EQ.0) STOP
3452  
3453 C...Identify choice of frame and input energies.
3454       CHINIT=' '
3455  
3456 C...Events defined in the CM frame.
3457       IF(CHCOM(1)(1:2).EQ.'cm') THEN
3458         MINT(111)=1
3459         S=WIN**2
3460         IF(MSTP(122).GE.1) THEN
3461           IF(CHCOM(2)(1:1).NE.'e') THEN
3462             LOFFS=(31-(LEN(2)+LEN(3)))/2
3463             CHINIT(LOFFS+1:76)='PYTHIA will be initialized for a '//
3464      &      CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
3465      &      ' collider'//' '
3466           ELSE
3467             LOFFS=(30-(LEN(2)+LEN(3)))/2
3468             CHINIT(LOFFS+1:76)='PYTHIA will be initialized for an '//
3469      &      CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
3470      &      ' collider'//' '
3471           ENDIF
3472           WRITE(MSTU(11),5200) CHINIT
3473           WRITE(MSTU(11),5300) WIN
3474         ENDIF
3475  
3476 C...Events defined in fixed target frame.
3477       ELSEIF(CHCOM(1)(1:3).EQ.'fix') THEN
3478         MINT(111)=2
3479         S=PM(1)**2+PM(2)**2+2D0*PM(2)*SQRT(PM(1)**2+WIN**2)
3480         IF(MSTP(122).GE.1) THEN
3481           LOFFS=(29-(LEN(2)+LEN(3)))/2
3482           CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
3483      &    CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
3484      &    ' fixed target'//' '
3485           WRITE(MSTU(11),5200) CHINIT
3486           WRITE(MSTU(11),5400) WIN
3487           WRITE(MSTU(11),5500) SQRT(S)
3488         ENDIF
3489  
3490 C...Frame defined by user three-vectors.
3491       ELSEIF(CHCOM(1)(1:3).EQ.'use') THEN
3492         MINT(111)=3
3493         P(1,5)=PM(1)
3494         P(2,5)=PM(2)
3495         P(1,4)=SQRT(P(1,1)**2+P(1,2)**2+P(1,3)**2+P(1,5)**2)
3496         P(2,4)=SQRT(P(2,1)**2+P(2,2)**2+P(2,3)**2+P(2,5)**2)
3497         S=(P(1,4)+P(2,4))**2-(P(1,1)+P(2,1))**2-(P(1,2)+P(2,2))**2-
3498      &  (P(1,3)+P(2,3))**2
3499         IF(MSTP(122).GE.1) THEN
3500           LOFFS=(22-(LEN(2)+LEN(3)))/2
3501           CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
3502      &    CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
3503      &    ' user configuration'//' '
3504           WRITE(MSTU(11),5200) CHINIT
3505           WRITE(MSTU(11),5600)
3506           WRITE(MSTU(11),5700) CHCOM(2),P(1,1),P(1,2),P(1,3),P(1,4)
3507           WRITE(MSTU(11),5700) CHCOM(3),P(2,1),P(2,2),P(2,3),P(2,4)
3508           WRITE(MSTU(11),5500) SQRT(MAX(0D0,S))
3509         ENDIF
3510  
3511 C...Frame defined by user four-vectors.
3512       ELSEIF(CHCOM(1)(1:4).EQ.'four') THEN
3513         MINT(111)=4
3514         PMS1=P(1,4)**2-P(1,1)**2-P(1,2)**2-P(1,3)**2
3515         P(1,5)=SIGN(SQRT(ABS(PMS1)),PMS1)
3516         PMS2=P(2,4)**2-P(2,1)**2-P(2,2)**2-P(2,3)**2
3517         P(2,5)=SIGN(SQRT(ABS(PMS2)),PMS2)
3518         S=(P(1,4)+P(2,4))**2-(P(1,1)+P(2,1))**2-(P(1,2)+P(2,2))**2-
3519      &  (P(1,3)+P(2,3))**2
3520         IF(MSTP(122).GE.1) THEN
3521           LOFFS=(22-(LEN(2)+LEN(3)))/2
3522           CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
3523      &    CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
3524      &    ' user configuration'//' '
3525           WRITE(MSTU(11),5200) CHINIT
3526           WRITE(MSTU(11),5600)
3527           WRITE(MSTU(11),5700) CHCOM(2),P(1,1),P(1,2),P(1,3),P(1,4)
3528           WRITE(MSTU(11),5700) CHCOM(3),P(2,1),P(2,2),P(2,3),P(2,4)
3529           WRITE(MSTU(11),5500) SQRT(MAX(0D0,S))
3530         ENDIF
3531  
3532 C...Frame defined by user five-vectors.
3533       ELSEIF(CHCOM(1)(1:4).EQ.'five') THEN
3534         MINT(111)=5
3535         S=(P(1,4)+P(2,4))**2-(P(1,1)+P(2,1))**2-(P(1,2)+P(2,2))**2-
3536      &  (P(1,3)+P(2,3))**2
3537         IF(MSTP(122).GE.1) THEN
3538           LOFFS=(22-(LEN(2)+LEN(3)))/2
3539           CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
3540      &    CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
3541      &    ' user configuration'//' '
3542           WRITE(MSTU(11),5200) CHINIT
3543           WRITE(MSTU(11),5600)
3544           WRITE(MSTU(11),5700) CHCOM(2),P(1,1),P(1,2),P(1,3),P(1,4)
3545           WRITE(MSTU(11),5700) CHCOM(3),P(2,1),P(2,2),P(2,3),P(2,4)
3546           WRITE(MSTU(11),5500) SQRT(MAX(0D0,S))
3547         ENDIF
3548  
3549 C...Unknown frame. Error for too low CM energy.
3550       ELSE
3551         WRITE(MSTU(11),5800) CHFRAM(1:LEN(1))
3552         STOP
3553       ENDIF
3554       IF(S.LT.PARP(2)**2) THEN
3555         WRITE(MSTU(11),5900) SQRT(S)
3556         STOP
3557       ENDIF
3558  
3559 C...Formats for initialization and error information.
3560  5000 FORMAT(1X,'Error: unrecognized beam particle ''',A,'''D0'/
3561      &1X,'Execution stopped!')
3562  5100 FORMAT(1X,'Error: unrecognized target particle ''',A,'''D0'/
3563      &1X,'Execution stopped!')
3564  5200 FORMAT(/1X,78('=')/1X,'I',76X,'I'/1X,'I',A76,'I')
3565  5300 FORMAT(1X,'I',18X,'at',1X,F10.3,1X,'GeV center-of-mass energy',
3566      &19X,'I'/1X,'I',76X,'I'/1X,78('='))
3567  5400 FORMAT(1X,'I',22X,'at',1X,F10.3,1X,'GeV/c lab-momentum',22X,'I')
3568  5500 FORMAT(1X,'I',76X,'I'/1X,'I',11X,'corresponding to',1X,F10.3,1X,
3569      &'GeV center-of-mass energy',12X,'I'/1X,'I',76X,'I'/1X,78('='))
3570  5600 FORMAT(1X,'I',76X,'I'/1X,'I',18X,'px (GeV/c)',3X,'py (GeV/c)',3X,
3571      &'pz (GeV/c)',6X,'E (GeV)',9X,'I')
3572  5700 FORMAT(1X,'I',8X,A8,4(2X,F10.3,1X),8X,'I')
3573  5800 FORMAT(1X,'Error: unrecognized coordinate frame ''',A,'''D0'/
3574      &1X,'Execution stopped!')
3575  5900 FORMAT(1X,'Error: too low CM energy,',F8.3,' GeV for event ',
3576      &'generation.'/1X,'Execution stopped!')
3577  
3578       RETURN
3579       END
3580  
3581 C*********************************************************************
3582  
3583 C...PYINKI
3584 C...Sets up kinematics, including rotations and boosts to/from CM frame.
3585  
3586       SUBROUTINE PYINKI(MODKI)
3587  
3588 C...Double precision and integer declarations.
3589       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
3590       IMPLICIT INTEGER(I-N)
3591       INTEGER PYK,PYCHGE,PYCOMP
3592 C...Commonblocks.
3593       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
3594       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
3595       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
3596       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
3597       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
3598       COMMON/PYINT1/MINT(400),VINT(400)
3599       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/
3600  
3601 C...Set initial flavour state.
3602       N=2
3603       DO 100 I=1,2
3604         K(I,1)=1
3605         K(I,2)=MINT(10+I)
3606         IF(MINT(140+I).NE.0) K(I,2)=MINT(140+I)
3607   100 CONTINUE
3608  
3609 C...Reset boost. Do kinematics for various cases.
3610       DO 110 J=6,10
3611         VINT(J)=0D0
3612   110 CONTINUE
3613  
3614 C...Set up kinematics for events defined in CM frame.
3615       IF(MINT(111).EQ.1) THEN
3616         WIN=VINT(290)
3617         IF(MODKI.EQ.1) WIN=PARP(171)*VINT(290)
3618         S=WIN**2
3619         P(1,5)=VINT(3)
3620         P(2,5)=VINT(4)
3621         IF(MINT(141).NE.0) P(1,5)=VINT(303)
3622         IF(MINT(142).NE.0) P(2,5)=VINT(304)
3623         P(1,1)=0D0
3624         P(1,2)=0D0
3625         P(2,1)=0D0
3626         P(2,2)=0D0
3627         P(1,3)=SQRT(((S-P(1,5)**2-P(2,5)**2)**2-(2D0*P(1,5)*P(2,5))**2)/
3628      &  (4D0*S))
3629         P(2,3)=-P(1,3)
3630         P(1,4)=SQRT(P(1,3)**2+P(1,5)**2)
3631         P(2,4)=SQRT(P(2,3)**2+P(2,5)**2)
3632  
3633 C...Set up kinematics for fixed target events.
3634       ELSEIF(MINT(111).EQ.2) THEN
3635         WIN=VINT(290)
3636         IF(MODKI.EQ.1) WIN=PARP(171)*VINT(290)
3637         P(1,5)=VINT(3)
3638         P(2,5)=VINT(4)
3639         IF(MINT(141).NE.0) P(1,5)=VINT(303)
3640         IF(MINT(142).NE.0) P(2,5)=VINT(304)
3641         P(1,1)=0D0
3642         P(1,2)=0D0
3643         P(2,1)=0D0
3644         P(2,2)=0D0
3645         P(1,3)=WIN
3646         P(1,4)=SQRT(P(1,3)**2+P(1,5)**2)
3647         P(2,3)=0D0
3648         P(2,4)=P(2,5)
3649         S=P(1,5)**2+P(2,5)**2+2D0*P(2,4)*P(1,4)
3650         VINT(10)=P(1,3)/(P(1,4)+P(2,4))
3651         CALL PYROBO(0,0,0D0,0D0,0D0,0D0,-VINT(10))
3652  
3653 C...Set up kinematics for events in user-defined frame.
3654       ELSEIF(MINT(111).EQ.3) THEN
3655         P(1,5)=VINT(3)
3656         P(2,5)=VINT(4)
3657         IF(MINT(141).NE.0) P(1,5)=VINT(303)
3658         IF(MINT(142).NE.0) P(2,5)=VINT(304)
3659         P(1,4)=SQRT(P(1,1)**2+P(1,2)**2+P(1,3)**2+P(1,5)**2)
3660         P(2,4)=SQRT(P(2,1)**2+P(2,2)**2+P(2,3)**2+P(2,5)**2)
3661         DO 120 J=1,3
3662           VINT(7+J)=(P(1,J)+P(2,J))/(P(1,4)+P(2,4))
3663   120   CONTINUE
3664         CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
3665         VINT(7)=PYANGL(P(1,1),P(1,2))
3666         CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
3667         VINT(6)=PYANGL(P(1,3),P(1,1))
3668         CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
3669         S=P(1,5)**2+P(2,5)**2+2D0*(P(1,4)*P(2,4)-P(1,3)*P(2,3))
3670  
3671 C...Set up kinematics for events with user-defined four-vectors.
3672       ELSEIF(MINT(111).EQ.4) THEN
3673         PMS1=P(1,4)**2-P(1,1)**2-P(1,2)**2-P(1,3)**2
3674         P(1,5)=SIGN(SQRT(ABS(PMS1)),PMS1)
3675         PMS2=P(2,4)**2-P(2,1)**2-P(2,2)**2-P(2,3)**2
3676         P(2,5)=SIGN(SQRT(ABS(PMS2)),PMS2)
3677         DO 130 J=1,3
3678           VINT(7+J)=(P(1,J)+P(2,J))/(P(1,4)+P(2,4))
3679   130   CONTINUE
3680         CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
3681         VINT(7)=PYANGL(P(1,1),P(1,2))
3682         CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
3683         VINT(6)=PYANGL(P(1,3),P(1,1))
3684         CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
3685         S=(P(1,4)+P(2,4))**2
3686  
3687 C...Set up kinematics for events with user-defined five-vectors.
3688       ELSEIF(MINT(111).EQ.5) THEN
3689         DO 140 J=1,3
3690           VINT(7+J)=(P(1,J)+P(2,J))/(P(1,4)+P(2,4))
3691   140   CONTINUE
3692         CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
3693         VINT(7)=PYANGL(P(1,1),P(1,2))
3694         CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
3695         VINT(6)=PYANGL(P(1,3),P(1,1))
3696         CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
3697         S=(P(1,4)+P(2,4))**2
3698       ENDIF
3699  
3700 C...Return or error for too low CM energy.
3701       IF(MODKI.EQ.1.AND.S.LT.PARP(2)**2) THEN
3702         IF(MSTP(172).LE.1) THEN
3703           CALL PYERRM(23,
3704      &    '(PYINKI:) too low invariant mass in this event')
3705         ELSE
3706           MSTI(61)=1
3707           RETURN
3708         ENDIF
3709       ENDIF
3710  
3711 C...Save information on incoming particles.
3712       VINT(1)=SQRT(S)
3713       VINT(2)=S
3714       IF(MINT(111).GE.4) THEN
3715         IF(MINT(141).EQ.0) THEN
3716           VINT(3)=P(1,5)
3717           IF(MINT(11).EQ.22.AND.P(1,5).LT.0) VINT(307)=P(1,5)**2
3718         ELSE
3719           VINT(303)=P(1,5)
3720         ENDIF
3721         IF(MINT(142).EQ.0) THEN
3722           VINT(4)=P(2,5)
3723           IF(MINT(12).EQ.22.AND.P(2,5).LT.0) VINT(308)=P(2,5)**2
3724         ELSE
3725           VINT(304)=P(2,5)
3726         ENDIF
3727       ENDIF
3728       VINT(5)=P(1,3)
3729       IF(MODKI.EQ.0) VINT(289)=S
3730       DO 150 J=1,5
3731         V(1,J)=0D0
3732         V(2,J)=0D0
3733         VINT(290+J)=P(1,J)
3734         VINT(295+J)=P(2,J)
3735   150 CONTINUE
3736  
3737 C...Store pT cut-off and related constants to be used in generation.
3738       IF(MODKI.EQ.0) VINT(285)=CKIN(3)
3739       IF(MSTP(82).LE.1) THEN
3740         PTMN=PARP(81)*(VINT(1)/PARP(89))**PARP(90)
3741       ELSE
3742         PTMN=PARP(82)*(VINT(1)/PARP(89))**PARP(90)
3743       ENDIF
3744       VINT(149)=4D0*PTMN**2/S
3745       VINT(154)=PTMN
3746  
3747       RETURN
3748       END
3749  
3750 C*********************************************************************
3751  
3752 C...PYINPR
3753 C...Selects partonic subprocesses to be included in the simulation.
3754  
3755       SUBROUTINE PYINPR
3756  
3757 C...Double precision and integer declarations.
3758       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
3759       IMPLICIT INTEGER(I-N)
3760       INTEGER PYK,PYCHGE,PYCOMP
3761 C...Commonblocks.
3762       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
3763       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
3764       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
3765       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
3766       COMMON/PYINT1/MINT(400),VINT(400)
3767       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
3768       SAVE /PYDAT1/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/
3769  
3770 C...Reset processes to be included.
3771       IF(MSEL.NE.0) THEN
3772         DO 100 I=1,500
3773           MSUB(I)=0
3774   100   CONTINUE
3775       ENDIF
3776
3777 C...Set running pTmin scale.
3778       IF(MSTP(82).LE.1) THEN
3779         PTMRUN=PARP(81)*(VINT(1)/PARP(89))**PARP(90)
3780       ELSE
3781         PTMRUN=PARP(82)*(VINT(1)/PARP(89))**PARP(90)
3782       ENDIF
3783
3784 C...Begin by assuming incoming photon to enter subprocess.
3785       IF(MINT(11).EQ.22) MINT(15)=22
3786       IF(MINT(12).EQ.22) MINT(16)=22
3787  
3788 C...For e-gamma with MSTP(14)=10 allow mixture of VMD and anomalous.
3789       IF(MINT(121).EQ.2.AND.MSTP(14).EQ.10) THEN
3790         MSUB(10)=1
3791         MINT(123)=MINT(122)+1
3792  
3793 C...For gamma-p or gamma-gamma with MSTP(14) = 10, 20, 25 or 30 
3794 C...allow mixture.
3795 C...Here also set a few parameters otherwise normally not touched.
3796       ELSEIF(MINT(121).GT.1) THEN
3797  
3798 C...Parton distributions dampened at small Q2; go to low energies,
3799 C...alpha_s <1; no minimum pT cut-off a priori.
3800         IF(MSTP(18).EQ.2) THEN
3801           MSTP(57)=3
3802           PARP(2)=2D0
3803           PARU(115)=1D0
3804           CKIN(5)=0.2D0
3805           CKIN(6)=0.2D0
3806         ENDIF 
3807  
3808 C...Define pT cut-off parameters and whether run involves low-pT.
3809         PTMVMD=PTMRUN
3810         VINT(154)=PTMVMD
3811         PTMDIR=PTMVMD
3812         IF(MSTP(18).EQ.2) PTMDIR=PARP(15)
3813         PTMANO=PTMVMD
3814         IF(MSTP(15).EQ.5) PTMANO=0.60D0+
3815      &  0.125D0*LOG(1D0+0.10D0*VINT(1))**2
3816         IPTL=1
3817         IF(VINT(285).GT.MAX(PTMVMD,PTMDIR,PTMANO)) IPTL=0
3818         IF(MSEL.EQ.2) IPTL=1
3819  
3820 C...Set up for p/gamma * gamma; real or virtual photons.
3821         IF(MINT(121).EQ.3.OR.MINT(121).EQ.6.OR.(MINT(121).EQ.4.AND.
3822      &  MSTP(14).EQ.30)) THEN
3823  
3824 C...Set up for p/VMD * VMD.
3825         IF(MINT(122).EQ.1) THEN
3826           MINT(123)=2
3827           MSUB(11)=1
3828           MSUB(12)=1
3829           MSUB(13)=1
3830           MSUB(28)=1
3831           MSUB(53)=1
3832           MSUB(68)=1
3833           IF(IPTL.EQ.1) MSUB(95)=1
3834           IF(MSEL.EQ.2) THEN
3835             MSUB(91)=1
3836             MSUB(92)=1
3837             MSUB(93)=1
3838             MSUB(94)=1
3839           ENDIF
3840           IF(IPTL.EQ.1) CKIN(3)=0D0
3841  
3842 C...Set up for p/VMD * direct gamma.
3843         ELSEIF(MINT(122).EQ.2) THEN
3844           MINT(123)=0
3845           IF(MINT(121).EQ.6) MINT(123)=5
3846           MSUB(131)=1
3847           MSUB(132)=1
3848           MSUB(135)=1
3849           MSUB(136)=1
3850           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
3851  
3852 C...Set up for p/VMD * anomalous gamma.
3853         ELSEIF(MINT(122).EQ.3) THEN
3854           MINT(123)=3
3855           IF(MINT(121).EQ.6) MINT(123)=7
3856           MSUB(11)=1
3857           MSUB(12)=1
3858           MSUB(13)=1
3859           MSUB(28)=1
3860           MSUB(53)=1
3861           MSUB(68)=1
3862           IF(IPTL.EQ.1) MSUB(95)=1
3863           IF(MSEL.EQ.2) THEN
3864             MSUB(91)=1
3865             MSUB(92)=1
3866             MSUB(93)=1
3867             MSUB(94)=1
3868           ENDIF
3869           IF(IPTL.EQ.1) CKIN(3)=0D0
3870
3871 C...Set up for DIS * p.
3872         ELSEIF(MINT(122).EQ.4.AND.(IABS(MINT(11)).GE.28.OR.
3873      &  IABS(MINT(12)).GE.28)) THEN
3874           MINT(123)=8
3875           IF(IPTL.EQ.1) MSUB(99)=1
3876  
3877 C...Set up for direct * direct gamma (switch off leptons).
3878         ELSEIF(MINT(122).EQ.4) THEN
3879           MINT(123)=0
3880           MSUB(137)=1
3881           MSUB(138)=1
3882           MSUB(139)=1
3883           MSUB(140)=1
3884           DO 110 II=MDCY(22,2),MDCY(22,2)+MDCY(22,3)-1
3885             IF(IABS(KFDP(II,1)).GE.10) MDME(II,1)=MIN(0,MDME(II,1))
3886   110     CONTINUE
3887           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
3888  
3889 C...Set up for direct * anomalous gamma.
3890         ELSEIF(MINT(122).EQ.5) THEN
3891           MINT(123)=6
3892           MSUB(131)=1
3893           MSUB(132)=1
3894           MSUB(135)=1
3895           MSUB(136)=1
3896           IF(IPTL.EQ.1) CKIN(3)=PTMANO
3897  
3898 C...Set up for anomalous * anomalous gamma.
3899         ELSEIF(MINT(122).EQ.6) THEN
3900           MINT(123)=3
3901           MSUB(11)=1
3902           MSUB(12)=1
3903           MSUB(13)=1
3904           MSUB(28)=1
3905           MSUB(53)=1
3906           MSUB(68)=1
3907           IF(IPTL.EQ.1) MSUB(95)=1
3908           IF(MSEL.EQ.2) THEN
3909             MSUB(91)=1
3910             MSUB(92)=1
3911             MSUB(93)=1
3912             MSUB(94)=1
3913           ENDIF
3914           IF(IPTL.EQ.1) CKIN(3)=0D0
3915         ENDIF
3916  
3917 C...Set up for gamma* * gamma*; virtual photons = dir, VMD, anom.
3918         ELSEIF(MINT(121).EQ.9.OR.MINT(121).EQ.13) THEN
3919  
3920 C...Set up for direct * direct gamma (switch off leptons).
3921         IF(MINT(122).EQ.1) THEN
3922           MINT(123)=0
3923           MSUB(137)=1
3924           MSUB(138)=1
3925           MSUB(139)=1
3926           MSUB(140)=1
3927           DO 120 II=MDCY(22,2),MDCY(22,2)+MDCY(22,3)-1
3928             IF(IABS(KFDP(II,1)).GE.10) MDME(II,1)=MIN(0,MDME(II,1))
3929   120     CONTINUE
3930           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
3931  
3932 C...Set up for direct * VMD and VMD * direct gamma.
3933         ELSEIF(MINT(122).EQ.2.OR.MINT(122).EQ.4) THEN
3934           MINT(123)=5
3935           MSUB(131)=1
3936           MSUB(132)=1
3937           MSUB(135)=1
3938           MSUB(136)=1
3939           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
3940  
3941 C...Set up for direct * anomalous and anomalous * direct gamma.
3942         ELSEIF(MINT(122).EQ.3.OR.MINT(122).EQ.7) THEN
3943           MINT(123)=6
3944           MSUB(131)=1
3945           MSUB(132)=1
3946           MSUB(135)=1
3947           MSUB(136)=1
3948           IF(IPTL.EQ.1) CKIN(3)=PTMANO
3949  
3950 C...Set up for VMD*VMD.
3951         ELSEIF(MINT(122).EQ.5) THEN
3952           MINT(123)=2
3953           MSUB(11)=1
3954           MSUB(12)=1
3955           MSUB(13)=1
3956           MSUB(28)=1
3957           MSUB(53)=1
3958           MSUB(68)=1
3959           IF(IPTL.EQ.1) MSUB(95)=1
3960           IF(MSEL.EQ.2) THEN
3961             MSUB(91)=1
3962             MSUB(92)=1
3963             MSUB(93)=1
3964             MSUB(94)=1
3965           ENDIF
3966           IF(IPTL.EQ.1) CKIN(3)=0D0
3967  
3968 C...Set up for VMD * anomalous and anomalous * VMD gamma.
3969         ELSEIF(MINT(122).EQ.6.OR.MINT(122).EQ.8) THEN
3970           MINT(123)=7
3971           MSUB(11)=1
3972           MSUB(12)=1
3973           MSUB(13)=1
3974           MSUB(28)=1
3975           MSUB(53)=1
3976           MSUB(68)=1
3977           IF(IPTL.EQ.1) MSUB(95)=1
3978           IF(MSEL.EQ.2) THEN
3979             MSUB(91)=1
3980             MSUB(92)=1
3981             MSUB(93)=1
3982             MSUB(94)=1
3983           ENDIF
3984           IF(IPTL.EQ.1) CKIN(3)=0D0
3985  
3986 C...Set up for anomalous * anomalous gamma.
3987         ELSEIF(MINT(122).EQ.9) THEN
3988           MINT(123)=3
3989           MSUB(11)=1
3990           MSUB(12)=1
3991           MSUB(13)=1
3992           MSUB(28)=1
3993           MSUB(53)=1
3994           MSUB(68)=1
3995           IF(IPTL.EQ.1) MSUB(95)=1
3996           IF(MSEL.EQ.2) THEN
3997             MSUB(91)=1
3998             MSUB(92)=1
3999             MSUB(93)=1
4000             MSUB(94)=1
4001           ENDIF
4002           IF(IPTL.EQ.1) CKIN(3)=0D0
4003  
4004 C...Set up for DIS * VMD and VMD * DIS gamma.
4005         ELSEIF(MINT(122).EQ.10.OR.MINT(122).EQ.12) THEN
4006           MINT(123)=8
4007           IF(IPTL.EQ.1) MSUB(99)=1
4008  
4009 C...Set up for DIS * anomalous and anomalous * DIS gamma.
4010         ELSEIF(MINT(122).EQ.11.OR.MINT(122).EQ.13) THEN
4011           MINT(123)=9
4012           IF(IPTL.EQ.1) MSUB(99)=1
4013         ENDIF
4014  
4015 C...Set up for gamma* * p; virtual photons = dir, res.
4016         ELSEIF(MINT(121).EQ.2) THEN
4017  
4018 C...Set up for direct * p.
4019         IF(MINT(122).EQ.1) THEN
4020           MINT(123)=0
4021           MSUB(131)=1
4022           MSUB(132)=1
4023           MSUB(135)=1
4024           MSUB(136)=1
4025           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
4026  
4027 C...Set up for resolved * p.
4028         ELSEIF(MINT(122).EQ.2) THEN
4029           MINT(123)=1
4030           MSUB(11)=1
4031           MSUB(12)=1
4032           MSUB(13)=1
4033           MSUB(28)=1
4034           MSUB(53)=1
4035           MSUB(68)=1
4036           IF(IPTL.EQ.1) MSUB(95)=1
4037           IF(MSEL.EQ.2) THEN
4038             MSUB(91)=1
4039             MSUB(92)=1
4040             MSUB(93)=1
4041             MSUB(94)=1
4042           ENDIF
4043           IF(IPTL.EQ.1) CKIN(3)=0D0
4044         ENDIF
4045  
4046 C...Set up for gamma* * gamma*; virtual photons = dir, res.
4047         ELSEIF(MINT(121).EQ.4) THEN
4048  
4049 C...Set up for direct * direct gamma (switch off leptons).
4050         IF(MINT(122).EQ.1) THEN
4051           MINT(123)=0
4052           MSUB(137)=1
4053           MSUB(138)=1
4054           MSUB(139)=1
4055           MSUB(140)=1
4056           DO 130 II=MDCY(22,2),MDCY(22,2)+MDCY(22,3)-1
4057             IF(IABS(KFDP(II,1)).GE.10) MDME(II,1)=MIN(0,MDME(II,1))
4058   130     CONTINUE
4059           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
4060  
4061 C...Set up for direct * resolved and resolved * direct gamma.
4062         ELSEIF(MINT(122).EQ.2.OR.MINT(122).EQ.3) THEN
4063           MINT(123)=5
4064           MSUB(131)=1
4065           MSUB(132)=1
4066           MSUB(135)=1
4067           MSUB(136)=1
4068           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
4069  
4070 C...Set up for resolved * resolved gamma.
4071         ELSEIF(MINT(122).EQ.4) THEN
4072           MINT(123)=2
4073           MSUB(11)=1
4074           MSUB(12)=1
4075           MSUB(13)=1
4076           MSUB(28)=1
4077           MSUB(53)=1
4078           MSUB(68)=1
4079           IF(IPTL.EQ.1) MSUB(95)=1
4080           IF(MSEL.EQ.2) THEN
4081             MSUB(91)=1
4082             MSUB(92)=1
4083             MSUB(93)=1
4084             MSUB(94)=1
4085           ENDIF
4086           IF(IPTL.EQ.1) CKIN(3)=0D0
4087         ENDIF
4088  
4089 C...End of special set up for gamma-p and gamma-gamma.
4090         ENDIF
4091         CKIN(1)=2D0*CKIN(3)
4092       ENDIF
4093  
4094 C...Flavour information for individual beams.
4095       DO 140 I=1,2
4096         MINT(40+I)=1
4097         IF(MINT(123).GE.1.AND.MINT(10+I).EQ.22) MINT(40+I)=2
4098         IF(IABS(MINT(10+I)).GT.100) MINT(40+I)=2
4099         IF(MINT(10+I).EQ.28.OR.MINT(10+I).EQ.29) MINT(40+I)=2
4100         MINT(44+I)=MINT(40+I)
4101         IF(MSTP(11).GE.1.AND.(IABS(MINT(10+I)).EQ.11.OR.
4102      &  IABS(MINT(10+I)).EQ.13.OR.IABS(MINT(10+I)).EQ.15)) MINT(44+I)=3
4103   140 CONTINUE
4104  
4105 C...If two real gammas, whereof one direct, pick the first.
4106 C...For two virtual photons, keep requested order.
4107       IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) THEN
4108         IF(MSTP(14).LE.10.AND.MINT(123).GE.4.AND.MINT(123).LE.6) THEN
4109           MINT(41)=1
4110           MINT(45)=1
4111         ELSEIF(MSTP(14).EQ.12.OR.MSTP(14).EQ.13.OR.MSTP(14).EQ.22.OR.
4112      &  MSTP(14).EQ.26.OR.MSTP(14).EQ.27) THEN
4113           MINT(41)=1
4114           MINT(45)=1
4115         ELSEIF(MSTP(14).EQ.14.OR.MSTP(14).EQ.17.OR.MSTP(14).EQ.23.OR.
4116      &  MSTP(14).EQ.28.OR.MSTP(14).EQ.29) THEN
4117           MINT(42)=1
4118           MINT(46)=1
4119         ELSEIF((MSTP(14).EQ.20.OR.MSTP(14).EQ.30).AND.(MINT(122).EQ.2
4120      &  .OR.MINT(122).EQ.3.OR.MINT(122).EQ.10.OR.MINT(122).EQ.11)) THEN
4121           MINT(41)=1
4122           MINT(45)=1
4123         ELSEIF((MSTP(14).EQ.20.OR.MSTP(14).EQ.30).AND.(MINT(122).EQ.4
4124      &  .OR.MINT(122).EQ.7.OR.MINT(122).EQ.12.OR.MINT(122).EQ.13)) THEN
4125           MINT(42)=1
4126           MINT(46)=1
4127         ELSEIF(MSTP(14).EQ.25.AND.MINT(122).EQ.2) THEN
4128           MINT(41)=1
4129           MINT(45)=1
4130         ELSEIF(MSTP(14).EQ.25.AND.MINT(122).EQ.3) THEN
4131           MINT(42)=1
4132           MINT(46)=1
4133         ENDIF
4134       ELSEIF(MINT(11).EQ.22.OR.MINT(12).EQ.22) THEN
4135         IF(MSTP(14).EQ.26.OR.MSTP(14).EQ.28.OR.MINT(122).EQ.4) THEN
4136           IF(MINT(11).EQ.22) THEN
4137             MINT(41)=1
4138             MINT(45)=1
4139           ELSE
4140             MINT(42)=1
4141             MINT(46)=1
4142           ENDIF
4143         ENDIF 
4144         IF(MINT(123).GE.4.AND.MINT(123).LE.7) CALL PYERRM(26,
4145      &  '(PYINPR:) unallowed MSTP(14) code for single photon')
4146       ENDIF
4147  
4148 C...Flavour information on combination of incoming particles.
4149       MINT(43)=2*MINT(41)+MINT(42)-2
4150       MINT(44)=MINT(43)
4151       IF(MINT(123).LE.0) THEN
4152         IF(MINT(11).EQ.22) MINT(43)=MINT(43)+2
4153         IF(MINT(12).EQ.22) MINT(43)=MINT(43)+1
4154       ELSEIF(MINT(123).LE.3) THEN
4155         IF(MINT(11).EQ.22) MINT(44)=MINT(44)-2
4156         IF(MINT(12).EQ.22) MINT(44)=MINT(44)-1
4157       ELSEIF(MINT(11).EQ.22.AND.MINT(12).EQ.22) THEN
4158         MINT(43)=4
4159         MINT(44)=1
4160       ENDIF
4161       MINT(47)=2*MIN(2,MINT(45))+MIN(2,MINT(46))-2
4162       IF(MIN(MINT(45),MINT(46)).EQ.3) MINT(47)=5
4163       IF(MINT(45).EQ.1.AND.MINT(46).EQ.3) MINT(47)=6
4164       IF(MINT(45).EQ.3.AND.MINT(46).EQ.1) MINT(47)=7
4165       MINT(50)=0
4166       IF(MINT(41).EQ.2.AND.MINT(42).EQ.2) MINT(50)=1
4167       MINT(107)=0
4168       MINT(108)=0
4169       IF(MINT(121).EQ.9.OR.MINT(121).EQ.13) THEN
4170         IF((MINT(122).GE.4.AND.MINT(122).LE.6).OR.MINT(122).EQ.12) 
4171      &  MINT(107)=2
4172         IF((MINT(122).GE.7.AND.MINT(122).LE.9).OR.MINT(122).EQ.13) 
4173      &  MINT(107)=3
4174         IF(MINT(122).EQ.10.OR.MINT(122).EQ.11) MINT(107)=4
4175         IF(MINT(122).EQ.2.OR.MINT(122).EQ.5.OR.MINT(122).EQ.8.OR.
4176      &  MINT(122).EQ.10) MINT(108)=2
4177         IF(MINT(122).EQ.3.OR.MINT(122).EQ.6.OR.MINT(122).EQ.9.OR.
4178      &  MINT(122).EQ.11) MINT(108)=3
4179         IF(MINT(122).EQ.12.OR.MINT(122).EQ.13) MINT(108)=4
4180       ELSEIF(MINT(121).EQ.4.AND.MSTP(14).EQ.25) THEN
4181         IF(MINT(122).GE.3) MINT(107)=1
4182         IF(MINT(122).EQ.2.OR.MINT(122).EQ.4) MINT(108)=1
4183       ELSEIF(MINT(121).EQ.2) THEN
4184         IF(MINT(122).EQ.2.AND.MINT(11).EQ.22) MINT(107)=1
4185         IF(MINT(122).EQ.2.AND.MINT(12).EQ.22) MINT(108)=1
4186       ELSE
4187         IF(MINT(11).EQ.22) THEN
4188           MINT(107)=MINT(123)
4189           IF(MINT(123).GE.4) MINT(107)=0
4190           IF(MINT(123).EQ.7) MINT(107)=2
4191           IF(MSTP(14).EQ.26.OR.MSTP(14).EQ.27) MINT(107)=4
4192           IF(MSTP(14).EQ.28) MINT(107)=2
4193           IF(MSTP(14).EQ.29) MINT(107)=3
4194           IF(MSTP(14).EQ.30.AND.MINT(121).EQ.4.AND.MINT(122).EQ.4) 
4195      &    MINT(107)=4
4196         ENDIF
4197         IF(MINT(12).EQ.22) THEN
4198           MINT(108)=MINT(123)
4199           IF(MINT(123).GE.4) MINT(108)=MINT(123)-3
4200           IF(MINT(123).EQ.7) MINT(108)=3
4201           IF(MSTP(14).EQ.26) MINT(108)=2
4202           IF(MSTP(14).EQ.27) MINT(108)=3
4203           IF(MSTP(14).EQ.28.OR.MSTP(14).EQ.29) MINT(108)=4
4204           IF(MSTP(14).EQ.30.AND.MINT(121).EQ.4.AND.MINT(122).EQ.4) 
4205      &    MINT(108)=4
4206         ENDIF
4207         IF(MINT(11).EQ.22.AND.MINT(12).EQ.22.AND.(MSTP(14).EQ.14.OR.
4208      &  MSTP(14).EQ.17.OR.MSTP(14).EQ.18.OR.MSTP(14).EQ.23)) THEN
4209           MINTTP=MINT(107)
4210           MINT(107)=MINT(108)
4211           MINT(108)=MINTTP
4212         ENDIF
4213       ENDIF
4214       IF(MINT(15).EQ.22.AND.MINT(41).EQ.2) MINT(15)=0
4215       IF(MINT(16).EQ.22.AND.MINT(42).EQ.2) MINT(16)=0
4216  
4217 C...Select default processes according to incoming beams
4218 C...(already done for gamma-p and gamma-gamma with 
4219 C...MSTP(14) = 10, 20, 25 or 30).
4220       IF(MINT(121).GT.1) THEN
4221       ELSEIF(MSEL.EQ.1.OR.MSEL.EQ.2) THEN
4222  
4223         IF(MINT(43).EQ.1) THEN
4224 C...Lepton + lepton -> gamma/Z0 or W.
4225           IF(MINT(11)+MINT(12).EQ.0) MSUB(1)=1
4226           IF(MINT(11)+MINT(12).NE.0) MSUB(2)=1
4227  
4228         ELSEIF(MINT(43).LE.3.AND.MINT(123).EQ.0.AND.
4229      &    (MINT(11).EQ.22.OR.MINT(12).EQ.22)) THEN
4230 C...Unresolved photon + lepton: Compton scattering.
4231           MSUB(133)=1
4232           MSUB(134)=1
4233
4234         ELSEIF((MINT(123).EQ.8.OR.MINT(123).EQ.9).AND.(MINT(11).EQ.22
4235      &  .OR.MINT(12).EQ.22)) THEN
4236 C...DIS as pure gamma* + f -> f process.
4237           MSUB(99)=1  
4238  
4239         ELSEIF(MINT(43).LE.3) THEN
4240 C...Lepton + hadron: deep inelastic scattering.
4241           MSUB(10)=1
4242  
4243         ELSEIF(MINT(123).EQ.0.AND.MINT(11).EQ.22.AND.
4244      &    MINT(12).EQ.22) THEN
4245 C...Two unresolved photons: fermion pair production, 
4246 C...exclude lepton pairs.
4247           DO 150 ISUB=137,140
4248             MSUB(ISUB)=1
4249   150     CONTINUE
4250           DO 155 II=MDCY(22,2),MDCY(22,2)+MDCY(22,3)-1
4251             IF(IABS(KFDP(II,1)).GE.10) MDME(II,1)=MIN(0,MDME(II,1))
4252   155     CONTINUE
4253           PTMDIR=PTMRUN
4254           IF(MSTP(18).EQ.2) PTMDIR=PARP(15)
4255           IF(CKIN(3).LT.PTMRUN.OR.MSEL.EQ.2) CKIN(3)=PTMDIR
4256           CKIN(1)=MAX(CKIN(1),2D0*CKIN(3)) 
4257  
4258         ELSEIF((MINT(123).EQ.0.AND.(MINT(11).EQ.22.OR.MINT(12).EQ.22))
4259      &    .OR.(MINT(123).GE.4.AND.MINT(123).LE.6.AND.MINT(11).EQ.22.AND.
4260      &    MINT(12).EQ.22)) THEN
4261 C...Unresolved photon + hadron: photon-parton scattering.
4262           DO 160 ISUB=131,136
4263             MSUB(ISUB)=1
4264   160     CONTINUE
4265  
4266         ELSEIF(MSEL.EQ.1) THEN
4267 C...High-pT QCD processes:
4268           MSUB(11)=1
4269           MSUB(12)=1
4270           MSUB(13)=1
4271           MSUB(28)=1
4272           MSUB(53)=1
4273           MSUB(68)=1
4274           PTMN=PTMRUN
4275           VINT(154)=PTMN
4276           IF(CKIN(3).LT.PTMN) MSUB(95)=1
4277           IF(MSUB(95).EQ.1.AND.MINT(50).EQ.0) MSUB(95)=0
4278  
4279         ELSE
4280 C...All QCD processes:
4281           MSUB(11)=1
4282           MSUB(12)=1
4283           MSUB(13)=1
4284           MSUB(28)=1
4285           MSUB(53)=1
4286           MSUB(68)=1
4287           MSUB(91)=1
4288           MSUB(92)=1
4289           MSUB(93)=1
4290           MSUB(94)=1
4291           MSUB(95)=1
4292         ENDIF
4293  
4294       ELSEIF(MSEL.GE.4.AND.MSEL.LE.8) THEN
4295 C...Heavy quark production.
4296         MSUB(81)=1
4297         MSUB(82)=1
4298         MSUB(84)=1
4299         DO 170 J=1,MIN(8,MDCY(21,3))
4300           MDME(MDCY(21,2)+J-1,1)=0
4301   170   CONTINUE
4302         MDME(MDCY(21,2)+MSEL-1,1)=1
4303         MSUB(85)=1
4304         DO 180 J=1,MIN(12,MDCY(22,3))
4305           MDME(MDCY(22,2)+J-1,1)=0
4306   180   CONTINUE
4307         MDME(MDCY(22,2)+MSEL-1,1)=1
4308  
4309       ELSEIF(MSEL.EQ.10) THEN
4310 C...Prompt photon production:
4311         MSUB(14)=1
4312         MSUB(18)=1
4313         MSUB(29)=1
4314  
4315       ELSEIF(MSEL.EQ.11) THEN
4316 C...Z0/gamma* production:
4317         MSUB(1)=1
4318  
4319       ELSEIF(MSEL.EQ.12) THEN
4320 C...W+/- production:
4321         MSUB(2)=1
4322  
4323       ELSEIF(MSEL.EQ.13) THEN
4324 C...Z0 + jet:
4325         MSUB(15)=1
4326         MSUB(30)=1
4327  
4328       ELSEIF(MSEL.EQ.14) THEN
4329 C...W+/- + jet:
4330         MSUB(16)=1
4331         MSUB(31)=1
4332  
4333       ELSEIF(MSEL.EQ.15) THEN
4334 C...Z0 & W+/- pair production:
4335         MSUB(19)=1
4336         MSUB(20)=1
4337         MSUB(22)=1
4338         MSUB(23)=1
4339         MSUB(25)=1
4340  
4341       ELSEIF(MSEL.EQ.16) THEN
4342 C...h0 production:
4343         MSUB(3)=1
4344         MSUB(102)=1
4345         MSUB(103)=1
4346         MSUB(123)=1
4347         MSUB(124)=1
4348  
4349       ELSEIF(MSEL.EQ.17) THEN
4350 C...h0 & Z0 or W+/- pair production:
4351         MSUB(24)=1
4352         MSUB(26)=1
4353  
4354       ELSEIF(MSEL.EQ.18) THEN
4355 C...h0 production; interesting processes in e+e-.
4356         MSUB(24)=1
4357         MSUB(103)=1
4358         MSUB(123)=1
4359         MSUB(124)=1
4360  
4361       ELSEIF(MSEL.EQ.19) THEN
4362 C...h0, H0 and A0 production; interesting processes in e+e-.
4363         MSUB(24)=1
4364         MSUB(103)=1
4365         MSUB(123)=1
4366         MSUB(124)=1
4367         MSUB(153)=1
4368         MSUB(171)=1
4369         MSUB(173)=1
4370         MSUB(174)=1
4371         MSUB(158)=1
4372         MSUB(176)=1
4373         MSUB(178)=1
4374         MSUB(179)=1
4375  
4376       ELSEIF(MSEL.EQ.21) THEN
4377 C...Z'0 production:
4378         MSUB(141)=1
4379  
4380       ELSEIF(MSEL.EQ.22) THEN
4381 C...W'+/- production:
4382         MSUB(142)=1
4383  
4384       ELSEIF(MSEL.EQ.23) THEN
4385 C...H+/- production:
4386         MSUB(143)=1
4387  
4388       ELSEIF(MSEL.EQ.24) THEN
4389 C...R production:
4390         MSUB(144)=1
4391  
4392       ELSEIF(MSEL.EQ.25) THEN
4393 C...LQ (leptoquark) production.
4394         MSUB(145)=1
4395         MSUB(162)=1
4396         MSUB(163)=1
4397         MSUB(164)=1
4398  
4399       ELSEIF(MSEL.GE.35.AND.MSEL.LE.38) THEN
4400 C...Production of one heavy quark (W exchange):
4401         MSUB(83)=1
4402         DO 190 J=1,MIN(8,MDCY(21,3))
4403           MDME(MDCY(21,2)+J-1,1)=0
4404   190   CONTINUE
4405         MDME(MDCY(21,2)+MSEL-31,1)=1
4406  
4407 CMRENNA++Define SUSY alternatives.
4408       ELSEIF(MSEL.EQ.39) THEN
4409 C...Turn on all SUSY processes.
4410         IF(MINT(43).EQ.4) THEN
4411 C...Hadron-hadron processes.
4412           DO 200 I=201,301
4413             IF(ISET(I).GE.0) MSUB(I)=1
4414   200     CONTINUE
4415         ELSEIF(MINT(43).EQ.1) THEN
4416 C...Lepton-lepton processes: QED production of squarks.
4417           DO 210 I=201,214
4418             MSUB(I)=1
4419   210     CONTINUE
4420           MSUB(210)=0
4421           MSUB(211)=0
4422           MSUB(212)=0
4423           DO 220 I=216,228
4424             MSUB(I)=1
4425   220     CONTINUE
4426           DO 230 I=261,263
4427             MSUB(I)=1
4428   230     CONTINUE
4429           MSUB(277)=1
4430           MSUB(278)=1
4431         ENDIF
4432  
4433       ELSEIF(MSEL.EQ.40) THEN
4434 C...Gluinos and squarks.
4435         IF(MINT(43).EQ.4) THEN
4436           MSUB(243)=1
4437           MSUB(244)=1
4438           MSUB(258)=1
4439           MSUB(259)=1
4440           MSUB(261)=1
4441           MSUB(262)=1
4442           MSUB(264)=1
4443           MSUB(265)=1
4444           DO 240 I=271,296
4445             MSUB(I)=1
4446   240     CONTINUE
4447         ELSEIF(MINT(43).EQ.1) THEN
4448           MSUB(277)=1
4449           MSUB(278)=1
4450         ENDIF
4451  
4452       ELSEIF(MSEL.EQ.41) THEN
4453 C...Stop production.
4454         MSUB(261)=1
4455         MSUB(262)=1
4456         MSUB(263)=1
4457         IF(MINT(43).EQ.4) THEN
4458           MSUB(264)=1
4459           MSUB(265)=1
4460         ENDIF
4461  
4462       ELSEIF(MSEL.EQ.42) THEN
4463 C...Slepton production.
4464         DO 250 I=201,214
4465           MSUB(I)=1
4466   250   CONTINUE
4467         IF(MINT(43).NE.4) THEN
4468           MSUB(210)=0
4469           MSUB(211)=0
4470           MSUB(212)=0
4471         ENDIF
4472  
4473       ELSEIF(MSEL.EQ.43) THEN
4474 C...Neutralino/Chargino + Gluino/Squark.
4475         IF(MINT(43).EQ.4) THEN
4476           DO 260 I=237,242
4477             MSUB(I)=1
4478   260     CONTINUE
4479           DO 270 I=246,257
4480             MSUB(I)=1
4481   270     CONTINUE
4482         ENDIF
4483  
4484       ELSEIF(MSEL.EQ.44) THEN
4485 C...Neutralino/Chargino pair production.
4486         IF(MINT(43).EQ.4) THEN
4487           DO 280 I=216,236
4488             MSUB(I)=1
4489   280     CONTINUE
4490         ELSEIF(MINT(43).EQ.1) THEN
4491           DO 290 I=216,228
4492             MSUB(I)=1
4493   290     CONTINUE
4494         ENDIF
4495  
4496       ELSEIF(MSEL.EQ.45) THEN
4497 C...Sbottom production.
4498         MSUB(287)=1
4499         MSUB(288)=1
4500         IF(MINT(43).EQ.4) THEN
4501           DO 300 I=281,296
4502             MSUB(I)=1
4503   300     CONTINUE
4504         ENDIF
4505
4506       ELSEIF(MSEL.EQ.50) THEN
4507         DO 305 I=361,368
4508           MSUB(I)=1
4509   305   CONTINUE
4510         IF(MINT(43).EQ.4) THEN
4511           DO 307 I=370,377
4512             MSUB(I)=1
4513   307     CONTINUE
4514         ENDIF
4515
4516       ENDIF
4517  
4518 C...Find heaviest new quark flavour allowed in processes 81-84.
4519       KFLQM=1
4520       DO 310 I=1,MIN(8,MDCY(21,3))
4521         IDC=I+MDCY(21,2)-1
4522         IF(MDME(IDC,1).LE.0) GOTO 310
4523         KFLQM=I
4524   310 CONTINUE
4525       IF(MSTP(7).GE.1.AND.MSTP(7).LE.8.AND.(MSEL.LE.3.OR.MSEL.GE.9))
4526      &KFLQM=MSTP(7)
4527       MINT(55)=KFLQM
4528       KFPR(81,1)=KFLQM
4529       KFPR(81,2)=KFLQM
4530       KFPR(82,1)=KFLQM
4531       KFPR(82,2)=KFLQM
4532       KFPR(83,1)=KFLQM
4533       KFPR(84,1)=KFLQM
4534       KFPR(84,2)=KFLQM
4535  
4536 C...Find heaviest new fermion flavour allowed in process 85.
4537       KFLFM=1
4538       DO 320 I=1,MIN(12,MDCY(22,3))
4539         IDC=I+MDCY(22,2)-1
4540         IF(MDME(IDC,1).LE.0) GOTO 320
4541         KFLFM=KFDP(IDC,1)
4542   320 CONTINUE
4543       IF(((MSTP(7).GE.1.AND.MSTP(7).LE.8).OR.(MSTP(7).GE.11.AND.
4544      &MSTP(7).LE.18)).AND.(MSEL.LE.3.OR.MSEL.GE.9)) KFLFM=MSTP(7)
4545       MINT(56)=KFLFM
4546       KFPR(85,1)=KFLFM
4547       KFPR(85,2)=KFLFM
4548  
4549       RETURN
4550       END
4551  
4552 C*********************************************************************
4553  
4554 C...PYXTOT
4555 C...Parametrizes total, elastic and diffractive cross-sections
4556 C...for different energies and beams. Donnachie-Landshoff for
4557 C...total and Schuler-Sjostrand for elastic and diffractive.
4558 C...Process code IPROC:
4559 C...=  1 : p + p;
4560 C...=  2 : pbar + p;
4561 C...=  3 : pi+ + p;
4562 C...=  4 : pi- + p;
4563 C...=  5 : pi0 + p;
4564 C...=  6 : phi + p;
4565 C...=  7 : J/psi + p;
4566 C...= 11 : rho + rho;
4567 C...= 12 : rho + phi;
4568 C...= 13 : rho + J/psi;
4569 C...= 14 : phi + phi;
4570 C...= 15 : phi + J/psi;
4571 C...= 16 : J/psi + J/psi;
4572 C...= 21 : gamma + p (DL);
4573 C...= 22 : gamma + p (VDM).
4574 C...= 23 : gamma + pi (DL);
4575 C...= 24 : gamma + pi (VDM);
4576 C...= 25 : gamma + gamma (DL);
4577 C...= 26 : gamma + gamma (VDM).
4578  
4579       SUBROUTINE PYXTOT
4580  
4581 C...Double precision and integer declarations.
4582       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
4583       IMPLICIT INTEGER(I-N)
4584       INTEGER PYK,PYCHGE,PYCOMP
4585 C...Commonblocks.
4586       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
4587       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
4588       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
4589       COMMON/PYINT1/MINT(400),VINT(400)
4590       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
4591       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
4592       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/,/PYINT5/,/PYINT7/
4593 C...Local arrays.
4594       DIMENSION NPROC(30),XPAR(30),YPAR(30),IHADA(20),IHADB(20),
4595      &PMHAD(4),BHAD(4),BETP(4),IFITSD(20),IFITDD(20),CEFFS(10,8),
4596      &CEFFD(10,9),SIGTMP(6,0:5)
4597  
4598 C...Common constants.
4599       DATA EPS/0.0808D0/, ETA/-0.4525D0/, ALP/0.25D0/, CRES/2D0/,
4600      &PMRC/1.062D0/, SMP/0.880D0/, FACEL/0.0511D0/, FACSD/0.0336D0/,
4601      &FACDD/0.0084D0/
4602  
4603 C...Number of multiple processes to be evaluated (= 0 : undefined).
4604       DATA NPROC/7*1,3*0,6*1,4*0,4*3,2*6,4*0/
4605 C...X and Y parameters of sigmatot = X * s**epsilon + Y * s**(-eta).
4606       DATA XPAR/2*21.70D0,3*13.63D0,10.01D0,0.970D0,3*0D0,
4607      &8.56D0,6.29D0,0.609D0,4.62D0,0.447D0,0.0434D0,4*0D0,
4608      &0.0677D0,0.0534D0,0.0425D0,0.0335D0,2.11D-4,1.31D-4,4*0D0/
4609       DATA YPAR/
4610      &56.08D0,98.39D0,27.56D0,36.02D0,31.79D0,-1.51D0,-0.146D0,3*0D0,
4611      &13.08D0,-0.62D0,-0.060D0,0.030D0,-0.0028D0,0.00028D0,4*0D0,
4612      &0.129D0,0.115D0,0.081D0,0.072D0,2.15D-4,1.70D-4,4*0D0/
4613  
4614 C...Beam and target hadron class:
4615 C...= 1 : p/n ; = 2 : pi/rho/omega; = 3 : phi; = 4 : J/psi.
4616       DATA IHADA/2*1,3*2,3,4,3*0,3*2,2*3,4,4*0/
4617       DATA IHADB/7*1,3*0,2,3,4,3,2*4,4*0/
4618 C...Characteristic class masses, slope parameters, beta = sqrt(X).
4619       DATA PMHAD/0.938D0,0.770D0,1.020D0,3.097D0/
4620       DATA BHAD/2.3D0,1.4D0,1.4D0,0.23D0/
4621       DATA BETP/4.658D0,2.926D0,2.149D0,0.208D0/
4622  
4623 C...Fitting constants used in parametrizations of diffractive results.
4624       DATA IFITSD/2*1,3*2,3,4,3*0,5,6,7,8,9,10,4*0/
4625       DATA IFITDD/2*1,3*2,3,4,3*0,5,6,7,8,9,10,4*0/
4626       DATA ((CEFFS(J1,J2),J2=1,8),J1=1,10)/
4627      &0.213D0, 0.0D0, -0.47D0, 150D0, 0.213D0, 0.0D0, -0.47D0, 150D0,
4628      &0.213D0, 0.0D0, -0.47D0, 150D0, 0.267D0, 0.0D0, -0.47D0, 100D0,
4629      &0.213D0, 0.0D0, -0.47D0, 150D0, 0.232D0, 0.0D0, -0.47D0, 110D0,
4630      &0.213D0, 7.0D0, -0.55D0, 800D0, 0.115D0, 0.0D0, -0.47D0, 110D0,
4631      &0.267D0, 0.0D0, -0.46D0,  75D0, 0.267D0, 0.0D0, -0.46D0,  75D0,
4632      &0.232D0, 0.0D0, -0.46D0,  85D0, 0.267D0, 0.0D0, -0.48D0, 100D0,
4633      &0.115D0, 0.0D0, -0.50D0,  90D0, 0.267D0, 6.0D0, -0.56D0, 420D0,
4634      &0.232D0, 0.0D0, -0.48D0, 110D0, 0.232D0, 0.0D0, -0.48D0, 110D0,
4635      &0.115D0, 0.0D0, -0.52D0, 120D0, 0.232D0, 6.0D0, -0.56D0, 470D0,
4636      &0.115D0, 5.5D0, -0.58D0, 570D0, 0.115D0, 5.5D0, -0.58D0, 570D0/
4637       DATA ((CEFFD(J1,J2),J2=1,9),J1=1,10)/
4638      &3.11D0, -7.34D0,  9.71D0, 0.068D0, -0.42D0,  1.31D0,
4639      &-1.37D0,  35.0D0,  118D0,  3.11D0, -7.10D0,  10.6D0,
4640      &0.073D0, -0.41D0, 1.17D0, -1.41D0,  31.6D0,   95D0,
4641      &3.12D0, -7.43D0,  9.21D0, 0.067D0, -0.44D0,  1.41D0,
4642      &-1.35D0,  36.5D0,  132D0,  3.13D0, -8.18D0, -4.20D0,
4643      &0.056D0, -0.71D0, 3.12D0, -1.12D0,  55.2D0, 1298D0,
4644      &3.11D0, -6.90D0,  11.4D0, 0.078D0, -0.40D0,  1.05D0,
4645      &-1.40D0,  28.4D0,   78D0,  3.11D0, -7.13D0,  10.0D0,
4646      &0.071D0, -0.41D0, 1.23D0, -1.34D0,  33.1D0,  105D0,
4647      &3.12D0, -7.90D0, -1.49D0, 0.054D0, -0.64D0,  2.72D0,
4648      &-1.13D0,  53.1D0,  995D0,  3.11D0, -7.39D0,  8.22D0,
4649      &0.065D0, -0.44D0, 1.45D0, -1.36D0,  38.1D0,  148D0,
4650      &3.18D0, -8.95D0, -3.37D0, 0.057D0, -0.76D0,  3.32D0,
4651      &-1.12D0,  55.6D0, 1472D0,  4.18D0, -29.2D0,  56.2D0,
4652      &0.074D0, -1.36D0, 6.67D0, -1.14D0, 116.2D0, 6532D0/
4653  
4654 C...Parameters. Combinations of the energy.
4655       AEM=PARU(101)
4656       PMTH=PARP(102)
4657       S=VINT(2)
4658       SRT=VINT(1)
4659       SEPS=S**EPS
4660       SETA=S**ETA
4661       SLOG=LOG(S)
4662  
4663 C...Ratio of gamma/pi (for rescaling in parton distributions).
4664       VINT(281)=(XPAR(22)*SEPS+YPAR(22)*SETA)/
4665      &(XPAR(5)*SEPS+YPAR(5)*SETA)
4666       VINT(317)=1D0 
4667       IF(MINT(50).NE.1) RETURN
4668  
4669 C...Order flavours of incoming particles: KF1 < KF2.
4670       IF(IABS(MINT(11)).LE.IABS(MINT(12))) THEN
4671         KF1=IABS(MINT(11))
4672         KF2=IABS(MINT(12))
4673         IORD=1
4674       ELSE
4675         KF1=IABS(MINT(12))
4676         KF2=IABS(MINT(11))
4677         IORD=2
4678       ENDIF
4679       ISGN12=ISIGN(1,MINT(11)*MINT(12))
4680  
4681 C...Find process number (for lookup tables).
4682       IF(KF1.GT.1000) THEN
4683         IPROC=1
4684         IF(ISGN12.LT.0) IPROC=2
4685       ELSEIF(KF1.GT.100.AND.KF2.GT.1000) THEN
4686         IPROC=3
4687         IF(ISGN12.LT.0) IPROC=4
4688         IF(KF1.EQ.111) IPROC=5
4689       ELSEIF(KF1.GT.100) THEN
4690         IPROC=11
4691       ELSEIF(KF2.GT.1000) THEN
4692         IPROC=21
4693         IF(MINT(123).EQ.2.OR.MINT(123).EQ.3) IPROC=22
4694       ELSEIF(KF2.GT.100) THEN
4695         IPROC=23
4696         IF(MINT(123).EQ.2.OR.MINT(123).EQ.3) IPROC=24
4697       ELSE
4698         IPROC=25
4699         IF(MINT(123).EQ.2.OR.MINT(123).EQ.3.OR.MINT(123).EQ.7) IPROC=26
4700       ENDIF
4701  
4702 C... Number of multiple processes to be stored; beam/target side.
4703       NPR=NPROC(IPROC)
4704       MINT(101)=1
4705       MINT(102)=1
4706       IF(NPR.EQ.3) THEN
4707         MINT(100+IORD)=4
4708       ELSEIF(NPR.EQ.6) THEN
4709         MINT(101)=4
4710         MINT(102)=4
4711       ENDIF
4712       N1=0
4713       IF(MINT(101).EQ.4) N1=4
4714       N2=0
4715       IF(MINT(102).EQ.4) N2=4
4716  
4717 C...Do not do any more for user-set or undefined cross-sections.
4718       IF(MSTP(31).LE.0) RETURN
4719       IF(NPR.EQ.0) CALL PYERRM(26,
4720      &'(PYXTOT:) cross section for this process not yet implemented')
4721  
4722 C...Parameters. Combinations of the energy.
4723       AEM=PARU(101)
4724       PMTH=PARP(102)
4725       S=VINT(2)
4726       SRT=VINT(1)
4727       SEPS=S**EPS
4728       SETA=S**ETA
4729       SLOG=LOG(S)
4730  
4731 C...Loop over multiple processes (for VDM).
4732       DO 110 I=1,NPR
4733         IF(NPR.EQ.1) THEN
4734           IPR=IPROC
4735         ELSEIF(NPR.EQ.3) THEN
4736           IPR=I+4
4737           IF(KF2.LT.1000) IPR=I+10
4738         ELSEIF(NPR.EQ.6) THEN
4739           IPR=I+10
4740         ENDIF
4741  
4742 C...Evaluate hadron species, mass, slope contribution and fit number.
4743         IHA=IHADA(IPR)
4744         IHB=IHADB(IPR)
4745         PMA=PMHAD(IHA)
4746         PMB=PMHAD(IHB)
4747         BHA=BHAD(IHA)
4748         BHB=BHAD(IHB)
4749         ISD=IFITSD(IPR)
4750         IDD=IFITDD(IPR)
4751  
4752 C...Skip if energy too low relative to masses.
4753         DO 100 J=0,5
4754           SIGTMP(I,J)=0D0
4755   100   CONTINUE
4756         IF(SRT.LT.PMA+PMB+PARP(104)) GOTO 110
4757  
4758 C...Total cross-section. Elastic slope parameter and cross-section.
4759         SIGTMP(I,0)=XPAR(IPR)*SEPS+YPAR(IPR)*SETA
4760         BEL=2D0*BHA+2D0*BHB+4D0*SEPS-4.2D0
4761         SIGTMP(I,1)=FACEL*SIGTMP(I,0)**2/BEL
4762  
4763 C...Diffractive scattering A + B -> X + B.
4764         BSD=2D0*BHB
4765         SQML=(PMA+PMTH)**2
4766         SQMU=S*CEFFS(ISD,1)+CEFFS(ISD,2)
4767         SUM1=LOG((BSD+2D0*ALP*LOG(S/SQML))/
4768      &  (BSD+2D0*ALP*LOG(S/SQMU)))/(2D0*ALP)
4769         BXB=CEFFS(ISD,3)+CEFFS(ISD,4)/S
4770         SUM2=CRES*LOG(1D0+((PMA+PMRC)/(PMA+PMTH))**2)/
4771      &  (BSD+2D0*ALP*LOG(S/((PMA+PMTH)*(PMA+PMRC)))+BXB)
4772         SIGTMP(I,2)=FACSD*XPAR(IPR)*BETP(IHB)*MAX(0D0,SUM1+SUM2)
4773  
4774 C...Diffractive scattering A + B -> A + X.
4775         BSD=2D0*BHA
4776         SQML=(PMB+PMTH)**2
4777         SQMU=S*CEFFS(ISD,5)+CEFFS(ISD,6)
4778         SUM1=LOG((BSD+2D0*ALP*LOG(S/SQML))/
4779      &  (BSD+2D0*ALP*LOG(S/SQMU)))/(2D0*ALP)
4780         BAX=CEFFS(ISD,7)+CEFFS(ISD,8)/S
4781         SUM2=CRES*LOG(1D0+((PMB+PMRC)/(PMB+PMTH))**2)/
4782      &  (BSD+2D0*ALP*LOG(S/((PMB+PMTH)*(PMB+PMRC)))+BAX)
4783         SIGTMP(I,3)=FACSD*XPAR(IPR)*BETP(IHA)*MAX(0D0,SUM1+SUM2)
4784  
4785 C...Order single diffractive correctly.
4786         IF(IORD.EQ.2) THEN
4787           SIGSAV=SIGTMP(I,2)
4788           SIGTMP(I,2)=SIGTMP(I,3)
4789           SIGTMP(I,3)=SIGSAV
4790         ENDIF
4791  
4792 C...Double diffractive scattering A + B -> X1 + X2.
4793         YEFF=LOG(S*SMP/((PMA+PMTH)*(PMB+PMTH))**2)
4794         DEFF=CEFFD(IDD,1)+CEFFD(IDD,2)/SLOG+CEFFD(IDD,3)/SLOG**2
4795         SUM1=DEFF+YEFF*(LOG(MAX(1D-10,YEFF/DEFF))-1D0)/(2D0*ALP)
4796         IF(YEFF.LE.0) SUM1=0D0
4797         SQMU=S*(CEFFD(IDD,4)+CEFFD(IDD,5)/SLOG+CEFFD(IDD,6)/SLOG**2)
4798         SLUP=LOG(MAX(1.1D0,S/(ALP*(PMA+PMTH)**2*(PMB+PMTH)*(PMB+PMRC))))
4799         SLDN=LOG(MAX(1.1D0,S/(ALP*SQMU*(PMB+PMTH)*(PMB+PMRC))))
4800         SUM2=CRES*LOG(1D0+((PMB+PMRC)/(PMB+PMTH))**2)*LOG(SLUP/SLDN)/
4801      &  (2D0*ALP)
4802         SLUP=LOG(MAX(1.1D0,S/(ALP*(PMB+PMTH)**2*(PMA+PMTH)*(PMA+PMRC))))
4803         SLDN=LOG(MAX(1.1D0,S/(ALP*SQMU*(PMA+PMTH)*(PMA+PMRC))))
4804         SUM3=CRES*LOG(1D0+((PMA+PMRC)/(PMA+PMTH))**2)*LOG(SLUP/SLDN)/
4805      &  (2D0*ALP)
4806         BXX=CEFFD(IDD,7)+CEFFD(IDD,8)/SRT+CEFFD(IDD,9)/S
4807         SLRR=LOG(S/(ALP*(PMA+PMTH)*(PMA+PMRC)*(PMB+PMTH)*(PMB*PMRC)))
4808         SUM4=CRES**2*LOG(1D0+((PMA+PMRC)/(PMA+PMTH))**2)*
4809      &  LOG(1D0+((PMB+PMRC)/(PMB+PMTH))**2)/MAX(0.1D0,2D0*ALP*SLRR+BXX)
4810         SIGTMP(I,4)=FACDD*XPAR(IPR)*MAX(0D0,SUM1+SUM2+SUM3+SUM4)
4811  
4812 C...Non-diffractive by unitarity.
4813         SIGTMP(I,5)=SIGTMP(I,0)-SIGTMP(I,1)-SIGTMP(I,2)-SIGTMP(I,3)-
4814      &  SIGTMP(I,4)
4815   110 CONTINUE
4816  
4817 C...Put temporary results in output array: only one process.
4818       IF(MINT(101).EQ.1.AND.MINT(102).EQ.1) THEN
4819         DO 120 J=0,5
4820           SIGT(0,0,J)=SIGTMP(1,J)
4821   120   CONTINUE
4822  
4823 C...Beam multiple processes.
4824       ELSEIF(MINT(101).EQ.4.AND.MINT(102).EQ.1) THEN
4825         IF(MINT(107).EQ.2) THEN
4826           VINT(317)=(PMHAD(2)**2/(PMHAD(2)**2+VINT(307)))**2
4827         ELSE
4828           VINT(317)=16D0*PARP(15)**2*VINT(154)**2/
4829      &    ((4D0*PARP(15)**2+VINT(307))*(4D0*VINT(154)**2+VINT(307)))
4830         ENDIF
4831         IF(MSTP(20).GT.0) THEN
4832           VINT(317)=VINT(317)*(VINT(2)/(VINT(2)+VINT(307)))**MSTP(20)
4833         ENDIF
4834         DO 140 I=1,4
4835           IF(MINT(107).EQ.2) THEN
4836             CONV=(AEM/PARP(160+I))*VINT(317)
4837           ELSEIF(VINT(154).GT.PARP(15)) THEN
4838             CONV=(AEM/PARU(1))*(KCHG(I,1)/3D0)**2*PARP(18)**2*
4839      &      (1D0/PARP(15)**2-1D0/VINT(154)**2)*VINT(317)
4840           ELSE
4841             CONV=0D0
4842           ENDIF
4843           I1=MAX(1,I-1)
4844           DO 130 J=0,5
4845             SIGT(I,0,J)=CONV*SIGTMP(I1,J)
4846   130     CONTINUE
4847   140   CONTINUE
4848         DO 150 J=0,5
4849           SIGT(0,0,J)=SIGT(1,0,J)+SIGT(2,0,J)+SIGT(3,0,J)+SIGT(4,0,J)
4850   150   CONTINUE
4851  
4852 C...Target multiple processes.
4853       ELSEIF(MINT(101).EQ.1.AND.MINT(102).EQ.4) THEN
4854         IF(MINT(108).EQ.2) THEN
4855           VINT(317)=(PMHAD(2)**2/(PMHAD(2)**2+VINT(308)))**2
4856         ELSE
4857           VINT(317)=16D0*PARP(15)**2*VINT(154)**2/
4858      &    ((4D0*PARP(15)**2+VINT(308))*(4D0*VINT(154)**2+VINT(308)))
4859         ENDIF
4860         IF(MSTP(20).GT.0) THEN
4861           VINT(317)=VINT(317)*(VINT(2)/(VINT(2)+VINT(308)))**MSTP(20)
4862         ENDIF
4863         DO 170 I=1,4
4864           IF(MINT(108).EQ.2) THEN
4865             CONV=(AEM/PARP(160+I))*VINT(317)
4866           ELSEIF(VINT(154).GT.PARP(15)) THEN
4867             CONV=(AEM/PARU(1))*(KCHG(I,1)/3D0)**2*PARP(18)**2*
4868      &      (1D0/PARP(15)**2-1D0/VINT(154)**2)*VINT(317)
4869           ELSE
4870             CONV=0D0
4871           ENDIF
4872           IV=MAX(1,I-1)
4873           DO 160 J=0,5
4874             SIGT(0,I,J)=CONV*SIGTMP(IV,J)
4875   160     CONTINUE
4876   170   CONTINUE
4877         DO 180 J=0,5
4878           SIGT(0,0,J)=SIGT(0,1,J)+SIGT(0,2,J)+SIGT(0,3,J)+SIGT(0,4,J)
4879   180   CONTINUE
4880  
4881 C...Both beam and target multiple processes.
4882       ELSE
4883         IF(MINT(107).EQ.2) THEN
4884           VINT(317)=(PMHAD(2)**2/(PMHAD(2)**2+VINT(307)))**2
4885         ELSE
4886           VINT(317)=16D0*PARP(15)**2*VINT(154)**2/
4887      &    ((4D0*PARP(15)**2+VINT(307))*(4D0*VINT(154)**2+VINT(307)))
4888         ENDIF
4889         IF(MINT(108).EQ.2) THEN
4890           VINT(317)=VINT(317)*(PMHAD(2)**2/(PMHAD(2)**2+VINT(308)))**2
4891         ELSE
4892           VINT(317)=VINT(317)*16D0*PARP(15)**2*VINT(154)**2/
4893      &    ((4D0*PARP(15)**2+VINT(308))*(4D0*VINT(154)**2+VINT(308)))
4894         ENDIF
4895         IF(MSTP(20).GT.0) THEN
4896           VINT(317)=VINT(317)*(VINT(2)/(VINT(2)+VINT(307)+
4897      &    VINT(308)))**MSTP(20)
4898         ENDIF
4899         DO 210 I1=1,4
4900           DO 200 I2=1,4
4901             IF(MINT(107).EQ.2) THEN
4902               CONV=(AEM/PARP(160+I1))*VINT(317)
4903             ELSEIF(VINT(154).GT.PARP(15)) THEN
4904               CONV=(AEM/PARU(1))*(KCHG(I1,1)/3D0)**2*PARP(18)**2*
4905      &        (1D0/PARP(15)**2-1D0/VINT(154)**2)*VINT(317)
4906             ELSE
4907               CONV=0D0
4908             ENDIF
4909             IF(MINT(108).EQ.2) THEN
4910               CONV=CONV*(AEM/PARP(160+I2))
4911             ELSEIF(VINT(154).GT.PARP(15)) THEN
4912               CONV=CONV*(AEM/PARU(1))*(KCHG(I2,1)/3D0)**2*PARP(18)**2*
4913      &        (1D0/PARP(15)**2-1D0/VINT(154)**2)
4914             ELSE
4915               CONV=0D0
4916             ENDIF
4917             IF(I1.LE.2) THEN
4918               IV=MAX(1,I2-1)
4919             ELSEIF(I2.LE.2) THEN
4920               IV=MAX(1,I1-1)
4921             ELSEIF(I1.EQ.I2) THEN
4922               IV=2*I1-2
4923             ELSE
4924               IV=5
4925             ENDIF
4926             DO 190 J=0,5
4927               JV=J
4928               IF(I2.GT.I1.AND.(J.EQ.2.OR.J.EQ.3)) JV=5-J
4929               SIGT(I1,I2,J)=CONV*SIGTMP(IV,JV)
4930   190       CONTINUE
4931   200     CONTINUE
4932   210   CONTINUE
4933         DO 230 J=0,5
4934           DO 220 I=1,4
4935             SIGT(I,0,J)=SIGT(I,1,J)+SIGT(I,2,J)+SIGT(I,3,J)+SIGT(I,4,J)
4936             SIGT(0,I,J)=SIGT(1,I,J)+SIGT(2,I,J)+SIGT(3,I,J)+SIGT(4,I,J)
4937   220     CONTINUE
4938           SIGT(0,0,J)=SIGT(1,0,J)+SIGT(2,0,J)+SIGT(3,0,J)+SIGT(4,0,J)
4939   230   CONTINUE
4940       ENDIF
4941  
4942 C...Scale up uniformly for Donnachie-Landshoff parametrization.
4943       IF(IPROC.EQ.21.OR.IPROC.EQ.23.OR.IPROC.EQ.25) THEN
4944         RFAC=(XPAR(IPROC)*SEPS+YPAR(IPROC)*SETA)/SIGT(0,0,0)
4945         DO 260 I1=0,N1
4946           DO 250 I2=0,N2
4947             DO 240 J=0,5
4948               SIGT(I1,I2,J)=RFAC*SIGT(I1,I2,J)
4949   240       CONTINUE
4950   250     CONTINUE
4951   260   CONTINUE
4952       ENDIF
4953  
4954       RETURN
4955       END
4956  
4957 C*********************************************************************
4958  
4959 C...PYMAXI
4960 C...Finds optimal set of coefficients for kinematical variable selection
4961 C...and the maximum of the part of the differential cross-section used
4962 C...in the event weighting.
4963  
4964       SUBROUTINE PYMAXI
4965  
4966 C...Double precision and integer declarations.
4967       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
4968       IMPLICIT INTEGER(I-N)
4969       INTEGER PYK,PYCHGE,PYCOMP
4970 C...Parameter statement to help give large particle numbers.
4971       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
4972 C...Commonblocks.
4973       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
4974       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
4975       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
4976       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
4977       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
4978       COMMON/PYINT1/MINT(400),VINT(400)
4979       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
4980       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
4981       COMMON/PYINT4/MWID(500),WIDS(500,5)
4982       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
4983       COMMON/PYINT6/PROC(0:500)
4984       CHARACTER PROC*28
4985       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
4986       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
4987      &/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,/PYINT6/,/PYINT7/
4988 C...Local arrays, character variables and data.
4989       CHARACTER CVAR(4)*4
4990       DIMENSION NPTS(4),MVARPT(500,4),VINTPT(500,30),SIGSPT(500),
4991      &NAREL(7),WTREL(7),WTMAT(7,7),WTRELN(7),COEFU(7),COEFO(7),
4992      &IACCMX(4),SIGSMX(4),SIGSSM(3),PMMN(2)
4993       DATA CVAR/'tau ','tau''','y*  ','cth '/
4994       DATA SIGSSM/3*0D0/
4995  
4996 C...Initial values and loop over subprocesses.
4997       NPOSI=0
4998       VINT(143)=1D0
4999       VINT(144)=1D0
5000       XSEC(0,1)=0D0
5001       DO 460 ISUB=1,500
5002         MINT(1)=ISUB
5003         MINT(51)=0
5004  
5005 C...Find maximum weight factors for photon flux.
5006         IF(MSUB(ISUB).EQ.1.OR.(ISUB.GE.91.AND.ISUB.LE.100)) THEN
5007           IF(MINT(141).NE.0.OR.MINT(142).NE.0) CALL PYGAGA(2,WTGAGA)
5008         ENDIF 
5009
5010 C...Select subprocess to study: skip cases not applicable.
5011         IF(ISET(ISUB).EQ.11) THEN
5012           IF(MSUB(ISUB).NE.1) GOTO 460
5013           XSEC(ISUB,1)=1.00001D0*COEF(ISUB,1)
5014           IF(MINT(141).NE.0.OR.MINT(142).NE.0) XSEC(ISUB,1)=
5015      &    WTGAGA*XSEC(ISUB,1)
5016           NPOSI=NPOSI+1
5017           GOTO 450
5018         ELSEIF(ISUB.GE.91.AND.ISUB.LE.95) THEN
5019           CALL PYSIGH(NCHN,SIGS)
5020           XSEC(ISUB,1)=SIGS
5021           IF(MINT(141).NE.0.OR.MINT(142).NE.0) XSEC(ISUB,1)=
5022      &    WTGAGA*XSEC(ISUB,1)
5023           IF(MSUB(ISUB).NE.1) GOTO 460
5024           NPOSI=NPOSI+1
5025           GOTO 450
5026         ELSEIF(ISUB.EQ.99.AND.MSUB(ISUB).EQ.1) THEN
5027           CALL PYSIGH(NCHN,SIGS)
5028           XSEC(ISUB,1)=SIGS
5029           IF(MINT(141).NE.0.OR.MINT(142).NE.0) XSEC(ISUB,1)=
5030      &    WTGAGA*XSEC(ISUB,1)
5031           IF(XSEC(ISUB,1).EQ.0D0) THEN
5032             MSUB(ISUB)=0
5033           ELSE
5034             NPOSI=NPOSI+1
5035           ENDIF
5036           GOTO 450
5037         ELSEIF(ISUB.EQ.96) THEN
5038           IF(MINT(50).EQ.0) GOTO 460
5039           IF(MSUB(95).NE.1.AND.MSTP(81).LE.0.AND.MSTP(131).LE.0)
5040      &    GOTO 460
5041           IF(MINT(49).EQ.0.AND.MSTP(131).EQ.0) GOTO 460
5042         ELSEIF(ISUB.EQ.11.OR.ISUB.EQ.12.OR.ISUB.EQ.13.OR.ISUB.EQ.28.OR.
5043      &    ISUB.EQ.53.OR.ISUB.EQ.68) THEN
5044           IF(MSUB(ISUB).NE.1.OR.MSUB(95).EQ.1) GOTO 460
5045         ELSE
5046           IF(MSUB(ISUB).NE.1) GOTO 460
5047         ENDIF
5048         ISTSB=ISET(ISUB)
5049         IF(ISUB.EQ.96) ISTSB=2
5050         IF(MSTP(122).GE.2) WRITE(MSTU(11),5000) ISUB
5051         MWTXS=0
5052         IF(MSTP(142).GE.1.AND.ISUB.NE.96.AND.MSUB(91)+MSUB(92)+MSUB(93)+
5053      &  MSUB(94)+MSUB(95).EQ.0) MWTXS=1
5054  
5055 C...Find resonances (explicit or implicit in cross-section).
5056         MINT(72)=0
5057         KFR1=0
5058         IF(ISTSB.EQ.1.OR.ISTSB.EQ.3.OR.ISTSB.EQ.5) THEN
5059           KFR1=KFPR(ISUB,1)
5060         ELSEIF(ISUB.EQ.24.OR.ISUB.EQ.25.OR.ISUB.EQ.110.OR.ISUB.EQ.165
5061      &    .OR.ISUB.EQ.171.OR.ISUB.EQ.176) THEN
5062           KFR1=23
5063         ELSEIF(ISUB.EQ.23.OR.ISUB.EQ.26.OR.ISUB.EQ.166.OR.ISUB.EQ.172
5064      &    .OR.ISUB.EQ.177) THEN
5065           KFR1=24
5066         ELSEIF(ISUB.GE.71.AND.ISUB.LE.77) THEN
5067           KFR1=25
5068           IF(MSTP(46).EQ.5) THEN
5069             KFR1=30
5070             PMAS(30,1)=PARP(45)
5071             PMAS(30,2)=PARP(45)**3/(96D0*PARU(1)*PARP(47)**2)
5072           ENDIF
5073         ELSEIF(ISUB.EQ.194) THEN
5074           KFR1=54
5075         ELSEIF(ISUB.EQ.195) THEN
5076           KFR1=55
5077         ELSEIF(ISUB.GE.361.AND.ISUB.LE.368) THEN
5078           KFR1=54
5079         ELSEIF(ISUB.GE.370.AND.ISUB.LE.377) THEN
5080           KFR1=55
5081         ENDIF
5082         CKMX=CKIN(2)
5083         IF(CKMX.LE.0D0) CKMX=VINT(1)
5084         KCR1=PYCOMP(KFR1)
5085         IF(KFR1.NE.0) THEN
5086           IF(CKIN(1).GT.PMAS(KCR1,1)+20D0*PMAS(KCR1,2).OR.
5087      &    CKMX.LT.PMAS(KCR1,1)-20D0*PMAS(KCR1,2)) KFR1=0
5088         ENDIF
5089         IF(KFR1.NE.0) THEN
5090           TAUR1=PMAS(KCR1,1)**2/VINT(2)
5091           IF(KFR1.EQ.54) THEN
5092             CALL PYTECM(S1,S2)
5093             TAUR1=S1/VINT(2)
5094           ENDIF
5095           GAMR1=PMAS(KCR1,1)*PMAS(KCR1,2)/VINT(2)
5096           MINT(72)=1
5097           MINT(73)=KFR1
5098           VINT(73)=TAUR1
5099           VINT(74)=GAMR1
5100         ENDIF
5101         KFR2=0
5102         IF(ISUB.EQ.141.OR.ISUB.EQ.194.OR.(ISUB.GE.364.AND.ISUB.LE.368))
5103      $  THEN
5104           KFR2=23
5105           IF(ISUB.EQ.194) THEN
5106             KFR2=56
5107           ELSEIF(ISUB.GE.364.AND.ISUB.LE.368) THEN
5108             KFR2=56
5109           ENDIF
5110           KCR2=PYCOMP(KFR2)
5111           TAUR2=PMAS(KCR2,1)**2/VINT(2)
5112           IF(KFR2.EQ.56) THEN
5113             CALL PYTECM(S1,S2)
5114             TAUR2=S2/VINT(2)
5115           ENDIF
5116           GAMR2=PMAS(KCR2,1)*PMAS(KCR2,2)/VINT(2)
5117           IF(CKIN(1).GT.PMAS(KCR2,1)+20D0*PMAS(KCR2,2).OR.
5118      &    CKMX.LT.PMAS(KCR2,1)-20D0*PMAS(KCR2,2)) KFR2=0
5119           IF(KFR2.NE.0.AND.KFR1.NE.0) THEN
5120             MINT(72)=2
5121             MINT(74)=KFR2
5122             VINT(75)=TAUR2
5123             VINT(76)=GAMR2
5124           ELSEIF(KFR2.NE.0) THEN
5125             KFR1=KFR2
5126             TAUR1=TAUR2
5127             GAMR1=GAMR2
5128             MINT(72)=1
5129             MINT(73)=KFR1
5130             VINT(73)=TAUR1
5131             VINT(74)=GAMR1
5132             KFR2=0
5133           ENDIF
5134         ENDIF
5135  
5136 C...Find product masses and minimum pT of process.
5137         SQM3=0D0
5138         SQM4=0D0
5139         MINT(71)=0
5140         VINT(71)=CKIN(3)
5141         VINT(80)=1D0
5142         IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
5143           NBW=0
5144           DO 110 I=1,2
5145             PMMN(I)=0D0
5146             IF(KFPR(ISUB,I).EQ.0) THEN
5147             ELSEIF(MSTP(42).LE.0.OR.PMAS(PYCOMP(KFPR(ISUB,I)),2).LT.
5148      &        PARP(41)) THEN
5149               IF(I.EQ.1) SQM3=PMAS(PYCOMP(KFPR(ISUB,I)),1)**2
5150               IF(I.EQ.2) SQM4=PMAS(PYCOMP(KFPR(ISUB,I)),1)**2
5151             ELSE
5152               NBW=NBW+1
5153 C...This prevents SUSY/t particles from becoming too light.
5154               KFLW=KFPR(ISUB,I)
5155               IF(KFLW/KSUSY1.EQ.1.OR.KFLW/KSUSY1.EQ.2) THEN
5156                 KCW=PYCOMP(KFLW)
5157                 PMMN(I)=PMAS(KCW,1)
5158                 DO 100 IDC=MDCY(KCW,2),MDCY(KCW,2)+MDCY(KCW,3)-1
5159                   IF(MDME(IDC,1).GT.0.AND.BRAT(IDC).GT.1E-4) THEN
5160                     PMSUM=PMAS(PYCOMP(KFDP(IDC,1)),1)+
5161      &              PMAS(PYCOMP(KFDP(IDC,2)),1)
5162                     IF(KFDP(IDC,3).NE.0) PMSUM=PMSUM+
5163      &              PMAS(PYCOMP(KFDP(IDC,3)),1)
5164                     PMMN(I)=MIN(PMMN(I),PMSUM)
5165                   ENDIF
5166   100           CONTINUE
5167               ELSEIF(KFLW.EQ.6) THEN
5168                 PMMN(I)=PMAS(24,1)+PMAS(5,1)
5169               ENDIF
5170             ENDIF
5171   110     CONTINUE
5172           IF(NBW.GE.1) THEN
5173             CKIN41=CKIN(41)
5174             CKIN43=CKIN(43)
5175             CKIN(41)=MAX(PMMN(1),CKIN(41))
5176             CKIN(43)=MAX(PMMN(2),CKIN(43))
5177             CALL PYOFSH(3,0,KFPR(ISUB,1),KFPR(ISUB,2),0D0,PQM3,PQM4)
5178             CKIN(41)=CKIN41
5179             CKIN(43)=CKIN43
5180             IF(MINT(51).EQ.1) THEN
5181               WRITE(MSTU(11),5100) ISUB
5182               MSUB(ISUB)=0
5183               GOTO 460
5184             ENDIF
5185             SQM3=PQM3**2
5186             SQM4=PQM4**2
5187           ENDIF
5188           IF(MIN(SQM3,SQM4).LT.CKIN(6)**2) MINT(71)=1
5189           IF(MINT(71).EQ.1) VINT(71)=MAX(CKIN(3),CKIN(5))
5190           IF(ISUB.EQ.96.AND.MSTP(82).LE.1) THEN
5191             VINT(71)=PARP(81)*(VINT(1)/PARP(89))**PARP(90)
5192           ELSEIF(ISUB.EQ.96) THEN
5193             VINT(71)=0.08D0*PARP(82)*(VINT(1)/PARP(89))**PARP(90)
5194           ENDIF
5195         ENDIF
5196         VINT(63)=SQM3
5197         VINT(64)=SQM4
5198  
5199 C...Prepare for additional variable choices in 2 -> 3.
5200         IF(ISTSB.EQ.5) THEN
5201           VINT(201)=0D0
5202           IF(KFPR(ISUB,2).GT.0) VINT(201)=PMAS(PYCOMP(KFPR(ISUB,2)),1)
5203           VINT(206)=VINT(201)
5204           VINT(204)=PMAS(23,1)
5205           IF(ISUB.EQ.124.OR.ISUB.EQ.351) VINT(204)=PMAS(24,1)
5206           IF(ISUB.EQ.352) VINT(204)=PMAS(63,1)
5207           IF(ISUB.EQ.121.OR.ISUB.EQ.122.OR.ISUB.EQ.181.OR.ISUB.EQ.182
5208      &    .OR.ISUB.EQ.186.OR.ISUB.EQ.187) VINT(204)=VINT(201)
5209           VINT(209)=VINT(204)
5210         ENDIF
5211  
5212 C...Number of points for each variable: tau, tau', y*, cos(theta-hat).
5213         NPTS(1)=2+2*MINT(72)
5214         IF(MINT(47).EQ.1) THEN
5215           IF(ISTSB.EQ.1.OR.ISTSB.EQ.2) NPTS(1)=1
5216         ELSEIF(MINT(47).GE.5) THEN
5217           IF(ISTSB.LE.2.OR.ISTSB.GT.5) NPTS(1)=NPTS(1)+1
5218         ENDIF
5219         NPTS(2)=1
5220         IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
5221           IF(MINT(47).GE.2) NPTS(2)=2
5222           IF(MINT(47).GE.5) NPTS(2)=3
5223         ENDIF
5224         NPTS(3)=1
5225         IF(MINT(47).EQ.4.OR.MINT(47).EQ.5) THEN
5226           NPTS(3)=3
5227           IF(MINT(45).EQ.3) NPTS(3)=NPTS(3)+1
5228           IF(MINT(46).EQ.3) NPTS(3)=NPTS(3)+1
5229         ENDIF
5230         NPTS(4)=1
5231         IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) NPTS(4)=5
5232         NTRY=NPTS(1)*NPTS(2)*NPTS(3)*NPTS(4)
5233  
5234 C...Reset coefficients of cross-section weighting.
5235         DO 120 J=1,20
5236           COEF(ISUB,J)=0D0
5237   120   CONTINUE
5238         COEF(ISUB,1)=1D0
5239         COEF(ISUB,8)=0.5D0
5240         COEF(ISUB,9)=0.5D0
5241         COEF(ISUB,13)=1D0
5242         COEF(ISUB,18)=1D0
5243         MCTH=0
5244         MTAUP=0
5245         METAUP=0
5246         VINT(23)=0D0
5247         VINT(26)=0D0
5248         SIGSAM=0D0
5249  
5250 C...Find limits and select tau, y*, cos(theta-hat) and tau' values,
5251 C...in grid of phase space points.
5252         CALL PYKLIM(1)
5253         METAU=MINT(51)
5254         NACC=0
5255         DO 150 ITRY=1,NTRY
5256           MINT(51)=0
5257           IF(METAU.EQ.1) GOTO 150
5258           IF(MOD(ITRY-1,NPTS(2)*NPTS(3)*NPTS(4)).EQ.0) THEN
5259             MTAU=1+(ITRY-1)/(NPTS(2)*NPTS(3)*NPTS(4))
5260             IF(MTAU.GT.2+2*MINT(72)) MTAU=7
5261             RTAU=0.5D0
5262 C...Special case when both resonances have same mass,
5263 C...as is often the case in process 194.
5264             IF(MINT(72).EQ.2) THEN
5265               IF(ABS(PMAS(KCR2,1)-PMAS(KCR1,1)).LT.
5266      &        0.01D0*(PMAS(KCR2,1)+PMAS(KCR1,1))) THEN
5267                 IF(MTAU.EQ.3.OR.MTAU.EQ.4) THEN
5268                   RTAU=0.4D0
5269                 ELSEIF(MTAU.EQ.5.OR.MTAU.EQ.6) THEN
5270                   RTAU=0.6D0
5271                 ENDIF
5272               ENDIF
5273             ENDIF
5274             CALL PYKMAP(1,MTAU,RTAU)
5275             IF(ISTSB.GE.3.AND.ISTSB.LE.5) CALL PYKLIM(4)
5276             METAUP=MINT(51)
5277           ENDIF
5278           IF(METAUP.EQ.1) GOTO 150
5279           IF(ISTSB.GE.3.AND.ISTSB.LE.5.AND.MOD(ITRY-1,NPTS(3)*NPTS(4))
5280      &    .EQ.0) THEN
5281             MTAUP=1+MOD((ITRY-1)/(NPTS(3)*NPTS(4)),NPTS(2))
5282             CALL PYKMAP(4,MTAUP,0.5D0)
5283           ENDIF
5284           IF(MOD(ITRY-1,NPTS(3)*NPTS(4)).EQ.0) THEN
5285             CALL PYKLIM(2)
5286             MEYST=MINT(51)
5287           ENDIF
5288           IF(MEYST.EQ.1) GOTO 150
5289           IF(MOD(ITRY-1,NPTS(4)).EQ.0) THEN
5290             MYST=1+MOD((ITRY-1)/NPTS(4),NPTS(3))
5291             IF(MYST.EQ.4.AND.MINT(45).NE.3) MYST=5
5292             CALL PYKMAP(2,MYST,0.5D0)
5293             CALL PYKLIM(3)
5294             MECTH=MINT(51)
5295           ENDIF
5296           IF(MECTH.EQ.1) GOTO 150
5297           IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
5298             MCTH=1+MOD(ITRY-1,NPTS(4))
5299             CALL PYKMAP(3,MCTH,0.5D0)
5300           ENDIF
5301           IF(ISUB.EQ.96) VINT(25)=VINT(21)*(1D0-VINT(23)**2)
5302  
5303 C...Store position and limits.
5304           MINT(51)=0
5305           CALL PYKLIM(0)
5306           IF(MINT(51).EQ.1) GOTO 150
5307           NACC=NACC+1
5308           MVARPT(NACC,1)=MTAU
5309           MVARPT(NACC,2)=MTAUP
5310           MVARPT(NACC,3)=MYST
5311           MVARPT(NACC,4)=MCTH
5312           DO 130 J=1,30
5313             VINTPT(NACC,J)=VINT(10+J)
5314   130     CONTINUE
5315  
5316 C...Normal case: calculate cross-section.
5317           IF(ISTSB.NE.5) THEN
5318             CALL PYSIGH(NCHN,SIGS)
5319             IF(MWTXS.EQ.1) THEN
5320               CALL PYEVWT(WTXS)
5321               SIGS=WTXS*SIGS
5322             ENDIF
5323  
5324 C..2 -> 3: find highest value out of a number of tries.
5325           ELSE
5326             SIGS=0D0
5327             DO 140 IKIN3=1,MSTP(129)
5328               CALL PYKMAP(5,0,0D0)
5329               IF(MINT(51).EQ.1) GOTO 140
5330               CALL PYSIGH(NCHN,SIGTMP)
5331               IF(MWTXS.EQ.1) THEN
5332                 CALL PYEVWT(WTXS)
5333                 SIGTMP=WTXS*SIGTMP
5334               ENDIF
5335               IF(SIGTMP.GT.SIGS) SIGS=SIGTMP
5336   140       CONTINUE
5337           ENDIF
5338  
5339 C...Store cross-section.
5340           SIGSPT(NACC)=SIGS
5341           IF(SIGS.GT.SIGSAM) SIGSAM=SIGS
5342           IF(MSTP(122).GE.2) WRITE(MSTU(11),5200) MTAU,MYST,MCTH,MTAUP,
5343      &    VINT(21),VINT(22),VINT(23),VINT(26),SIGS
5344   150   CONTINUE
5345         IF(NACC.EQ.0) THEN
5346           WRITE(MSTU(11),5100) ISUB
5347           MSUB(ISUB)=0
5348           GOTO 460
5349         ELSEIF(SIGSAM.EQ.0D0) THEN
5350           WRITE(MSTU(11),5300) ISUB
5351           MSUB(ISUB)=0
5352           GOTO 460
5353         ENDIF
5354         IF(ISUB.NE.96) NPOSI=NPOSI+1
5355  
5356 C...Calculate integrals in tau over maximal phase space limits.
5357         TAUMIN=VINT(11)
5358         TAUMAX=VINT(31)
5359         ATAU1=LOG(TAUMAX/TAUMIN)
5360         IF(NPTS(1).GE.2) THEN
5361           ATAU2=(TAUMAX-TAUMIN)/(TAUMAX*TAUMIN)
5362         ENDIF
5363         IF(NPTS(1).GE.4) THEN
5364           ATAU3=LOG(TAUMAX/TAUMIN*(TAUMIN+TAUR1)/(TAUMAX+TAUR1))/TAUR1
5365           ATAU4=(ATAN((TAUMAX-TAUR1)/GAMR1)-ATAN((TAUMIN-TAUR1)/GAMR1))/
5366      &    GAMR1
5367         ENDIF
5368         IF(NPTS(1).GE.6) THEN
5369           ATAU5=LOG(TAUMAX/TAUMIN*(TAUMIN+TAUR2)/(TAUMAX+TAUR2))/TAUR2
5370           ATAU6=(ATAN((TAUMAX-TAUR2)/GAMR2)-ATAN((TAUMIN-TAUR2)/GAMR2))/
5371      &    GAMR2
5372         ENDIF
5373         IF(NPTS(1).GT.2+2*MINT(72)) THEN
5374           ATAU7=LOG(MAX(2D-10,1D0-TAUMIN)/MAX(2D-10,1D0-TAUMAX))
5375         ENDIF
5376  
5377 C...Reset. Sum up cross-sections in points calculated.
5378         DO 320 IVAR=1,4
5379           IF(NPTS(IVAR).EQ.1) GOTO 320
5380           IF(ISUB.EQ.96.AND.IVAR.EQ.4) GOTO 320
5381           NBIN=NPTS(IVAR)
5382           DO 170 J1=1,NBIN
5383             NAREL(J1)=0
5384             WTREL(J1)=0D0
5385             COEFU(J1)=0D0
5386             DO 160 J2=1,NBIN
5387               WTMAT(J1,J2)=0D0
5388   160       CONTINUE
5389   170     CONTINUE
5390           DO 180 IACC=1,NACC
5391             IBIN=MVARPT(IACC,IVAR)
5392             IF(IVAR.EQ.1.AND.IBIN.EQ.7) IBIN=3+2*MINT(72)
5393             IF(IVAR.EQ.3.AND.IBIN.EQ.5.AND.MINT(45).NE.3) IBIN=4
5394             NAREL(IBIN)=NAREL(IBIN)+1
5395             WTREL(IBIN)=WTREL(IBIN)+SIGSPT(IACC)
5396  
5397 C...Sum up tau cross-section pieces in points used.
5398             IF(IVAR.EQ.1) THEN
5399               TAU=VINTPT(IACC,11)
5400               WTMAT(IBIN,1)=WTMAT(IBIN,1)+1D0
5401               WTMAT(IBIN,2)=WTMAT(IBIN,2)+(ATAU1/ATAU2)/TAU
5402               IF(NBIN.GE.4) THEN
5403                 WTMAT(IBIN,3)=WTMAT(IBIN,3)+(ATAU1/ATAU3)/(TAU+TAUR1)
5404                 WTMAT(IBIN,4)=WTMAT(IBIN,4)+(ATAU1/ATAU4)*TAU/
5405      &          ((TAU-TAUR1)**2+GAMR1**2)
5406               ENDIF
5407               IF(NBIN.GE.6) THEN
5408                 WTMAT(IBIN,5)=WTMAT(IBIN,5)+(ATAU1/ATAU5)/(TAU+TAUR2)
5409                 WTMAT(IBIN,6)=WTMAT(IBIN,6)+(ATAU1/ATAU6)*TAU/
5410      &          ((TAU-TAUR2)**2+GAMR2**2)
5411               ENDIF
5412               IF(NBIN.GT.2+2*MINT(72)) THEN
5413                 WTMAT(IBIN,NBIN)=WTMAT(IBIN,NBIN)+(ATAU1/ATAU7)*
5414      &          TAU/MAX(2D-10,1D0-TAU)
5415               ENDIF
5416  
5417 C...Sum up tau' cross-section pieces in points used.
5418             ELSEIF(IVAR.EQ.2) THEN
5419               TAU=VINTPT(IACC,11)
5420               TAUP=VINTPT(IACC,16)
5421               TAUPMN=VINTPT(IACC,6)
5422               TAUPMX=VINTPT(IACC,26)
5423               ATAUP1=LOG(TAUPMX/TAUPMN)
5424               ATAUP2=((1D0-TAU/TAUPMX)**4-(1D0-TAU/TAUPMN)**4)/(4D0*TAU)
5425               WTMAT(IBIN,1)=WTMAT(IBIN,1)+1D0
5426               WTMAT(IBIN,2)=WTMAT(IBIN,2)+(ATAUP1/ATAUP2)*
5427      &        (1D0-TAU/TAUP)**3/TAUP
5428               IF(NBIN.GE.3) THEN
5429                 ATAUP3=LOG(MAX(2D-10,1D0-TAUPMN)/MAX(2D-10,1D0-TAUPMX))
5430                 WTMAT(IBIN,3)=WTMAT(IBIN,3)+(ATAUP1/ATAUP3)*
5431      &          TAUP/MAX(2D-10,1D0-TAUP)
5432               ENDIF
5433  
5434 C...Sum up y* cross-section pieces in points used.
5435             ELSEIF(IVAR.EQ.3) THEN
5436               YST=VINTPT(IACC,12)
5437               YSTMIN=VINTPT(IACC,2)
5438               YSTMAX=VINTPT(IACC,22)
5439               AYST0=YSTMAX-YSTMIN
5440               AYST1=0.5D0*(YSTMAX-YSTMIN)**2
5441               AYST2=AYST1
5442               AYST3=2D0*(ATAN(EXP(YSTMAX))-ATAN(EXP(YSTMIN)))
5443               WTMAT(IBIN,1)=WTMAT(IBIN,1)+(AYST0/AYST1)*(YST-YSTMIN)
5444               WTMAT(IBIN,2)=WTMAT(IBIN,2)+(AYST0/AYST2)*(YSTMAX-YST)
5445               WTMAT(IBIN,3)=WTMAT(IBIN,3)+(AYST0/AYST3)/COSH(YST)
5446               IF(MINT(45).EQ.3) THEN
5447                 TAUE=VINTPT(IACC,11)
5448                 IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINTPT(IACC,16)
5449                 YST0=-0.5D0*LOG(TAUE)
5450                 AYST4=LOG(MAX(1D-10,EXP(YST0-YSTMIN)-1D0)/
5451      &          MAX(1D-10,EXP(YST0-YSTMAX)-1D0))
5452                 WTMAT(IBIN,4)=WTMAT(IBIN,4)+(AYST0/AYST4)/
5453      &          MAX(1D-10,1D0-EXP(YST-YST0))
5454               ENDIF
5455               IF(MINT(46).EQ.3) THEN
5456                 TAUE=VINTPT(IACC,11)
5457                 IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINTPT(IACC,16)
5458                 YST0=-0.5D0*LOG(TAUE)
5459                 AYST5=LOG(MAX(1D-10,EXP(YST0+YSTMAX)-1D0)/
5460      &          MAX(1D-10,EXP(YST0+YSTMIN)-1D0))
5461                 WTMAT(IBIN,NBIN)=WTMAT(IBIN,NBIN)+(AYST0/AYST5)/
5462      &          MAX(1D-10,1D0-EXP(-YST-YST0))
5463               ENDIF
5464  
5465 C...Sum up cos(theta-hat) cross-section pieces in points used.
5466             ELSE
5467               RM34=MAX(1D-20,2D0*SQM3*SQM4/(VINTPT(IACC,11)*VINT(2))**2)
5468               RSQM=1D0+RM34
5469               CTHMAX=SQRT(1D0-4D0*VINT(71)**2/(TAUMAX*VINT(2)))
5470               CTHMIN=-CTHMAX
5471               IF(CTHMAX.GT.0.9999D0) RM34=MAX(RM34,2D0*VINT(71)**2/
5472      &        (TAUMAX*VINT(2)))
5473               ACTH1=CTHMAX-CTHMIN
5474               ACTH2=LOG(MAX(RM34,RSQM-CTHMIN)/MAX(RM34,RSQM-CTHMAX))
5475               ACTH3=LOG(MAX(RM34,RSQM+CTHMAX)/MAX(RM34,RSQM+CTHMIN))
5476               ACTH4=1D0/MAX(RM34,RSQM-CTHMAX)-1D0/MAX(RM34,RSQM-CTHMIN)
5477               ACTH5=1D0/MAX(RM34,RSQM+CTHMIN)-1D0/MAX(RM34,RSQM+CTHMAX)
5478               CTH=VINTPT(IACC,13)
5479               WTMAT(IBIN,1)=WTMAT(IBIN,1)+1D0
5480               WTMAT(IBIN,2)=WTMAT(IBIN,2)+(ACTH1/ACTH2)/
5481      &        MAX(RM34,RSQM-CTH)
5482               WTMAT(IBIN,3)=WTMAT(IBIN,3)+(ACTH1/ACTH3)/
5483      &        MAX(RM34,RSQM+CTH)
5484               WTMAT(IBIN,4)=WTMAT(IBIN,4)+(ACTH1/ACTH4)/
5485      &        MAX(RM34,RSQM-CTH)**2
5486               WTMAT(IBIN,5)=WTMAT(IBIN,5)+(ACTH1/ACTH5)/
5487      &        MAX(RM34,RSQM+CTH)**2
5488             ENDIF
5489   180     CONTINUE
5490  
5491 C...Check that equation system solvable.
5492           IF(MSTP(122).GE.2) WRITE(MSTU(11),5400) CVAR(IVAR)
5493           MSOLV=1
5494           WTRELS=0D0
5495           DO 190 IBIN=1,NBIN
5496             IF(MSTP(122).GE.2) WRITE(MSTU(11),5500) (WTMAT(IBIN,IRED),
5497      &      IRED=1,NBIN),WTREL(IBIN)
5498             IF(NAREL(IBIN).EQ.0) MSOLV=0
5499             WTRELS=WTRELS+WTREL(IBIN)
5500   190     CONTINUE
5501           IF(ABS(WTRELS).LT.1D-20) MSOLV=0
5502  
5503 C...Solve to find relative importance of cross-section pieces.
5504           IF(MSOLV.EQ.1) THEN
5505             DO 200 IBIN=1,NBIN
5506               WTRELN(IBIN)=MAX(0.1D0,WTREL(IBIN)/WTRELS)
5507   200       CONTINUE
5508             DO 230 IRED=1,NBIN-1
5509               DO 220 IBIN=IRED+1,NBIN
5510                 IF(ABS(WTMAT(IRED,IRED)).LT.1D-20) THEN
5511                   MSOLV=0
5512                   GOTO 260
5513                 ENDIF
5514                 RQT=WTMAT(IBIN,IRED)/WTMAT(IRED,IRED)
5515                 WTREL(IBIN)=WTREL(IBIN)-RQT*WTREL(IRED)
5516                 DO 210 ICOE=IRED,NBIN
5517                   WTMAT(IBIN,ICOE)=WTMAT(IBIN,ICOE)-RQT*WTMAT(IRED,ICOE)
5518   210           CONTINUE
5519   220         CONTINUE
5520   230       CONTINUE
5521             DO 250 IRED=NBIN,1,-1
5522               DO 240 ICOE=IRED+1,NBIN
5523                 WTREL(IRED)=WTREL(IRED)-WTMAT(IRED,ICOE)*COEFU(ICOE)
5524   240         CONTINUE
5525               COEFU(IRED)=WTREL(IRED)/WTMAT(IRED,IRED)
5526   250       CONTINUE
5527           ENDIF
5528  
5529 C...Share evenly if failure.
5530   260     IF(MSOLV.EQ.0) THEN
5531             DO 270 IBIN=1,NBIN
5532               COEFU(IBIN)=1D0
5533               WTRELN(IBIN)=0.1D0
5534               IF(WTRELS.GT.0D0) WTRELN(IBIN)=MAX(0.1D0,
5535      &        WTREL(IBIN)/WTRELS)
5536   270       CONTINUE
5537           ENDIF
5538  
5539 C...Normalize coefficients, with piece shared democratically.
5540           COEFSU=0D0
5541           WTRELS=0D0
5542           DO 280 IBIN=1,NBIN
5543             COEFU(IBIN)=MAX(0D0,COEFU(IBIN))
5544             COEFSU=COEFSU+COEFU(IBIN)
5545             WTRELS=WTRELS+WTRELN(IBIN)
5546   280     CONTINUE
5547           IF(COEFSU.GT.0D0) THEN
5548             DO 290 IBIN=1,NBIN
5549               COEFO(IBIN)=PARP(122)/NBIN+(1D0-PARP(122))*0.5D0*
5550      &        (COEFU(IBIN)/COEFSU+WTRELN(IBIN)/WTRELS)
5551   290       CONTINUE
5552           ELSE
5553             DO 300 IBIN=1,NBIN
5554               COEFO(IBIN)=1D0/NBIN
5555   300       CONTINUE
5556           ENDIF
5557           IF(IVAR.EQ.1) IOFF=0
5558           IF(IVAR.EQ.2) IOFF=17
5559           IF(IVAR.EQ.3) IOFF=7
5560           IF(IVAR.EQ.4) IOFF=12
5561           DO 310 IBIN=1,NBIN
5562             ICOF=IOFF+IBIN
5563             IF(IVAR.EQ.1.AND.IBIN.GT.2+2*MINT(72)) ICOF=7
5564             IF(IVAR.EQ.3.AND.IBIN.EQ.4.AND.MINT(45).NE.3) ICOF=ICOF+1
5565             COEF(ISUB,ICOF)=COEFO(IBIN)
5566   310     CONTINUE
5567           IF(MSTP(122).GE.2) WRITE(MSTU(11),5600) CVAR(IVAR),
5568      &    (COEFO(IBIN),IBIN=1,NBIN)
5569   320   CONTINUE
5570  
5571 C...Find two most promising maxima among points previously determined.
5572         DO 330 J=1,4
5573           IACCMX(J)=0
5574           SIGSMX(J)=0D0
5575   330   CONTINUE
5576         NMAX=0
5577         DO 390 IACC=1,NACC
5578           DO 340 J=1,30
5579             VINT(10+J)=VINTPT(IACC,J)
5580   340     CONTINUE
5581           IF(ISTSB.NE.5) THEN
5582             CALL PYSIGH(NCHN,SIGS)
5583             IF(MWTXS.EQ.1) THEN
5584               CALL PYEVWT(WTXS)
5585               SIGS=WTXS*SIGS
5586             ENDIF
5587           ELSE
5588             SIGS=0D0
5589             DO 350 IKIN3=1,MSTP(129)
5590               CALL PYKMAP(5,0,0D0)
5591               IF(MINT(51).EQ.1) GOTO 350
5592               CALL PYSIGH(NCHN,SIGTMP)
5593               IF(MWTXS.EQ.1) THEN
5594                 CALL PYEVWT(WTXS)
5595                 SIGTMP=WTXS*SIGTMP
5596               ENDIF
5597               IF(SIGTMP.GT.SIGS) SIGS=SIGTMP
5598   350       CONTINUE
5599           ENDIF
5600           IEQ=0
5601           DO 360 IMV=1,NMAX
5602             IF(ABS(SIGS-SIGSMX(IMV)).LT.1D-4*(SIGS+SIGSMX(IMV))) IEQ=IMV
5603   360     CONTINUE
5604           IF(IEQ.EQ.0) THEN
5605             DO 370 IMV=NMAX,1,-1
5606               IIN=IMV+1
5607               IF(SIGS.LE.SIGSMX(IMV)) GOTO 380
5608               IACCMX(IMV+1)=IACCMX(IMV)
5609               SIGSMX(IMV+1)=SIGSMX(IMV)
5610   370       CONTINUE
5611             IIN=1
5612   380       IACCMX(IIN)=IACC
5613             SIGSMX(IIN)=SIGS
5614             IF(NMAX.LE.1) NMAX=NMAX+1
5615           ENDIF
5616   390   CONTINUE
5617  
5618 C...Read out starting position for search.
5619         IF(MSTP(122).GE.2) WRITE(MSTU(11),5700)
5620         SIGSAM=SIGSMX(1)
5621         DO 440 IMAX=1,NMAX
5622           IACC=IACCMX(IMAX)
5623           MTAU=MVARPT(IACC,1)
5624           MTAUP=MVARPT(IACC,2)
5625           MYST=MVARPT(IACC,3)
5626           MCTH=MVARPT(IACC,4)
5627           VTAU=0.5D0
5628           VYST=0.5D0
5629           VCTH=0.5D0
5630           VTAUP=0.5D0
5631  
5632 C...Starting point and step size in parameter space.
5633           DO 430 IRPT=1,2
5634             DO 420 IVAR=1,4
5635               IF(NPTS(IVAR).EQ.1) GOTO 420
5636               IF(IVAR.EQ.1) VVAR=VTAU
5637               IF(IVAR.EQ.2) VVAR=VTAUP
5638               IF(IVAR.EQ.3) VVAR=VYST
5639               IF(IVAR.EQ.4) VVAR=VCTH
5640               IF(IVAR.EQ.1) MVAR=MTAU
5641               IF(IVAR.EQ.2) MVAR=MTAUP
5642               IF(IVAR.EQ.3) MVAR=MYST
5643               IF(IVAR.EQ.4) MVAR=MCTH
5644               IF(IRPT.EQ.1) VDEL=0.1D0
5645               IF(IRPT.EQ.2) VDEL=MAX(0.01D0,MIN(0.05D0,VVAR-0.02D0,
5646      &        0.98D0-VVAR))
5647               IF(IRPT.EQ.1) VMAR=0.02D0
5648               IF(IRPT.EQ.2) VMAR=0.002D0
5649               IMOV0=1
5650               IF(IRPT.EQ.1.AND.IVAR.EQ.1) IMOV0=0
5651               DO 410 IMOV=IMOV0,8
5652  
5653 C...Define new point in parameter space.
5654                 IF(IMOV.EQ.0) THEN
5655                   INEW=2
5656                   VNEW=VVAR
5657                 ELSEIF(IMOV.EQ.1) THEN
5658                   INEW=3
5659                   VNEW=VVAR+VDEL
5660                 ELSEIF(IMOV.EQ.2) THEN
5661                   INEW=1
5662                   VNEW=VVAR-VDEL
5663                 ELSEIF(SIGSSM(3).GE.MAX(SIGSSM(1),SIGSSM(2)).AND.
5664      &            VVAR+2D0*VDEL.LT.1D0-VMAR) THEN
5665                   VVAR=VVAR+VDEL
5666                   SIGSSM(1)=SIGSSM(2)
5667                   SIGSSM(2)=SIGSSM(3)
5668                   INEW=3
5669                   VNEW=VVAR+VDEL
5670                 ELSEIF(SIGSSM(1).GE.MAX(SIGSSM(2),SIGSSM(3)).AND.
5671      &            VVAR-2D0*VDEL.GT.VMAR) THEN
5672                   VVAR=VVAR-VDEL
5673                   SIGSSM(3)=SIGSSM(2)
5674                   SIGSSM(2)=SIGSSM(1)
5675                   INEW=1
5676                   VNEW=VVAR-VDEL
5677                 ELSEIF(SIGSSM(3).GE.SIGSSM(1)) THEN
5678                   VDEL=0.5D0*VDEL
5679                   VVAR=VVAR+VDEL
5680                   SIGSSM(1)=SIGSSM(2)
5681                   INEW=2
5682                   VNEW=VVAR
5683                 ELSE
5684                   VDEL=0.5D0*VDEL
5685                   VVAR=VVAR-VDEL
5686                   SIGSSM(3)=SIGSSM(2)
5687                   INEW=2
5688                   VNEW=VVAR
5689                 ENDIF
5690  
5691 C...Convert to relevant variables and find derived new limits.
5692                 ILERR=0
5693                 IF(IVAR.EQ.1) THEN
5694                   VTAU=VNEW
5695                   CALL PYKMAP(1,MTAU,VTAU)
5696                   IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
5697                     CALL PYKLIM(4)
5698                     IF(MINT(51).EQ.1) ILERR=1
5699                   ENDIF
5700                 ENDIF
5701                 IF(IVAR.LE.2.AND.ISTSB.GE.3.AND.ISTSB.LE.5.AND.
5702      &          ILERR.EQ.0) THEN
5703                   IF(IVAR.EQ.2) VTAUP=VNEW
5704                   CALL PYKMAP(4,MTAUP,VTAUP)
5705                 ENDIF
5706                 IF(IVAR.LE.2.AND.ILERR.EQ.0) THEN
5707                   CALL PYKLIM(2)
5708                   IF(MINT(51).EQ.1) ILERR=1
5709                 ENDIF
5710                 IF(IVAR.LE.3.AND.ILERR.EQ.0) THEN
5711                   IF(IVAR.EQ.3) VYST=VNEW
5712                   CALL PYKMAP(2,MYST,VYST)
5713                   CALL PYKLIM(3)
5714                   IF(MINT(51).EQ.1) ILERR=1
5715                 ENDIF
5716                 IF((ISTSB.EQ.2.OR.ISTSB.EQ.4.OR.ISTSB.EQ.6).AND.
5717      &          ILERR.EQ.0) THEN
5718                   IF(IVAR.EQ.4) VCTH=VNEW
5719                   CALL PYKMAP(3,MCTH,VCTH)
5720                 ENDIF
5721                 IF(ISUB.EQ.96) VINT(25)=VINT(21)*(1.-VINT(23)**2)
5722  
5723 C...Evaluate cross-section. Save new maximum. Final maximum.
5724                 IF(ILERR.NE.0) THEN
5725                    SIGS=0.
5726                 ELSEIF(ISTSB.NE.5) THEN
5727                   CALL PYSIGH(NCHN,SIGS)
5728                   IF(MWTXS.EQ.1) THEN
5729                     CALL PYEVWT(WTXS)
5730                     SIGS=WTXS*SIGS
5731                   ENDIF
5732                 ELSE
5733                   SIGS=0D0
5734                   DO 400 IKIN3=1,MSTP(129)
5735                     CALL PYKMAP(5,0,0D0)
5736                     IF(MINT(51).EQ.1) GOTO 400
5737                     CALL PYSIGH(NCHN,SIGTMP)
5738                     IF(MWTXS.EQ.1) THEN
5739                         CALL PYEVWT(WTXS)
5740                         SIGTMP=WTXS*SIGTMP
5741                     ENDIF
5742                     IF(SIGTMP.GT.SIGS) SIGS=SIGTMP
5743   400             CONTINUE
5744                 ENDIF
5745                 SIGSSM(INEW)=SIGS
5746                 IF(SIGS.GT.SIGSAM) SIGSAM=SIGS
5747                 IF(MSTP(122).GE.2) WRITE(MSTU(11),5800) IMAX,IVAR,MVAR,
5748      &          IMOV,VNEW,VINT(21),VINT(22),VINT(23),VINT(26),SIGS
5749   410         CONTINUE
5750   420       CONTINUE
5751   430     CONTINUE
5752   440   CONTINUE
5753         IF(MSTP(121).EQ.1) SIGSAM=PARP(121)*SIGSAM
5754         XSEC(ISUB,1)=1.05D0*SIGSAM
5755         IF(MINT(141).NE.0.OR.MINT(142).NE.0) XSEC(ISUB,1)=
5756      &  WTGAGA*XSEC(ISUB,1)
5757   450   CONTINUE
5758         IF(MSTP(173).EQ.1.AND.ISUB.NE.96) XSEC(ISUB,1)=
5759      &  PARP(174)*XSEC(ISUB,1)
5760         IF(ISUB.NE.96) XSEC(0,1)=XSEC(0,1)+XSEC(ISUB,1)
5761   460 CONTINUE
5762       MINT(51)=0
5763  
5764 C...Print summary table.
5765       IF(MINT(121).EQ.1.AND.NPOSI.EQ.0) THEN
5766         WRITE(MSTU(11),5900)
5767         STOP
5768       ENDIF
5769       IF(MSTP(122).GE.1) THEN
5770         WRITE(MSTU(11),6000)
5771         WRITE(MSTU(11),6100)
5772         DO 470 ISUB=1,500
5773           IF(MSUB(ISUB).NE.1.AND.ISUB.NE.96) GOTO 470
5774           IF(ISUB.EQ.96.AND.MINT(50).EQ.0) GOTO 470
5775           IF(ISUB.EQ.96.AND.MSUB(95).NE.1.AND.MSTP(81).LE.0) GOTO 470
5776           IF(ISUB.EQ.96.AND.MINT(49).EQ.0.AND.MSTP(131).EQ.0) GOTO 470
5777           IF(MSUB(95).EQ.1.AND.(ISUB.EQ.11.OR.ISUB.EQ.12.OR.ISUB.EQ.13
5778      &    .OR.ISUB.EQ.28.OR.ISUB.EQ.53.OR.ISUB.EQ.68)) GOTO 470
5779           WRITE(MSTU(11),6200) ISUB,PROC(ISUB),XSEC(ISUB,1)
5780   470   CONTINUE
5781         WRITE(MSTU(11),6300)
5782       ENDIF
5783  
5784 C...Format statements for maximization results.
5785  5000 FORMAT(/1X,'Coefficient optimization and maximum search for ',
5786      &'subprocess no',I4/1X,'Coefficient modes     tau',10X,'y*',9X,
5787      &'cth',9X,'tau''',7X,'sigma')
5788  5100 FORMAT(1X,'Warning: requested subprocess ',I3,' has no allowed ',
5789      &'phase space.'/1X,'Process switched off!')
5790  5200 FORMAT(1X,4I4,F12.8,F12.6,F12.7,F12.8,1P,D12.4)
5791  5300 FORMAT(1X,'Warning: requested subprocess ',I3,' has vanishing ',
5792      &'cross-section.'/1X,'Process switched off!')
5793  5400 FORMAT(1X,'Coefficients of equation system to be solved for ',A4)
5794  5500 FORMAT(1X,1P,8D11.3)
5795  5600 FORMAT(1X,'Result for ',A4,':',7F9.4)
5796  5700 FORMAT(1X,'Maximum search for given coefficients'/2X,'MAX VAR ',
5797      &'MOD MOV   VNEW',7X,'tau',7X,'y*',8X,'cth',7X,'tau''',7X,'sigma')
5798  5800 FORMAT(1X,4I4,F8.4,F11.7,F9.3,F11.6,F11.7,1P,D12.4)
5799  5900 FORMAT(1X,'Error: no requested process has non-vanishing ',
5800      &'cross-section.'/1X,'Execution stopped!')
5801  6000 FORMAT(/1X,8('*'),1X,'PYMAXI: summary of differential ',
5802      &'cross-section maximum search',1X,8('*'))
5803  6100 FORMAT(/11X,58('=')/11X,'I',38X,'I',17X,'I'/11X,'I  ISUB  ',
5804      &'Subprocess name',15X,'I  Maximum value  I'/11X,'I',38X,'I',
5805      &17X,'I'/11X,58('=')/11X,'I',38X,'I',17X,'I')
5806  6200 FORMAT(11X,'I',2X,I3,3X,A28,2X,'I',2X,1P,D12.4,3X,'I')
5807  6300 FORMAT(11X,'I',38X,'I',17X,'I'/11X,58('='))
5808  
5809       RETURN
5810       END
5811  
5812 C*********************************************************************
5813  
5814 C...PYPILE
5815 C...Initializes multiplicity distribution and selects mutliplicity
5816 C...of pileup events, i.e. several events occuring at the same
5817 C...beam crossing.
5818  
5819       SUBROUTINE PYPILE(MPILE)
5820  
5821 C...Double precision and integer declarations.
5822       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
5823       IMPLICIT INTEGER(I-N)
5824       INTEGER PYK,PYCHGE,PYCOMP
5825 C...Commonblocks.
5826       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
5827       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
5828       COMMON/PYINT1/MINT(400),VINT(400)
5829       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
5830       SAVE /PYDAT1/,/PYPARS/,/PYINT1/,/PYINT7/
5831 C...Local arrays and saved variables.
5832       DIMENSION WTI(0:200)
5833       SAVE IMIN,IMAX,WTI,WTS
5834  
5835 C...Sum of allowed cross-sections for pileup events.
5836       IF(MPILE.EQ.1) THEN
5837         VINT(131)=SIGT(0,0,5)
5838         IF(MSTP(132).GE.2) VINT(131)=VINT(131)+SIGT(0,0,4)
5839         IF(MSTP(132).GE.3) VINT(131)=VINT(131)+SIGT(0,0,2)+SIGT(0,0,3)
5840         IF(MSTP(132).GE.4) VINT(131)=VINT(131)+SIGT(0,0,1)
5841         IF(MSTP(133).LE.0) RETURN
5842  
5843 C...Initialize multiplicity distribution at maximum.
5844         XNAVE=VINT(131)*PARP(131)
5845         IF(XNAVE.GT.120D0) WRITE(MSTU(11),5000) XNAVE
5846         INAVE=MAX(1,MIN(200,NINT(XNAVE)))
5847         WTI(INAVE)=1D0
5848         WTS=WTI(INAVE)
5849         WTN=WTI(INAVE)*INAVE
5850  
5851 C...Find shape of multiplicity distribution below maximum.
5852         IMIN=INAVE
5853         DO 100 I=INAVE-1,1,-1
5854           IF(MSTP(133).EQ.1) WTI(I)=WTI(I+1)*(I+1)/XNAVE
5855           IF(MSTP(133).GE.2) WTI(I)=WTI(I+1)*I/XNAVE
5856           IF(WTI(I).LT.1D-6) GOTO 110
5857           WTS=WTS+WTI(I)
5858           WTN=WTN+WTI(I)*I
5859           IMIN=I
5860   100   CONTINUE
5861  
5862 C...Find shape of multiplicity distribution above maximum.
5863   110   IMAX=INAVE
5864         DO 120 I=INAVE+1,200
5865           IF(MSTP(133).EQ.1) WTI(I)=WTI(I-1)*XNAVE/I
5866           IF(MSTP(133).GE.2) WTI(I)=WTI(I-1)*XNAVE/(I-1)
5867           IF(WTI(I).LT.1D-6) GOTO 130
5868           WTS=WTS+WTI(I)
5869           WTN=WTN+WTI(I)*I
5870           IMAX=I
5871   120   CONTINUE
5872   130   VINT(132)=XNAVE
5873         VINT(133)=WTN/WTS
5874         IF(MSTP(133).EQ.1.AND.IMIN.EQ.1) VINT(134)=
5875      &  WTS/(WTS+WTI(1)/XNAVE)
5876         IF(MSTP(133).EQ.1.AND.IMIN.GT.1) VINT(134)=1D0
5877         IF(MSTP(133).GE.2) VINT(134)=XNAVE
5878  
5879 C...Pick multiplicity of pileup events.
5880       ELSE
5881         IF(MSTP(133).LE.0) THEN
5882           MINT(81)=MAX(1,MSTP(134))
5883         ELSE
5884           WTR=WTS*PYR(0)
5885           DO 140 I=IMIN,IMAX
5886             MINT(81)=I
5887             WTR=WTR-WTI(I)
5888             IF(WTR.LE.0D0) GOTO 150
5889   140     CONTINUE
5890   150     CONTINUE
5891         ENDIF
5892       ENDIF
5893  
5894 C...Format statement for error message.
5895  5000 FORMAT(1X,'Warning: requested average number of events per bunch',
5896      &'crossing too large, ',1P,D12.4)
5897  
5898       RETURN
5899       END
5900  
5901 C*********************************************************************
5902  
5903 C...PYSAVE
5904 C...Saves and restores parameter and cross section values for the
5905 C...3 gamma-p and 6 (or 4, or 9, or 13) gamma-gamma alnternatives.
5906 C...Also makes random choice between alternatives.
5907  
5908       SUBROUTINE PYSAVE(ISAVE,IGA)
5909  
5910 C...Double precision and integer declarations.
5911       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
5912       IMPLICIT INTEGER(I-N)
5913       INTEGER PYK,PYCHGE,PYCOMP
5914 C...Commonblocks.
5915       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
5916       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
5917       COMMON/PYINT1/MINT(400),VINT(400)
5918       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
5919       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
5920       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
5921       SAVE /PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,/PYINT5/,/PYINT7/
5922 C...Local arrays and saved variables.
5923       DIMENSION NCP(15),NSUBCP(15,20),MSUBCP(15,20),COEFCP(15,20,20),
5924      &NGENCP(15,0:20,3),XSECCP(15,0:20,3),SIGTCP(15,0:6,0:6,0:5),
5925      &INTCP(15,20),RECP(15,20)
5926       SAVE NCP,NSUBCP,MSUBCP,COEFCP,NGENCP,XSECCP,SIGTCP,INTCP,RECP
5927  
5928 C...Save list of subprocesses and cross-section information.
5929       IF(ISAVE.EQ.1) THEN
5930         ICP=0
5931         DO 120 I=1,500
5932           IF(MSUB(I).EQ.0.AND.I.NE.96.AND.I.NE.97) GOTO 120
5933           ICP=ICP+1
5934           NSUBCP(IGA,ICP)=I
5935           MSUBCP(IGA,ICP)=MSUB(I)
5936           DO 100 J=1,20
5937             COEFCP(IGA,ICP,J)=COEF(I,J)
5938   100     CONTINUE
5939           DO 110 J=1,3
5940             NGENCP(IGA,ICP,J)=NGEN(I,J)
5941             XSECCP(IGA,ICP,J)=XSEC(I,J)
5942   110     CONTINUE
5943   120   CONTINUE
5944         NCP(IGA)=ICP
5945         DO 130 J=1,3
5946           NGENCP(IGA,0,J)=NGEN(0,J)
5947           XSECCP(IGA,0,J)=XSEC(0,J)
5948   130   CONTINUE
5949         DO 136 I1=0,6
5950           DO 134 I2=0,6
5951             DO 132 J=0,5
5952               SIGTCP(IGA,I1,I2,J)=SIGT(I1,I2,J)
5953   132       CONTINUE
5954   134     CONTINUE
5955   136   CONTINUE
5956
5957 C...Save various common process variables.
5958         DO 140 J=1,10
5959           INTCP(IGA,J)=MINT(40+J)
5960   140   CONTINUE
5961         INTCP(IGA,11)=MINT(101)
5962         INTCP(IGA,12)=MINT(102)
5963         INTCP(IGA,13)=MINT(107)
5964         INTCP(IGA,14)=MINT(108)
5965         INTCP(IGA,15)=MINT(123)
5966         RECP(IGA,1)=CKIN(3)
5967         RECP(IGA,2)=VINT(318)
5968  
5969 C...Save cross-section information only.
5970       ELSEIF(ISAVE.EQ.2) THEN
5971         DO 160 ICP=1,NCP(IGA)
5972           I=NSUBCP(IGA,ICP)
5973           DO 150 J=1,3
5974             NGENCP(IGA,ICP,J)=NGEN(I,J)
5975             XSECCP(IGA,ICP,J)=XSEC(I,J)
5976   150     CONTINUE
5977   160   CONTINUE
5978         DO 170 J=1,3
5979           NGENCP(IGA,0,J)=NGEN(0,J)
5980           XSECCP(IGA,0,J)=XSEC(0,J)
5981   170   CONTINUE
5982  
5983 C...Choose between allowed alternatives.
5984       ELSEIF(ISAVE.EQ.3.OR.ISAVE.EQ.4) THEN
5985         IF(ISAVE.EQ.4) THEN
5986           XSUMCP=0D0
5987           DO 180 IG=1,MINT(121)
5988             XSUMCP=XSUMCP+XSECCP(IG,0,1)
5989   180     CONTINUE
5990           XSUMCP=XSUMCP*PYR(0)
5991           DO 190 IG=1,MINT(121)
5992             IGA=IG
5993             XSUMCP=XSUMCP-XSECCP(IG,0,1)
5994             IF(XSUMCP.LE.0D0) GOTO 200
5995   190     CONTINUE
5996   200     CONTINUE
5997         ENDIF
5998  
5999 C...Restore cross-section information.
6000         DO 210 I=1,500
6001           MSUB(I)=0
6002   210   CONTINUE
6003         DO 240 ICP=1,NCP(IGA)
6004           I=NSUBCP(IGA,ICP)
6005           MSUB(I)=MSUBCP(IGA,ICP)
6006           DO 220 J=1,20
6007             COEF(I,J)=COEFCP(IGA,ICP,J)
6008   220     CONTINUE
6009           DO 230 J=1,3
6010             NGEN(I,J)=NGENCP(IGA,ICP,J)
6011             XSEC(I,J)=XSECCP(IGA,ICP,J)
6012   230     CONTINUE
6013   240   CONTINUE
6014         DO 250 J=1,3
6015           NGEN(0,J)=NGENCP(IGA,0,J)
6016           XSEC(0,J)=XSECCP(IGA,0,J)
6017   250   CONTINUE
6018         DO 256 I1=0,6
6019           DO 254 I2=0,6
6020             DO 252 J=0,5
6021               SIGT(I1,I2,J)=SIGTCP(IGA,I1,I2,J)
6022   252       CONTINUE
6023   254     CONTINUE
6024   256   CONTINUE
6025  
6026 C...Restore various common process variables.
6027         DO 260 J=1,10
6028           MINT(40+J)=INTCP(IGA,J)
6029   260   CONTINUE
6030         MINT(101)=INTCP(IGA,11)
6031         MINT(102)=INTCP(IGA,12)
6032         MINT(107)=INTCP(IGA,13)
6033         MINT(108)=INTCP(IGA,14)
6034         MINT(123)=INTCP(IGA,15)
6035         CKIN(3)=RECP(IGA,1)
6036         CKIN(1)=2D0*CKIN(3)
6037         VINT(318)=RECP(IGA,2)
6038  
6039 C...Sum up cross-section info (for PYSTAT).
6040       ELSEIF(ISAVE.EQ.5) THEN
6041         DO 270 I=1,500
6042           MSUB(I)=0
6043           NGEN(I,1)=0
6044           NGEN(I,3)=0
6045           XSEC(I,3)=0D0
6046   270   CONTINUE
6047         NGEN(0,1)=0
6048         NGEN(0,2)=0
6049         NGEN(0,3)=0
6050         XSEC(0,3)=0
6051         DO 290 IG=1,MINT(121)
6052           DO 280 ICP=1,NCP(IG)
6053             I=NSUBCP(IG,ICP)
6054             IF(MSUBCP(IG,ICP).EQ.1) MSUB(I)=1
6055             NGEN(I,1)=NGEN(I,1)+NGENCP(IG,ICP,1)
6056             NGEN(I,3)=NGEN(I,3)+NGENCP(IG,ICP,3)
6057             XSEC(I,3)=XSEC(I,3)+XSECCP(IG,ICP,3)
6058   280     CONTINUE
6059           NGEN(0,1)=NGEN(0,1)+NGENCP(IG,0,1)
6060           NGEN(0,2)=NGEN(0,2)+NGENCP(IG,0,2)
6061           NGEN(0,3)=NGEN(0,3)+NGENCP(IG,0,3)
6062           XSEC(0,3)=XSEC(0,3)+XSECCP(IG,0,3)
6063   290   CONTINUE
6064       ENDIF
6065  
6066       RETURN
6067       END
6068  
6069 C*********************************************************************
6070  
6071 C...PYGAGA
6072 C...For lepton beams it gives photon-hadron or photon-photon systems
6073 C...to be treated with the ordinary machinery and combines this with a
6074 C...description of the lepton -> lepton + photon branching.
6075  
6076       SUBROUTINE PYGAGA(IGAGA,WTGAGA)
6077  
6078 C...Double precision and integer declarations.
6079       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
6080       IMPLICIT INTEGER(I-N)
6081       INTEGER PYK,PYCHGE,PYCOMP
6082 C...Commonblocks.
6083       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
6084       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
6085       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
6086       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
6087       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
6088       COMMON/PYINT1/MINT(400),VINT(400)
6089       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
6090       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/,
6091      &/PYINT5/
6092 C...Local variables and data statement.
6093       DIMENSION PMS(2),XMIN(2),XMAX(2),Q2MIN(2),Q2MAX(2),PMC(3),
6094      &X(2),Q2(2),Y(2),THETA(2),PHI(2),PT(2),BETA(3)
6095       SAVE PMS,XMIN,XMAX,Q2MIN,Q2MAX,PMC,X,Q2,THETA,PHI,PT,W2MIN
6096       DATA EPS/1D-4/
6097  
6098 C...Initialize generation of photons inside leptons.
6099       IF(IGAGA.EQ.1) THEN
6100  
6101 C...Save quantities on incoming lepton system.
6102         VINT(301)=VINT(1)
6103         VINT(302)=VINT(2)
6104         PMS(1)=VINT(303)**2
6105         IF(MINT(141).EQ.0) PMS(1)=SIGN(VINT(3)**2,VINT(3))
6106         PMS(2)=VINT(304)**2
6107         IF(MINT(142).EQ.0) PMS(2)=SIGN(VINT(4)**2,VINT(4))
6108         PMC(3)=VINT(302)-PMS(1)-PMS(2)
6109         W2MIN=MAX(CKIN(77),2D0*CKIN(3),2D0*CKIN(5))**2
6110  
6111 C...Calculate range of x and Q2 values allowed in generation.
6112         DO 100 I=1,2
6113           PMC(I)=VINT(302)+PMS(I)-PMS(3-I)
6114           IF(MINT(140+I).NE.0) THEN
6115             XMIN(I)=MAX(CKIN(59+2*I),EPS)
6116             XMAX(I)=MIN(CKIN(60+2*I),1D0-2D0*VINT(301)*SQRT(PMS(I))/
6117      &      PMC(I),1D0-EPS)
6118             YMIN=MAX(CKIN(71+2*I),EPS)
6119             YMAX=MIN(CKIN(72+2*I),1D0-EPS)
6120             IF(CKIN(64+2*I).GT.0D0) XMIN(I)=MAX(XMIN(I),
6121      &      (YMIN*PMC(3)-CKIN(64+2*I))/PMC(I))
6122             XMAX(I)=MIN(XMAX(I),(YMAX*PMC(3)-CKIN(63+2*I))/PMC(I))
6123             THEMIN=MAX(CKIN(67+2*I),0D0)
6124             THEMAX=MIN(CKIN(68+2*I),PARU(1))
6125             IF(CKIN(68+2*I).LT.0D0) THEMAX=PARU(1)
6126             Q2MIN(I)=MAX(CKIN(63+2*I),XMIN(I)**2*PMS(I)/(1D0-XMIN(I))+
6127      &      ((1D0-XMAX(I))*(VINT(302)-2D0*PMS(3-I))-
6128      &      2D0*PMS(I)/(1D0-XMAX(I)))*SIN(THEMIN/2D0)**2,0D0)
6129             Q2MAX(I)=XMAX(I)**2*PMS(I)/(1D0-XMAX(I))+
6130      &      ((1D0-XMIN(I))*(VINT(302)-2D0*PMS(3-I))-
6131      &      2D0*PMS(I)/(1D0-XMIN(I)))*SIN(THEMAX/2D0)**2
6132             IF(CKIN(64+2*I).GT.0D0) Q2MAX(I)=MIN(CKIN(64+2*I),Q2MAX(I))
6133 C...W limits when lepton on one side only.
6134             IF(MINT(143-I).EQ.0) THEN
6135               XMIN(I)=MAX(XMIN(I),(W2MIN-PMS(3-I))/PMC(I))
6136               IF(CKIN(78).GT.0D0) XMAX(I)=MIN(XMAX(I),
6137      &        (CKIN(78)**2-PMS(3-I))/PMC(I))
6138             ENDIF
6139           ENDIF
6140   100   CONTINUE
6141  
6142 C...W limits when lepton on both sides.
6143         IF(MINT(141).NE.0.AND.MINT(142).NE.0) THEN
6144           IF(CKIN(78).GT.0D0) XMAX(1)=MIN(XMAX(1),
6145      &    (CKIN(78)**2+PMC(3)-PMC(2)*XMIN(2))/PMC(1))
6146           IF(CKIN(78).GT.0D0) XMAX(2)=MIN(XMAX(2),
6147      &    (CKIN(78)**2+PMC(3)-PMC(1)*XMIN(1))/PMC(2))
6148           IF(IABS(MINT(141)).NE.IABS(MINT(142))) THEN
6149             XMIN(1)=MAX(XMIN(1),(PMS(1)-PMS(2)+VINT(302)*(W2MIN-
6150      &      PMS(1)-PMS(2))/(PMC(2)*XMAX(2)+PMS(1)-PMS(2)))/PMC(1))
6151             XMIN(2)=MAX(XMIN(2),(PMS(2)-PMS(1)+VINT(302)*(W2MIN-
6152      &      PMS(1)-PMS(2))/(PMC(1)*XMAX(1)+PMS(2)-PMS(1)))/PMC(2))
6153           ELSE
6154             XMIN(1)=MAX(XMIN(1),W2MIN/(VINT(302)*XMAX(2)))
6155             XMIN(2)=MAX(XMIN(2),W2MIN/(VINT(302)*XMAX(1)))
6156           ENDIF
6157         ENDIF
6158  
6159 C...Q2 and W values and photon flux weight factors for initialization.
6160       ELSEIF(IGAGA.EQ.2) THEN
6161         ISUB=MINT(1)
6162         MINT(15)=0
6163         MINT(16)=0
6164  
6165 C...W value for photon on one or both sides, and for processes
6166 C...with gamma-gamma cross section peaked at small shat.
6167         IF(MINT(141).NE.0.AND.MINT(142).EQ.0) THEN
6168           VINT(2)=VINT(302)+PMS(1)-PMC(1)*(1D0-XMAX(1))
6169         ELSEIF(MINT(141).EQ.0.AND.MINT(142).NE.0) THEN
6170           VINT(2)=VINT(302)+PMS(2)-PMC(2)*(1D0-XMAX(2))
6171         ELSEIF(ISUB.GE.137.AND.ISUB.LE.140) THEN
6172           VINT(2)=MAX(CKIN(77)**2,12D0*MAX(CKIN(3),CKIN(5))**2)
6173           IF(CKIN(78).GT.0D0) VINT(2)=MIN(VINT(2),CKIN(78)**2)
6174         ELSE
6175           VINT(2)=XMAX(1)*XMAX(2)*VINT(302)
6176           IF(CKIN(78).GT.0D0) VINT(2)=MIN(VINT(2),CKIN(78)**2)
6177         ENDIF
6178         VINT(1)=SQRT(MAX(0D0,VINT(2)))
6179  
6180 C...Upper estimate of photon flux weight factor.
6181 C...Initialization Q2 scale. Flag incoming unresolved photon.
6182         WTGAGA=1D0
6183         DO 110 I=1,2
6184           IF(MINT(140+I).NE.0) THEN
6185             WTGAGA=WTGAGA*2D0*(PARU(101)/PARU(2))*
6186      &      LOG(XMAX(I)/XMIN(I))*LOG(Q2MAX(I)/Q2MIN(I))
6187             IF(ISUB.EQ.99.AND.MINT(106+I).EQ.4.AND.MINT(109-I).EQ.3) 
6188      &      THEN
6189               Q2INIT=5D0+Q2MIN(3-I)
6190             ELSEIF(ISUB.EQ.99.AND.MINT(106+I).EQ.4) THEN
6191               Q2INIT=PMAS(PYCOMP(113),1)**2+Q2MIN(3-I)
6192             ELSEIF(ISUB.EQ.132.OR.ISUB.EQ.134.OR.ISUB.EQ.136) THEN
6193               Q2INIT=MAX(CKIN(1),2D0*CKIN(3),2D0*CKIN(5))**2/3D0
6194             ELSEIF((ISUB.EQ.138.AND.I.EQ.2).OR.
6195      &      (ISUB.EQ.139.AND.I.EQ.1)) THEN
6196               Q2INIT=VINT(2)/3D0
6197             ELSEIF(ISUB.EQ.140) THEN
6198               Q2INIT=VINT(2)/2D0
6199             ELSE
6200               Q2INIT=Q2MIN(I)
6201             ENDIF
6202             VINT(2+I)=-SQRT(MAX(Q2MIN(I),MIN(Q2MAX(I),Q2INIT)))
6203             IF(MSTP(14).EQ.0.OR.(ISUB.GE.131.AND.ISUB.LE.140)) 
6204      &      MINT(14+I)=22
6205             VINT(306+I)=VINT(2+I)**2
6206           ENDIF
6207   110   CONTINUE
6208         VINT(320)=WTGAGA
6209
6210 C...Update pTmin and cross section information.
6211         IF(MSTP(82).LE.1) THEN
6212           PTMN=PARP(81)*(VINT(1)/PARP(89))**PARP(90)
6213         ELSE
6214           PTMN=PARP(82)*(VINT(1)/PARP(89))**PARP(90)
6215         ENDIF
6216         VINT(149)=4D0*PTMN**2/VINT(2)
6217         VINT(154)=PTMN 
6218         CALL PYXTOT
6219         VINT(318)=VINT(317)
6220  
6221 C...Generate photons inside leptons and
6222 C...calculate photon flux weight factors.
6223       ELSEIF(IGAGA.EQ.3) THEN
6224         ISUB=MINT(1)
6225         MINT(15)=0
6226         MINT(16)=0
6227  
6228 C...Generate phase space point and check against cuts.
6229         LOOP=0
6230   120   LOOP=LOOP+1
6231         DO 130 I=1,2
6232           IF(MINT(140+I).NE.0) THEN
6233 C...Pick x and Q2
6234             X(I)=XMIN(I)*(XMAX(I)/XMIN(I))**PYR(0)
6235             Q2(I)=Q2MIN(I)*(Q2MAX(I)/Q2MIN(I))**PYR(0)
6236 C...Cuts on internal consistency in x and Q2.
6237             IF(Q2(I).LT.X(I)**2*PMS(I)/(1D0-X(I))) GOTO 120
6238             IF(Q2(I).GT.(1D0-X(I))*(VINT(302)-2D0*PMS(3-I))-
6239      &      (2D0-X(I)**2)*PMS(I)/(1D0-X(I))) GOTO 120
6240 C...Cuts on y and theta.
6241             Y(I)=(PMC(I)*X(I)+Q2(I))/PMC(3)
6242             IF(Y(I).LT.CKIN(71+2*I).OR.Y(I).GT.CKIN(72+2*I)) GOTO 120
6243             RAT=((1D0-X(I))*Q2(I)-X(I)**2*PMS(I))/
6244      &      ((1D0-X(I))**2*(VINT(302)-2D0*PMS(3-I)-2D0*PMS(I)))
6245             THETA(I)=2D0*ASIN(SQRT(MAX(0D0,MIN(1D0,RAT))))
6246             IF(THETA(I).LT.CKIN(67+2*I)) GOTO 120
6247             IF(CKIN(68+2*I).GT.0D0.AND.THETA(I).GT.CKIN(68+2*I))
6248      &      GOTO 120
6249  
6250 C...Phi angle isotropic. Reconstruct pT.
6251             PHI(I)=PARU(2)*PYR(0)
6252             PT(I)=SQRT(((1D0-X(I))*PMC(I))**2/(4D0*VINT(302))-
6253      &      PMS(I))*SIN(THETA(I))
6254  
6255 C...Store info on variables selected, for documentation purposes.
6256             VINT(2+I)=-SQRT(Q2(I))
6257             VINT(304+I)=X(I)
6258             VINT(306+I)=Q2(I)
6259             VINT(308+I)=Y(I)
6260             VINT(310+I)=THETA(I)
6261             VINT(312+I)=PHI(I)
6262           ELSE
6263             VINT(304+I)=1D0
6264             VINT(306+I)=0D0
6265             VINT(308+I)=1D0
6266             VINT(310+I)=0D0
6267             VINT(312+I)=0D0
6268           ENDIF
6269   130   CONTINUE
6270  
6271 C...Cut on W combines info from two sides.
6272         IF(MINT(141).NE.0.AND.MINT(142).NE.0) THEN
6273           W2=-Q2(1)-Q2(2)+0.5D0*X(1)*PMC(1)*X(2)*PMC(2)/VINT(302)-
6274      &    2D0*PT(1)*PT(2)*COS(PHI(1)-PHI(2))+2D0*
6275      &    SQRT((0.5D0*X(1)*PMC(1)/VINT(301))**2+Q2(1)-PT(1)**2)*
6276      &    SQRT((0.5D0*X(2)*PMC(2)/VINT(301))**2+Q2(2)-PT(2)**2)
6277           IF(W2.LT.W2MIN) GOTO 120
6278           IF(CKIN(78).GT.0D0.AND.W2.GT.CKIN(78)**2) GOTO 120
6279           PMS1=-Q2(1)
6280           PMS2=-Q2(2)
6281         ELSEIF(MINT(141).NE.0) THEN
6282           W2=(VINT(302)+PMS(1))*X(1)+PMS(2)*(1D0-X(1))
6283           PMS1=-Q2(1)
6284           PMS2=PMS(2)
6285         ELSEIF(MINT(142).NE.0) THEN
6286           W2=(VINT(302)+PMS(2))*X(2)+PMS(1)*(1D0-X(2))
6287           PMS1=PMS(1)
6288           PMS2=-Q2(2)
6289         ENDIF
6290  
6291 C...Store kinematics info for photon(s) in subsystem cm frame.
6292         VINT(2)=W2
6293         VINT(1)=SQRT(W2)
6294         VINT(291)=0D0
6295         VINT(292)=0D0
6296         VINT(293)=0.5D0*SQRT((W2-PMS1-PMS2)**2-4D0*PMS1*PMS2)/VINT(1)
6297         VINT(294)=0.5D0*(W2+PMS1-PMS2)/VINT(1)
6298         VINT(295)=SIGN(SQRT(ABS(PMS1)),PMS1)
6299         VINT(296)=0D0
6300         VINT(297)=0D0
6301         VINT(298)=-VINT(293)
6302         VINT(299)=0.5D0*(W2+PMS2-PMS1)/VINT(1)
6303         VINT(300)=SIGN(SQRT(ABS(PMS2)),PMS2)
6304  
6305 C...Assign weight for photon flux; different for transverse and
6306 C...longitudinal photons. Flag incoming unresolved photon.
6307         WTGAGA=1D0
6308         DO 140 I=1,2
6309           IF(MINT(140+I).NE.0) THEN
6310             WTGAGA=WTGAGA*2D0*(PARU(101)/PARU(2))*
6311      &      LOG(XMAX(I)/XMIN(I))*LOG(Q2MAX(I)/Q2MIN(I))
6312             IF(MSTP(16).EQ.0) THEN 
6313               XY=X(I)
6314             ELSE
6315               WTGAGA=WTGAGA*X(I)/Y(I)
6316               XY=Y(I)
6317             ENDIF
6318             IF(ISUB.EQ.132.OR.ISUB.EQ.134.OR.ISUB.EQ.136) THEN
6319               WTGAGA=WTGAGA*(1D0-XY)
6320             ELSEIF(I.EQ.1.AND.(ISUB.EQ.139.OR.ISUB.EQ.140)) THEN
6321               WTGAGA=WTGAGA*(1D0-XY)
6322             ELSEIF(I.EQ.2.AND.(ISUB.EQ.138.OR.ISUB.EQ.140)) THEN
6323               WTGAGA=WTGAGA*(1D0-XY)
6324             ELSE
6325               WTGAGA=WTGAGA*(0.5D0*(1D0+(1D0-XY)**2)-
6326      &        PMS(I)*XY**2/Q2(I))
6327             ENDIF
6328             IF(MINT(106+I).EQ.0) MINT(14+I)=22  
6329           ENDIF
6330   140   CONTINUE
6331         VINT(319)=WTGAGA
6332         MINT(143)=LOOP
6333
6334 C...Update pTmin and cross section information.
6335         IF(MSTP(82).LE.1) THEN
6336           PTMN=PARP(81)*(VINT(1)/PARP(89))**PARP(90)
6337         ELSE
6338           PTMN=PARP(82)*(VINT(1)/PARP(89))**PARP(90)
6339         ENDIF
6340         VINT(149)=4D0*PTMN**2/VINT(2)
6341         VINT(154)=PTMN
6342         CALL PYXTOT
6343  
6344 C...Reconstruct kinematics of photons inside leptons.
6345       ELSEIF(IGAGA.EQ.4) THEN
6346  
6347 C...Make place for incoming particles and scattered leptons.
6348         MOVE=3
6349         IF(MINT(141).NE.0.AND.MINT(142).NE.0) MOVE=4
6350         MINT(4)=MINT(4)+MOVE
6351         DO 160 I=MINT(84)-MOVE,MINT(83)+1,-1
6352           IF(K(I,1).EQ.21) THEN
6353             DO 150 J=1,5
6354               K(I+MOVE,J)=K(I,J)
6355               P(I+MOVE,J)=P(I,J)
6356               V(I+MOVE,J)=V(I,J)
6357   150       CONTINUE
6358             IF(K(I,3).GT.MINT(83).AND.K(I,3).LE.MINT(84))
6359      &      K(I+MOVE,3)=K(I,3)+MOVE
6360             IF(K(I,4).GT.MINT(83).AND.K(I,4).LE.MINT(84))
6361      &      K(I+MOVE,4)=K(I,4)+MOVE
6362             IF(K(I,5).GT.MINT(83).AND.K(I,5).LE.MINT(84))
6363      &      K(I+MOVE,5)=K(I,5)+MOVE
6364           ENDIF
6365   160   CONTINUE
6366         DO 170 I=MINT(84)+1,N
6367           IF(K(I,3).GT.MINT(83).AND.K(I,3).LE.MINT(84))
6368      &    K(I,3)=K(I,3)+MOVE
6369   170   CONTINUE
6370  
6371 C...Fill in incoming particles.
6372         DO 190 I=MINT(83)+1,MINT(83)+MOVE
6373           DO 180 J=1,5
6374             K(I,J)=0
6375             P(I,J)=0D0
6376             V(I,J)=0D0
6377   180     CONTINUE
6378   190   CONTINUE
6379         DO 200 I=1,2
6380           K(MINT(83)+I,1)=21
6381           IF(MINT(140+I).NE.0) THEN
6382             K(MINT(83)+I,2)=MINT(140+I)
6383             P(MINT(83)+I,5)=VINT(302+I)
6384           ELSE
6385             K(MINT(83)+I,2)=MINT(10+I)
6386             P(MINT(83)+I,5)=VINT(2+I)
6387           ENDIF
6388           P(MINT(83)+I,3)=0.5D0*SQRT((PMC(3)**2-4D0*PMS(1)*PMS(2))/
6389      &    VINT(302))*(-1D0)**(I+1)
6390           P(MINT(83)+I,4)=0.5D0*PMC(I)/VINT(301)
6391   200   CONTINUE
6392  
6393 C...New mother-daughter relations in documentation section.
6394         IF(MINT(141).NE.0.AND.MINT(142).NE.0) THEN
6395           K(MINT(83)+1,4)=MINT(83)+3
6396           K(MINT(83)+1,5)=MINT(83)+5
6397           K(MINT(83)+2,4)=MINT(83)+4
6398           K(MINT(83)+2,5)=MINT(83)+6
6399           K(MINT(83)+3,3)=MINT(83)+1
6400           K(MINT(83)+5,3)=MINT(83)+1
6401           K(MINT(83)+4,3)=MINT(83)+2
6402           K(MINT(83)+6,3)=MINT(83)+2
6403         ELSEIF(MINT(141).NE.0) THEN
6404           K(MINT(83)+1,4)=MINT(83)+3
6405           K(MINT(83)+1,5)=MINT(83)+4
6406           K(MINT(83)+2,4)=MINT(83)+5
6407           K(MINT(83)+3,3)=MINT(83)+1
6408           K(MINT(83)+4,3)=MINT(83)+1
6409           K(MINT(83)+5,3)=MINT(83)+2
6410         ELSEIF(MINT(142).NE.0) THEN
6411           K(MINT(83)+1,4)=MINT(83)+4
6412           K(MINT(83)+2,4)=MINT(83)+3
6413           K(MINT(83)+2,5)=MINT(83)+5
6414           K(MINT(83)+3,3)=MINT(83)+2
6415           K(MINT(83)+4,3)=MINT(83)+1
6416           K(MINT(83)+5,3)=MINT(83)+2
6417         ENDIF
6418  
6419 C...Fill scattered lepton(s).
6420         DO 210 I=1,2
6421           IF(MINT(140+I).NE.0) THEN
6422             LSC=MINT(83)+MIN(I+2,MOVE)
6423             K(LSC,1)=21
6424             K(LSC,2)=MINT(140+I)
6425             P(LSC,1)=PT(I)*COS(PHI(I))
6426             P(LSC,2)=PT(I)*SIN(PHI(I))
6427             P(LSC,4)=(1D0-X(I))*P(MINT(83)+I,4)
6428             P(LSC,3)=SQRT(P(LSC,4)**2-PMS(I))*COS(THETA(I))*
6429      &      (-1D0)**(I-1)
6430             P(LSC,5)=VINT(302+I)
6431           ENDIF
6432   210   CONTINUE
6433  
6434 C...Find incoming four-vectors to subprocess.
6435         K(N+1,1)=21
6436         IF(MINT(141).NE.0) THEN
6437           DO 220 J=1,4
6438             P(N+1,J)=P(MINT(83)+1,J)-P(MINT(83)+3,J)
6439   220     CONTINUE
6440         ELSE
6441           DO 230 J=1,4
6442             P(N+1,J)=P(MINT(83)+1,J)
6443   230     CONTINUE
6444         ENDIF
6445         K(N+2,1)=21
6446         IF(MINT(142).NE.0) THEN
6447           DO 240 J=1,4
6448             P(N+2,J)=P(MINT(83)+2,J)-P(MINT(83)+MOVE,J)
6449   240     CONTINUE
6450         ELSE
6451           DO 250 J=1,4
6452             P(N+2,J)=P(MINT(83)+2,J)
6453   250     CONTINUE
6454         ENDIF
6455  
6456 C...Define boost and rotation between hadronic subsystem and
6457 C...collision rest frame; boost hadronic subsystem to this frame.
6458         DO 260 J=1,3
6459           BETA(J)=(P(N+1,J)+P(N+2,J))/(P(N+1,4)+P(N+2,4))
6460   260   CONTINUE
6461         CALL PYROBO(N+1,N+2,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
6462         BPHI=PYANGL(P(N+1,1),P(N+1,2))
6463         CALL PYROBO(N+1,N+2,0D0,-BPHI,0D0,0D0,0D0)
6464         BTHETA=PYANGL(P(N+1,3),P(N+1,1))
6465         CALL PYROBO(MINT(83)+MOVE+1,N,BTHETA,BPHI,BETA(1),BETA(2),
6466      &  BETA(3))
6467  
6468 C...Add on scattered leptons to final state.
6469         DO 280 I=1,2
6470           IF(MINT(140+I).NE.0) THEN
6471             LSC=MINT(83)+MIN(I+2,MOVE)
6472             N=N+1
6473             DO 270 J=1,5
6474               K(N,J)=K(LSC,J)
6475               P(N,J)=P(LSC,J)
6476               V(N,J)=V(LSC,J)
6477   270       CONTINUE
6478             K(N,1)=1
6479             K(N,3)=LSC
6480           ENDIF
6481   280   CONTINUE
6482       ENDIF
6483  
6484       RETURN
6485       END
6486  
6487 C*********************************************************************
6488  
6489 C...PYRAND
6490 C...Generates quantities characterizing the high-pT scattering at the
6491 C...parton level according to the matrix elements. Chooses incoming,
6492 C...reacting partons, their momentum fractions and one of the possible
6493 C...subprocesses.
6494  
6495       SUBROUTINE PYRAND
6496  
6497 C...Double precision and integer declarations.
6498       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
6499       IMPLICIT INTEGER(I-N)
6500       INTEGER PYK,PYCHGE,PYCOMP
6501 C...Parameter statement to help give large particle numbers.
6502       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
6503 C...Commonblocks.
6504       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
6505       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
6506       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
6507       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
6508       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
6509       COMMON/PYINT1/MINT(400),VINT(400)
6510       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
6511       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
6512       COMMON/PYINT4/MWID(500),WIDS(500,5)
6513       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
6514       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
6515       COMMON/PYUPPR/NUP,KUP(20,7),NFUP,IFUP(10,2),PUP(20,5),Q2UP(0:10)
6516       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
6517       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
6518      &/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,/PYINT7/,/PYUPPR/,/PYMSSM/
6519 C...Local arrays.
6520       DIMENSION XPQ(-25:25),PMM(2),PDIF(4),BHAD(4),PMMN(2)
6521  
6522 C...Parameters and data used in elastic/diffractive treatment.
6523       DATA EPS/0.0808D0/, ALP/0.25D0/, CRES/2D0/, PMRC/1.062D0/,
6524      &SMP/0.880D0/, BHAD/2.3D0,1.4D0,1.4D0,0.23D0/
6525  
6526 C...Initial values, specifically for (first) semihard interaction.
6527       MINT(10)=0
6528       MINT(17)=0
6529       MINT(18)=0
6530       VINT(143)=1D0
6531       VINT(144)=1D0
6532       VINT(157)=0D0
6533       VINT(158)=0D0
6534       MFAIL=0
6535       IF(MSTP(171).EQ.1.AND.MSTP(172).EQ.2) MFAIL=1
6536       ISUB=0
6537       LOOP=0
6538   100 LOOP=LOOP+1
6539       MINT(51)=0
6540       MINT(143)=1
6541
6542 C...Start by assuming incoming photon is entering subprocess.
6543       IF(MINT(11).EQ.22) THEN
6544          MINT(15)=22
6545          VINT(307)=VINT(3)**2
6546       ENDIF
6547       IF(MINT(12).EQ.22) THEN
6548          MINT(16)=22
6549          VINT(308)=VINT(4)**2
6550       ENDIF
6551       MINT(103)=MINT(11)
6552       MINT(104)=MINT(12)
6553  
6554 C...Choice of process type - first event of pileup.
6555       INMULT=0 
6556       IF(MINT(82).EQ.1.AND.(ISUB.LE.90.OR.ISUB.GT.96)) THEN
6557  
6558 C...For gamma-p or gamma-gamma first pick between alternatives.
6559         IGA=0
6560         IF(MINT(121).GT.1) CALL PYSAVE(4,IGA)
6561         MINT(122)=IGA
6562  
6563 C...For real gamma + gamma with different nature, flip at random.
6564         IF(MINT(11).EQ.22.AND.MINT(12).EQ.22.AND.MINT(123).GE.4.AND.
6565      &  MSTP(14).LE.10.AND.PYR(0).GT.0.5D0) THEN
6566           MINTSV=MINT(41)
6567           MINT(41)=MINT(42)
6568           MINT(42)=MINTSV
6569           MINTSV=MINT(45)
6570           MINT(45)=MINT(46)
6571           MINT(46)=MINTSV
6572           MINTSV=MINT(107)
6573           MINT(107)=MINT(108)
6574           MINT(108)=MINTSV
6575           IF(MINT(47).EQ.2.OR.MINT(47).EQ.3) MINT(47)=5-MINT(47)
6576         ENDIF
6577  
6578 C...Pick process type.
6579         RSUB=XSEC(0,1)*PYR(0)
6580         DO 110 I=1,500
6581           IF(MSUB(I).NE.1) GOTO 110
6582           ISUB=I
6583           RSUB=RSUB-XSEC(I,1)
6584           IF(RSUB.LE.0D0) GOTO 120
6585   110   CONTINUE
6586   120   IF(ISUB.EQ.95) ISUB=96
6587         IF(ISUB.EQ.96) INMULT=1
6588  
6589 C...Choice of inclusive process type - pileup events.
6590       ELSEIF(MINT(82).GE.2.AND.ISUB.EQ.0) THEN
6591         RSUB=VINT(131)*PYR(0)
6592         ISUB=96
6593         IF(RSUB.GT.SIGT(0,0,5)) ISUB=94
6594         IF(RSUB.GT.SIGT(0,0,5)+SIGT(0,0,4)) ISUB=93
6595         IF(RSUB.GT.SIGT(0,0,5)+SIGT(0,0,4)+SIGT(0,0,3)) ISUB=92
6596         IF(RSUB.GT.SIGT(0,0,5)+SIGT(0,0,4)+SIGT(0,0,3)+SIGT(0,0,2))
6597      &  ISUB=91
6598         IF(ISUB.EQ.96) INMULT=1
6599       ENDIF
6600  
6601 C...Choice of photon energy and flux factor inside lepton.
6602       IF(MINT(141).NE.0.OR.MINT(142).NE.0) THEN
6603         CALL PYGAGA(3,WTGAGA)
6604         IF(ISUB.GE.131.AND.ISUB.LE.140) THEN
6605           CKIN(3)=MAX(VINT(285),VINT(154))
6606           CKIN(1)=2D0*CKIN(3)
6607         ENDIF
6608 C...When necessary set direct/resolved photon by hand.
6609       ELSEIF(MINT(15).EQ.22.OR.MINT(16).EQ.22) THEN
6610         IF(MINT(15).EQ.22.AND.MINT(41).EQ.2) MINT(15)=0
6611         IF(MINT(16).EQ.22.AND.MINT(42).EQ.2) MINT(16)=0
6612       ENDIF
6613
6614 C...Restrict direct*resolved processes to pTmin >= Q, 
6615 C...to avoid doublecounting  with DIS.
6616       IF(MSTP(18).EQ.3.AND.ISUB.GE.131.AND.ISUB.LE.136) THEN
6617         IF(MINT(15).EQ.22) THEN
6618           CKIN(3)=MAX(VINT(285),VINT(154),ABS(VINT(3))) 
6619         ELSE
6620           CKIN(3)=MAX(VINT(285),VINT(154),ABS(VINT(4))) 
6621         ENDIF 
6622         CKIN(1)=2D0*CKIN(3)        
6623       ENDIF
6624
6625 C...Set up for multiple interactions.
6626       IF(INMULT.EQ.1) CALL PYMULT(2)
6627
6628 C...Loopback point for minimum bias in photon physics.
6629       LOOP2=0
6630   125 LOOP2=LOOP2+1 
6631       IF(MINT(82).EQ.1) NGEN(0,1)=NGEN(0,1)+MINT(143)
6632       IF(MINT(82).EQ.1) NGEN(ISUB,1)=NGEN(ISUB,1)+MINT(143)
6633       IF(ISUB.EQ.96.AND.LOOP2.EQ.1.AND.MINT(82).EQ.1)
6634      &NGEN(97,1)=NGEN(97,1)+MINT(143)
6635       MINT(1)=ISUB
6636       ISTSB=ISET(ISUB)
6637  
6638 C...Random choice of flavour for some SUSY processes.
6639       IF(ISUB.GE.201.AND.ISUB.LE.301) THEN
6640 C...~e_L ~nu_e or ~mu_L ~nu_mu.
6641         IF(ISUB.EQ.210) THEN
6642           KFPR(ISUB,1)=KSUSY1+11+2*INT(0.5D0+PYR(0))
6643           KFPR(ISUB,2)=KFPR(ISUB,1)+1
6644 C...~nu_e ~nu_e(bar) or ~nu_mu ~nu_mu(bar).
6645         ELSEIF(ISUB.EQ.213) THEN
6646           KFPR(ISUB,1)=KSUSY1+12+2*INT(0.5D0+PYR(0))
6647           KFPR(ISUB,2)=KFPR(ISUB,1)
6648 C...~q ~chi/~g; ~q = ~d, ~u, ~s, ~c or ~b.
6649         ELSEIF(ISUB.GE.246.AND.ISUB.LE.259) THEN
6650           IF(ISUB.GE.258) THEN
6651             RKF=4D0
6652           ELSE
6653             RKF=5D0
6654           ENDIF
6655           IF(MOD(ISUB,2).EQ.0) THEN
6656             KFPR(ISUB,1)=KSUSY1+1+INT(RKF*PYR(0))
6657           ELSE
6658             KFPR(ISUB,1)=KSUSY2+1+INT(RKF*PYR(0))
6659           ENDIF
6660 C...~q1 ~q2; ~q = ~d, ~u, ~s, or ~c.
6661         ELSEIF(ISUB.GE.271.AND.ISUB.LE.276) THEN
6662           IF(ISUB.EQ.271.OR.ISUB.EQ.274) THEN
6663             KSU1=KSUSY1
6664             KSU2=KSUSY1
6665           ELSEIF(ISUB.EQ.272.OR.ISUB.EQ.275) THEN
6666             KSU1=KSUSY2
6667             KSU2=KSUSY2
6668           ELSEIF(PYR(0).LT.0.5D0) THEN
6669             KSU1=KSUSY1
6670             KSU2=KSUSY2
6671           ELSE
6672             KSU1=KSUSY2
6673             KSU2=KSUSY1
6674           ENDIF
6675           KFPR(ISUB,1)=KSU1+1+INT(4D0*PYR(0))
6676           KFPR(ISUB,2)=KSU2+1+INT(4D0*PYR(0))
6677 C...~q ~q(bar);  ~q = ~d, ~u, ~s, or ~c.
6678         ELSEIF(ISUB.EQ.277.OR.ISUB.EQ.279) THEN
6679           KFPR(ISUB,1)=KSUSY1+1+INT(4D0*PYR(0))
6680           KFPR(ISUB,2)=KFPR(ISUB,1)
6681         ELSEIF(ISUB.EQ.278.OR.ISUB.EQ.280) THEN
6682           KFPR(ISUB,1)=KSUSY2+1+INT(4D0*PYR(0))
6683           KFPR(ISUB,2)=KFPR(ISUB,1)
6684 C...~q1 ~q2; ~q = ~d, ~u, ~s, or ~c.
6685         ELSEIF(ISUB.GE.281.AND.ISUB.LE.286) THEN
6686           IF(ISUB.EQ.281.OR.ISUB.EQ.284) THEN
6687             KSU1=KSUSY1
6688             KSU2=KSUSY1
6689           ELSEIF(ISUB.EQ.282.OR.ISUB.EQ.285) THEN
6690             KSU1=KSUSY2
6691             KSU2=KSUSY2
6692           ELSEIF(PYR(0).LT.0.5D0) THEN
6693             KSU1=KSUSY1
6694             KSU2=KSUSY2
6695           ELSE
6696             KSU1=KSUSY2
6697             KSU2=KSUSY1
6698           ENDIF
6699           IF(ISUB.EQ.281.OR.ISUB.LE.283) THEN
6700             RKF=5D0
6701           ELSE
6702             RKF=4D0
6703           ENDIF
6704           KFPR(ISUB,2)=KSU2+1+INT(RKF*PYR(0))
6705         ENDIF
6706       ENDIF
6707  
6708 C...Find resonances (explicit or implicit in cross-section).
6709       MINT(72)=0
6710       KFR1=0
6711       IF(ISTSB.EQ.1.OR.ISTSB.EQ.3.OR.ISTSB.EQ.5) THEN
6712         KFR1=KFPR(ISUB,1)
6713       ELSEIF(ISUB.EQ.24.OR.ISUB.EQ.25.OR.ISUB.EQ.110.OR.ISUB.EQ.165.OR.
6714      &  ISUB.EQ.171.OR.ISUB.EQ.176) THEN
6715         KFR1=23
6716       ELSEIF(ISUB.EQ.23.OR.ISUB.EQ.26.OR.ISUB.EQ.166.OR.ISUB.EQ.172.OR.
6717      &  ISUB.EQ.177) THEN
6718         KFR1=24
6719       ELSEIF(ISUB.GE.71.AND.ISUB.LE.77) THEN
6720         KFR1=25
6721         IF(MSTP(46).EQ.5) THEN
6722           KFR1=30
6723           PMAS(30,1)=PARP(45)
6724           PMAS(30,2)=PARP(45)**3/(96D0*PARU(1)*PARP(47)**2)
6725         ENDIF
6726       ELSEIF(ISUB.EQ.194) THEN
6727         KFR1=54
6728       ELSEIF(ISUB.EQ.195) THEN
6729         KFR1=55
6730       ELSEIF(ISUB.GE.361.AND.ISUB.LE.368) THEN
6731         KFR1=54
6732       ELSEIF(ISUB.GE.370.AND.ISUB.LE.377) THEN
6733         KFR1=55
6734       ENDIF
6735       CKMX=CKIN(2)
6736       IF(CKMX.LE.0D0) CKMX=VINT(1)
6737       KCR1=PYCOMP(KFR1)
6738       IF(KFR1.NE.0) THEN
6739         IF(CKIN(1).GT.PMAS(KCR1,1)+20D0*PMAS(KCR1,2).OR.
6740      &  CKMX.LT.PMAS(KCR1,1)-20D0*PMAS(KCR1,2)) KFR1=0
6741       ENDIF
6742       IF(KFR1.NE.0) THEN
6743         TAUR1=PMAS(KCR1,1)**2/VINT(2)
6744         IF(KFR1.EQ.54) THEN
6745           CALL PYTECM(S1,S2)
6746           TAUR1=S1/VINT(2)
6747         ENDIF
6748         GAMR1=PMAS(KCR1,1)*PMAS(KCR1,2)/VINT(2)
6749         MINT(72)=1
6750         MINT(73)=KFR1
6751         VINT(73)=TAUR1
6752         VINT(74)=GAMR1
6753       ENDIF
6754       IF(ISUB.EQ.141.OR.ISUB.EQ.194.OR.(ISUB.GE.364.AND.ISUB.LE.368))
6755      $THEN
6756         KFR2=23
6757         IF(ISUB.EQ.194) THEN
6758           KFR2=56
6759         ELSEIF(ISUB.GE.364.AND.ISUB.LE.368) THEN
6760           KFR2=56
6761         ENDIF
6762         KCR2=PYCOMP(KFR2)
6763         TAUR2=PMAS(KCR2,1)**2/VINT(2)
6764         IF(KFR2.EQ.56) THEN
6765           CALL PYTECM(S1,S2)
6766           TAUR2=S2/VINT(2)
6767         ENDIF
6768         GAMR2=PMAS(KCR2,1)*PMAS(KCR2,2)/VINT(2)
6769         IF(CKIN(1).GT.PMAS(KCR2,1)+20D0*PMAS(KCR2,2).OR.
6770      &  CKMX.LT.PMAS(KCR2,1)-20D0*PMAS(KCR2,2)) KFR2=0
6771         IF(KFR2.NE.0.AND.KFR1.NE.0) THEN
6772           MINT(72)=2
6773           MINT(74)=KFR2
6774           VINT(75)=TAUR2
6775           VINT(76)=GAMR2
6776         ELSEIF(KFR2.NE.0) THEN
6777           KFR1=KFR2
6778           TAUR1=TAUR2
6779           GAMR1=GAMR2
6780           MINT(72)=1
6781           MINT(73)=KFR1
6782           VINT(73)=TAUR1
6783           VINT(74)=GAMR1
6784         ENDIF
6785       ENDIF
6786  
6787 C...Find product masses and minimum pT of process,
6788 C...optionally with broadening according to a truncated Breit-Wigner.
6789       VINT(63)=0D0
6790       VINT(64)=0D0
6791       MINT(71)=0
6792       VINT(71)=CKIN(3)
6793       IF(MINT(82).GE.2) VINT(71)=0D0
6794       VINT(80)=1D0
6795       IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
6796         NBW=0
6797         DO 140 I=1,2
6798           PMMN(I)=0D0
6799           IF(KFPR(ISUB,I).EQ.0) THEN
6800           ELSEIF(MSTP(42).LE.0.OR.PMAS(PYCOMP(KFPR(ISUB,I)),2).LT.
6801      &      PARP(41)) THEN
6802             VINT(62+I)=PMAS(PYCOMP(KFPR(ISUB,I)),1)**2
6803           ELSE
6804             NBW=NBW+1
6805 C...This prevents SUSY/t particles from becoming too light.
6806             KFLW=KFPR(ISUB,I)
6807             IF(KFLW/KSUSY1.EQ.1.OR.KFLW/KSUSY1.EQ.2) THEN
6808               KCW=PYCOMP(KFLW)
6809               PMMN(I)=PMAS(KCW,1)
6810               DO 130 IDC=MDCY(KCW,2),MDCY(KCW,2)+MDCY(KCW,3)-1
6811                 IF(MDME(IDC,1).GT.0.AND.BRAT(IDC).GT.1E-4) THEN
6812                   PMSUM=PMAS(PYCOMP(KFDP(IDC,1)),1)+
6813      &            PMAS(PYCOMP(KFDP(IDC,2)),1)
6814                   IF(KFDP(IDC,3).NE.0) PMSUM=PMSUM+
6815      &            PMAS(PYCOMP(KFDP(IDC,3)),1)
6816                   PMMN(I)=MIN(PMMN(I),PMSUM)
6817                 ENDIF
6818   130         CONTINUE
6819             ELSEIF(KFLW.EQ.6) THEN
6820               PMMN(I)=PMAS(24,1)+PMAS(5,1)
6821             ENDIF
6822           ENDIF
6823   140   CONTINUE
6824         IF(NBW.GE.1) THEN
6825           CKIN41=CKIN(41)
6826           CKIN43=CKIN(43)
6827           CKIN(41)=MAX(PMMN(1),CKIN(41))
6828           CKIN(43)=MAX(PMMN(2),CKIN(43))
6829           CALL PYOFSH(4,0,KFPR(ISUB,1),KFPR(ISUB,2),0D0,PQM3,PQM4)
6830           CKIN(41)=CKIN41
6831           CKIN(43)=CKIN43
6832           IF(MINT(51).EQ.1) THEN
6833             IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
6834             IF(MFAIL.EQ.1) THEN
6835               MSTI(61)=1
6836               RETURN
6837             ENDIF
6838             GOTO 100
6839           ENDIF
6840           VINT(63)=PQM3**2
6841           VINT(64)=PQM4**2
6842         ENDIF
6843         IF(MIN(VINT(63),VINT(64)).LT.CKIN(6)**2) MINT(71)=1
6844         IF(MINT(71).EQ.1) VINT(71)=MAX(CKIN(3),CKIN(5))
6845       ENDIF
6846  
6847 C...Prepare for additional variable choices in 2 -> 3.
6848       IF(ISTSB.EQ.5) THEN
6849         VINT(201)=0D0
6850         IF(KFPR(ISUB,2).GT.0) VINT(201)=PMAS(PYCOMP(KFPR(ISUB,2)),1)
6851         VINT(206)=VINT(201)
6852         VINT(204)=PMAS(23,1)
6853         IF(ISUB.EQ.124.OR.ISUB.EQ.351) VINT(204)=PMAS(24,1)
6854         IF(ISUB.EQ.352) VINT(204)=PMAS(63,1)
6855         IF(ISUB.EQ.121.OR.ISUB.EQ.122.OR.ISUB.EQ.181.OR.ISUB.EQ.182.OR.
6856      &  ISUB.EQ.186.OR.ISUB.EQ.187) VINT(204)=VINT(201)
6857         VINT(209)=VINT(204)
6858       ENDIF
6859  
6860 C...Select incoming VDM particle (rho/omega/phi/J/psi).
6861       IF(ISTSB.NE.0.AND.(MINT(101).GE.2.OR.MINT(102).GE.2).AND.
6862      &(MINT(123).EQ.2.OR.MINT(123).EQ.3.OR.MINT(123).EQ.7)) THEN
6863         VRN=PYR(0)*SIGT(0,0,5)
6864         IF(MINT(101).LE.1) THEN
6865           I1MN=0
6866           I1MX=0
6867         ELSE
6868           I1MN=1
6869           I1MX=MINT(101)
6870         ENDIF
6871         IF(MINT(102).LE.1) THEN
6872           I2MN=0
6873           I2MX=0
6874         ELSE
6875           I2MN=1
6876           I2MX=MINT(102)
6877         ENDIF
6878         DO 160 I1=I1MN,I1MX
6879           KFV1=110*I1+3
6880           DO 150 I2=I2MN,I2MX
6881             KFV2=110*I2+3
6882             VRN=VRN-SIGT(I1,I2,5)
6883             IF(VRN.LE.0D0) GOTO 170
6884   150     CONTINUE
6885   160   CONTINUE
6886   170   IF(MINT(101).GE.2) MINT(103)=KFV1
6887         IF(MINT(102).GE.2) MINT(104)=KFV2
6888       ENDIF
6889  
6890       IF(ISTSB.EQ.0) THEN
6891 C...Elastic scattering or single or double diffractive scattering.
6892  
6893 C...Select incoming particle (rho/omega/phi/J/psi for VDM) and mass.
6894         MINT(103)=MINT(11)
6895         MINT(104)=MINT(12)
6896         PMM(1)=VINT(3)
6897         PMM(2)=VINT(4)
6898         IF(MINT(101).GE.2.OR.MINT(102).GE.2) THEN
6899           JJ=ISUB-90
6900           VRN=PYR(0)*SIGT(0,0,JJ)
6901           IF(MINT(101).LE.1) THEN
6902             I1MN=0
6903             I1MX=0
6904           ELSE
6905             I1MN=1
6906             I1MX=MINT(101)
6907           ENDIF
6908           IF(MINT(102).LE.1) THEN
6909             I2MN=0
6910             I2MX=0
6911           ELSE
6912             I2MN=1
6913             I2MX=MINT(102)
6914           ENDIF
6915           DO 190 I1=I1MN,I1MX
6916             KFV1=110*I1+3
6917             DO 180 I2=I2MN,I2MX
6918               KFV2=110*I2+3
6919               VRN=VRN-SIGT(I1,I2,JJ)
6920               IF(VRN.LE.0D0) GOTO 200
6921   180       CONTINUE
6922   190     CONTINUE
6923   200     IF(MINT(101).GE.2) THEN
6924             MINT(103)=KFV1
6925             PMM(1)=PYMASS(KFV1)
6926           ENDIF
6927           IF(MINT(102).GE.2) THEN
6928             MINT(104)=KFV2
6929             PMM(2)=PYMASS(KFV2)
6930           ENDIF
6931         ENDIF
6932         VINT(67)=PMM(1)
6933         VINT(68)=PMM(2)
6934
6935 C...Select mass for GVMD states (rejecting previous assignment).
6936         Q0S=4D0*PARP(15)**2
6937         Q1S=4D0*VINT(154)**2
6938         LOOP3=0
6939   202   LOOP3=LOOP3+1
6940         DO 208 JT=1,2
6941           IF(MINT(106+JT).EQ.3) THEN 
6942             PS=VINT(2+JT)**2
6943             PMM(JT)=(Q0S+PS)*(Q1S+PS)/
6944      &      (Q0S+PYR(0)*(Q1S-Q0S)+PS)-PS
6945             IF(MINT(102+JT).GE.333) PMM(JT)=PMM(JT)-
6946      &      PMAS(PYCOMP(113),1)+PMAS(PYCOMP(MINT(102+JT)),1)
6947           ENDIF
6948   208   CONTINUE
6949         IF(PMM(1)+PMM(2)+PARP(104).GE.VINT(1)) THEN
6950           IF(LOOP3.LT.100.AND.(MINT(107).EQ.3.OR.MINT(108).EQ.3)) 
6951      &    GOTO 202
6952           GOTO 100
6953         ENDIF
6954  
6955 C...Side/sides of diffractive system.
6956         MINT(17)=0
6957         MINT(18)=0
6958         IF(ISUB.EQ.92.OR.ISUB.EQ.94) MINT(17)=1
6959         IF(ISUB.EQ.93.OR.ISUB.EQ.94) MINT(18)=1
6960  
6961 C...Find masses of particles and minimal masses of diffractive states.
6962         DO 210 JT=1,2
6963           PDIF(JT)=PMM(JT)
6964           VINT(68+JT)=PDIF(JT)
6965           IF(MINT(16+JT).EQ.1) PDIF(JT)=PDIF(JT)+PARP(102)
6966   210   CONTINUE
6967         SH=VINT(2)
6968         SQM1=PMM(1)**2
6969         SQM2=PMM(2)**2
6970         SQM3=PDIF(1)**2
6971         SQM4=PDIF(2)**2
6972         SMRES1=(PMM(1)+PMRC)**2
6973         SMRES2=(PMM(2)+PMRC)**2
6974  
6975 C...Find elastic slope and lower limit diffractive slope.
6976         IHA=MAX(2,IABS(MINT(103))/110)
6977         IF(IHA.GE.5) IHA=1
6978         IHB=MAX(2,IABS(MINT(104))/110)
6979         IF(IHB.GE.5) IHB=1
6980         IF(ISUB.EQ.91) THEN
6981           BMN=2D0*BHAD(IHA)+2D0*BHAD(IHB)+4D0*SH**EPS-4.2D0
6982         ELSEIF(ISUB.EQ.92) THEN
6983           BMN=MAX(2D0,2D0*BHAD(IHB))
6984         ELSEIF(ISUB.EQ.93) THEN
6985           BMN=MAX(2D0,2D0*BHAD(IHA))
6986         ELSEIF(ISUB.EQ.94) THEN
6987           BMN=2D0*ALP*4D0
6988         ENDIF
6989  
6990 C...Determine maximum possible t range and coefficient of generation.
6991         SQLA12=(SH-SQM1-SQM2)**2-4D0*SQM1*SQM2
6992         SQLA34=(SH-SQM3-SQM4)**2-4D0*SQM3*SQM4
6993         THA=SH-(SQM1+SQM2+SQM3+SQM4)+(SQM1-SQM2)*(SQM3-SQM4)/SH
6994         THB=SQRT(MAX(0D0,SQLA12))*SQRT(MAX(0D0,SQLA34))/SH
6995         THC=(SQM3-SQM1)*(SQM4-SQM2)+(SQM1+SQM4-SQM2-SQM3)*
6996      &  (SQM1*SQM4-SQM2*SQM3)/SH
6997         THL=-0.5D0*(THA+THB)
6998         THU=THC/THL
6999         THRND=EXP(MAX(-50D0,BMN*(THL-THU)))-1D0
7000  
7001 C...Select diffractive mass/masses according to dm^2/m^2.
7002         LOOP3=0
7003   220   LOOP3=LOOP3+1
7004         DO 230 JT=1,2
7005           IF(MINT(16+JT).EQ.0) THEN
7006             PDIF(2+JT)=PDIF(JT)
7007           ELSE
7008             PMMIN=PDIF(JT)
7009             PMMAX=MAX(VINT(2+JT),VINT(1)-PDIF(3-JT))
7010             PDIF(2+JT)=PMMIN*(PMMAX/PMMIN)**PYR(0)
7011           ENDIF
7012   230   CONTINUE
7013         SQM3=PDIF(3)**2
7014         SQM4=PDIF(4)**2
7015  
7016 C..Additional mass factors, including resonance enhancement.
7017         IF(PDIF(3)+PDIF(4).GE.VINT(1)) THEN
7018           IF(LOOP3.LT.100) GOTO 220
7019           GOTO 100
7020         ENDIF
7021         IF(ISUB.EQ.92) THEN
7022           FSD=(1D0-SQM3/SH)*(1D0+CRES*SMRES1/(SMRES1+SQM3))
7023           IF(FSD.LT.PYR(0)*(1D0+CRES)) GOTO 220
7024         ELSEIF(ISUB.EQ.93) THEN
7025           FSD=(1D0-SQM4/SH)*(1D0+CRES*SMRES2/(SMRES2+SQM4))
7026           IF(FSD.LT.PYR(0)*(1D0+CRES)) GOTO 220
7027         ELSEIF(ISUB.EQ.94) THEN
7028           FDD=(1D0-(PDIF(3)+PDIF(4))**2/SH)*(SH*SMP/
7029      &    (SH*SMP+SQM3*SQM4))*(1D0+CRES*SMRES1/(SMRES1+SQM3))*
7030      &    (1D0+CRES*SMRES2/(SMRES2+SQM4))
7031           IF(FDD.LT.PYR(0)*(1D0+CRES)**2) GOTO 220
7032         ENDIF
7033  
7034 C...Select t according to exp(Bmn*t) and correct to right slope.
7035         TH=THU+LOG(1D0+THRND*PYR(0))/BMN
7036         IF(ISUB.GE.92) THEN
7037           IF(ISUB.EQ.92) THEN
7038             BADD=2D0*ALP*LOG(SH/SQM3)
7039             IF(BHAD(IHB).LT.1D0) BADD=MAX(0D0,BADD+2D0*BHAD(IHB)-2D0)
7040           ELSEIF(ISUB.EQ.93) THEN
7041             BADD=2D0*ALP*LOG(SH/SQM4)
7042             IF(BHAD(IHA).LT.1D0) BADD=MAX(0D0,BADD+2D0*BHAD(IHA)-2D0)
7043           ELSEIF(ISUB.EQ.94) THEN
7044             BADD=2D0*ALP*(LOG(EXP(4D0)+SH/(ALP*SQM3*SQM4))-4D0)
7045           ENDIF
7046           IF(EXP(MAX(-50D0,BADD*(TH-THU))).LT.PYR(0)) GOTO 220
7047         ENDIF
7048  
7049 C...Check whether m^2 and t choices are consistent.
7050         SQLA34=(SH-SQM3-SQM4)**2-4D0*SQM3*SQM4
7051         THA=SH-(SQM1+SQM2+SQM3+SQM4)+(SQM1-SQM2)*(SQM3-SQM4)/SH
7052         THB=SQRT(MAX(0D0,SQLA12))*SQRT(MAX(0D0,SQLA34))/SH
7053         IF(THB.LE.1D-8) GOTO 220
7054         THC=(SQM3-SQM1)*(SQM4-SQM2)+(SQM1+SQM4-SQM2-SQM3)*
7055      &  (SQM1*SQM4-SQM2*SQM3)/SH
7056         THLM=-0.5D0*(THA+THB)
7057         THUM=THC/THLM
7058         IF(TH.LT.THLM.OR.TH.GT.THUM) GOTO 220
7059  
7060 C...Information to output.
7061         VINT(21)=1D0
7062         VINT(22)=0D0
7063         VINT(23)=MIN(1D0,MAX(-1D0,(THA+2D0*TH)/THB))
7064         VINT(45)=TH
7065         VINT(59)=2D0*SQRT(MAX(0D0,-(THC+THA*TH+TH**2)))/THB
7066         VINT(63)=PDIF(3)**2
7067         VINT(64)=PDIF(4)**2
7068  
7069 C...Note: in the following, by In is meant the integral over the
7070 C...quantity multiplying coefficient cn.
7071 C...Choose tau according to h1(tau)/tau, where
7072 C...h1(tau) = c1 + I1/I2*c2*1/tau + I1/I3*c3*1/(tau+tau_R) +
7073 C...I1/I4*c4*tau/((s*tau-m^2)^2+(m*Gamma)^2) +
7074 C...I1/I5*c5*1/(tau+tau_R') +
7075 C...I1/I6*c6*tau/((s*tau-m'^2)^2+(m'*Gamma')^2) +
7076 C...I1/I7*c7*tau/(1.-tau), and
7077 C...c1 + c2 + c3 + c4 + c5 + c6 + c7 = 1.
7078       ELSEIF(ISTSB.GE.1.AND.ISTSB.LE.5) THEN
7079         CALL PYKLIM(1)
7080         IF(MINT(51).NE.0) THEN
7081           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7082           IF(MFAIL.EQ.1) THEN
7083             MSTI(61)=1
7084             RETURN
7085           ENDIF
7086           GOTO 100
7087         ENDIF
7088         RTAU=PYR(0)
7089         MTAU=1
7090         IF(RTAU.GT.COEF(ISUB,1)) MTAU=2
7091         IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)) MTAU=3
7092         IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)+COEF(ISUB,3)) MTAU=4
7093         IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)+COEF(ISUB,3)+COEF(ISUB,4))
7094      &  MTAU=5
7095         IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)+COEF(ISUB,3)+COEF(ISUB,4)+
7096      &  COEF(ISUB,5)) MTAU=6
7097         IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)+COEF(ISUB,3)+COEF(ISUB,4)+
7098      &  COEF(ISUB,5)+COEF(ISUB,6)) MTAU=7
7099         CALL PYKMAP(1,MTAU,PYR(0))
7100  
7101 C...2 -> 3, 4 processes:
7102 C...Choose tau' according to h4(tau,tau')/tau', where
7103 C...h4(tau,tau') = c1 + I1/I2*c2*(1 - tau/tau')^3/tau' +
7104 C...I1/I3*c3*1/(1 - tau'), and c1 + c2 + c3 = 1.
7105         IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
7106           CALL PYKLIM(4)
7107           IF(MINT(51).NE.0) THEN
7108             IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7109             IF(MFAIL.EQ.1) THEN
7110               MSTI(61)=1
7111               RETURN
7112             ENDIF
7113             GOTO 100
7114           ENDIF
7115           RTAUP=PYR(0)
7116           MTAUP=1
7117           IF(RTAUP.GT.COEF(ISUB,18)) MTAUP=2
7118           IF(RTAUP.GT.COEF(ISUB,18)+COEF(ISUB,19)) MTAUP=3
7119           CALL PYKMAP(4,MTAUP,PYR(0))
7120         ENDIF
7121  
7122 C...Choose y* according to h2(y*), where
7123 C...h2(y*) = I0/I1*c1*(y*-y*min) + I0/I2*c2*(y*max-y*) +
7124 C...I0/I3*c3*1/cosh(y*) + I0/I4*c4*1/(1-exp(y*-y*max)) +
7125 C...I0/I5*c5*1/(1-exp(-y*-y*min)), I0 = y*max-y*min,
7126 C...and c1 + c2 + c3 + c4 + c5 = 1.
7127         CALL PYKLIM(2)
7128         IF(MINT(51).NE.0) THEN
7129           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7130           IF(MFAIL.EQ.1) THEN
7131             MSTI(61)=1
7132             RETURN
7133           ENDIF
7134           GOTO 100
7135         ENDIF
7136         RYST=PYR(0)
7137         MYST=1
7138         IF(RYST.GT.COEF(ISUB,8)) MYST=2
7139         IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
7140         IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)+COEF(ISUB,10)) MYST=4
7141         IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)+COEF(ISUB,10)+
7142      &  COEF(ISUB,11)) MYST=5
7143         CALL PYKMAP(2,MYST,PYR(0))
7144  
7145 C...2 -> 2 processes:
7146 C...Choose cos(theta-hat) (cth) according to h3(cth), where
7147 C...h3(cth) = c0 + I0/I1*c1*1/(A - cth) + I0/I2*c2*1/(A + cth) +
7148 C...I0/I3*c3*1/(A - cth)^2 + I0/I4*c4*1/(A + cth)^2,
7149 C...A = 1 + 2*(m3*m4/sh)^2 (= 1 for massless products),
7150 C...and c0 + c1 + c2 + c3 + c4 = 1.
7151         CALL PYKLIM(3)
7152         IF(MINT(51).NE.0) THEN
7153           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7154           IF(MFAIL.EQ.1) THEN
7155             MSTI(61)=1
7156             RETURN
7157           ENDIF
7158           GOTO 100
7159         ENDIF
7160         IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
7161           RCTH=PYR(0)
7162           MCTH=1
7163           IF(RCTH.GT.COEF(ISUB,13)) MCTH=2
7164           IF(RCTH.GT.COEF(ISUB,13)+COEF(ISUB,14)) MCTH=3
7165           IF(RCTH.GT.COEF(ISUB,13)+COEF(ISUB,14)+COEF(ISUB,15)) MCTH=4
7166           IF(RCTH.GT.COEF(ISUB,13)+COEF(ISUB,14)+COEF(ISUB,15)+
7167      &    COEF(ISUB,16)) MCTH=5
7168           CALL PYKMAP(3,MCTH,PYR(0))
7169         ENDIF
7170  
7171 C...2 -> 3 : select pT1, phi1, pT2, phi2, y3 for 3 outgoing.
7172         IF(ISTSB.EQ.5) THEN
7173           CALL PYKMAP(5,0,0D0)
7174           IF(MINT(51).NE.0) THEN
7175             IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7176             IF(MFAIL.EQ.1) THEN
7177               MSTI(61)=1
7178               RETURN
7179             ENDIF
7180             GOTO 100
7181           ENDIF
7182         ENDIF
7183
7184 C...DIS as f + gamma* -> f process: set dummy values.
7185       ELSEIF(ISTSB.EQ.8) THEN  
7186         VINT(21)=0.9D0
7187         VINT(22)=0D0
7188         VINT(23)=0D0 
7189         VINT(47)=0D0
7190         VINT(48)=0D0         
7191  
7192 C...Low-pT or multiple interactions (first semihard interaction).
7193       ELSEIF(ISTSB.EQ.9) THEN
7194         CALL PYMULT(3)
7195         ISUB=MINT(1)
7196  
7197 C...Generate user-defined process: kinematics plus weight.
7198       ELSEIF(ISTSB.EQ.11) THEN
7199         MSTI(51)=0
7200         CALL PYUPEV(ISUB,SIGS)
7201         IF(NUP.LE.0) THEN
7202           MINT(51)=2
7203           MSTI(51)=1
7204           IF(MINT(82).EQ.1) THEN
7205             NGEN(0,1)=NGEN(0,1)-1
7206             NGEN(0,2)=NGEN(0,2)-1
7207             NGEN(ISUB,1)=NGEN(ISUB,1)-1
7208           ENDIF
7209           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7210           RETURN
7211         ENDIF
7212  
7213 C...Construct 'trivial' kinematical variables needed.
7214         KFL1=KUP(1,2)
7215         KFL2=KUP(2,2)
7216         VINT(41)=2D0*PUP(1,4)/VINT(1)
7217         VINT(42)=2D0*PUP(2,4)/VINT(1)
7218         VINT(21)=VINT(41)*VINT(42)
7219         VINT(22)=0.5D0*LOG(VINT(41)/VINT(42))
7220         VINT(44)=VINT(21)*VINT(2)
7221         VINT(43)=SQRT(MAX(0D0,VINT(44)))
7222         VINT(56)=Q2UP(0)
7223         VINT(55)=SQRT(MAX(0D0,VINT(56)))
7224  
7225 C...Construct other kinematical variables needed (approximately).
7226         VINT(23)=0D0
7227         VINT(26)=VINT(21)
7228         VINT(45)=-0.5D0*VINT(44)
7229         VINT(46)=-0.5D0*VINT(44)
7230         VINT(49)=VINT(43)
7231         VINT(50)=VINT(44)
7232         VINT(51)=VINT(55)
7233         VINT(52)=VINT(56)
7234         VINT(53)=VINT(55)
7235         VINT(54)=VINT(56)
7236         VINT(25)=0D0
7237         VINT(48)=0D0
7238         DO 240 IUP=3,NUP
7239           IF(KUP(IUP,1).EQ.1) VINT(25)=VINT(25)+2D0*(PUP(IUP,5)**2+
7240      &    PUP(IUP,1)**2+PUP(IUP,2)**2)/VINT(2)
7241           IF(KUP(IUP,1).EQ.1) VINT(48)=VINT(48)+0.5D0*(PUP(IUP,1)**2+
7242      &    PUP(IUP,2)**2)
7243   240   CONTINUE
7244         VINT(47)=SQRT(VINT(48))
7245  
7246 C...Calculate parton distribution weights.
7247         IF(MINT(47).GE.2) THEN
7248           DO 260 I=3-MIN(2,MINT(45)),MIN(2,MINT(46))
7249             MINT(105)=MINT(102+I)
7250             MINT(109)=MINT(106+I)
7251             VINT(120)=VINT(2+I)
7252 C.... ALICE
7253 C.... Store side in MINT(124)
7254             MINT(124) = I
7255 C.... 
7256             IF(MSTP(57).LE.1) THEN
7257               CALL PYPDFU(MINT(10+I),VINT(40+I),Q2UP(0),XPQ)
7258             ELSE
7259               CALL PYPDFL(MINT(10+I),VINT(40+I),Q2UP(0),XPQ)
7260             ENDIF
7261             DO 250 KFL=-25,25
7262               XSFX(I,KFL)=XPQ(KFL)
7263   250       CONTINUE
7264   260     CONTINUE
7265         ENDIF
7266       ENDIF
7267  
7268 C...Choose azimuthal angle.
7269       VINT(24)=PARU(2)*PYR(0)
7270  
7271 C...Check against user cuts on kinematics at parton level.
7272       MINT(51)=0
7273       IF((ISUB.LE.90.OR.ISUB.GT.100).AND.ISTSB.LE.10) CALL PYKLIM(0)
7274       IF(MINT(51).NE.0) THEN
7275         IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7276         IF(MFAIL.EQ.1) THEN
7277           MSTI(61)=1
7278           RETURN
7279         ENDIF
7280         GOTO 100
7281       ENDIF
7282       IF(MINT(82).EQ.1.AND.MSTP(141).GE.1.AND.ISTSB.LE.10) THEN
7283         MCUT=0
7284         IF(MSUB(91)+MSUB(92)+MSUB(93)+MSUB(94)+MSUB(95).EQ.0)
7285      &  CALL PYKCUT(MCUT)
7286         IF(MCUT.NE.0) THEN
7287           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7288           IF(MFAIL.EQ.1) THEN
7289             MSTI(61)=1
7290             RETURN
7291           ENDIF
7292           GOTO 100
7293         ENDIF
7294       ENDIF
7295  
7296 C...Calculate differential cross-section for different subprocesses.
7297       IF(ISTSB.LE.10) CALL PYSIGH(NCHN,SIGS)  
7298       SIGSOR=SIGS
7299       SIGLPT=SIGT(0,0,5)*VINT(315)*VINT(316)
7300  
7301 C...Multiply cross section by lepton -> photon flux factor.
7302       IF(MINT(141).NE.0.OR.MINT(142).NE.0) THEN
7303         SIGS=WTGAGA*SIGS
7304         DO 270 ICHN=1,NCHN
7305           SIGH(ICHN)=WTGAGA*SIGH(ICHN)
7306   270   CONTINUE
7307         SIGLPT=WTGAGA*SIGLPT
7308       ENDIF
7309  
7310 C...Multiply cross-section by user-defined weights.
7311       IF(MSTP(173).EQ.1) THEN
7312         SIGS=PARP(173)*SIGS
7313         DO 280 ICHN=1,NCHN
7314           SIGH(ICHN)=PARP(173)*SIGH(ICHN)
7315   280   CONTINUE
7316         SIGLPT=PARP(173)*SIGLPT
7317       ENDIF
7318       WTXS=1D0
7319       SIGSWT=SIGS
7320       VINT(99)=1D0
7321       VINT(100)=1D0
7322       IF(MINT(82).EQ.1.AND.MSTP(142).GE.1) THEN
7323         IF(ISUB.NE.96.AND.MSUB(91)+MSUB(92)+MSUB(93)+MSUB(94)+
7324      &  MSUB(95).EQ.0) CALL PYEVWT(WTXS)
7325         SIGSWT=WTXS*SIGS
7326         VINT(99)=WTXS
7327         IF(MSTP(142).EQ.1) VINT(100)=1D0/WTXS
7328       ENDIF
7329  
7330 C...Calculations for Monte Carlo estimate of all cross-sections.
7331       IF(MINT(82).EQ.1.AND.ISUB.LE.90.OR.ISUB.GE.96) THEN
7332         IF(MSTP(142).LE.1) THEN
7333           XSEC(ISUB,2)=XSEC(ISUB,2)+SIGS
7334         ELSE
7335           XSEC(ISUB,2)=XSEC(ISUB,2)+SIGSWT
7336         ENDIF
7337       ELSEIF(MINT(82).EQ.1) THEN
7338         XSEC(ISUB,2)=XSEC(ISUB,2)+SIGS
7339       ENDIF
7340       IF((ISUB.EQ.95.OR.ISUB.EQ.96).AND.LOOP2.EQ.1.AND.
7341      &MINT(82).EQ.1) XSEC(97,2)=XSEC(97,2)+SIGLPT
7342  
7343 C...Multiple interactions: store results of cross-section calculation.
7344       IF(MINT(50).EQ.1.AND.MSTP(82).GE.3) THEN
7345         VINT(153)=SIGSOR
7346         CALL PYMULT(4)
7347       ENDIF
7348  
7349 C...Check that weight not negative.
7350       VIOL=SIGSWT/XSEC(ISUB,1)
7351       IF(ISUB.EQ.96.AND.MSTP(173).EQ.1) VIOL=VIOL/PARP(174)
7352       IF(MSTP(123).LE.0) THEN
7353         IF(VIOL.LT.-1D-3) THEN
7354           WRITE(MSTU(11),5000) VIOL,NGEN(0,3)+1
7355           IF(MSTP(122).GE.1) WRITE(MSTU(11),5100) ISUB,VINT(21),
7356      &    VINT(22),VINT(23),VINT(26)
7357           STOP
7358         ENDIF
7359       ELSE
7360         IF(VIOL.LT.MIN(-1D-3,VINT(109))) THEN
7361           VINT(109)=VIOL
7362           WRITE(MSTU(11),5200) VIOL,NGEN(0,3)+1
7363           IF(MSTP(122).GE.1) WRITE(MSTU(11),5100) ISUB,VINT(21),
7364      &    VINT(22),VINT(23),VINT(26)
7365         ENDIF
7366       ENDIF
7367  
7368 C...Weighting using estimate of maximum of differential cross-section.
7369       IF(MFAIL.EQ.0.AND.ISUB.NE.95.AND.ISUB.NE.96) THEN
7370         IF(VIOL.LT.PYR(0)) THEN
7371           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7372           IF(ISUB.GE.91.AND.ISUB.LE.94) ISUB=0
7373           GOTO 100
7374         ENDIF
7375       ELSEIF(MFAIL.EQ.0) THEN
7376         RATND=SIGLPT/XSEC(95,1)
7377         IF(LOOP2.EQ.1.AND.RATND.LT.PYR(0)) THEN
7378           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7379           ISUB=0
7380           GOTO 100
7381         ENDIF
7382         VIOL=VIOL/RATND
7383         IF(VIOL.LT.PYR(0)) THEN
7384           GOTO 125
7385         ENDIF
7386       ELSEIF(ISUB.NE.95.AND.ISUB.NE.96) THEN
7387         IF(VIOL.LT.PYR(0)) THEN
7388           MSTI(61)=1
7389           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7390           RETURN
7391         ENDIF
7392       ELSE
7393         RATND=SIGLPT/XSEC(95,1)
7394         IF(LOOP.EQ.1.AND.RATND.LT.PYR(0)) THEN
7395           MSTI(61)=1
7396           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7397           RETURN
7398         ENDIF
7399         VIOL=VIOL/RATND
7400         IF(VIOL.LT.PYR(0)) THEN
7401           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7402           GOTO 100
7403         ENDIF
7404       ENDIF
7405  
7406 C...Check for possible violation of estimated maximum of differential
7407 C...cross-section used in weighting.
7408       IF(MSTP(123).LE.0) THEN
7409         IF(VIOL.GT.1D0) THEN
7410           WRITE(MSTU(11),5300) VIOL,NGEN(0,3)+1
7411           IF(MSTP(122).GE.2) WRITE(MSTU(11),5100) ISUB,VINT(21),
7412      &    VINT(22),VINT(23),VINT(26)
7413           STOP
7414         ENDIF
7415       ELSEIF(MSTP(123).EQ.1) THEN
7416         IF(VIOL.GT.VINT(108)) THEN
7417           VINT(108)=VIOL
7418           IF(VIOL.GT.1D0) THEN
7419             MINT(10)=1
7420             WRITE(MSTU(11),5400) VIOL,NGEN(0,3)+1
7421             IF(MSTP(122).GE.2) WRITE(MSTU(11),5100) ISUB,VINT(21),
7422      &      VINT(22),VINT(23),VINT(26)
7423           ENDIF
7424         ENDIF
7425       ELSEIF(VIOL.GT.VINT(108)) THEN
7426         VINT(108)=VIOL
7427         IF(VIOL.GT.1D0) THEN
7428           MINT(10)=1
7429           XDIF=XSEC(ISUB,1)*(VIOL-1D0)
7430           XSEC(ISUB,1)=XSEC(ISUB,1)+XDIF
7431           IF(MSUB(ISUB).EQ.1.AND.(ISUB.LE.90.OR.ISUB.GT.96))
7432      &    XSEC(0,1)=XSEC(0,1)+XDIF
7433           WRITE(MSTU(11),5400) VIOL,NGEN(0,3)+1
7434           IF(MSTP(122).GE.2) WRITE(MSTU(11),5100) ISUB,VINT(21),
7435      &    VINT(22),VINT(23),VINT(26)
7436           IF(ISUB.LE.9) THEN
7437             WRITE(MSTU(11),5500) ISUB,XSEC(ISUB,1)
7438           ELSEIF(ISUB.LE.99) THEN
7439             WRITE(MSTU(11),5600) ISUB,XSEC(ISUB,1)
7440           ELSE
7441             WRITE(MSTU(11),5700) ISUB,XSEC(ISUB,1)
7442           ENDIF
7443           VINT(108)=1D0
7444         ENDIF
7445       ENDIF
7446  
7447 C...Multiple interactions: choose impact parameter.
7448       VINT(148)=1D0
7449       IF(MINT(50).EQ.1.AND.(ISUB.LE.90.OR.ISUB.GE.96).AND.
7450      &MSTP(82).GE.3) THEN
7451         CALL PYMULT(5)
7452         IF(VINT(150).LT.PYR(0)) THEN
7453           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7454           IF(MFAIL.EQ.1) THEN
7455             MSTI(61)=1
7456             RETURN
7457           ENDIF
7458           GOTO 100
7459         ENDIF
7460       ENDIF
7461       IF(MINT(82).EQ.1) NGEN(0,2)=NGEN(0,2)+1
7462       IF(MINT(82).EQ.1.AND.MSUB(95).EQ.1) THEN
7463         IF(ISUB.LE.90.OR.ISUB.GE.95) NGEN(95,1)=NGEN(95,1)+MINT(143)
7464         IF(ISUB.LE.90.OR.ISUB.GE.96) NGEN(96,2)=NGEN(96,2)+1
7465       ENDIF
7466       IF(ISUB.LE.90.OR.ISUB.GE.96) MINT(31)=MINT(31)+1
7467  
7468 C...Choose flavour of reacting partons (and subprocess).
7469       IF(ISTSB.GE.11) GOTO 300
7470       RSIGS=SIGS*PYR(0)
7471       QT2=VINT(48)
7472       RQQBAR=PARP(87)*(1D0-(QT2/(QT2+(PARP(88)*PARP(82)*
7473      &(VINT(1)/PARP(89))**PARP(90))**2))**2)
7474       IF(ISUB.NE.95.AND.(ISUB.NE.96.OR.MSTP(82).LE.1.OR.
7475      &PYR(0).GT.RQQBAR)) THEN
7476         DO 290 ICHN=1,NCHN
7477           KFL1=ISIG(ICHN,1)
7478           KFL2=ISIG(ICHN,2)
7479           MINT(2)=ISIG(ICHN,3)
7480           RSIGS=RSIGS-SIGH(ICHN)
7481           IF(RSIGS.LE.0D0) GOTO 300
7482   290   CONTINUE
7483  
7484 C...Multiple interactions: choose qqbar preferentially at small pT.
7485       ELSEIF(ISUB.EQ.96) THEN
7486         MINT(105)=MINT(103)
7487         MINT(109)=MINT(107)
7488         CALL PYSPLI(MINT(11),21,KFL1,KFLDUM)
7489         MINT(105)=MINT(104)
7490         MINT(109)=MINT(108)
7491         CALL PYSPLI(MINT(12),21,KFL2,KFLDUM)
7492         MINT(1)=11
7493         MINT(2)=1
7494         IF(KFL1.EQ.KFL2.AND.PYR(0).LT.0.5D0) MINT(2)=2
7495  
7496 C...Low-pT: choose string drawing configuration.
7497       ELSE
7498         KFL1=21
7499         KFL2=21
7500         RSIGS=6D0*PYR(0)
7501         MINT(2)=1
7502         IF(RSIGS.GT.1D0) MINT(2)=2
7503         IF(RSIGS.GT.2D0) MINT(2)=3
7504       ENDIF
7505  
7506 C...Reassign QCD process. Partons before initial state radiation.
7507   300 IF(MINT(2).GT.10) THEN
7508         MINT(1)=MINT(2)/10
7509         MINT(2)=MOD(MINT(2),10)
7510       ENDIF
7511       IF(MINT(82).EQ.1.AND.MSTP(111).GE.0) NGEN(MINT(1),2)=
7512      &NGEN(MINT(1),2)+1
7513       MINT(15)=KFL1
7514       MINT(16)=KFL2
7515       MINT(13)=MINT(15)
7516       MINT(14)=MINT(16)
7517       VINT(141)=VINT(41)
7518       VINT(142)=VINT(42)
7519       VINT(151)=0D0
7520       VINT(152)=0D0
7521  
7522 C...Calculate x value of photon for parton inside photon inside e.
7523       DO 330 JT=1,2
7524         MINT(18+JT)=0
7525         VINT(154+JT)=0D0
7526         MSPLI=0
7527         IF(JT.EQ.1.AND.MINT(43).LE.2) MSPLI=1
7528         IF(JT.EQ.2.AND.MOD(MINT(43),2).EQ.1) MSPLI=1
7529         IF(IABS(MINT(14+JT)).LE.8.OR.MINT(14+JT).EQ.21) MSPLI=MSPLI+1
7530         IF(MSPLI.EQ.2) THEN
7531           KFLH=MINT(14+JT)
7532           XHRD=VINT(140+JT)
7533           Q2HRD=VINT(54)
7534           MINT(105)=MINT(102+JT)
7535           MINT(109)=MINT(106+JT)
7536           VINT(120)=VINT(2+JT)
7537           IF(MSTP(57).LE.1) THEN
7538             CALL PYPDFU(22,XHRD,Q2HRD,XPQ)
7539           ELSE
7540             CALL PYPDFL(22,XHRD,Q2HRD,XPQ)
7541           ENDIF
7542           WTMX=4D0*XPQ(KFLH)
7543           IF(MSTP(13).EQ.2) THEN
7544             Q2PMS=Q2HRD/PMAS(11,1)**2
7545             WTMX=WTMX*LOG(MAX(2D0,Q2PMS*(1D0-XHRD)/XHRD**2))
7546           ENDIF
7547   310     XE=XHRD**PYR(0)
7548           XG=MIN(1D0-1D-10,XHRD/XE)
7549           IF(MSTP(57).LE.1) THEN
7550             CALL PYPDFU(22,XG,Q2HRD,XPQ)
7551           ELSE
7552             CALL PYPDFL(22,XG,Q2HRD,XPQ)
7553           ENDIF
7554           WT=(1D0+(1D0-XE)**2)*XPQ(KFLH)
7555           IF(MSTP(13).EQ.2) WT=WT*LOG(MAX(2D0,Q2PMS*(1D0-XE)/XE**2))
7556           IF(WT.LT.PYR(0)*WTMX) GOTO 310
7557           MINT(18+JT)=1
7558           VINT(154+JT)=XE
7559           DO 320 KFLS=-25,25
7560             XSFX(JT,KFLS)=XPQ(KFLS)
7561   320     CONTINUE
7562         ENDIF
7563   330 CONTINUE
7564  
7565 C...Pick scale where photon is resolved.
7566       Q0S=PARP(15)**2
7567       Q1S=VINT(154)**2
7568       VINT(283)=0D0
7569       IF(MINT(107).EQ.3) THEN
7570         IF(MSTP(66).EQ.1) THEN
7571           VINT(283)=Q0S*(VINT(54)/Q0S)**PYR(0)
7572         ELSEIF(MSTP(66).EQ.2) THEN
7573           PS=VINT(3)**2
7574           Q2EFF=VINT(54)*((Q0S+PS)/(VINT(54)+PS))*
7575      &    EXP(PS*(VINT(54)-Q0S)/((VINT(54)+PS)*(Q0S+PS)))
7576           Q2INT=SQRT(Q0S*Q2EFF)
7577           VINT(283)=Q2INT*(VINT(54)/Q2INT)**PYR(0)
7578         ELSEIF(MSTP(66).EQ.3) THEN
7579           VINT(283)=Q0S*(Q1S/Q0S)**PYR(0)
7580         ELSEIF(MSTP(66).GE.4) THEN
7581           PS=0.25D0*VINT(3)**2
7582           VINT(283)=(Q0S+PS)*(Q1S+PS)/
7583      &    (Q0S+PYR(0)*(Q1S-Q0S)+PS)-PS
7584         ENDIF
7585       ENDIF 
7586       VINT(284)=0D0
7587       IF(MINT(108).EQ.3) THEN
7588         IF(MSTP(66).EQ.1) THEN
7589           VINT(284)=Q0S*(VINT(54)/Q0S)**PYR(0)
7590         ELSEIF(MSTP(66).EQ.2) THEN
7591           PS=VINT(4)**2
7592           Q2EFF=VINT(54)*((Q0S+PS)/(VINT(54)+PS))*
7593      &    EXP(PS*(VINT(54)-Q0S)/((VINT(54)+PS)*(Q0S+PS)))
7594           Q2INT=SQRT(Q0S*Q2EFF)
7595           VINT(284)=Q2INT*(VINT(54)/Q2INT)**PYR(0)
7596         ELSEIF(MSTP(66).EQ.3) THEN
7597           VINT(284)=Q0S*(Q1S/Q0S)**PYR(0)
7598         ELSEIF(MSTP(66).GE.4) THEN
7599           PS=0.25D0*VINT(4)**2
7600           VINT(284)=(Q0S+PS)*(Q1S+PS)/
7601      &    (Q0S+PYR(0)*(Q1S-Q0S)+PS)-PS
7602         ENDIF
7603       ENDIF
7604       IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
7605  
7606 C...Format statements for differential cross-section maximum violations.
7607  5000 FORMAT(/1X,'Error: negative cross-section fraction',1P,D11.3,1X,
7608      &'in event',1X,I7,'D0'/1X,'Execution stopped!')
7609  5100 FORMAT(1X,'ISUB = ',I3,'; Point of violation:'/1X,'tau =',1P,
7610      &D11.3,', y* =',D11.3,', cthe = ',0P,F11.7,', tau'' =',1P,D11.3)
7611  5200 FORMAT(/1X,'Warning: negative cross-section fraction',1P,D11.3,1X,
7612      &'in event',1X,I7)
7613  5300 FORMAT(/1X,'Error: maximum violated by',1P,D11.3,1X,
7614      &'in event',1X,I7,'D0'/1X,'Execution stopped!')
7615  5400 FORMAT(/1X,'Advisory warning: maximum violated by',1P,D11.3,1X,
7616      &'in event',1X,I7)
7617  5500 FORMAT(1X,'XSEC(',I1,',1) increased to',1P,D11.3)
7618  5600 FORMAT(1X,'XSEC(',I2,',1) increased to',1P,D11.3)
7619  5700 FORMAT(1X,'XSEC(',I3,',1) increased to',1P,D11.3)
7620  
7621       RETURN
7622       END
7623  
7624 C*********************************************************************
7625  
7626 C...PYSCAT
7627 C...Finds outgoing flavours and event type; sets up the kinematics
7628 C...and colour flow of the hard scattering
7629  
7630       SUBROUTINE PYSCAT
7631  
7632 C...Double precision and integer declarations
7633       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
7634       IMPLICIT INTEGER(I-N)
7635       INTEGER PYK,PYCHGE,PYCOMP
7636 C...Parameter statement to help give large particle numbers.
7637       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
7638 C...Commonblocks
7639       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
7640       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
7641       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
7642       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
7643       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
7644       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
7645       COMMON/PYINT1/MINT(400),VINT(400)
7646       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
7647       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
7648       COMMON/PYINT4/MWID(500),WIDS(500,5)
7649       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
7650       COMMON/PYUPPR/NUP,KUP(20,7),NFUP,IFUP(10,2),PUP(20,5),Q2UP(0:10)
7651       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
7652      &SFMIX(16,4)
7653       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,
7654      &/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,/PYUPPR/,/PYSSMT/
7655 C...Local arrays and saved variables
7656       DIMENSION WDTP(0:200),WDTE(0:200,0:5),PMQ(2),Z(2),CTHE(2),
7657      &PHI(2),KUPPO(20),VINTSV(41:66)
7658       SAVE VINTSV
7659  
7660 C...Read out process
7661       ISUB=MINT(1)
7662       ISUBSV=ISUB
7663  
7664 C...Restore information for low-pT processes
7665       IF(ISUB.EQ.95.AND.MINT(57).GE.1) THEN
7666         DO 100 J=41,66
7667   100   VINT(J)=VINTSV(J)
7668       ENDIF
7669  
7670 C...Convert H' or A process into equivalent H one
7671       IHIGG=1
7672       KFHIGG=25
7673       IF((ISUB.GE.151.AND.ISUB.LE.160).OR.(ISUB.GE.171.AND.
7674      &ISUB.LE.190)) THEN
7675         IHIGG=2
7676         IF(MOD(ISUB-1,10).GE.5) IHIGG=3
7677         KFHIGG=33+IHIGG
7678         IF(ISUB.EQ.151.OR.ISUB.EQ.156) ISUB=3
7679         IF(ISUB.EQ.152.OR.ISUB.EQ.157) ISUB=102
7680         IF(ISUB.EQ.153.OR.ISUB.EQ.158) ISUB=103
7681         IF(ISUB.EQ.171.OR.ISUB.EQ.176) ISUB=24
7682         IF(ISUB.EQ.172.OR.ISUB.EQ.177) ISUB=26
7683         IF(ISUB.EQ.173.OR.ISUB.EQ.178) ISUB=123
7684         IF(ISUB.EQ.174.OR.ISUB.EQ.179) ISUB=124
7685         IF(ISUB.EQ.181.OR.ISUB.EQ.186) ISUB=121
7686         IF(ISUB.EQ.182.OR.ISUB.EQ.187) ISUB=122
7687       ENDIF
7688  
7689 C...Choice of subprocess, number of documentation lines
7690       IDOC=6+ISET(ISUB)
7691       IF(ISUB.EQ.95) IDOC=8
7692       IF(ISET(ISUB).EQ.5) IDOC=9
7693       IF(ISET(ISUB).EQ.11) IDOC=4+NUP
7694       MINT(3)=IDOC-6
7695       IF(IDOC.GE.9.AND.ISET(ISUB).LE.4) IDOC=IDOC+2
7696       MINT(4)=IDOC
7697       IPU1=MINT(84)+1
7698       IPU2=MINT(84)+2
7699       IPU3=MINT(84)+3
7700       IPU4=MINT(84)+4
7701       IPU5=MINT(84)+5
7702       IPU6=MINT(84)+6
7703  
7704 C...Reset K, P and V vectors. Store incoming particles
7705       DO 120 JT=1,MSTP(126)+20
7706         I=MINT(83)+JT
7707         DO 110 J=1,5
7708           K(I,J)=0
7709           P(I,J)=0D0
7710           V(I,J)=0D0
7711   110   CONTINUE
7712   120 CONTINUE
7713       DO 140 JT=1,2
7714         I=MINT(83)+JT
7715         K(I,1)=21
7716         K(I,2)=MINT(10+JT)
7717         DO 130 J=1,5
7718           P(I,J)=VINT(285+5*JT+J)
7719   130   CONTINUE
7720   140 CONTINUE
7721       MINT(6)=2
7722       KFRES=0
7723  
7724 C...Store incoming partons in their CM-frame
7725       SH=VINT(44)
7726       SHR=SQRT(SH)
7727       SHP=VINT(26)*VINT(2)
7728       SHPR=SQRT(SHP)
7729       SHUSER=SHR
7730       IF(ISET(ISUB).GE.3.AND.ISET(ISUB).LE.5) SHUSER=SHPR
7731       DO 150 JT=1,2
7732         I=MINT(84)+JT
7733         K(I,1)=14
7734         K(I,2)=MINT(14+JT)
7735         K(I,3)=MINT(83)+2+JT
7736         P(I,3)=0.5D0*SHUSER*(-1D0)**(JT-1)
7737         P(I,4)=0.5D0*SHUSER
7738   150 CONTINUE
7739  
7740 C...Copy incoming partons to documentation lines
7741       DO 170 JT=1,2
7742         I1=MINT(83)+4+JT
7743         I2=MINT(84)+JT
7744         K(I1,1)=21
7745         K(I1,2)=K(I2,2)
7746         K(I1,3)=I1-2
7747         DO 160 J=1,5
7748           P(I1,J)=P(I2,J)
7749   160   CONTINUE
7750   170 CONTINUE
7751  
7752 C...Choose new quark/lepton flavour for relevant annihilation graphs
7753       IF(ISUB.EQ.12.OR.ISUB.EQ.53.OR.ISUB.EQ.54.OR.ISUB.EQ.58.OR.
7754      &(ISUB.GE.135.AND.ISUB.LE.140)) THEN
7755         IGLGA=21
7756         IF(ISUB.EQ.58.OR.(ISUB.GE.137.AND.ISUB.LE.140)) IGLGA=22
7757         CALL PYWIDT(IGLGA,SH,WDTP,WDTE)
7758   180   RKFL=(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))*PYR(0)
7759         DO 190 I=1,MDCY(IGLGA,3)
7760           KFLF=KFDP(I+MDCY(IGLGA,2)-1,1)
7761           RKFL=RKFL-(WDTE(I,1)+WDTE(I,2)+WDTE(I,4))
7762           IF(RKFL.LE.0D0) GOTO 200
7763   190   CONTINUE
7764   200   CONTINUE
7765         IF(ISUB.EQ.12.AND.MSTP(5).EQ.1.AND.IABS(MINT(15)).LE.2.AND.
7766      &  IABS(KFLF).GE.3) THEN
7767           FACQQB=VINT(58)**2*4D0/9D0*(VINT(45)**2+VINT(46)**2)/
7768      &    VINT(44)**2
7769           FACCIB=VINT(46)**2/PARU(155)**4
7770           IF(FACQQB/(FACQQB+FACCIB).LT.PYR(0)) GOTO 180
7771         ELSEIF(ISUB.EQ.54.OR.ISUB.EQ.135.OR.ISUB.EQ.136) THEN
7772           IF((KCHG(PYCOMP(KFLF),1)/2D0)**2.LT.PYR(0)) GOTO 180
7773         ELSEIF(ISUB.EQ.58.OR.(ISUB.GE.137.AND.ISUB.LE.140)) THEN
7774           IF((KCHG(PYCOMP(KFLF),1)/3D0)**2.LT.PYR(0)) GOTO 180
7775         ENDIF
7776       ENDIF
7777  
7778 C...Final state flavours and colour flow: default values
7779       JS=1
7780       MINT(21)=MINT(15)
7781       MINT(22)=MINT(16)
7782       MINT(23)=0
7783       MINT(24)=0
7784       KCC=20
7785       KCS=ISIGN(1,MINT(15))
7786  
7787       IF(ISET(ISUB).EQ.11) THEN
7788 C...User-defined processes: find products
7789         IRUP=0
7790         DO 210 IUP=3,NUP
7791           IF(KUP(IUP,1).NE.1) THEN
7792           ELSEIF(IRUP.LE.5) THEN
7793             IRUP=IRUP+1
7794             MINT(20+IRUP)=KUP(IUP,2)
7795           ENDIF
7796   210   CONTINUE
7797  
7798       ELSEIF(ISUB.LE.10) THEN
7799         IF(ISUB.EQ.1) THEN
7800 C...f + fbar -> gamma*/Z0
7801           KFRES=23
7802  
7803         ELSEIF(ISUB.EQ.2) THEN
7804 C...f + fbar' -> W+/-
7805           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
7806           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
7807           KFRES=ISIGN(24,KCH1+KCH2)
7808  
7809         ELSEIF(ISUB.EQ.3) THEN
7810 C...f + fbar -> h0 (or H0, or A0)
7811           KFRES=KFHIGG
7812  
7813         ELSEIF(ISUB.EQ.4) THEN
7814 C...gamma + W+/- -> W+/-
7815  
7816         ELSEIF(ISUB.EQ.5) THEN
7817 C...Z0 + Z0 -> h0
7818           XH=SH/SHP
7819           MINT(21)=MINT(15)
7820           MINT(22)=MINT(16)
7821           PMQ(1)=PYMASS(MINT(21))
7822           PMQ(2)=PYMASS(MINT(22))
7823   220     JT=INT(1.5D0+PYR(0))
7824           ZMIN=2D0*PMQ(JT)/SHPR
7825           ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
7826      &    (SHPR*(SHPR-PMQ(3-JT)))
7827           ZMAX=MIN(1D0-XH,ZMAX)
7828           Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
7829           IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
7830      &    (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 220
7831           SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
7832           IF(SQC1.LT.1D-8) GOTO 220
7833           C1=SQRT(SQC1)
7834           C2=1D0+2D0*(PMAS(23,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
7835           CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
7836           CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
7837           Z(3-JT)=1D0-XH/(1D0-Z(JT))
7838           SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
7839           IF(SQC1.LT.1D-8) GOTO 220
7840           C1=SQRT(SQC1)
7841           C2=1D0+2D0*(PMAS(23,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
7842           CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
7843           CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
7844           PHIR=PARU(2)*PYR(0)
7845           CPHI=COS(PHIR)
7846           ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
7847      &    SQRT(1D0-CTHE(2)**2)*CPHI
7848           Z1=2D0-Z(JT)
7849           Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
7850           Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
7851           Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
7852      &    PMQ(3-JT)**2/SHP))
7853           ZMIN=2D0*PMQ(3-JT)/SHPR
7854           ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
7855           ZMAX=MIN(1D0-XH,ZMAX)
7856           IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 220
7857           KCC=22
7858           KFRES=25
7859  
7860         ELSEIF(ISUB.EQ.6) THEN
7861 C...Z0 + W+/- -> W+/-
7862  
7863         ELSEIF(ISUB.EQ.7) THEN
7864 C...W+ + W- -> Z0
7865  
7866         ELSEIF(ISUB.EQ.8) THEN
7867 C...W+ + W- -> h0
7868           XH=SH/SHP
7869   230     DO 260 JT=1,2
7870             I=MINT(14+JT)
7871             IA=IABS(I)
7872             IF(IA.LE.10) THEN
7873               RVCKM=VINT(180+I)*PYR(0)
7874               DO 240 J=1,MSTP(1)
7875                 IB=2*J-1+MOD(IA,2)
7876                 IPM=(5-ISIGN(1,I))/2
7877                 IDC=J+MDCY(IA,2)+2
7878                 IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 240
7879                 MINT(20+JT)=ISIGN(IB,I)
7880                 RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
7881                 IF(RVCKM.LE.0D0) GOTO 250
7882   240         CONTINUE
7883             ELSE
7884               IB=2*((IA+1)/2)-1+MOD(IA,2)
7885               MINT(20+JT)=ISIGN(IB,I)
7886             ENDIF
7887   250       PMQ(JT)=PYMASS(MINT(20+JT))
7888   260     CONTINUE
7889           JT=INT(1.5D0+PYR(0))
7890           ZMIN=2D0*PMQ(JT)/SHPR
7891           ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
7892      &    (SHPR*(SHPR-PMQ(3-JT)))
7893           ZMAX=MIN(1D0-XH,ZMAX)
7894           IF(ZMIN.GE.ZMAX) GOTO 230
7895           Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
7896           IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
7897      &    (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 230
7898           SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
7899           IF(SQC1.LT.1D-8) GOTO 230
7900           C1=SQRT(SQC1)
7901           C2=1D0+2D0*(PMAS(24,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
7902           CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
7903           CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
7904           Z(3-JT)=1D0-XH/(1D0-Z(JT))
7905           SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
7906           IF(SQC1.LT.1D-8) GOTO 230
7907           C1=SQRT(SQC1)
7908           C2=1D0+2D0*(PMAS(24,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
7909           CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
7910           CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
7911           PHIR=PARU(2)*PYR(0)
7912           CPHI=COS(PHIR)
7913           ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
7914      &    SQRT(1D0-CTHE(2)**2)*CPHI
7915           Z1=2D0-Z(JT)
7916           Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
7917           Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
7918           Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
7919      &    PMQ(3-JT)**2/SHP))
7920           ZMIN=2D0*PMQ(3-JT)/SHPR
7921           ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
7922           ZMAX=MIN(1D0-XH,ZMAX)
7923           IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 230
7924           KCC=22
7925           KFRES=25
7926  
7927         ELSEIF(ISUB.EQ.10) THEN
7928 C...f + f' -> f + f' (gamma/Z/W exchange); th = (p(f)-p(f))**2
7929           IF(MINT(2).EQ.1) THEN
7930             KCC=22
7931           ELSE
7932 C...W exchange: need to mix flavours according to CKM matrix
7933             DO 280 JT=1,2
7934               I=MINT(14+JT)
7935               IA=IABS(I)
7936               IF(IA.LE.10) THEN
7937                 RVCKM=VINT(180+I)*PYR(0)
7938                 DO 270 J=1,MSTP(1)
7939                   IB=2*J-1+MOD(IA,2)
7940                   IPM=(5-ISIGN(1,I))/2
7941                   IDC=J+MDCY(IA,2)+2
7942                   IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 270
7943                   MINT(20+JT)=ISIGN(IB,I)
7944                   RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
7945                   IF(RVCKM.LE.0D0) GOTO 280
7946   270           CONTINUE
7947               ELSE
7948                 IB=2*((IA+1)/2)-1+MOD(IA,2)
7949                 MINT(20+JT)=ISIGN(IB,I)
7950               ENDIF
7951   280       CONTINUE
7952             KCC=22
7953           ENDIF
7954         ENDIF
7955  
7956       ELSEIF(ISUB.LE.20) THEN
7957         IF(ISUB.EQ.11) THEN
7958 C...f + f' -> f + f' (g exchange); th = (p(f)-p(f))**2
7959           KCC=MINT(2)
7960           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
7961  
7962         ELSEIF(ISUB.EQ.12) THEN
7963 C...f + fbar -> f' + fbar'; th = (p(f)-p(f'))**2
7964           MINT(21)=ISIGN(KFLF,MINT(15))
7965           MINT(22)=-MINT(21)
7966           KCC=4
7967  
7968         ELSEIF(ISUB.EQ.13) THEN
7969 C...f + fbar -> g + g; th arbitrary
7970           MINT(21)=21
7971           MINT(22)=21
7972           KCC=MINT(2)+4
7973  
7974         ELSEIF(ISUB.EQ.14) THEN
7975 C...f + fbar -> g + gamma; th arbitrary
7976           IF(PYR(0).GT.0.5D0) JS=2
7977           MINT(20+JS)=21
7978           MINT(23-JS)=22
7979           KCC=17+JS
7980  
7981         ELSEIF(ISUB.EQ.15) THEN
7982 C...f + fbar -> g + Z0; th arbitrary
7983           IF(PYR(0).GT.0.5D0) JS=2
7984           MINT(20+JS)=21
7985           MINT(23-JS)=23
7986           KCC=17+JS
7987  
7988         ELSEIF(ISUB.EQ.16) THEN
7989 C...f + fbar' -> g + W+/-; th = (p(f)-p(W-))**2 or (p(fbar')-p(W+))**2
7990           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
7991           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
7992           IF(MINT(15)*(KCH1+KCH2).LT.0) JS=2
7993           MINT(20+JS)=21
7994           MINT(23-JS)=ISIGN(24,KCH1+KCH2)
7995           KCC=17+JS
7996  
7997         ELSEIF(ISUB.EQ.17) THEN
7998 C...f + fbar -> g + h0; th arbitrary
7999           IF(PYR(0).GT.0.5D0) JS=2
8000           MINT(20+JS)=21
8001           MINT(23-JS)=25
8002           KCC=17+JS
8003  
8004         ELSEIF(ISUB.EQ.18) THEN
8005 C...f + fbar -> gamma + gamma; th arbitrary
8006           MINT(21)=22
8007           MINT(22)=22
8008  
8009         ELSEIF(ISUB.EQ.19) THEN
8010 C...f + fbar -> gamma + Z0; th arbitrary
8011           IF(PYR(0).GT.0.5D0) JS=2
8012           MINT(20+JS)=22
8013           MINT(23-JS)=23
8014  
8015         ELSEIF(ISUB.EQ.20) THEN
8016 C...f + fbar' -> gamma + W+/-; th = (p(f)-p(W-))**2 or
8017 C...(p(fbar')-p(W+))**2
8018           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
8019           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
8020           IF(MINT(15)*(KCH1+KCH2).LT.0) JS=2
8021           MINT(20+JS)=22
8022           MINT(23-JS)=ISIGN(24,KCH1+KCH2)
8023         ENDIF
8024  
8025       ELSEIF(ISUB.LE.30) THEN
8026         IF(ISUB.EQ.21) THEN
8027 C...f + fbar -> gamma + h0; th arbitrary
8028           IF(PYR(0).GT.0.5D0) JS=2
8029           MINT(20+JS)=22
8030           MINT(23-JS)=25
8031  
8032         ELSEIF(ISUB.EQ.22) THEN
8033 C...f + fbar -> Z0 + Z0; th arbitrary
8034           MINT(21)=23
8035           MINT(22)=23
8036  
8037         ELSEIF(ISUB.EQ.23) THEN
8038 C...f + fbar' -> Z0 + W+/-; th = (p(f)-p(W-))**2 or (p(fbar')-p(W+))**2
8039           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
8040           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
8041           IF(MINT(15)*(KCH1+KCH2).LT.0) JS=2
8042           MINT(20+JS)=23
8043           MINT(23-JS)=ISIGN(24,KCH1+KCH2)
8044  
8045         ELSEIF(ISUB.EQ.24) THEN
8046 C...f + fbar -> Z0 + h0 (or H0, or A0); th arbitrary
8047           IF(PYR(0).GT.0.5D0) JS=2
8048           MINT(20+JS)=23
8049           MINT(23-JS)=KFHIGG
8050  
8051         ELSEIF(ISUB.EQ.25) THEN
8052 C...f + fbar -> W+ + W-; th = (p(f)-p(W-))**2
8053           MINT(21)=-ISIGN(24,MINT(15))
8054           MINT(22)=-MINT(21)
8055  
8056         ELSEIF(ISUB.EQ.26) THEN
8057 C...f + fbar' -> W+/- + h0 (or H0, or A0);
8058 C...th = (p(f)-p(W-))**2 or (p(fbar')-p(W+))**2
8059           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
8060           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
8061           IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
8062           MINT(20+JS)=ISIGN(24,KCH1+KCH2)
8063           MINT(23-JS)=KFHIGG
8064  
8065         ELSEIF(ISUB.EQ.27) THEN
8066 C...f + fbar -> h0 + h0
8067  
8068         ELSEIF(ISUB.EQ.28) THEN
8069 C...f + g -> f + g; th = (p(f)-p(f))**2
8070           KCC=MINT(2)+6
8071           IF(MINT(15).EQ.21) KCC=KCC+2
8072           IF(MINT(15).NE.21) KCS=ISIGN(1,MINT(15))
8073           IF(MINT(16).NE.21) KCS=ISIGN(1,MINT(16))
8074  
8075         ELSEIF(ISUB.EQ.29) THEN
8076 C...f + g -> f + gamma; th = (p(f)-p(f))**2
8077           IF(MINT(15).EQ.21) JS=2
8078           MINT(23-JS)=22
8079           KCC=15+JS
8080           KCS=ISIGN(1,MINT(14+JS))
8081  
8082         ELSEIF(ISUB.EQ.30) THEN
8083 C...f + g -> f + Z0; th = (p(f)-p(f))**2
8084           IF(MINT(15).EQ.21) JS=2
8085           MINT(23-JS)=23
8086           KCC=15+JS
8087           KCS=ISIGN(1,MINT(14+JS))
8088         ENDIF
8089  
8090       ELSEIF(ISUB.LE.40) THEN
8091         IF(ISUB.EQ.31) THEN
8092 C...f + g -> f' + W+/-; th = (p(f)-p(f'))**2; choose flavour f'
8093           IF(MINT(15).EQ.21) JS=2
8094           I=MINT(14+JS)
8095           IA=IABS(I)
8096           MINT(23-JS)=ISIGN(24,KCHG(IA,1)*I)
8097           RVCKM=VINT(180+I)*PYR(0)
8098           DO 290 J=1,MSTP(1)
8099             IB=2*J-1+MOD(IA,2)
8100             IPM=(5-ISIGN(1,I))/2
8101             IDC=J+MDCY(IA,2)+2
8102             IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 290
8103             MINT(20+JS)=ISIGN(IB,I)
8104             RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
8105             IF(RVCKM.LE.0D0) GOTO 300
8106   290     CONTINUE
8107   300     KCC=15+JS
8108           KCS=ISIGN(1,MINT(14+JS))
8109  
8110         ELSEIF(ISUB.EQ.32) THEN
8111 C...f + g -> f + h0; th = (p(f)-p(f))**2
8112           IF(MINT(15).EQ.21) JS=2
8113           MINT(23-JS)=25
8114           KCC=15+JS
8115           KCS=ISIGN(1,MINT(14+JS))
8116  
8117         ELSEIF(ISUB.EQ.33) THEN
8118 C...f + gamma -> f + g; th=(p(f)-p(f))**2
8119           IF(MINT(15).EQ.22) JS=2
8120           MINT(23-JS)=21
8121           KCC=24+JS
8122           KCS=ISIGN(1,MINT(14+JS))
8123  
8124         ELSEIF(ISUB.EQ.34) THEN
8125 C...f + gamma -> f + gamma; th=(p(f)-p(f))**2
8126           IF(MINT(15).EQ.22) JS=2
8127           KCC=22
8128           KCS=ISIGN(1,MINT(14+JS))
8129  
8130         ELSEIF(ISUB.EQ.35) THEN
8131 C...f + gamma -> f + Z0; th=(p(f)-p(f))**2
8132           IF(MINT(15).EQ.22) JS=2
8133           MINT(23-JS)=23
8134           KCC=22
8135  
8136         ELSEIF(ISUB.EQ.36) THEN
8137 C...f + gamma -> f' + W+/-; th=(p(f)-p(f'))**2
8138           IF(MINT(15).EQ.22) JS=2
8139           I=MINT(14+JS)
8140           IA=IABS(I)
8141           MINT(23-JS)=ISIGN(24,KCHG(IA,1)*I)
8142           IF(IA.LE.10) THEN
8143             RVCKM=VINT(180+I)*PYR(0)
8144             DO 310 J=1,MSTP(1)
8145               IB=2*J-1+MOD(IA,2)
8146               IPM=(5-ISIGN(1,I))/2
8147               IDC=J+MDCY(IA,2)+2
8148               IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 310
8149               MINT(20+JS)=ISIGN(IB,I)
8150               RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
8151               IF(RVCKM.LE.0D0) GOTO 320
8152   310       CONTINUE
8153           ELSE
8154             IB=2*((IA+1)/2)-1+MOD(IA,2)
8155             MINT(20+JS)=ISIGN(IB,I)
8156           ENDIF
8157   320     KCC=22
8158  
8159         ELSEIF(ISUB.EQ.37) THEN
8160 C...f + gamma -> f + h0
8161  
8162         ELSEIF(ISUB.EQ.38) THEN
8163 C...f + Z0 -> f + g
8164  
8165         ELSEIF(ISUB.EQ.39) THEN
8166 C...f + Z0 -> f + gamma
8167  
8168         ELSEIF(ISUB.EQ.40) THEN
8169 C...f + Z0 -> f + Z0
8170         ENDIF
8171  
8172       ELSEIF(ISUB.LE.50) THEN
8173         IF(ISUB.EQ.41) THEN
8174 C...f + Z0 -> f' + W+/-
8175  
8176         ELSEIF(ISUB.EQ.42) THEN
8177 C...f + Z0 -> f + h0
8178  
8179         ELSEIF(ISUB.EQ.43) THEN
8180 C...f + W+/- -> f' + g
8181  
8182         ELSEIF(ISUB.EQ.44) THEN
8183 C...f + W+/- -> f' + gamma
8184  
8185         ELSEIF(ISUB.EQ.45) THEN
8186 C...f + W+/- -> f' + Z0
8187  
8188         ELSEIF(ISUB.EQ.46) THEN
8189 C...f + W+/- -> f' + W+/-
8190  
8191         ELSEIF(ISUB.EQ.47) THEN
8192 C...f + W+/- -> f' + h0
8193  
8194         ELSEIF(ISUB.EQ.48) THEN
8195 C...f + h0 -> f + g
8196  
8197         ELSEIF(ISUB.EQ.49) THEN
8198 C...f + h0 -> f + gamma
8199  
8200         ELSEIF(ISUB.EQ.50) THEN
8201 C...f + h0 -> f + Z0
8202         ENDIF
8203  
8204       ELSEIF(ISUB.LE.60) THEN
8205         IF(ISUB.EQ.51) THEN
8206 C...f + h0 -> f' + W+/-
8207  
8208         ELSEIF(ISUB.EQ.52) THEN
8209 C...f + h0 -> f + h0
8210  
8211         ELSEIF(ISUB.EQ.53) THEN
8212 C...g + g -> f + fbar; th arbitrary
8213           KCS=(-1)**INT(1.5D0+PYR(0))
8214           MINT(21)=ISIGN(KFLF,KCS)
8215           MINT(22)=-MINT(21)
8216           KCC=MINT(2)+10
8217  
8218         ELSEIF(ISUB.EQ.54) THEN
8219 C...g + gamma -> f + fbar; th arbitrary
8220           KCS=(-1)**INT(1.5D0+PYR(0))
8221           MINT(21)=ISIGN(KFLF,KCS)
8222           MINT(22)=-MINT(21)
8223           KCC=27
8224           IF(MINT(16).EQ.21) KCC=28
8225  
8226         ELSEIF(ISUB.EQ.55) THEN
8227 C...g + Z0 -> f + fbar
8228  
8229         ELSEIF(ISUB.EQ.56) THEN
8230 C...g + W+/- -> f + fbar'
8231  
8232         ELSEIF(ISUB.EQ.57) THEN
8233 C...g + h0 -> f + fbar
8234  
8235         ELSEIF(ISUB.EQ.58) THEN
8236 C...gamma + gamma -> f + fbar; th arbitrary
8237           KCS=(-1)**INT(1.5D0+PYR(0))
8238           MINT(21)=ISIGN(KFLF,KCS)
8239           MINT(22)=-MINT(21)
8240           KCC=21
8241  
8242         ELSEIF(ISUB.EQ.59) THEN
8243 C...gamma + Z0 -> f + fbar
8244  
8245         ELSEIF(ISUB.EQ.60) THEN
8246 C...gamma + W+/- -> f + fbar'
8247         ENDIF
8248  
8249       ELSEIF(ISUB.LE.70) THEN
8250         IF(ISUB.EQ.61) THEN
8251 C...gamma + h0 -> f + fbar
8252  
8253         ELSEIF(ISUB.EQ.62) THEN
8254 C...Z0 + Z0 -> f + fbar
8255  
8256         ELSEIF(ISUB.EQ.63) THEN
8257 C...Z0 + W+/- -> f + fbar'
8258  
8259         ELSEIF(ISUB.EQ.64) THEN
8260 C...Z0 + h0 -> f + fbar
8261  
8262         ELSEIF(ISUB.EQ.65) THEN
8263 C...W+ + W- -> f + fbar
8264  
8265         ELSEIF(ISUB.EQ.66) THEN
8266 C...W+/- + h0 -> f + fbar'
8267  
8268         ELSEIF(ISUB.EQ.67) THEN
8269 C...h0 + h0 -> f + fbar
8270  
8271         ELSEIF(ISUB.EQ.68) THEN
8272 C...g + g -> g + g; th arbitrary
8273           KCC=MINT(2)+12
8274           KCS=(-1)**INT(1.5D0+PYR(0))
8275  
8276         ELSEIF(ISUB.EQ.69) THEN
8277 C...gamma + gamma -> W+ + W-; th arbitrary
8278           MINT(21)=24
8279           MINT(22)=-24
8280           KCC=21
8281  
8282         ELSEIF(ISUB.EQ.70) THEN
8283 C...gamma + W+/- -> Z0 + W+/-; th=(p(W)-p(W))**2
8284           IF(MINT(15).EQ.22) MINT(21)=23
8285           IF(MINT(16).EQ.22) MINT(22)=23
8286           KCC=21
8287         ENDIF
8288  
8289       ELSEIF(ISUB.LE.80) THEN
8290         IF(ISUB.EQ.71.OR.ISUB.EQ.72) THEN
8291 C...Z0 + Z0 -> Z0 + Z0; Z0 + Z0 -> W+ + W-
8292           XH=SH/SHP
8293           MINT(21)=MINT(15)
8294           MINT(22)=MINT(16)
8295           PMQ(1)=PYMASS(MINT(21))
8296           PMQ(2)=PYMASS(MINT(22))
8297   330     JT=INT(1.5D0+PYR(0))
8298           ZMIN=2D0*PMQ(JT)/SHPR
8299           ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
8300      &    (SHPR*(SHPR-PMQ(3-JT)))
8301           ZMAX=MIN(1D0-XH,ZMAX)
8302           Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
8303           IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
8304      &    (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 330
8305           SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
8306           IF(SQC1.LT.1D-8) GOTO 330
8307           C1=SQRT(SQC1)
8308           C2=1D0+2D0*(PMAS(23,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
8309           CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
8310           CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
8311           Z(3-JT)=1D0-XH/(1D0-Z(JT))
8312           SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
8313           IF(SQC1.LT.1D-8) GOTO 330
8314           C1=SQRT(SQC1)
8315           C2=1D0+2D0*(PMAS(23,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
8316           CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
8317           CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
8318           PHIR=PARU(2)*PYR(0)
8319           CPHI=COS(PHIR)
8320           ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
8321      &    SQRT(1D0-CTHE(2)**2)*CPHI
8322           Z1=2D0-Z(JT)
8323           Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
8324           Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
8325           Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
8326      &    PMQ(3-JT)**2/SHP))
8327           ZMIN=2D0*PMQ(3-JT)/SHPR
8328           ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
8329           ZMAX=MIN(1D0-XH,ZMAX)
8330           IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 330
8331           KCC=22
8332  
8333         ELSEIF(ISUB.EQ.73) THEN
8334 C...Z0 + W+/- -> Z0 + W+/-
8335           JS=MINT(2)
8336           XH=SH/SHP
8337   340     JT=3-MINT(2)
8338           I=MINT(14+JT)
8339           IA=IABS(I)
8340           IF(IA.LE.10) THEN
8341             RVCKM=VINT(180+I)*PYR(0)
8342             DO 350 J=1,MSTP(1)
8343               IB=2*J-1+MOD(IA,2)
8344               IPM=(5-ISIGN(1,I))/2
8345               IDC=J+MDCY(IA,2)+2
8346               IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 350
8347               MINT(20+JT)=ISIGN(IB,I)
8348               RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
8349               IF(RVCKM.LE.0D0) GOTO 360
8350   350       CONTINUE
8351           ELSE
8352             IB=2*((IA+1)/2)-1+MOD(IA,2)
8353             MINT(20+JT)=ISIGN(IB,I)
8354           ENDIF
8355   360     PMQ(JT)=PYMASS(MINT(20+JT))
8356           MINT(23-JT)=MINT(17-JT)
8357           PMQ(3-JT)=PYMASS(MINT(23-JT))
8358           JT=INT(1.5D0+PYR(0))
8359           ZMIN=2D0*PMQ(JT)/SHPR
8360           ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
8361      &    (SHPR*(SHPR-PMQ(3-JT)))
8362           ZMAX=MIN(1D0-XH,ZMAX)
8363           IF(ZMIN.GE.ZMAX) GOTO 340
8364           Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
8365           IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
8366      &    (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 340
8367           SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
8368           IF(SQC1.LT.1D-8) GOTO 340
8369           C1=SQRT(SQC1)
8370           C2=1D0+2D0*(PMAS(23,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
8371           CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
8372           CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
8373           Z(3-JT)=1D0-XH/(1D0-Z(JT))
8374           SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
8375           IF(SQC1.LT.1D-8) GOTO 340
8376           C1=SQRT(SQC1)
8377           C2=1D0+2D0*(PMAS(23,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
8378           CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
8379           CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
8380           PHIR=PARU(2)*PYR(0)
8381           CPHI=COS(PHIR)
8382           ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
8383      &    SQRT(1D0-CTHE(2)**2)*CPHI
8384           Z1=2D0-Z(JT)
8385           Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
8386           Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
8387           Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
8388      &    PMQ(3-JT)**2/SHP))
8389           ZMIN=2D0*PMQ(3-JT)/SHPR
8390           ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
8391           ZMAX=MIN(1D0-XH,ZMAX)
8392           IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 340
8393           KCC=22
8394  
8395         ELSEIF(ISUB.EQ.74) THEN
8396 C...Z0 + h0 -> Z0 + h0
8397  
8398         ELSEIF(ISUB.EQ.75) THEN
8399 C...W+ + W- -> gamma + gamma
8400  
8401         ELSEIF(ISUB.EQ.76.OR.ISUB.EQ.77) THEN
8402 C...W+ + W- -> Z0 + Z0; W+ + W- -> W+ + W-
8403           XH=SH/SHP
8404   370     DO 400 JT=1,2
8405             I=MINT(14+JT)
8406             IA=IABS(I)
8407             IF(IA.LE.10) THEN
8408               RVCKM=VINT(180+I)*PYR(0)
8409               DO 380 J=1,MSTP(1)
8410                 IB=2*J-1+MOD(IA,2)
8411                 IPM=(5-ISIGN(1,I))/2
8412                 IDC=J+MDCY(IA,2)+2
8413                 IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 380
8414                 MINT(20+JT)=ISIGN(IB,I)
8415                 RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
8416                 IF(RVCKM.LE.0D0) GOTO 390
8417   380         CONTINUE
8418             ELSE
8419               IB=2*((IA+1)/2)-1+MOD(IA,2)
8420               MINT(20+JT)=ISIGN(IB,I)
8421             ENDIF
8422   390       PMQ(JT)=PYMASS(MINT(20+JT))
8423   400     CONTINUE
8424           JT=INT(1.5D0+PYR(0))
8425           ZMIN=2D0*PMQ(JT)/SHPR
8426           ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
8427      &    (SHPR*(SHPR-PMQ(3-JT)))
8428           ZMAX=MIN(1D0-XH,ZMAX)
8429           IF(ZMIN.GE.ZMAX) GOTO 370
8430           Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
8431           IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
8432      &    (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 370
8433           SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
8434           IF(SQC1.LT.1D-8) GOTO 370
8435           C1=SQRT(SQC1)
8436           C2=1D0+2D0*(PMAS(24,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
8437           CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
8438           CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
8439           Z(3-JT)=1D0-XH/(1D0-Z(JT))
8440           SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
8441           IF(SQC1.LT.1D-8) GOTO 370
8442           C1=SQRT(SQC1)
8443           C2=1D0+2D0*(PMAS(24,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
8444           CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
8445           CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
8446           PHIR=PARU(2)*PYR(0)
8447           CPHI=COS(PHIR)
8448           ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
8449      &    SQRT(1D0-CTHE(2)**2)*CPHI
8450           Z1=2D0-Z(JT)
8451           Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
8452           Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
8453           Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
8454      &    PMQ(3-JT)**2/SHP))
8455           ZMIN=2D0*PMQ(3-JT)/SHPR
8456           ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
8457           ZMAX=MIN(1D0-XH,ZMAX)
8458           IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 370
8459           KCC=22
8460  
8461         ELSEIF(ISUB.EQ.78) THEN
8462 C...W+/- + h0 -> W+/- + h0
8463  
8464         ELSEIF(ISUB.EQ.79) THEN
8465 C...h0 + h0 -> h0 + h0
8466  
8467         ELSEIF(ISUB.EQ.80) THEN
8468 C...q + gamma -> q' + pi+/-; th=(p(q)-p(q'))**2
8469           IF(MINT(15).EQ.22) JS=2
8470           I=MINT(14+JS)
8471           IA=IABS(I)
8472           MINT(23-JS)=ISIGN(211,KCHG(IA,1)*I)
8473           IB=3-IA
8474           MINT(20+JS)=ISIGN(IB,I)
8475           KCC=22
8476         ENDIF
8477  
8478       ELSEIF(ISUB.LE.90) THEN
8479         IF(ISUB.EQ.81) THEN
8480 C...q + qbar -> Q + Qbar; th = (p(q)-p(Q))**2
8481           MINT(21)=ISIGN(MINT(55),MINT(15))
8482           MINT(22)=-MINT(21)
8483           KCC=4
8484  
8485         ELSEIF(ISUB.EQ.82) THEN
8486 C...g + g -> Q + Qbar; th arbitrary
8487           KCS=(-1)**INT(1.5D0+PYR(0))
8488           MINT(21)=ISIGN(MINT(55),KCS)
8489           MINT(22)=-MINT(21)
8490           KCC=MINT(2)+10
8491  
8492         ELSEIF(ISUB.EQ.83) THEN
8493 C...f + q -> f' + Q; th = (p(f) - p(f'))**2
8494           KFOLD=MINT(16)
8495           IF(MINT(2).EQ.2) KFOLD=MINT(15)
8496           KFAOLD=IABS(KFOLD)
8497           IF(KFAOLD.GT.10) THEN
8498             KFANEW=KFAOLD+2*MOD(KFAOLD,2)-1
8499           ELSE
8500             RCKM=VINT(180+KFOLD)*PYR(0)
8501             IPM=(5-ISIGN(1,KFOLD))/2
8502             KFANEW=-MOD(KFAOLD+1,2)
8503   410       KFANEW=KFANEW+2
8504             IDC=MDCY(KFAOLD,2)+(KFANEW+1)/2+2
8505             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.IPM) THEN
8506               IF(MOD(KFAOLD,2).EQ.0) RCKM=RCKM-
8507      &        VCKM(KFAOLD/2,(KFANEW+1)/2)
8508               IF(MOD(KFAOLD,2).EQ.1) RCKM=RCKM-
8509      &        VCKM(KFANEW/2,(KFAOLD+1)/2)
8510             ENDIF
8511             IF(KFANEW.LE.6.AND.RCKM.GT.0D0) GOTO 410
8512           ENDIF
8513           IF(MINT(2).EQ.1) THEN
8514             MINT(21)=ISIGN(MINT(55),MINT(15))
8515             MINT(22)=ISIGN(KFANEW,MINT(16))
8516           ELSE
8517             MINT(21)=ISIGN(KFANEW,MINT(15))
8518             MINT(22)=ISIGN(MINT(55),MINT(16))
8519             JS=2
8520           ENDIF
8521           KCC=22
8522  
8523         ELSEIF(ISUB.EQ.84) THEN
8524 C...g + gamma -> Q + Qbar; th arbitary
8525           KCS=(-1)**INT(1.5D0+PYR(0))
8526           MINT(21)=ISIGN(MINT(55),KCS)
8527           MINT(22)=-MINT(21)
8528           KCC=27
8529           IF(MINT(16).EQ.21) KCC=28
8530  
8531         ELSEIF(ISUB.EQ.85) THEN
8532 C...gamma + gamma -> F + Fbar; th arbitary
8533           KCS=(-1)**INT(1.5D0+PYR(0))
8534           MINT(21)=ISIGN(MINT(56),KCS)
8535           MINT(22)=-MINT(21)
8536           KCC=21
8537  
8538         ELSEIF(ISUB.GE.86.AND.ISUB.LE.89) THEN
8539 C...g + g -> (J/Psi, chi_0c, chi_1c or chi_2c) + g
8540           MINT(21)=KFPR(ISUB,1)
8541           MINT(22)=KFPR(ISUB,2)
8542           KCC=24
8543           KCS=(-1)**INT(1.5D0+PYR(0))
8544         ENDIF
8545  
8546       ELSEIF(ISUB.LE.100) THEN
8547         IF(ISUB.EQ.95) THEN
8548 C...Low-pT ( = energyless g + g -> g + g)
8549           KCC=MINT(2)+12
8550           KCS=(-1)**INT(1.5D0+PYR(0))
8551  
8552         ELSEIF(ISUB.EQ.96) THEN
8553 C...Multiple interactions (should be reassigned to QCD process)
8554         ENDIF
8555  
8556       ELSEIF(ISUB.LE.110) THEN
8557         IF(ISUB.EQ.101) THEN
8558 C...g + g -> gamma*/Z0
8559           KCC=21
8560           KFRES=22
8561  
8562         ELSEIF(ISUB.EQ.102) THEN
8563 C...g + g -> h0 (or H0, or A0)
8564           KCC=21
8565           KFRES=KFHIGG
8566  
8567         ELSEIF(ISUB.EQ.103) THEN
8568 C...gamma + gamma -> h0 (or H0, or A0)
8569           KCC=21
8570           KFRES=KFHIGG
8571  
8572         ELSEIF(ISUB.EQ.104.OR.ISUB.EQ.105) THEN
8573 C...g + g -> chi_0c or chi_2c.
8574           KCC=21
8575           KFRES=KFPR(ISUB,1)
8576  
8577         ELSEIF(ISUB.EQ.106) THEN
8578 C...g + g -> J/Psi + gamma
8579           MINT(21)=KFPR(ISUB,1)
8580           MINT(22)=KFPR(ISUB,2)
8581           KCC=21
8582  
8583         ELSEIF(ISUB.EQ.107) THEN
8584 C...g + gamma -> J/Psi + g
8585           MINT(21)=KFPR(ISUB,1)
8586           MINT(22)=KFPR(ISUB,2)
8587           KCC=22
8588           IF(MINT(16).EQ.22) KCC=33
8589  
8590         ELSEIF(ISUB.EQ.108) THEN
8591 C...gamma + gamma -> J/Psi + gamma
8592           MINT(21)=KFPR(ISUB,1)
8593           MINT(22)=KFPR(ISUB,2)
8594  
8595         ELSEIF(ISUB.EQ.110) THEN
8596 C...f + fbar -> gamma + h0; th arbitrary
8597           IF(PYR(0).GT.0.5D0) JS=2
8598           MINT(20+JS)=22
8599           MINT(23-JS)=KFHIGG
8600         ENDIF
8601  
8602       ELSEIF(ISUB.LE.120) THEN
8603         IF(ISUB.EQ.111) THEN
8604 C...f + fbar -> g + h0; th arbitrary
8605           IF(PYR(0).GT.0.5D0) JS=2
8606           MINT(20+JS)=21
8607           MINT(23-JS)=25
8608           KCC=17+JS
8609  
8610         ELSEIF(ISUB.EQ.112) THEN
8611 C...f + g -> f + h0; th = (p(f) - p(f))**2
8612           IF(MINT(15).EQ.21) JS=2
8613           MINT(23-JS)=25
8614           KCC=15+JS
8615           KCS=ISIGN(1,MINT(14+JS))
8616  
8617         ELSEIF(ISUB.EQ.113) THEN
8618 C...g + g -> g + h0; th arbitrary
8619           IF(PYR(0).GT.0.5D0) JS=2
8620           MINT(23-JS)=25
8621           KCC=22+JS
8622           KCS=(-1)**INT(1.5D0+PYR(0))
8623  
8624         ELSEIF(ISUB.EQ.114) THEN
8625 C...g + g -> gamma + gamma; th arbitrary
8626           IF(PYR(0).GT.0.5D0) JS=2
8627           MINT(21)=22
8628           MINT(22)=22
8629           KCC=21
8630  
8631         ELSEIF(ISUB.EQ.115) THEN
8632 C...g + g -> g + gamma; th arbitrary
8633           IF(PYR(0).GT.0.5D0) JS=2
8634           MINT(23-JS)=22
8635           KCC=22+JS
8636           KCS=(-1)**INT(1.5D0+PYR(0))
8637  
8638         ELSEIF(ISUB.EQ.116) THEN
8639 C...g + g -> gamma + Z0
8640  
8641         ELSEIF(ISUB.EQ.117) THEN
8642 C...g + g -> Z0 + Z0
8643  
8644         ELSEIF(ISUB.EQ.118) THEN
8645 C...g + g -> W+ + W-
8646         ENDIF
8647  
8648       ELSEIF(ISUB.LE.140) THEN
8649         IF(ISUB.EQ.121) THEN
8650 C...g + g -> Q + Qbar + h0
8651           KCS=(-1)**INT(1.5D0+PYR(0))
8652           MINT(21)=ISIGN(KFPR(ISUBSV,2),KCS)
8653           MINT(22)=-MINT(21)
8654           KCC=11+INT(0.5D0+PYR(0))
8655           KFRES=KFHIGG
8656  
8657         ELSEIF(ISUB.EQ.122) THEN
8658 C...q + qbar -> Q + Qbar + h0
8659           MINT(21)=ISIGN(KFPR(ISUBSV,2),MINT(15))
8660           MINT(22)=-MINT(21)
8661           KCC=4
8662           KFRES=KFHIGG
8663  
8664         ELSEIF(ISUB.EQ.123) THEN
8665 C...f + f' -> f + f' + h0 (or H0, or A0) (Z0 + Z0 -> h0 as
8666 C...inner process)
8667           KCC=22
8668           KFRES=KFHIGG
8669  
8670         ELSEIF(ISUB.EQ.124) THEN
8671 C...f + f' -> f" + f"' + h0 (or H0, or A) (W+ + W- -> h0 as
8672 C...inner process)
8673           DO 430 JT=1,2
8674             I=MINT(14+JT)
8675             IA=IABS(I)
8676             IF(IA.LE.10) THEN
8677               RVCKM=VINT(180+I)*PYR(0)
8678               DO 420 J=1,MSTP(1)
8679                 IB=2*J-1+MOD(IA,2)
8680                 IPM=(5-ISIGN(1,I))/2
8681                 IDC=J+MDCY(IA,2)+2
8682                 IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 420
8683                 MINT(20+JT)=ISIGN(IB,I)
8684                 RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
8685                 IF(RVCKM.LE.0D0) GOTO 430
8686   420         CONTINUE
8687             ELSE
8688               IB=2*((IA+1)/2)-1+MOD(IA,2)
8689               MINT(20+JT)=ISIGN(IB,I)
8690             ENDIF
8691   430     CONTINUE
8692           KCC=22
8693           KFRES=KFHIGG
8694  
8695         ELSEIF(ISUB.EQ.131.OR.ISUB.EQ.132) THEN
8696 C...f + gamma*_(T,L) -> f + g; th=(p(f)-p(f))**2
8697           IF(MINT(15).EQ.22) JS=2
8698           MINT(23-JS)=21
8699           KCC=24+JS
8700           KCS=ISIGN(1,MINT(14+JS))
8701  
8702         ELSEIF(ISUB.EQ.133.OR.ISUB.EQ.134) THEN
8703 C...f + gamma*_(T,L) -> f + gamma; th=(p(f)-p(f))**2
8704           IF(MINT(15).EQ.22) JS=2
8705           KCC=22
8706           KCS=ISIGN(1,MINT(14+JS))
8707  
8708         ELSEIF(ISUB.EQ.135.OR.ISUB.EQ.136) THEN
8709 C...g + gamma*_(T,L) -> f + fbar; th arbitrary
8710           KCS=(-1)**INT(1.5D0+PYR(0))
8711           MINT(21)=ISIGN(KFLF,KCS)
8712           MINT(22)=-MINT(21)
8713           KCC=27
8714           IF(MINT(16).EQ.21) KCC=28
8715  
8716         ELSEIF(ISUB.GE.137.AND.ISUB.LE.140) THEN
8717 C...gamma*_(T,L) + gamma*_(T,L) -> f + fbar; th arbitrary
8718           KCS=(-1)**INT(1.5D0+PYR(0))
8719           MINT(21)=ISIGN(KFLF,KCS)
8720           MINT(22)=-MINT(21)
8721           KCC=21
8722  
8723         ENDIF
8724  
8725       ELSEIF(ISUB.LE.160) THEN
8726         IF(ISUB.EQ.141) THEN
8727 C...f + fbar -> gamma*/Z0/Z'0
8728           KFRES=32
8729  
8730         ELSEIF(ISUB.EQ.142) THEN
8731 C...f + fbar' -> W'+/-
8732           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
8733           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
8734           KFRES=ISIGN(34,KCH1+KCH2)
8735  
8736         ELSEIF(ISUB.EQ.143) THEN
8737 C...f + fbar' -> H+/-
8738           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
8739           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
8740           KFRES=ISIGN(37,KCH1+KCH2)
8741  
8742         ELSEIF(ISUB.EQ.144) THEN
8743 C...f + fbar' -> R
8744           KFRES=ISIGN(40,MINT(15)+MINT(16))
8745  
8746         ELSEIF(ISUB.EQ.145) THEN
8747 C...q + l -> LQ (leptoquark)
8748           IF(IABS(MINT(16)).LE.8) JS=2
8749           KFRES=ISIGN(39,MINT(14+JS))
8750           KCC=28+JS
8751           KCS=ISIGN(1,MINT(14+JS))
8752
8753         ELSEIF(ISUB.EQ.146) THEN
8754 C...e + gamma -> e* (excited lepton)
8755           IF(MINT(15).EQ.22) JS=2
8756           KFRES=ISIGN(KFPR(ISUB,1),MINT(14+JS))
8757           KCC=22
8758  
8759         ELSEIF(ISUB.EQ.147.OR.ISUB.EQ.148) THEN
8760 C...q + g -> q* (excited quark)
8761           IF(MINT(15).EQ.21) JS=2
8762           KFRES=ISIGN(KFPR(ISUB,1),MINT(14+JS))
8763           KCC=30+JS
8764           KCS=ISIGN(1,MINT(14+JS))
8765  
8766         ELSEIF(ISUB.EQ.149) THEN
8767 C...g + g -> eta_techni
8768           KFRES=38
8769           KCC=23
8770           KCS=(-1)**INT(1.5D0+PYR(0))
8771         ENDIF
8772  
8773       ELSEIF(ISUB.LE.200) THEN
8774         IF(ISUB.EQ.161) THEN
8775 C...f + g -> f' + H+/-; th = (p(f)-p(f'))**2
8776           IF(MINT(15).EQ.21) JS=2
8777           I=MINT(14+JS)
8778           IA=IABS(I)
8779           MINT(23-JS)=ISIGN(37,KCHG(IA,1)*I)
8780           IB=IA+MOD(IA,2)-MOD(IA+1,2)
8781           MINT(20+JS)=ISIGN(IB,I)
8782           KCC=15+JS
8783           KCS=ISIGN(1,MINT(14+JS))
8784  
8785         ELSEIF(ISUB.EQ.162) THEN
8786 C...q + g -> LQ + lbar; LQ=leptoquark; th=(p(q)-p(LQ))^2
8787           IF(MINT(15).EQ.21) JS=2
8788           MINT(20+JS)=ISIGN(39,MINT(14+JS))
8789           KFLQL=KFDP(MDCY(39,2),2)
8790           MINT(23-JS)=-ISIGN(KFLQL,MINT(14+JS))
8791           KCC=15+JS
8792           KCS=ISIGN(1,MINT(14+JS))
8793  
8794         ELSEIF(ISUB.EQ.163) THEN
8795 C...g + g -> LQ + LQbar; LQ=leptoquark; th arbitrary
8796           KCS=(-1)**INT(1.5D0+PYR(0))
8797           MINT(21)=ISIGN(39,KCS)
8798           MINT(22)=-MINT(21)
8799           KCC=MINT(2)+10
8800  
8801         ELSEIF(ISUB.EQ.164) THEN
8802 C...q + qbar -> LQ + LQbar; LQ=leptoquark; th=(p(q)-p(LQ))**2
8803           MINT(21)=ISIGN(39,MINT(15))
8804           MINT(22)=-MINT(21)
8805           KCC=4
8806  
8807         ELSEIF(ISUB.EQ.165) THEN
8808 C...q + qbar -> l- + l+; th=(p(q)-p(l-))**2
8809           MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
8810           MINT(22)=-MINT(21)
8811  
8812         ELSEIF(ISUB.EQ.166) THEN
8813 C...q + qbar' -> l + nu; th=(p(u)-p(nu))**2 or (p(ubar)-p(nubar))**2
8814           IF(MOD(MINT(15),2).EQ.0) THEN
8815             MINT(21)=ISIGN(KFPR(ISUB,1)+1,MINT(15))
8816             MINT(22)=ISIGN(KFPR(ISUB,1),MINT(16))
8817           ELSE
8818             MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
8819             MINT(22)=ISIGN(KFPR(ISUB,1)+1,MINT(16))
8820           ENDIF
8821  
8822         ELSEIF(ISUB.EQ.167.OR.ISUB.EQ.168) THEN
8823 C...q + q' -> q" + q* (excited quark)
8824           KFQSTR=KFPR(ISUB,2)
8825           KFQEXC=MOD(KFQSTR,KEXCIT)
8826           JS=MINT(2)
8827           MINT(20+JS)=ISIGN(KFQSTR,MINT(14+JS))
8828           IF(IABS(MINT(15)).NE.KFQEXC.AND.IABS(MINT(16)).NE.KFQEXC)
8829      &    MINT(23-JS)=ISIGN(KFQEXC,MINT(17-JS))
8830           KCC=22
8831  
8832         ELSEIF(ISUB.EQ.169) THEN
8833 C...q + qbar -> e + e* (excited lepton)
8834           KFQSTR=KFPR(ISUB,2)
8835           KFQEXC=MOD(KFQSTR,KEXCIT)
8836           JS=MINT(2)
8837           MINT(20+JS)=ISIGN(KFQSTR,MINT(14+JS))
8838           MINT(23-JS)=ISIGN(KFQEXC,MINT(17-JS))
8839  
8840         ELSEIF(ISUB.EQ.191) THEN
8841 C...f + fbar -> rho_tech0.
8842           KFRES=54
8843  
8844         ELSEIF(ISUB.EQ.192) THEN
8845 C...f + fbar' -> rho_tech+/-
8846           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
8847           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
8848           KFRES=ISIGN(55,KCH1+KCH2)
8849  
8850         ELSEIF(ISUB.EQ.193) THEN
8851 C...f + fbar -> omega_tech0.
8852           KFRES=56
8853  
8854         ELSEIF(ISUB.EQ.194) THEN
8855 C...f + fbar -> f' + fbar' via mixture of s-channel
8856 C...rho_tech and omega_tech; th=(p(f)-p(f'))**2
8857           MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
8858           MINT(22)=-MINT(21)
8859
8860         ELSEIF(ISUB.EQ.195) THEN
8861 C...f + fbar' -> f'' + fbar''' via s-channel
8862 C...rho_tech+ th=(p(f)-p(f'))**2
8863 C...q + qbar' -> l + nu; th=(p(u)-p(nu))**2 or (p(ubar)-p(nubar))**2
8864           IF(MOD(MINT(15),2).EQ.0) THEN
8865             MINT(21)=ISIGN(KFPR(ISUB,1)+1,MINT(15))
8866             MINT(22)=ISIGN(KFPR(ISUB,1),MINT(16))
8867           ELSE
8868             MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
8869             MINT(22)=ISIGN(KFPR(ISUB,1)+1,MINT(16))
8870           ENDIF
8871         ENDIF
8872  
8873 CMRENNA++
8874       ELSEIF(ISUB.LE.215) THEN
8875         IF(ISUB.EQ.201) THEN
8876 C...f + fbar -> ~e_L + ~e_Lbar
8877           MINT(21)=ISIGN(KSUSY1+11,KCS)
8878           MINT(22)=-MINT(21)
8879  
8880         ELSEIF(ISUB.EQ.202) THEN
8881 C...f + fbar -> ~e_R + ~e_Rbar
8882           MINT(21)=ISIGN(KSUSY2+11,KCS)
8883           MINT(22)=-MINT(21)
8884  
8885         ELSEIF(ISUB.EQ.203) THEN
8886 C...f + fbar -> ~e_R + ~e_Lbar
8887           KCSG=1
8888           IF(MINT(2).EQ.2) KCSG=-1
8889           MINT(21)=ISIGN(KSUSY1+11,KCSG)
8890           MINT(22)=-ISIGN(KSUSY2+11,KCSG)
8891  
8892         ELSEIF(ISUB.EQ.204) THEN
8893 C...f + fbar -> ~mu_L + ~mu_Lbar
8894           MINT(21)=ISIGN(KSUSY1+13,KCS)
8895           MINT(22)=-MINT(21)
8896  
8897         ELSEIF(ISUB.EQ.205) THEN
8898 C...f + fbar -> ~mu_R + ~mu_Rbar
8899           MINT(21)=ISIGN(KSUSY2+13,KCS)
8900           MINT(22)=-MINT(21)
8901  
8902         ELSEIF(ISUB.EQ.206) THEN
8903 C...f + fbar -> ~mu_L + ~mu_Rbar
8904           KCSG=1
8905           IF(MINT(2).EQ.2) KCSG=-1
8906           MINT(21)=ISIGN(KSUSY1+13,KCSG)
8907           MINT(22)=-ISIGN(KSUSY2+13,KCSG)
8908  
8909         ELSEIF(ISUB.EQ.207) THEN
8910 C...f + fbar -> ~tau_1 + ~tau_1bar
8911           MINT(21)=ISIGN(KSUSY1+15,KCS)
8912           MINT(22)=-MINT(21)
8913  
8914         ELSEIF(ISUB.EQ.208) THEN
8915 C...f + fbar -> ~tau_2 + ~tau_2bar
8916           MINT(21)=ISIGN(KSUSY2+15,KCS)
8917           MINT(22)=-MINT(21)
8918  
8919         ELSEIF(ISUB.EQ.209) THEN
8920 C...f + fbar -> ~tau_1 + ~tau_2bar
8921           KCSG=1
8922           IF(MINT(2).EQ.2) KCSG=-1
8923           MINT(21)=ISIGN(KSUSY1+15,KCSG)
8924           MINT(22)=-ISIGN(KSUSY2+15,KCSG)
8925  
8926         ELSEIF(ISUB.EQ.210) THEN
8927 C...q + qbar' -> ~l_L + ~nulbar; th arbitrary
8928           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
8929           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
8930           MINT(21)=-ISIGN(KFPR(ISUB,1),KCH1+KCH2)
8931           MINT(22)=ISIGN(KFPR(ISUB,2),KCH1+KCH2)
8932  
8933         ELSEIF(ISUB.EQ.211) THEN
8934 C...q + qbar'-> ~tau_1 + ~nutaubar; th arbitrary
8935           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
8936           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
8937           MINT(21)=-ISIGN(KSUSY1+15,KCH1+KCH2)
8938           MINT(22)=ISIGN(KSUSY1+16,KCH1+KCH2)
8939  
8940         ELSEIF(ISUB.EQ.212) THEN
8941 C...q + qbar'-> ~tau_2 + ~nutaubar; th arbitrary
8942           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
8943           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
8944           MINT(21)=-ISIGN(KSUSY2+15,KCH1+KCH2)
8945           MINT(22)=ISIGN(KSUSY1+16,KCH1+KCH2)
8946  
8947         ELSEIF(ISUB.EQ.213) THEN
8948 C...f + fbar -> ~nul + ~nulbar
8949           MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
8950           MINT(22)=-MINT(21)
8951  
8952         ELSEIF(ISUB.EQ.214) THEN
8953 C...f + fbar -> ~nutau + ~nutaubar
8954           MINT(21)=ISIGN(KSUSY1+16,KCS)
8955           MINT(22)=-MINT(21)
8956         ENDIF
8957  
8958       ELSEIF(ISUB.LE.225) THEN
8959         IF(ISUB.EQ.216) THEN
8960 C...f + fbar -> ~chi01 + ~chi01
8961           MINT(21)=KSUSY1+22
8962           MINT(22)=KSUSY1+22
8963  
8964         ELSEIF(ISUB.EQ.217) THEN
8965 C...f + fbar -> ~chi02 + ~chi02
8966           MINT(21)=KSUSY1+23
8967           MINT(22)=KSUSY1+23
8968  
8969         ELSEIF(ISUB.EQ.218 ) THEN
8970 C...f + fbar -> ~chi03 + ~chi03
8971           MINT(21)=KSUSY1+25
8972           MINT(22)=KSUSY1+25
8973  
8974         ELSEIF(ISUB.EQ.219 ) THEN
8975 C...f + fbar -> ~chi04 + ~chi04
8976           MINT(21)=KSUSY1+35
8977           MINT(22)=KSUSY1+35
8978  
8979         ELSEIF(ISUB.EQ.220 ) THEN
8980 C...f + fbar -> ~chi01 + ~chi02
8981           IF(PYR(0).GT.0.5D0) JS=2
8982           MINT(20+JS)=KSUSY1+22
8983           MINT(23-JS)=KSUSY1+23
8984  
8985         ELSEIF(ISUB.EQ.221 ) THEN
8986 C...f + fbar -> ~chi01 + ~chi03
8987           IF(PYR(0).GT.0.5D0) JS=2
8988           MINT(20+JS)=KSUSY1+22
8989           MINT(23-JS)=KSUSY1+25
8990  
8991         ELSEIF(ISUB.EQ.222) THEN
8992 C...f + fbar -> ~chi01 + ~chi04
8993           IF(PYR(0).GT.0.5D0) JS=2
8994           MINT(20+JS)=KSUSY1+22
8995           MINT(23-JS)=KSUSY1+35
8996  
8997         ELSEIF(ISUB.EQ.223) THEN
8998 C...f + fbar -> ~chi02 + ~chi03
8999           IF(PYR(0).GT.0.5D0) JS=2
9000           MINT(20+JS)=KSUSY1+23
9001           MINT(23-JS)=KSUSY1+25
9002  
9003         ELSEIF(ISUB.EQ.224) THEN
9004 C...f + fbar -> ~chi02 + ~chi04
9005           IF(PYR(0).GT.0.5D0) JS=2
9006           MINT(20+JS)=KSUSY1+23
9007           MINT(23-JS)=KSUSY1+35
9008  
9009         ELSEIF(ISUB.EQ.225) THEN
9010 C...f + fbar -> ~chi03 + ~chi04
9011           IF(PYR(0).GT.0.5D0) JS=2
9012           MINT(20+JS)=KSUSY1+25
9013           MINT(23-JS)=KSUSY1+35
9014         ENDIF
9015  
9016       ELSEIF(ISUB.LE.236) THEN
9017         IF(ISUB.EQ.226) THEN
9018 C...f + fbar -> ~chi+-1 + ~chi-+1
9019 C...th=(p(q)-p(chi+))**2 or (p(qbar)-p(chi-))**2
9020           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9021           MINT(21)=ISIGN(KSUSY1+24,KCH1)
9022           MINT(22)=-MINT(21)
9023  
9024         ELSEIF(ISUB.EQ.227) THEN
9025 C...f + fbar -> ~chi+-2 + ~chi-+2
9026           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9027           MINT(21)=ISIGN(KSUSY1+37,KCH1)
9028           MINT(22)=-MINT(21)
9029  
9030         ELSEIF(ISUB.EQ.228) THEN
9031 C...f + fbar -> ~chi+-1 + ~chi-+2
9032 C...th=(p(q)-p(chi1+))**2 or th=(p(qbar)-p(chi1-))**2
9033 C...js=1 if pyr<.5, js=2 if pyr>.5
9034 C...if 15=q, 16=qbar and js=1, chi1+ + chi2-, th=(q-chi1+)**2
9035 C...if 15=qbar, 16=q and js=1, chi2- + chi1+, th=(q-chi1+)**2
9036 C...if 15=q, 16=qbar and js=2, chi1- + chi2+, th=(qbar-chi1-)**2
9037 C...if 15=qbar, 16=q and js=2, chi2+ + chi1-, th=(q-chi1-)**2
9038           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9039 C          KCH1=ISIGN(1,MINT(15))
9040           KCH2=INT(1-KCH1)/2
9041           IF(MINT(2).EQ.1) THEN
9042             MINT(22-KCH2)= -(KSUSY1+24)
9043             MINT(21+KCH2)= KSUSY1+37
9044             IF(KCH2.EQ.0) JS=2
9045           ELSE
9046             MINT(21+KCH2)= KSUSY1+24
9047             MINT(22-KCH2)= -(KSUSY1+37)
9048             IF(KCH2.EQ.1) JS=2
9049           ENDIF
9050  
9051         ELSEIF(ISUB.EQ.229) THEN
9052 C...q + qbar' -> ~chi01 + ~chi+-1
9053 C...th=(p(u)-p(chi+))**2 or (p(ubar)-p(chi-))**2
9054           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9055           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9056 C...CHECK THIS
9057           IF(MOD(MINT(15),2).NE.0) JS=2
9058           MINT(20+JS)=KSUSY1+22
9059           MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
9060  
9061         ELSEIF(ISUB.EQ.230) THEN
9062 C...q + qbar' -> ~chi02 + ~chi+-1
9063           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9064           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9065           IF(MOD(MINT(15),2).NE.0) JS=2
9066           MINT(20+JS)=KSUSY1+23
9067           MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
9068  
9069         ELSEIF(ISUB.EQ.231) THEN
9070 C...q + qbar' -> ~chi03 + ~chi+-1
9071           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9072           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9073           IF(MOD(MINT(15),2).NE.0) JS=2
9074           MINT(20+JS)=KSUSY1+25
9075           MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
9076  
9077         ELSEIF(ISUB.EQ.232) THEN
9078 C...q + qbar' -> ~chi04 + ~chi+-1
9079           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9080           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9081           IF(MOD(MINT(15),2).NE.0) JS=2
9082           MINT(20+JS)=KSUSY1+35
9083           MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
9084  
9085         ELSEIF(ISUB.EQ.233) THEN
9086 C...q + qbar' -> ~chi01 + ~chi+-2
9087           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9088           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9089           IF(MOD(MINT(15),2).NE.0) JS=2
9090           MINT(20+JS)=KSUSY1+22
9091           MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
9092  
9093         ELSEIF(ISUB.EQ.234) THEN
9094 C...q + qbar' -> ~chi02 + ~chi+-2
9095           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9096           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9097           IF(MOD(MINT(15),2).NE.0) JS=2
9098           MINT(20+JS)=KSUSY1+23
9099           MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
9100  
9101         ELSEIF(ISUB.EQ.235) THEN
9102 C...q + qbar' -> ~chi03 + ~chi+-2
9103           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9104           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9105           IF(MOD(MINT(15),2).NE.0) JS=2
9106           MINT(20+JS)=KSUSY1+25
9107           MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
9108  
9109         ELSEIF(ISUB.EQ.236) THEN
9110 C...q + qbar' -> ~chi04 + ~chi+-2
9111           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9112           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9113           IF(MOD(MINT(15),2).NE.0) JS=2
9114           MINT(20+JS)=KSUSY1+35
9115           MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
9116         ENDIF
9117  
9118       ELSEIF(ISUB.LE.245) THEN
9119         IF(ISUB.EQ.237) THEN
9120 C...q + qbar -> ~chi01 + ~g
9121 C...th arbitrary
9122           IF(PYR(0).GT.0.5D0) JS=2
9123           MINT(20+JS)=KSUSY1+21
9124           MINT(23-JS)=KSUSY1+22
9125           KCC=17+JS
9126  
9127         ELSEIF(ISUB.EQ.238) THEN
9128 C...q + qbar -> ~chi02 + ~g
9129 C...th arbitrary
9130           IF(PYR(0).GT.0.5D0) JS=2
9131           MINT(20+JS)=KSUSY1+21
9132           MINT(23-JS)=KSUSY1+23
9133           KCC=17+JS
9134  
9135         ELSEIF(ISUB.EQ.239) THEN
9136 C...q + qbar -> ~chi03 + ~g
9137 C...th arbitrary
9138           IF(PYR(0).GT.0.5D0) JS=2
9139           MINT(20+JS)=KSUSY1+21
9140           MINT(23-JS)=KSUSY1+25
9141           KCC=17+JS
9142  
9143         ELSEIF(ISUB.EQ.240) THEN
9144 C...q + qbar -> ~chi04 + ~g
9145 C...th arbitrary
9146           IF(PYR(0).GT.0.5D0) JS=2
9147           MINT(20+JS)=KSUSY1+21
9148           MINT(23-JS)=KSUSY1+35
9149           KCC=17+JS
9150  
9151         ELSEIF(ISUB.EQ.241) THEN
9152 C...q + qbar' -> ~chi+-1 + ~g
9153 C...if 15=u, 16=dbar, then (kch1+kch2)>0, js=1, chi+
9154 C...if 15=d, 16=ubar, then (kch1+kch2)<0, js=2, chi-
9155 C...if 15=ubar, 16=d, then (kch1+kch2)<0, js=1, chi-
9156 C...if 15=dbar, 16=u, then (kch1+kch2)>0, js=2, chi+
9157 C...th=(p(q)-p(chi+))**2 or (p(qbar')-p(chi-))**2
9158           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9159           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9160           JS=1
9161           IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
9162           MINT(20+JS)=KSUSY1+21
9163           MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
9164           KCC=17+JS
9165  
9166         ELSEIF(ISUB.EQ.242) THEN
9167 C...q + qbar' -> ~chi+-2 + ~g
9168 C...if 15=u, 16=dbar, then (kch1+kch2)>0, js=1, chi+
9169 C...if 15=d, 16=ubar, then (kch1+kch2)<0, js=2, chi-
9170 C...if 15=ubar, 16=d, then (kch1+kch2)<0, js=1, chi-
9171 C...if 15=dbar, 16=u, then (kch1+kch2)>0, js=2, chi+
9172 C...th=(p(q)-p(chi+))**2 or (p(qbar')-p(chi-))**2
9173           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9174           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9175           JS=1
9176           IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
9177           MINT(20+JS)=KSUSY1+21
9178           MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
9179           KCC=17+JS
9180  
9181         ELSEIF(ISUB.EQ.243) THEN
9182 C...q + qbar -> ~g + ~g ; th arbitrary
9183           MINT(21)=KSUSY1+21
9184           MINT(22)=KSUSY1+21
9185           KCC=MINT(2)+4
9186  
9187         ELSEIF(ISUB.EQ.244) THEN
9188 C...g + g -> ~g + ~g ; th arbitrary
9189           KCC=MINT(2)+12
9190           KCS=(-1)**INT(1.5D0+PYR(0))
9191           MINT(21)=KSUSY1+21
9192           MINT(22)=KSUSY1+21
9193         ENDIF
9194  
9195       ELSEIF(ISUB.LE.260) THEN
9196         IF(ISUB.EQ.246) THEN
9197 C...qj + g -> ~qj_L + ~chi01
9198           IF(MINT(15).EQ.21) JS=2
9199           I=MINT(14+JS)
9200           IA=IABS(I)
9201           MINT(20+JS)=ISIGN(KSUSY1+IA,I)
9202           MINT(23-JS)=KSUSY1+22
9203           KCC=15+JS
9204           KCS=ISIGN(1,MINT(14+JS))
9205  
9206         ELSEIF(ISUB.EQ.247) THEN
9207 C...qj + g -> ~qj_R + ~chi01
9208           IF(MINT(15).EQ.21) JS=2
9209           I=MINT(14+JS)
9210           IA=IABS(I)
9211           MINT(20+JS)=ISIGN(KSUSY2+IA,I)
9212           MINT(23-JS)=KSUSY1+22
9213           KCC=15+JS
9214           KCS=ISIGN(1,MINT(14+JS))
9215  
9216         ELSEIF(ISUB.EQ.248) THEN
9217 C...qj + g -> ~qj_L + ~chi02
9218           IF(MINT(15).EQ.21) JS=2
9219           I=MINT(14+JS)
9220           IA=IABS(I)
9221           MINT(20+JS)=ISIGN(KSUSY1+IA,I)
9222           MINT(23-JS)=KSUSY1+23
9223           KCC=15+JS
9224           KCS=ISIGN(1,MINT(14+JS))
9225  
9226         ELSEIF(ISUB.EQ.249) THEN
9227 C...qj + g -> ~qj_R + ~chi02
9228           IF(MINT(15).EQ.21) JS=2
9229           I=MINT(14+JS)
9230           IA=IABS(I)
9231           MINT(20+JS)=ISIGN(KSUSY2+IA,I)
9232           MINT(23-JS)=KSUSY1+23
9233           KCC=15+JS
9234           KCS=ISIGN(1,MINT(14+JS))
9235  
9236         ELSEIF(ISUB.EQ.250) THEN
9237 C...qj + g -> ~qj_L + ~chi03
9238           IF(MINT(15).EQ.21) JS=2
9239           I=MINT(14+JS)
9240           IA=IABS(I)
9241           MINT(20+JS)=ISIGN(KSUSY1+IA,I)
9242           MINT(23-JS)=KSUSY1+25
9243           KCC=15+JS
9244           KCS=ISIGN(1,MINT(14+JS))
9245  
9246         ELSEIF(ISUB.EQ.251) THEN
9247 C...qj + g -> ~qj_R + ~chi03
9248           IF(MINT(15).EQ.21) JS=2
9249           I=MINT(14+JS)
9250           IA=IABS(I)
9251           MINT(20+JS)=ISIGN(KSUSY2+IA,I)
9252           MINT(23-JS)=KSUSY1+25
9253           KCC=15+JS
9254           KCS=ISIGN(1,MINT(14+JS))
9255  
9256         ELSEIF(ISUB.EQ.252) THEN
9257 C...qj + g -> ~qj_L + ~chi04
9258           IF(MINT(15).EQ.21) JS=2
9259           I=MINT(14+JS)
9260           IA=IABS(I)
9261           MINT(20+JS)=ISIGN(KSUSY1+IA,I)
9262           MINT(23-JS)=KSUSY1+35
9263           KCC=15+JS
9264           KCS=ISIGN(1,MINT(14+JS))
9265  
9266         ELSEIF(ISUB.EQ.253) THEN
9267 C...qj + g -> ~qj_R + ~chi04
9268           IF(MINT(15).EQ.21) JS=2
9269           I=MINT(14+JS)
9270           IA=IABS(I)
9271           MINT(20+JS)=ISIGN(KSUSY2+IA,I)
9272           MINT(23-JS)=KSUSY1+35
9273           KCC=15+JS
9274           KCS=ISIGN(1,MINT(14+JS))
9275  
9276         ELSEIF(ISUB.EQ.254) THEN
9277 C...qj + g -> ~qk_L + ~chi+-1
9278           IF(MINT(15).EQ.21) JS=2
9279           I=MINT(14+JS)
9280           IA=IABS(I)
9281           MINT(23-JS)=ISIGN(KSUSY1+24,KCHG(IA,1)*I)
9282           IB=-IA+INT((IA+1)/2)*4-1
9283           MINT(20+JS)=ISIGN(KSUSY1+IB,I)
9284           KCC=15+JS
9285           KCS=ISIGN(1,MINT(14+JS))
9286  
9287         ELSEIF(ISUB.EQ.255) THEN
9288 C...qj + g -> ~qk_L + ~chi+-1
9289           IF(MINT(15).EQ.21) JS=2
9290           I=MINT(14+JS)
9291           IA=IABS(I)
9292           MINT(23-JS)=ISIGN(KSUSY1+24,KCHG(IA,1)*I)
9293           IB=-IA+INT((IA+1)/2)*4-1
9294           MINT(20+JS)=ISIGN(KSUSY2+IB,I)
9295           KCC=15+JS
9296           KCS=ISIGN(1,MINT(14+JS))
9297  
9298         ELSEIF(ISUB.EQ.256) THEN
9299 C...qj + g -> ~qk_L + ~chi+-2
9300           IF(MINT(15).EQ.21) JS=2
9301           I=MINT(14+JS)
9302           IA=IABS(I)
9303           IB=-IA+INT((IA+1)/2)*4-1
9304           MINT(20+JS)=ISIGN(KSUSY1+IB,I)
9305           MINT(23-JS)=ISIGN(KSUSY1+37,KCHG(IA,1)*I)
9306           KCC=15+JS
9307           KCS=ISIGN(1,MINT(14+JS))
9308  
9309         ELSEIF(ISUB.EQ.257) THEN
9310 C...qj + g -> ~qk_R + ~chi+-2
9311           IF(MINT(15).EQ.21) JS=2
9312           I=MINT(14+JS)
9313           IA=IABS(I)
9314           IB=-IA+INT((IA+1)/2)*4-1
9315           MINT(20+JS)=ISIGN(KSUSY2+IB,I)
9316           MINT(23-JS)=ISIGN(KSUSY1+37,KCHG(IA,1)*I)
9317           KCC=15+JS
9318           KCS=ISIGN(1,MINT(14+JS))
9319  
9320         ELSEIF(ISUB.EQ.258) THEN
9321 C...qj + g -> ~qj_L + ~g
9322           IF(MINT(15).EQ.21) JS=2
9323           I=MINT(14+JS)
9324           IA=IABS(I)
9325           MINT(20+JS)=ISIGN(KSUSY1+IA,I)
9326           MINT(23-JS)=KSUSY1+21
9327           KCC=MINT(2)+6
9328           IF(JS.EQ.2) KCC=KCC+2
9329           KCS=ISIGN(1,I)
9330  
9331         ELSEIF(ISUB.EQ.259) THEN
9332 C...qj + g -> ~qj_R + ~g
9333           IF(MINT(15).EQ.21) JS=2
9334           I=MINT(14+JS)
9335           IA=IABS(I)
9336           MINT(20+JS)=ISIGN(KSUSY2+IA,I)
9337           MINT(23-JS)=KSUSY1+21
9338           KCC=MINT(2)+6
9339           IF(JS.EQ.2) KCC=KCC+2
9340           KCS=ISIGN(1,I)
9341         ENDIF
9342  
9343       ELSEIF(ISUB.LE.270) THEN
9344         IF(ISUB.EQ.261) THEN
9345 C...f + fbar -> ~t_1 + ~t_1bar; th = (p(q)-p(sq))**2
9346           ISGN=1
9347           IF(MINT(43).EQ.1.AND.PYR(0).GT.0.5D0) ISGN=-1
9348           MINT(21)=ISGN*ISIGN(KFPR(ISUB,1),KCS)
9349           MINT(22)=-MINT(21)
9350 C...Correct color combination
9351           IF(MINT(43).EQ.4) KCC=4
9352  
9353         ELSEIF(ISUB.EQ.262) THEN
9354 C...f + fbar -> ~t_2 + ~t_2bar; th = (p(q)-p(sq))**2
9355           ISGN=1
9356           IF(MINT(43).EQ.1.AND.PYR(0).GT.0.5D0) ISGN=-1
9357           MINT(21)=ISGN*ISIGN(KFPR(ISUB,1),KCS)
9358           MINT(22)=-MINT(21)
9359 C...Correct color combination
9360           IF(MINT(43).EQ.4) KCC=4
9361  
9362         ELSEIF(ISUB.EQ.263) THEN
9363 C...f + fbar -> ~t_1 + ~t_2bar; th = (p(q)-p(sq))**2
9364           IF((KCS.GT.0.AND.MINT(2).EQ.1).OR.
9365      &    (KCS.LT.0.AND.MINT(2).EQ.2)) THEN
9366             MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
9367             MINT(22)=-ISIGN(KFPR(ISUB,2),KCS)
9368           ELSE
9369             JS=2
9370             MINT(21)=ISIGN(KFPR(ISUB,2),KCS)
9371             MINT(22)=-ISIGN(KFPR(ISUB,1),KCS)
9372           ENDIF
9373 C...Correct color combination
9374           IF(MINT(43).EQ.4) KCC=4
9375  
9376         ELSEIF(ISUB.EQ.264) THEN
9377 C...g + g -> ~t_1 + ~t_1bar; th arbitrary
9378           KCS=(-1)**INT(1.5D0+PYR(0))
9379           MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
9380           MINT(22)=-MINT(21)
9381           KCC=MINT(2)+10
9382  
9383         ELSEIF(ISUB.EQ.265) THEN
9384 C...g + g -> ~t_2 + ~t_2bar; th arbitrary
9385           KCS=(-1)**INT(1.5D0+PYR(0))
9386           MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
9387           MINT(22)=-MINT(21)
9388           KCC=MINT(2)+10
9389         ENDIF
9390  
9391       ELSEIF(ISUB.LE.296) THEN
9392         IF(ISUB.EQ.271.OR.ISUB.EQ.281.OR.ISUB.EQ.291) THEN
9393 C...qi + qj -> ~qi_L + ~qj_L
9394           KCC=MINT(2)
9395           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
9396           MINT(21)=ISIGN(KSUSY1+IABS(MINT(15)),MINT(15))
9397           MINT(22)=ISIGN(KSUSY1+IABS(MINT(16)),MINT(16))
9398  
9399         ELSEIF(ISUB.EQ.272.OR.ISUB.EQ.282.OR.ISUB.EQ.292) THEN
9400 C...qi + qj -> ~qi_R + ~qj_R
9401           KCC=MINT(2)
9402           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
9403           MINT(21)=ISIGN(KSUSY2+IABS(MINT(15)),MINT(15))
9404           MINT(22)=ISIGN(KSUSY2+IABS(MINT(16)),MINT(16))
9405  
9406         ELSEIF(ISUB.EQ.273.OR.ISUB.EQ.283.OR.ISUB.EQ.293) THEN
9407 C...qi + qj -> ~qi_L + ~qj_R
9408           MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
9409           MINT(22)=ISIGN(KFPR(ISUB,2),MINT(16))
9410           KCC=MINT(2)
9411           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
9412  
9413         ELSEIF(ISUB.EQ.274.OR.ISUB.EQ.284) THEN
9414 C...qi + qjbar -> ~qi_L + ~qj_Lbar; th = (p(f)-p(sf'))**2
9415           MINT(21)=ISIGN(KSUSY1+IABS(MINT(15)),MINT(15))
9416           MINT(22)=ISIGN(KSUSY1+IABS(MINT(16)),MINT(16))
9417           KCC=MINT(2)
9418           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
9419  
9420         ELSEIF(ISUB.EQ.275.OR.ISUB.EQ.285) THEN
9421 C...qi + qjbar -> ~qi_R + ~qj_Rbar ; th = (p(f)-p(sf'))**2
9422           MINT(21)=ISIGN(KSUSY2+IABS(MINT(15)),MINT(15))
9423           MINT(22)=ISIGN(KSUSY2+IABS(MINT(16)),MINT(16))
9424           KCC=MINT(2)
9425           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
9426  
9427         ELSEIF(ISUB.EQ.276.OR.ISUB.EQ.286.OR.ISUB.EQ.296) THEN
9428 C...qi + qjbar -> ~qi_L + ~qj_Rbar ; th = (p(f)-p(sf'))**2
9429           MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
9430           MINT(22)=ISIGN(KFPR(ISUB,2),MINT(16))
9431           KCC=MINT(2)
9432           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
9433  
9434         ELSEIF(ISUB.EQ.277.OR.ISUB.EQ.287) THEN
9435 C...f + fbar -> ~qi_L + ~qi_Lbar ; th = (p(q)-p(sq))**2
9436           ISGN=1
9437           IF(MINT(43).EQ.1.AND.PYR(0).GT.0.5D0) ISGN=-1
9438           MINT(21)=ISGN*ISIGN(KFPR(ISUB,1),KCS)
9439           MINT(22)=-MINT(21)
9440           IF(MINT(43).EQ.4) KCC=4
9441  
9442         ELSEIF(ISUB.EQ.278.OR.ISUB.EQ.288) THEN
9443 C...f + fbar -> ~qi_R + ~qi_Rbar; th = (p(q)-p(sq))**2
9444           ISGN=1
9445           IF(MINT(43).EQ.1.AND.PYR(0).GT.0.5D0) ISGN=-1
9446           MINT(21)=ISGN*ISIGN(KFPR(ISUB,1),KCS)
9447           MINT(22)=-MINT(21)
9448           IF(MINT(43).EQ.4) KCC=4
9449  
9450         ELSEIF(ISUB.EQ.279.OR.ISUB.EQ.289) THEN
9451 C...g + g -> ~qi_L + ~qi_Lbar ; th arbitrary
9452 C...pure LL + RR
9453           KCS=(-1)**INT(1.5D0+PYR(0))
9454           MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
9455           MINT(22)=-MINT(21)
9456           KCC=MINT(2)+10
9457  
9458         ELSEIF(ISUB.EQ.280.OR.ISUB.EQ.290) THEN
9459 C...g + g -> ~qi_R + ~qi_Rbar ; th arbitrary
9460           KCS=(-1)**INT(1.5D0+PYR(0))
9461           MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
9462           MINT(22)=-MINT(21)
9463           KCC=MINT(2)+10
9464  
9465         ELSEIF(ISUB.EQ.294) THEN
9466 C...qj + g -> ~qj_L + ~g
9467           IF(MINT(15).EQ.21) JS=2
9468           I=MINT(14+JS)
9469           IA=IABS(I)
9470           MINT(20+JS)=ISIGN(KSUSY1+IA,I)
9471           MINT(23-JS)=KSUSY1+21
9472           KCC=MINT(2)+6
9473           IF(JS.EQ.2) KCC=KCC+2
9474           KCS=ISIGN(1,I)
9475  
9476         ELSEIF(ISUB.EQ.295) THEN
9477 C...qj + g -> ~qj_R + ~g
9478           IF(MINT(15).EQ.21) JS=2
9479           I=MINT(14+JS)
9480           IA=IABS(I)
9481           MINT(20+JS)=ISIGN(KSUSY2+IA,I)
9482           MINT(23-JS)=KSUSY1+21
9483           KCC=MINT(2)+6
9484           IF(JS.EQ.2) KCC=KCC+2
9485           KCS=ISIGN(1,I)
9486         ENDIF
9487
9488       ELSEIF(ISUB.LE.340) THEN
9489
9490         IF(ISUB.EQ.297.OR.ISUB.EQ.298) THEN
9491 C...q + qbar' -> H+ + H0
9492           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9493           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9494           IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
9495           MINT(20+JS)=ISIGN(37,KCH1+KCH2)
9496           MINT(23-JS)=KFPR(ISUB,2)
9497         ELSEIF(ISUB.EQ.299.OR.ISUB.EQ.300) THEN
9498 C...f + fbar -> A0 + H0; th arbitrary
9499           IF(PYR(0).GT.0.5D0) JS=2
9500           MINT(20+JS)=KFPR(ISUB,1)
9501           MINT(23-JS)=KFPR(ISUB,2)
9502         ELSEIF(ISUB.EQ.301) THEN
9503 C...f + fbar -> H+ H-
9504           MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
9505           MINT(22)=-MINT(21)
9506         ENDIF
9507 CMRENNA--
9508
9509       ELSEIF(ISUB.LE.360) THEN
9510
9511         IF(ISUB.EQ.341.OR.ISUB.EQ.342) THEN
9512 C...l + l -> H_L++/--, H_R++/--
9513           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9514           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9515           KFRES=ISIGN(KFPR(ISUB,1),KCH1+KCH2)
9516  
9517         ELSEIF(ISUB.GE.343.AND.ISUB.LE.348) THEN
9518 C...l + gamma -> l' + H++/--; th=(p(l)-p(H))**2
9519           IF(MINT(15).EQ.22) JS=2
9520           MINT(20+JS)=ISIGN(KFPR(ISUB,1),-MINT(14+JS))
9521           MINT(23-JS)=ISIGN(KFPR(ISUB,2),-MINT(14+JS))
9522           KCC=22
9523  
9524         ELSEIF(ISUB.EQ.349.OR.ISUB.EQ.350) THEN
9525 C...f + fbar -> H++ + H--; th = (p(f)-p(H--))**2
9526           MINT(21)=-ISIGN(KFPR(ISUB,1),MINT(15))
9527           MINT(22)=-MINT(21)
9528
9529         ELSEIF(ISUB.EQ.351.OR.ISUB.EQ.352) THEN
9530 C...f + f' -> f" + f"' + H++/-- (W+/- + W+/- -> H++/-- 
9531 C...as inner process).
9532           DO 432 JT=1,2
9533             I=MINT(14+JT)
9534             IA=IABS(I)
9535             IF(IA.LE.10) THEN
9536               RVCKM=VINT(180+I)*PYR(0)
9537               DO 422 J=1,MSTP(1)
9538                 IB=2*J-1+MOD(IA,2)
9539                 IPM=(5-ISIGN(1,I))/2
9540                 IDC=J+MDCY(IA,2)+2
9541                 IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 422
9542                 MINT(20+JT)=ISIGN(IB,I)
9543                 RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
9544                 IF(RVCKM.LE.0D0) GOTO 432
9545   422         CONTINUE
9546             ELSE
9547               IB=2*((IA+1)/2)-1+MOD(IA,2)
9548               MINT(20+JT)=ISIGN(IB,I)
9549             ENDIF
9550   432     CONTINUE
9551           KCC=22
9552           KFRES=ISIGN(KFPR(ISUB,1),MINT(15))
9553           IF(MOD(MINT(15),2).EQ.1) KFRES=-KFRES
9554
9555         ENDIF
9556
9557       ELSEIF(ISUB.LE.380) THEN
9558         IF(ISUB.LE.363.OR.ISUB.EQ.368) THEN
9559 C...f + fbar -> pi+ pi-
9560           KSW=(-1)**INT(1.5D0+PYR(0))
9561           MINT(21)=ISIGN(KFPR(ISUB,1),KSW)
9562           MINT(22)=-ISIGN(KFPR(ISUB,2),KSW)
9563 C...f + fbar -> neutral neutral
9564         ELSEIF(ISUB.LE.367) THEN
9565           MINT(21)=KFPR(ISUB,1)
9566           MINT(22)=KFPR(ISUB,2)
9567 C...f + fbar' -> charged neutral
9568         ELSEIF(ISUB.EQ.374.OR.ISUB.EQ.375) THEN
9569           IN=1
9570           IC=2
9571           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9572           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9573           IF(MINT(15)*(KCH1+KCH2).LT.0) JS=2
9574 c         MINT(20+JS)=ISIGN(KFPR(ISUB,IC),KCH1+KCH2)
9575 c         MINT(23-JS)=KFPR(ISUB,IN)
9576           MINT(23-JS)=ISIGN(KFPR(ISUB,IC),KCH1+KCH2)
9577           MINT(20+JS)=KFPR(ISUB,IN)
9578
9579         ELSEIF(ISUB.GE.370.AND.ISUB.LE.377) THEN
9580           IN=2
9581           IC=1
9582           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
9583           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
9584           IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
9585           MINT(20+JS)=ISIGN(KFPR(ISUB,IC),KCH1+KCH2)
9586           MINT(23-JS)=KFPR(ISUB,IN)
9587         ENDIF
9588       ENDIF
9589  
9590       IF(ISET(ISUB).EQ.11) THEN
9591 C...Store documentation for user-defined processes
9592         BEZUP=(PUP(1,4)-PUP(2,4))/(PUP(1,4)+PUP(2,4))
9593         KUPPO(1)=MINT(83)+5
9594         KUPPO(2)=MINT(83)+6
9595         I=MINT(83)+6
9596         DO 450 IUP=3,NUP
9597           KUPPO(IUP)=0
9598           IF(MSTP(128).GE.2.AND.KUP(IUP,3).NE.0) THEN
9599             IDOC=IDOC-1
9600             MINT(4)=MINT(4)-1
9601             GOTO 450
9602           ENDIF
9603           I=I+1
9604           KUPPO(IUP)=I
9605           K(I,1)=21
9606           K(I,2)=KUP(IUP,2)
9607           K(I,3)=0
9608           IF(KUP(IUP,3).NE.0) K(I,3)=KUPPO(KUP(IUP,3))
9609           K(I,4)=0
9610           K(I,5)=0
9611           DO 440 J=1,5
9612             P(I,J)=PUP(IUP,J)
9613   440     CONTINUE
9614   450   CONTINUE
9615         CALL PYROBO(MINT(83)+7,MINT(83)+4+NUP,0D0,VINT(24),0D0,0D0,
9616      &  -BEZUP)
9617  
9618 C...Store final state partons for user-defined processes
9619         N=IPU2
9620         DO 470 IUP=3,NUP
9621           N=N+1
9622           K(N,1)=1
9623           IF(KUP(IUP,1).NE.1) K(N,1)=11
9624           K(N,2)=KUP(IUP,2)
9625           IF(MSTP(128).LE.0.OR.KUP(IUP,3).EQ.0) THEN
9626             K(N,3)=KUPPO(IUP)
9627           ELSE
9628             K(N,3)=MINT(84)+KUP(IUP,3)
9629           ENDIF
9630           K(N,4)=0
9631           K(N,5)=0
9632           DO 460 J=1,5
9633             P(N,J)=PUP(IUP,J)
9634   460     CONTINUE
9635   470   CONTINUE
9636         CALL PYROBO(IPU3,N,0D0,VINT(24),0D0,0D0,-BEZUP)
9637  
9638 C...Arrange colour flow for user-defined processes
9639         N=MINT(84)
9640         DO 480 IUP=1,NUP
9641           N=N+1
9642           IF(KCHG(PYCOMP(K(N,2)),2).EQ.0) GOTO 480
9643           IF(K(N,1).EQ.1) K(N,1)=3
9644           IF(K(N,1).EQ.11) K(N,1)=14
9645           IF(KUP(IUP,4).NE.0) K(N,4)=K(N,4)+MSTU(5)*(KUP(IUP,4)+
9646      &    MINT(84))
9647           IF(KUP(IUP,5).NE.0) K(N,5)=K(N,5)+MSTU(5)*(KUP(IUP,5)+
9648      &    MINT(84))
9649           IF(KUP(IUP,6).NE.0) K(N,4)=K(N,4)+KUP(IUP,6)+MINT(84)
9650           IF(KUP(IUP,7).NE.0) K(N,5)=K(N,5)+KUP(IUP,7)+MINT(84)
9651   480   CONTINUE
9652  
9653       ELSEIF(IDOC.EQ.7) THEN
9654 C...Resonance not decaying; store kinematics
9655         I=MINT(83)+7
9656         K(IPU3,1)=1
9657         K(IPU3,2)=KFRES
9658         K(IPU3,3)=I
9659         P(IPU3,4)=SHUSER
9660         P(IPU3,5)=SHUSER
9661         K(I,1)=21
9662         K(I,2)=KFRES
9663         P(I,4)=SHUSER
9664         P(I,5)=SHUSER
9665         N=IPU3
9666         MINT(21)=KFRES
9667         MINT(22)=0
9668  
9669 C...Special cases: colour flow in coloured resonances
9670         KCRES=PYCOMP(KFRES)
9671         IF(KCHG(KCRES,2).NE.0) THEN
9672           K(IPU3,1)=3
9673           DO 490 J=1,2
9674             JC=J
9675             IF(KCS.EQ.-1) JC=3-J
9676             IF(ICOL(KCC,1,JC).NE.0.AND.K(IPU1,1).EQ.14) K(IPU1,J+3)=
9677      &      MINT(84)+ICOL(KCC,1,JC)
9678             IF(ICOL(KCC,2,JC).NE.0.AND.K(IPU2,1).EQ.14) K(IPU2,J+3)=
9679      &      MINT(84)+ICOL(KCC,2,JC)
9680             IF(ICOL(KCC,3,JC).NE.0.AND.K(IPU3,1).EQ.3) K(IPU3,J+3)=
9681      &      MSTU(5)*(MINT(84)+ICOL(KCC,3,JC))
9682   490     CONTINUE
9683         ELSE
9684           K(IPU1,4)=IPU2
9685           K(IPU1,5)=IPU2
9686           K(IPU2,4)=IPU1
9687           K(IPU2,5)=IPU1
9688         ENDIF
9689  
9690       ELSEIF(IDOC.EQ.8) THEN
9691 C...2 -> 2 processes: store outgoing partons in their CM-frame
9692         DO 500 JT=1,2
9693           I=MINT(84)+2+JT
9694           KCA=PYCOMP(MINT(20+JT))
9695           K(I,1)=1
9696           IF(KCHG(KCA,2).NE.0) K(I,1)=3
9697           K(I,2)=MINT(20+JT)
9698           K(I,3)=MINT(83)+IDOC+JT-2
9699           KFAA=IABS(K(I,2))
9700           IF(KFPR(ISUBSV,1+MOD(JS+JT,2)).NE.0) THEN
9701             P(I,5)=SQRT(VINT(63+MOD(JS+JT,2)))
9702           ELSE
9703             P(I,5)=PYMASS(K(I,2))
9704           ENDIF
9705           IF((KFAA.EQ.6.OR.KFAA.EQ.7.OR.KFAA.EQ.8).AND.
9706      &    P(I,5).LT.PARP(42)) P(I,5)=PYMASS(K(I,2))
9707   500   CONTINUE
9708         IF(P(IPU3,5)+P(IPU4,5).GE.SHR) THEN
9709           KFA1=IABS(MINT(21))
9710           KFA2=IABS(MINT(22))
9711           IF((KFA1.GT.3.AND.KFA1.NE.21).OR.(KFA2.GT.3.AND.KFA2.NE.21))
9712      &    THEN
9713             MINT(51)=1
9714             RETURN
9715           ENDIF
9716           P(IPU3,5)=0D0
9717           P(IPU4,5)=0D0
9718         ENDIF
9719         P(IPU3,4)=0.5D0*(SHR+(P(IPU3,5)**2-P(IPU4,5)**2)/SHR)
9720         P(IPU3,3)=SQRT(MAX(0D0,P(IPU3,4)**2-P(IPU3,5)**2))
9721         P(IPU4,4)=SHR-P(IPU3,4)
9722         P(IPU4,3)=-P(IPU3,3)
9723         N=IPU4
9724         MINT(7)=MINT(83)+7
9725         MINT(8)=MINT(83)+8
9726  
9727 C...Rotate outgoing partons using cos(theta)=(th-uh)/lam(sh,sqm3,sqm4)
9728         CALL PYROBO(IPU3,IPU4,ACOS(VINT(23)),VINT(24),0D0,0D0,0D0)
9729  
9730       ELSEIF(IDOC.EQ.9) THEN
9731 C...2 -> 3 processes: store outgoing partons in their CM frame
9732         DO 510 JT=1,2
9733           I=MINT(84)+2+JT
9734           KCA=PYCOMP(MINT(20+JT))
9735           K(I,1)=1
9736           IF(KCHG(KCA,2).NE.0) K(I,1)=3
9737           K(I,2)=MINT(20+JT)
9738           K(I,3)=MINT(83)+IDOC+JT-3
9739           IF(IABS(K(I,2)).LE.22) THEN
9740             P(I,5)=PYMASS(K(I,2))
9741           ELSE
9742             P(I,5)=SQRT(VINT(63+MOD(JS+JT,2)))
9743           ENDIF
9744           PT=SQRT(MAX(0D0,VINT(197+5*JT)-P(I,5)**2+VINT(196+5*JT)**2))
9745           P(I,1)=PT*COS(VINT(198+5*JT))
9746           P(I,2)=PT*SIN(VINT(198+5*JT))
9747   510   CONTINUE
9748         K(IPU5,1)=1
9749         K(IPU5,2)=KFRES
9750         K(IPU5,3)=MINT(83)+IDOC
9751         P(IPU5,5)=SHR
9752         P(IPU5,1)=-P(IPU3,1)-P(IPU4,1)
9753         P(IPU5,2)=-P(IPU3,2)-P(IPU4,2)
9754         PMS1=P(IPU3,5)**2+P(IPU3,1)**2+P(IPU3,2)**2
9755         PMS2=P(IPU4,5)**2+P(IPU4,1)**2+P(IPU4,2)**2
9756         PMS3=P(IPU5,5)**2+P(IPU5,1)**2+P(IPU5,2)**2
9757         PMT3=SQRT(PMS3)
9758         P(IPU5,3)=PMT3*SINH(VINT(211))
9759         P(IPU5,4)=PMT3*COSH(VINT(211))
9760         PMS12=(SHPR-P(IPU5,4))**2-P(IPU5,3)**2
9761         SQL12=(PMS12-PMS1-PMS2)**2-4D0*PMS1*PMS2
9762         IF(SQL12.LE.0D0) THEN
9763           MINT(51)=1
9764           RETURN
9765         ENDIF
9766         P(IPU3,3)=(-P(IPU5,3)*(PMS12+PMS1-PMS2)+
9767      &  VINT(213)*(SHPR-P(IPU5,4))*SQRT(SQL12))/(2D0*PMS12)
9768         P(IPU4,3)=-P(IPU3,3)-P(IPU5,3)
9769         P(IPU3,4)=SQRT(PMS1+P(IPU3,3)**2)
9770         P(IPU4,4)=SQRT(PMS2+P(IPU4,3)**2)
9771         MINT(23)=KFRES
9772         N=IPU5
9773         MINT(7)=MINT(83)+7
9774         MINT(8)=MINT(83)+8
9775  
9776       ELSEIF(IDOC.EQ.11) THEN
9777 C...Z0 + Z0 -> h0, W+ + W- -> h0: store Higgs and outgoing partons
9778         PHI(1)=PARU(2)*PYR(0)
9779         PHI(2)=PHI(1)-PHIR
9780         DO 520 JT=1,2
9781           I=MINT(84)+2+JT
9782           K(I,1)=1
9783           IF(KCHG(PYCOMP(MINT(20+JT)),2).NE.0) K(I,1)=3
9784           K(I,2)=MINT(20+JT)
9785           K(I,3)=MINT(83)+IDOC+JT-2
9786           P(I,5)=PYMASS(K(I,2))
9787           IF(0.5D0*SHPR*Z(JT).LE.P(I,5)) THEN
9788             MINT(51)=1
9789             RETURN
9790           ENDIF
9791           PABS=SQRT(MAX(0D0,(0.5D0*SHPR*Z(JT))**2-P(I,5)**2))
9792           PTABS=PABS*SQRT(MAX(0D0,1D0-CTHE(JT)**2))
9793           P(I,1)=PTABS*COS(PHI(JT))
9794           P(I,2)=PTABS*SIN(PHI(JT))
9795           P(I,3)=PABS*CTHE(JT)*(-1)**(JT+1)
9796           P(I,4)=0.5D0*SHPR*Z(JT)
9797           IZW=MINT(83)+6+JT
9798           K(IZW,1)=21
9799           K(IZW,2)=23
9800           IF(ISUB.EQ.8) K(IZW,2)=ISIGN(24,PYCHGE(MINT(14+JT)))
9801           K(IZW,3)=IZW-2
9802           P(IZW,1)=-P(I,1)
9803           P(IZW,2)=-P(I,2)
9804           P(IZW,3)=(0.5D0*SHPR-PABS*CTHE(JT))*(-1)**(JT+1)
9805           P(IZW,4)=0.5D0*SHPR*(1D0-Z(JT))
9806           P(IZW,5)=-SQRT(MAX(0D0,P(IZW,3)**2+PTABS**2-P(IZW,4)**2))
9807   520   CONTINUE
9808         I=MINT(83)+9
9809         K(IPU5,1)=1
9810         K(IPU5,2)=KFRES
9811         K(IPU5,3)=I
9812         P(IPU5,5)=SHR
9813         P(IPU5,1)=-P(IPU3,1)-P(IPU4,1)
9814         P(IPU5,2)=-P(IPU3,2)-P(IPU4,2)
9815         P(IPU5,3)=-P(IPU3,3)-P(IPU4,3)
9816         P(IPU5,4)=SHPR-P(IPU3,4)-P(IPU4,4)
9817         K(I,1)=21
9818         K(I,2)=KFRES
9819         DO 530 J=1,5
9820           P(I,J)=P(IPU5,J)
9821   530   CONTINUE
9822         N=IPU5
9823         MINT(23)=KFRES
9824  
9825       ELSEIF(IDOC.EQ.12) THEN
9826 C...Z0 and W+/- scattering: store bosons and outgoing partons
9827         PHI(1)=PARU(2)*PYR(0)
9828         PHI(2)=PHI(1)-PHIR
9829         JTRAN=INT(1.5D0+PYR(0))
9830         DO 540 JT=1,2
9831           I=MINT(84)+2+JT
9832           K(I,1)=1
9833           IF(KCHG(PYCOMP(MINT(20+JT)),2).NE.0) K(I,1)=3
9834           K(I,2)=MINT(20+JT)
9835           K(I,3)=MINT(83)+IDOC+JT-2
9836           P(I,5)=PYMASS(K(I,2))
9837           IF(0.5D0*SHPR*Z(JT).LE.P(I,5)) P(I,5)=0D0
9838           PABS=SQRT(MAX(0D0,(0.5D0*SHPR*Z(JT))**2-P(I,5)**2))
9839           PTABS=PABS*SQRT(MAX(0D0,1D0-CTHE(JT)**2))
9840           P(I,1)=PTABS*COS(PHI(JT))
9841           P(I,2)=PTABS*SIN(PHI(JT))
9842           P(I,3)=PABS*CTHE(JT)*(-1)**(JT+1)
9843           P(I,4)=0.5D0*SHPR*Z(JT)
9844           IZW=MINT(83)+6+JT
9845           K(IZW,1)=21
9846           IF(MINT(14+JT).EQ.MINT(20+JT)) THEN
9847             K(IZW,2)=23
9848           ELSE
9849             K(IZW,2)=ISIGN(24,PYCHGE(MINT(14+JT))-PYCHGE(MINT(20+JT)))
9850           ENDIF
9851           K(IZW,3)=IZW-2
9852           P(IZW,1)=-P(I,1)
9853           P(IZW,2)=-P(I,2)
9854           P(IZW,3)=(0.5D0*SHPR-PABS*CTHE(JT))*(-1)**(JT+1)
9855           P(IZW,4)=0.5D0*SHPR*(1D0-Z(JT))
9856           P(IZW,5)=-SQRT(MAX(0D0,P(IZW,3)**2+PTABS**2-P(IZW,4)**2))
9857           IPU=MINT(84)+4+JT
9858           K(IPU,1)=3
9859           K(IPU,2)=KFPR(ISUB,JT)
9860           IF(ISUB.EQ.72.AND.JT.EQ.JTRAN) K(IPU,2)=-K(IPU,2)
9861           IF(ISUB.EQ.73.OR.ISUB.EQ.77) K(IPU,2)=K(IZW,2)
9862           K(IPU,3)=MINT(83)+8+JT
9863           IF(IABS(K(IPU,2)).LE.10.OR.K(IPU,2).EQ.21) THEN
9864             P(IPU,5)=PYMASS(K(IPU,2))
9865           ELSE
9866             P(IPU,5)=SQRT(VINT(63+MOD(JS+JT,2)))
9867           ENDIF
9868           MINT(22+JT)=K(IPU,2)
9869   540   CONTINUE
9870 C...Find rotation and boost for hard scattering subsystem
9871         I1=MINT(83)+7
9872         I2=MINT(83)+8
9873         BEXCM=(P(I1,1)+P(I2,1))/(P(I1,4)+P(I2,4))
9874         BEYCM=(P(I1,2)+P(I2,2))/(P(I1,4)+P(I2,4))
9875         BEZCM=(P(I1,3)+P(I2,3))/(P(I1,4)+P(I2,4))
9876         GAMCM=(P(I1,4)+P(I2,4))/SHR
9877         BEPCM=BEXCM*P(I1,1)+BEYCM*P(I1,2)+BEZCM*P(I1,3)
9878         PX=P(I1,1)+GAMCM*(GAMCM/(1D0+GAMCM)*BEPCM-P(I1,4))*BEXCM
9879         PY=P(I1,2)+GAMCM*(GAMCM/(1D0+GAMCM)*BEPCM-P(I1,4))*BEYCM
9880         PZ=P(I1,3)+GAMCM*(GAMCM/(1D0+GAMCM)*BEPCM-P(I1,4))*BEZCM
9881         THECM=PYANGL(PZ,SQRT(PX**2+PY**2))
9882         PHICM=PYANGL(PX,PY)
9883 C...Store hard scattering subsystem. Rotate and boost it
9884         SQLAM=(SH-P(IPU5,5)**2-P(IPU6,5)**2)**2-4D0*P(IPU5,5)**2*
9885      &  P(IPU6,5)**2
9886         PABS=SQRT(MAX(0D0,SQLAM/(4D0*SH)))
9887         CTHWZ=VINT(23)
9888         STHWZ=SQRT(MAX(0D0,1D0-CTHWZ**2))
9889         PHIWZ=VINT(24)-PHICM
9890         P(IPU5,1)=PABS*STHWZ*COS(PHIWZ)
9891         P(IPU5,2)=PABS*STHWZ*SIN(PHIWZ)
9892         P(IPU5,3)=PABS*CTHWZ
9893         P(IPU5,4)=SQRT(PABS**2+P(IPU5,5)**2)
9894         P(IPU6,1)=-P(IPU5,1)
9895         P(IPU6,2)=-P(IPU5,2)
9896         P(IPU6,3)=-P(IPU5,3)
9897         P(IPU6,4)=SQRT(PABS**2+P(IPU6,5)**2)
9898         CALL PYROBO(IPU5,IPU6,THECM,PHICM,BEXCM,BEYCM,BEZCM)
9899         DO 560 JT=1,2
9900           I1=MINT(83)+8+JT
9901           I2=MINT(84)+4+JT
9902           K(I1,1)=21
9903           K(I1,2)=K(I2,2)
9904           DO 550 J=1,5
9905             P(I1,J)=P(I2,J)
9906   550     CONTINUE
9907   560   CONTINUE
9908         N=IPU6
9909         MINT(7)=MINT(83)+9
9910         MINT(8)=MINT(83)+10
9911       ENDIF
9912  
9913       IF(ISET(ISUB).EQ.11) THEN
9914       ELSEIF(IDOC.GE.8) THEN
9915 C...Store colour connection indices
9916         DO 570 J=1,2
9917           JC=J
9918           IF(KCS.EQ.-1) JC=3-J
9919           IF(ICOL(KCC,1,JC).NE.0.AND.K(IPU1,1).EQ.14) K(IPU1,J+3)=
9920      &    K(IPU1,J+3)+MINT(84)+ICOL(KCC,1,JC)
9921           IF(ICOL(KCC,2,JC).NE.0.AND.K(IPU2,1).EQ.14) K(IPU2,J+3)=
9922      &    K(IPU2,J+3)+MINT(84)+ICOL(KCC,2,JC)
9923           IF(ICOL(KCC,3,JC).NE.0.AND.K(IPU3,1).EQ.3) K(IPU3,J+3)=
9924      &    MSTU(5)*(MINT(84)+ICOL(KCC,3,JC))
9925           IF(ICOL(KCC,4,JC).NE.0.AND.K(IPU4,1).EQ.3) K(IPU4,J+3)=
9926      &    MSTU(5)*(MINT(84)+ICOL(KCC,4,JC))
9927   570   CONTINUE
9928  
9929 C...Copy outgoing partons to documentation lines
9930         IMAX=2
9931         IF(IDOC.EQ.9) IMAX=3
9932         DO 590 I=1,IMAX
9933           I1=MINT(83)+IDOC-IMAX+I
9934           I2=MINT(84)+2+I
9935           K(I1,1)=21
9936           K(I1,2)=K(I2,2)
9937           IF(IDOC.LE.9) K(I1,3)=0
9938           IF(IDOC.GE.11) K(I1,3)=MINT(83)+2+I
9939           DO 580 J=1,5
9940             P(I1,J)=P(I2,J)
9941   580     CONTINUE
9942   590   CONTINUE
9943  
9944       ELSEIF(IDOC.EQ.9) THEN
9945 C...Store colour connection indices
9946         DO 600 J=1,2
9947           JC=J
9948           IF(KCS.EQ.-1) JC=3-J
9949           IF(ICOL(KCC,1,JC).NE.0.AND.K(IPU1,1).EQ.14) K(IPU1,J+3)=
9950      &    K(IPU1,J+3)+MINT(84)+ICOL(KCC,1,JC)+
9951      &    MAX(0,MIN(1,ICOL(KCC,1,JC)-2))
9952           IF(ICOL(KCC,2,JC).NE.0.AND.K(IPU2,1).EQ.14) K(IPU2,J+3)=
9953      &    K(IPU2,J+3)+MINT(84)+ICOL(KCC,2,JC)+
9954      &    MAX(0,MIN(1,ICOL(KCC,2,JC)-2))
9955           IF(ICOL(KCC,3,JC).NE.0.AND.K(IPU4,1).EQ.3) K(IPU4,J+3)=
9956      &    MSTU(5)*(MINT(84)+ICOL(KCC,3,JC))
9957           IF(ICOL(KCC,4,JC).NE.0.AND.K(IPU5,1).EQ.3) K(IPU5,J+3)=
9958      &    MSTU(5)*(MINT(84)+ICOL(KCC,4,JC))
9959   600   CONTINUE
9960  
9961 C...Copy outgoing partons to documentation lines
9962         DO 620 I=1,3
9963           I1=MINT(83)+IDOC-3+I
9964           I2=MINT(84)+2+I
9965           K(I1,1)=21
9966           K(I1,2)=K(I2,2)
9967           K(I1,3)=0
9968           DO 610 J=1,5
9969             P(I1,J)=P(I2,J)
9970   610     CONTINUE
9971   620   CONTINUE
9972       ENDIF
9973  
9974 C...Low-pT events: remove gluons used for string drawing purposes
9975       IF(ISUB.EQ.95) THEN
9976         K(IPU3,1)=K(IPU3,1)+10
9977         K(IPU4,1)=K(IPU4,1)+10
9978         DO 630 J=41,66
9979           VINTSV(J)=VINT(J)
9980           VINT(J)=0D0
9981   630   CONTINUE
9982         DO 650 I=MINT(83)+5,MINT(83)+8
9983           DO 640 J=1,5
9984             P(I,J)=0D0
9985   640     CONTINUE
9986   650   CONTINUE
9987       ENDIF
9988  
9989       RETURN
9990       END
9991  
9992 C*********************************************************************
9993  
9994 C...PYSSPA
9995 C...Generates spacelike parton showers.
9996  
9997       SUBROUTINE PYSSPA(IPU1,IPU2)
9998  
9999 C...Double precision and integer declarations.
10000       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
10001       IMPLICIT INTEGER(I-N)
10002       INTEGER PYK,PYCHGE,PYCOMP
10003 C...Commonblocks.
10004       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
10005       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
10006       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
10007       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
10008       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
10009       COMMON/PYINT1/MINT(400),VINT(400)
10010       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
10011       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
10012       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/,
10013      &/PYINT2/,/PYINT3/
10014 C...Local arrays and data.
10015       DIMENSION KFLS(4),IS(2),XS(2),ZS(2),Q2S(2),TEVCSV(2),TEVESV(2),
10016      &XFS(2,-25:25),XFA(-25:25),XFB(-25:25),XFN(-25:25),WTAPC(-25:25),
10017      &WTAPE(-25:25),WTSF(-25:25),THE2(2),ALAM(2),DQ2(3),DPC(3),DPD(4),
10018      &DPB(4),ROBO(5),MORE(2),KFBEAM(2),Q2MNCS(2),KCFI(2),NFIS(2),
10019      &THEFIS(2,2),ISFI(2)
10020       DATA IS/2*0/
10021  
10022 C...Read out basic information; set global Q^2 scale.
10023       IPUS1=IPU1
10024       IPUS2=IPU2
10025       ISUB=MINT(1)
10026       Q2MX=VINT(56)
10027       IF(ISET(ISUB).EQ.2) Q2MX=MIN(VINT(2),PARP(67)*VINT(56))
10028       MECOR=0
10029       IF(MSTP(68).EQ.1.AND.(ISUB.EQ.1.OR.ISUB.EQ.2.OR.
10030      &ISUB.EQ.141.OR.ISUB.EQ.142.OR.ISUB.EQ.144)) MECOR=1      
10031       FCQ2MX=1D0
10032  
10033 C...Initialize QCD evolution and check phase space.
10034       Q2MNC=PARP(62)**2
10035       Q2MNCS(1)=Q2MNC
10036       Q2MNCS(2)=Q2MNC
10037       IF(MINT(107).EQ.2.AND.MSTP(66).EQ.2) THEN
10038         Q0S=PARP(15)**2
10039         PS=VINT(3)**2
10040         Q2EFF=VINT(54)*((Q0S+PS)/(VINT(54)+PS))*
10041      &  EXP(PS*(VINT(54)-Q0S)/((VINT(54)+PS)*(Q0S+PS)))
10042         Q2INT=SQRT(Q0S*Q2EFF)
10043         Q2MNCS(1)=MAX(Q2MNC,Q2INT)
10044       ELSEIF(MINT(107).EQ.3.AND.MSTP(66).GE.1) THEN
10045         Q2MNCS(1)=MAX(Q2MNC,VINT(283))
10046       ENDIF 
10047       IF(MINT(108).EQ.2.AND.MSTP(66).EQ.2) THEN
10048         Q0S=PARP(15)**2
10049         PS=VINT(4)**2
10050         Q2EFF=VINT(54)*((Q0S+PS)/(VINT(54)+PS))*
10051      &  EXP(PS*(VINT(54)-Q0S)/((VINT(54)+PS)*(Q0S+PS)))
10052         Q2INT=SQRT(Q0S*Q2EFF)
10053         Q2MNCS(2)=MAX(Q2MNC,Q2INT)
10054       ELSEIF(MINT(108).EQ.3.AND.MSTP(66).GE.1) THEN
10055         Q2MNCS(2)=MAX(Q2MNC,VINT(284))
10056       ENDIF
10057       MCEV=0
10058       ALAMS=PARU(112)
10059       PARU(112)=PARP(61)
10060       FQ2C=1D0
10061       TCMX=0D0
10062       IF(MINT(47).GE.2.AND.(MINT(47).LT.5.OR.MSTP(12).GE.1)) THEN
10063         MCEV=1
10064         IF(MSTP(64).EQ.1) FQ2C=PARP(63)
10065         IF(MSTP(64).EQ.2) FQ2C=PARP(64)
10066         TCMX=LOG(FQ2C*Q2MX/PARP(61)**2)
10067         IF(Q2MX.LT.MAX(Q2MNC,2D0*PARP(61)**2).OR.TCMX.LT.0.2D0)
10068      &  MCEV=0
10069       ENDIF
10070  
10071 C...Initialize QED evolution and check phase space.
10072       MEEV=0
10073       XEE=1D-10
10074       SPME=PMAS(11,1)**2
10075       IF(IABS(MINT(11)).EQ.13.OR.IABS(MINT(12)).EQ.13)
10076      &SPME=PMAS(13,1)**2
10077       IF(IABS(MINT(11)).EQ.15.OR.IABS(MINT(12)).EQ.15)
10078      &SPME=PMAS(15,1)**2
10079       Q2MNE=MAX(PARP(68)**2,2D0*SPME)
10080       TEMX=0D0
10081       FWTE=10D0
10082       IF(MINT(45).EQ.3.OR.MINT(46).EQ.3) THEN
10083         MEEV=1
10084         TEMX=LOG(Q2MX/SPME)
10085         IF(Q2MX.LE.Q2MNE.OR.TEMX.LT.0.2D0) MEEV=0
10086       ENDIF
10087       IF(MCEV.EQ.0.AND.MEEV.EQ.0) RETURN
10088  
10089 C...Loopback point in case of failure to reconstruct kinematics.  
10090       NS=N
10091       LOOP=0
10092   100 LOOP=LOOP+1
10093       IF(LOOP.GT.100) THEN
10094         MINT(51)=1
10095         RETURN
10096       ENDIF
10097       N=NS
10098
10099 C...Initial values: flavours, momenta, virtualities.
10100       DO 120 JT=1,2
10101         MORE(JT)=1
10102         KFBEAM(JT)=MINT(10+JT)
10103         IF(MINT(18+JT).EQ.1)KFBEAM(JT)=22
10104         KFLS(JT)=MINT(14+JT)
10105         KFLS(JT+2)=KFLS(JT)
10106         XS(JT)=VINT(40+JT)
10107         IF(MINT(18+JT).EQ.1) XS(JT)=VINT(40+JT)/VINT(154+JT)
10108         ZS(JT)=1D0
10109         Q2S(JT)=FCQ2MX*Q2MX
10110         TEVCSV(JT)=TCMX
10111         ALAM(JT)=PARP(61)
10112         THE2(JT)=1D0
10113         TEVESV(JT)=TEMX
10114         DO 110 KFL=-25,25
10115           XFS(JT,KFL)=XSFX(JT,KFL)
10116   110   CONTINUE
10117 C...Special kinematics check for c/b quarks (that g -> c cbar or
10118 C...b bbar kinematically possible).
10119       KFLCB=IABS(KFLS(JT))
10120       IF(KFBEAM(JT).NE.22.AND.(KFLCB.EQ.4.OR.KFLCB.EQ.5)) THEN
10121         IF(XS(JT).GT.0.9D0*Q2S(JT)/(PMAS(KFLCB,1)**2+Q2S(JT))) THEN
10122           MINT(51)=1
10123           RETURN
10124         ENDIF
10125       ENDIF 
10126   120 CONTINUE
10127       DSH=VINT(44)
10128       IF(ISET(ISUB).GE.3.AND.ISET(ISUB).LE.5) DSH=VINT(26)*VINT(2)
10129  
10130 C...Find if interference with final state partons.
10131       MFIS=0
10132       IF(MSTP(67).GE.1.AND.MSTP(67).LE.3) MFIS=MSTP(67)
10133       IF(MFIS.NE.0) THEN
10134         DO 140 I=1,2
10135           KCFI(I)=0
10136           KCA=PYCOMP(IABS(KFLS(I)))
10137           IF(KCA.NE.0) KCFI(I)=KCHG(KCA,2)*ISIGN(1,KFLS(I))
10138           NFIS(I)=0
10139           IF(KCFI(I).NE.0) THEN
10140             IF(I.EQ.1) IPFS=IPUS1
10141             IF(I.EQ.2) IPFS=IPUS2
10142             DO 130 J=1,2
10143               ICSI=MOD(K(IPFS,3+J),MSTU(5))
10144               IF(ICSI.GT.0.AND.ICSI.NE.IPUS1.AND.ICSI.NE.IPUS2.AND.
10145      &        (KCFI(I).EQ.(-1)**(J+1).OR.KCFI(I).EQ.2)) THEN
10146                 NFIS(I)=NFIS(I)+1
10147                 THEFIS(I,NFIS(I))=PYANGL(P(ICSI,3),SQRT(P(ICSI,1)**2+
10148      &          P(ICSI,2)**2))
10149                 IF(I.EQ.2) THEFIS(I,NFIS(I))=PARU(1)-THEFIS(I,NFIS(I))
10150               ENDIF
10151   130       CONTINUE
10152           ENDIF
10153   140   CONTINUE
10154         IF(NFIS(1)+NFIS(2).EQ.0) MFIS=0
10155       ENDIF
10156  
10157 C...Pick up leg with highest virtuality.
10158   150 N=N+1
10159       JT=1
10160       IF(N.GT.NS+1.AND.Q2S(2).GT.Q2S(1)) JT=2
10161       IF(MORE(JT).EQ.0) JT=3-JT
10162       KFLB=KFLS(JT)
10163       XB=XS(JT)
10164       DO 160 KFL=-25,25
10165         XFB(KFL)=XFS(JT,KFL)
10166   160 CONTINUE
10167       DSHR=2D0*SQRT(DSH)
10168       DSHZ=DSH/ZS(JT)
10169  
10170 C...Check if allowed to branch.
10171       MCEV=0
10172       IF(IABS(KFLB).LE.10.OR.KFLB.EQ.21) THEN
10173         MCEV=1
10174         XEC=MAX(PARP(65)*DSHR/VINT(2),XB*(1D0/(1D0-PARP(66))-1D0))
10175         IF(XB.GE.1D0-2D0*XEC) MCEV=0
10176       ENDIF
10177       MEEV=0
10178       IF(MINT(44+JT).EQ.3) THEN
10179         MEEV=1
10180         IF(XB.GE.1D0-2D0*XEE) MEEV=0
10181         IF((IABS(KFLB).LE.10.OR.KFLB.EQ.21).AND.XB.GE.1D0-2D0*XEC)
10182      &  MEEV=0
10183 C***Currently kill QED shower for resolved photoproduction.
10184         IF(MINT(18+JT).EQ.1) MEEV=0
10185 C***Currently kill shower for W inside electron.
10186         IF(IABS(KFLB).EQ.24) THEN
10187           MCEV=0
10188           MEEV=0
10189         ENDIF
10190       ENDIF
10191       IF(MCEV.EQ.0.AND.MEEV.EQ.0) THEN
10192         Q2B=0D0
10193         GOTO 250
10194       ENDIF
10195  
10196 C...Maximum Q2 with or without Q2 ordering. Effective Lambda and n_f.
10197       Q2B=Q2S(JT)
10198       TEVCB=TEVCSV(JT)
10199       TEVEB=TEVESV(JT)
10200       IF(MSTP(62).LE.1) THEN
10201         IF(ZS(JT).GT.0.99999D0) THEN
10202           Q2B=Q2S(JT)
10203         ELSE
10204           Q2B=0.5D0*(1D0/ZS(JT)+1D0)*Q2S(JT)+0.5D0*(1D0/ZS(JT)-1D0)*
10205      &    (Q2S(3-JT)-DSH+SQRT((DSH+Q2S(1)+Q2S(2))**2+
10206      &    8D0*Q2S(1)*Q2S(2)*ZS(JT)/(1D0-ZS(JT))))
10207         ENDIF
10208         IF(MCEV.EQ.1) TEVCB=LOG(FQ2C*Q2B/ALAM(JT)**2)
10209         IF(MEEV.EQ.1) TEVEB=LOG(Q2B/SPME)
10210       ENDIF
10211       IF(MCEV.EQ.1) THEN
10212         ALSDUM=PYALPS(FQ2C*Q2B)
10213         TEVCB=TEVCB+2D0*LOG(ALAM(JT)/PARU(117))
10214         ALAM(JT)=PARU(117)
10215         B0=(33D0-2D0*MSTU(118))/6D0
10216       ENDIF
10217       TEVCBS=TEVCB
10218       TEVEBS=TEVEB
10219  
10220 C...Select side for interference with final state partons.
10221       IF(MFIS.GE.1.AND.N.LE.NS+2) THEN
10222         IFI=N-NS
10223         ISFI(IFI)=0
10224         IF(IABS(KCFI(IFI)).EQ.1.AND.NFIS(IFI).EQ.1) THEN
10225           ISFI(IFI)=1
10226         ELSEIF(KCFI(IFI).EQ.2.AND.NFIS(IFI).EQ.1) THEN
10227           IF(PYR(0).GT.0.5D0) ISFI(IFI)=1
10228         ELSEIF(KCFI(IFI).EQ.2.AND.NFIS(IFI).EQ.2) THEN
10229           ISFI(IFI)=1
10230           IF(PYR(0).GT.0.5D0) ISFI(IFI)=2
10231         ENDIF
10232       ENDIF
10233  
10234 C...Calculate Altarelli-Parisi weights.
10235       DO 170 KFL=-25,25
10236         WTAPC(KFL)=0D0
10237         WTAPE(KFL)=0D0
10238         WTSF(KFL)=0D0
10239   170 CONTINUE
10240 C...q -> q, g -> q.
10241       IF(IABS(KFLB).LE.10) THEN
10242         WTAPC(KFLB)=(8D0/3D0)*LOG((1D0-XEC-XB)*(XB+XEC)/(XEC*(1D0-XEC)))
10243         WTAPC(21)=0.5D0*(XB/(XB+XEC)-XB/(1D0-XEC))
10244         IF(MECOR.EQ.1.AND.(N.EQ.NS+1.OR.N.EQ.NS+2)) 
10245      &  WTAPC(21)=3D0*WTAPC(21)
10246 C...f -> f, gamma -> f.
10247       ELSEIF(IABS(KFLB).LE.20) THEN
10248         WTAPF1=LOG((1D0-XEE-XB)*(XB+XEE)/(XEE*(1D0-XEE)))
10249         WTAPF2=LOG((1D0-XEE-XB)*(1D0-XEE)/(XEE*(XB+XEE)))
10250         WTAPE(KFLB)=2D0*(WTAPF1+WTAPF2)
10251         IF(MSTP(12).GE.1) WTAPE(22)=XB/(XB+XEE)-XB/(1D0-XEE)
10252         IF(MECOR.EQ.1.AND.(N.EQ.NS+1.OR.N.EQ.NS+2)) 
10253      &  WTAPE(22)=3D0*WTAPE(22)
10254 C...f -> g, g -> g.
10255       ELSEIF(KFLB.EQ.21) THEN
10256         WTAPQ=(16D0/3D0)*(SQRT((1D0-XEC)/XB)-SQRT((XB+XEC)/XB))
10257         DO 180 KFL=1,MSTP(58)
10258           WTAPC(KFL)=WTAPQ
10259           WTAPC(-KFL)=WTAPQ
10260   180   CONTINUE
10261         WTAPC(21)=6D0*LOG((1D0-XEC-XB)/XEC)
10262 C...f -> gamma, W+, W-.
10263       ELSEIF(KFLB.EQ.22) THEN
10264         WTAPF=LOG((1D0-XEE-XB)*(1D0-XEE)/(XEE*(XB+XEE)))/XB
10265         WTAPE(11)=WTAPF
10266         WTAPE(-11)=WTAPF
10267       ELSEIF(KFLB.EQ.24) THEN
10268         WTAPE(-11)=1D0/(4D0*PARU(102))*LOG((1D0-XEE-XB)*(1D0-XEE)/
10269      &  (XEE*(XB+XEE)))/XB
10270       ELSEIF(KFLB.EQ.-24) THEN
10271         WTAPE(11)=1D0/(4D0*PARU(102))*LOG((1D0-XEE-XB)*(1D0-XEE)/
10272      &  (XEE*(XB+XEE)))/XB
10273       ENDIF
10274  
10275 C...Calculate parton distribution weights and sum.
10276       NTRY=0
10277   190 NTRY=NTRY+1
10278       IF(NTRY.GT.500) THEN
10279         MINT(51)=1
10280         RETURN
10281       ENDIF
10282       WTSUMC=0D0
10283       WTSUME=0D0
10284       XFBO=MAX(1D-10,XFB(KFLB))
10285       DO 200 KFL=-25,25
10286         WTSF(KFL)=XFB(KFL)/XFBO
10287         WTSUMC=WTSUMC+WTAPC(KFL)*WTSF(KFL)
10288         WTSUME=WTSUME+WTAPE(KFL)*WTSF(KFL)
10289   200 CONTINUE
10290       WTSUMC=MAX(0.0001D0,WTSUMC)
10291       WTSUME=MAX(0.0001D0/FWTE,WTSUME)
10292  
10293 C...Choose new t: fix alpha_s, alpha_s(Q^2), alpha_s(k_T^2).
10294       NTRY2=0
10295   210 NTRY2=NTRY2+1
10296       IF(NTRY2.GT.500) THEN
10297         MINT(51)=1
10298         RETURN
10299       ENDIF
10300       IF(MCEV.EQ.1) THEN
10301         IF(MSTP(64).LE.0) THEN
10302           TEVCB=TEVCB+LOG(PYR(0))*PARU(2)/(PARU(111)*WTSUMC)
10303         ELSEIF(MSTP(64).EQ.1) THEN
10304           TEVCB=TEVCB*EXP(MAX(-50D0,LOG(PYR(0))*B0/WTSUMC))
10305         ELSE
10306           TEVCB=TEVCB*EXP(MAX(-50D0,LOG(PYR(0))*B0/(5D0*WTSUMC)))
10307         ENDIF
10308       ENDIF
10309       IF(MEEV.EQ.1) THEN
10310         TEVEB=TEVEB*EXP(MAX(-50D0,LOG(PYR(0))*PARU(2)/
10311      &  (PARU(101)*FWTE*WTSUME*TEMX)))
10312       ENDIF
10313  
10314 C...Translate t into Q2 scale; choose between QCD and QED evolution.
10315   220 IF(MCEV.EQ.1) Q2CB=ALAM(JT)**2*EXP(MAX(-50D0,TEVCB))/FQ2C
10316       IF(MEEV.EQ.1) Q2EB=SPME*EXP(MAX(-50D0,TEVEB))
10317 C...Ensure that Q2 is above threshold for charm/bottom.
10318       KFLCB=IABS(KFLB) 
10319       IF(KFBEAM(JT).NE.22.AND.(KFLCB.EQ.4.OR.KFLCB.EQ.5).AND.
10320      &MCEV.EQ.1) THEN
10321         IF(Q2CB.LT.PMAS(KFLCB,1)**2) THEN
10322           Q2CB=1.1*PMAS(KFLCB,1)**2 
10323           TEVCB=LOG(FQ2C*Q2B/ALAM(JT)**2)
10324           FCQ2MX=MIN(2D0,1.05D0*FCQ2MX)
10325         ENDIF
10326       ENDIF
10327       MCE=0
10328       IF(MCEV.EQ.0.AND.MEEV.EQ.0) THEN
10329       ELSEIF(MCEV.EQ.1.AND.MEEV.EQ.0) THEN
10330         IF(Q2CB.GT.Q2MNCS(JT)) MCE=1
10331       ELSEIF(MCEV.EQ.0.AND.MEEV.EQ.1) THEN
10332         IF(Q2EB.GT.Q2MNE) MCE=2
10333       ELSEIF(Q2MNCS(JT).GT.Q2MNE) THEN
10334         MCE=1
10335         IF(Q2EB.GT.Q2CB.OR.Q2CB.LE.Q2MNCS(JT)) MCE=2
10336         IF(MCE.EQ.2.AND.Q2EB.LE.Q2MNE) MCE=0
10337       ELSE
10338         MCE=2
10339         IF(Q2CB.GT.Q2EB.OR.Q2EB.LE.Q2MNE) MCE=1
10340         IF(MCE.EQ.1.AND.Q2CB.LE.Q2MNCS(JT)) MCE=0
10341       ENDIF
10342  
10343 C...Evolution possibly ended. Update t values.
10344       IF(MCE.EQ.0) THEN
10345         Q2B=0D0
10346         GOTO 250
10347       ELSEIF(MCE.EQ.1) THEN
10348         Q2B=Q2CB
10349         Q2REF=FQ2C*Q2B
10350         IF(MEEV.EQ.1) TEVEB=LOG(Q2B/SPME)
10351       ELSE
10352         Q2B=Q2EB
10353         Q2REF=Q2B
10354         IF(MCEV.EQ.1) TEVCB=LOG(FQ2C*Q2B/ALAM(JT)**2)
10355       ENDIF
10356  
10357 C...Select flavour for branching parton.
10358       IF(MCE.EQ.1) WTRAN=PYR(0)*WTSUMC
10359       IF(MCE.EQ.2) WTRAN=PYR(0)*WTSUME
10360       KFLA=-25
10361   230 KFLA=KFLA+1
10362       IF(MCE.EQ.1) WTRAN=WTRAN-WTAPC(KFLA)*WTSF(KFLA)
10363       IF(MCE.EQ.2) WTRAN=WTRAN-WTAPE(KFLA)*WTSF(KFLA)
10364       IF(KFLA.LE.24.AND.WTRAN.GT.0D0) GOTO 230
10365       IF(KFLA.EQ.25) THEN
10366         Q2B=0D0
10367         GOTO 250
10368       ENDIF
10369  
10370 C...Choose z value and corrective weight.
10371       WTZ=0D0
10372 C...q -> q + g.
10373       IF(IABS(KFLA).LE.10.AND.IABS(KFLB).LE.10) THEN
10374         Z=1D0-((1D0-XB-XEC)/(1D0-XEC))*
10375      &  (XEC*(1D0-XEC)/((XB+XEC)*(1D0-XB-XEC)))**PYR(0)
10376         WTZ=0.5D0*(1D0+Z**2)
10377 C...q -> g + q.
10378       ELSEIF(IABS(KFLA).LE.10.AND.KFLB.EQ.21) THEN
10379         Z=XB/(SQRT(XB+XEC)+PYR(0)*(SQRT(1D0-XEC)-SQRT(XB+XEC)))**2
10380         WTZ=0.5D0*(1D0+(1D0-Z)**2)*SQRT(Z)
10381 C...f -> f + gamma.
10382       ELSEIF(IABS(KFLA).LE.20.AND.IABS(KFLB).LE.20) THEN
10383         IF(WTAPF1.GT.PYR(0)*(WTAPF1+WTAPF2)) THEN
10384           Z=1D0-((1D0-XB-XEE)/(1D0-XEE))*
10385      &    (XEE*(1D0-XEE)/((XB+XEE)*(1D0-XB-XEE)))**PYR(0)
10386         ELSE
10387           Z=XB+XB*(XEE/(1D0-XEE))*
10388      &    ((1D0-XB-XEE)*(1D0-XEE)/(XEE*(XB+XEE)))**PYR(0)
10389         ENDIF
10390         WTZ=0.5D0*(1D0+Z**2)*(Z-XB)/(1D0-XB)
10391 C...f -> gamma + f.
10392       ELSEIF(IABS(KFLA).LE.20.AND.KFLB.EQ.22) THEN
10393         Z=XB+XB*(XEE/(1D0-XEE))*
10394      &  ((1D0-XB-XEE)*(1D0-XEE)/(XEE*(XB+XEE)))**PYR(0)
10395         WTZ=0.5D0*(1D0+(1D0-Z)**2)*XB*(Z-XB)/Z
10396 C...f -> W+- + f'.
10397       ELSEIF(IABS(KFLA).LE.20.AND.IABS(KFLB).EQ.24) THEN
10398         Z=XB+XB*(XEE/(1D0-XEE))*
10399      &  ((1D0-XB-XEE)*(1D0-XEE)/(XEE*(XB+XEE)))**PYR(0)
10400         WTZ=0.5D0*(1D0+(1D0-Z)**2)*(XB*(Z-XB)/Z)*
10401      &  (Q2B/(Q2B+PMAS(24,1)**2))
10402 C...g -> q + qbar.
10403       ELSEIF(KFLA.EQ.21.AND.IABS(KFLB).LE.10) THEN
10404         Z=XB/(1D0-XEC)+PYR(0)*(XB/(XB+XEC)-XB/(1D0-XEC))
10405         WTZ=1D0-2D0*Z*(1D0-Z)
10406 C...g -> g + g.
10407       ELSEIF(KFLA.EQ.21.AND.KFLB.EQ.21) THEN
10408         Z=1D0/(1D0+((1D0-XEC-XB)/XB)*(XEC/(1D0-XEC-XB))**PYR(0))
10409         WTZ=(1D0-Z*(1D0-Z))**2
10410 C...gamma -> f + fbar.
10411       ELSEIF(KFLA.EQ.22.AND.IABS(KFLB).LE.20) THEN
10412         Z=XB/(1D0-XEE)+PYR(0)*(XB/(XB+XEE)-XB/(1D0-XEE))
10413         WTZ=1D0-2D0*Z*(1D0-Z)
10414       ENDIF
10415       IF(MCE.EQ.2) WTZ=(WTZ/FWTE)*(TEVEB/TEMX)
10416  
10417 C...Option with resummation of soft gluon emission as effective z shift.
10418       IF(MCE.EQ.1) THEN
10419         IF(MSTP(65).GE.1) THEN
10420           RSOFT=6D0
10421           IF(KFLB.NE.21) RSOFT=8D0/3D0
10422           Z=Z*(TEVCB/TEVCSV(JT))**(RSOFT*XEC/((XB+XEC)*B0))
10423           IF(Z.LE.XB) GOTO 210
10424         ENDIF
10425  
10426 C...Option with alpha_s(k_T^2): demand k_T^2 > cutoff, reweight.
10427         IF(MSTP(64).GE.2) THEN
10428           IF((1D0-Z)*Q2B.LT.Q2MNCS(JT)) GOTO 210
10429           ALPRAT=TEVCB/(TEVCB+LOG(1D0-Z))
10430           IF(ALPRAT.LT.5D0*PYR(0)) GOTO 210
10431           IF(ALPRAT.GT.5D0) WTZ=WTZ*ALPRAT/5D0
10432         ENDIF
10433       ENDIF 
10434
10435 C...Remove kinematically impossible branchings.
10436       UHAT=Q2B-DSH*(1D0-Z)/Z
10437       IF(MSTP(68).GE.0.AND.UHAT.GT.0D0) GOTO 210
10438
10439 C...Matrix-element corrections for s-channel resonance production.
10440       IF(MECOR.EQ.1.AND.(N.EQ.NS+1.OR.N.EQ.NS+2)) THEN
10441         SHAT=DSH/Z
10442         THAT=-Q2B
10443         IF(IABS(KFLA).LE.20.AND.IABS(KFLB).LE.20) THEN
10444           RMEPS=(THAT**2+UHAT**2+2D0*DSH*SHAT)/(SHAT**2+DSH**2)
10445           WTZ=WTZ*RMEPS
10446         ELSEIF((KFLA.EQ.21.OR.KFLA.EQ.22).AND.IABS(KFLB).LE.20) THEN
10447           RMEPS=(SHAT**2+UHAT**2+2D0*DSH*THAT)/((SHAT-DSH)**2+DSH**2)
10448           WTZ=WTZ*RMEPS/3D0
10449         ENDIF 
10450       ENDIF
10451  
10452 C...Impose angular constraint in first branching from interference
10453 C...with final state partons.
10454       IF(MCE.EQ.1) THEN
10455         IF(MFIS.GE.1.AND.N.LE.NS+2.AND.NTRY2.LT.200) THEN
10456           THE2D=(4D0*Q2B)/(DSH*(1D0-Z))
10457           IF(N.EQ.NS+1.AND.ISFI(1).GE.1) THEN
10458             IF(THE2D.GT.THEFIS(1,ISFI(1))**2) GOTO 210
10459           ELSEIF(N.EQ.NS+2.AND.ISFI(2).GE.1) THEN
10460             IF(THE2D.GT.THEFIS(2,ISFI(2))**2) GOTO 210
10461           ENDIF
10462         ENDIF
10463  
10464 C...Option with angular ordering requirement.
10465         IF(MSTP(62).GE.3.AND.NTRY2.LT.200) THEN
10466           THE2T=(4D0*Z**2*Q2B)/(4D0*Z**2*Q2B+(1D0-Z)*XB**2*VINT(2))
10467           IF(THE2T.GT.THE2(JT)) GOTO 210
10468         ENDIF
10469       ENDIF
10470  
10471 C...Weighting with new parton distributions.
10472       MINT(105)=MINT(102+JT)
10473       MINT(109)=MINT(106+JT)
10474       VINT(120)=VINT(2+JT)
10475 C.... ALICE
10476 C.... Store side in MINT(124)
10477       MINT(124)=JT
10478 C....
10479 C.... ALICE
10480 C.... Store side in MINT(124)
10481       MINT(124)=JT
10482 C....
10483       IF(MSTP(57).LE.1) THEN
10484         CALL PYPDFU(KFBEAM(JT),XB,Q2REF,XFN)
10485       ELSE
10486         CALL PYPDFL(KFBEAM(JT),XB,Q2REF,XFN)
10487       ENDIF
10488       XFBN=XFN(KFLB)
10489       IF(XFBN.LT.1D-20) THEN
10490         IF(KFLA.EQ.KFLB) THEN
10491           TEVCB=TEVCBS
10492           TEVEB=TEVEBS
10493           WTAPC(KFLB)=0D0
10494           WTAPE(KFLB)=0D0
10495           GOTO 190
10496         ELSEIF(MCE.EQ.1.AND.TEVCBS-TEVCB.GT.0.2D0) THEN
10497           TEVCB=0.5D0*(TEVCBS+TEVCB)
10498           GOTO 220
10499         ELSEIF(MCE.EQ.2.AND.TEVEBS-TEVEB.GT.0.2D0) THEN
10500           TEVEB=0.5D0*(TEVEBS+TEVEB)
10501           GOTO 220
10502         ELSE
10503           XFBN=1D-10
10504           XFN(KFLB)=XFBN
10505         ENDIF
10506       ENDIF
10507       DO 240 KFL=-25,25
10508         XFB(KFL)=XFN(KFL)
10509   240 CONTINUE
10510       XA=XB/Z
10511 C.... ALICE
10512 C.... Store side in MINT(124)
10513       MINT(124) = JT
10514 C....
10515       IF(MSTP(57).LE.1) THEN
10516         CALL PYPDFU(KFBEAM(JT),XA,Q2REF,XFA)
10517       ELSE
10518         CALL PYPDFL(KFBEAM(JT),XA,Q2REF,XFA)
10519       ENDIF
10520       XFAN=XFA(KFLA)
10521       IF(XFAN.LT.1D-20) GOTO 190
10522       WTSFA=WTSF(KFLA)
10523       IF(WTZ*XFAN/XFBN.LT.PYR(0)*WTSFA) GOTO 190
10524  
10525 C...Define two hard scatterers in their CM-frame.
10526   250 IF(N.EQ.NS+2) THEN
10527         DQ2(JT)=Q2B
10528         DPLCM=SQRT((DSH+DQ2(1)+DQ2(2))**2-4D0*DQ2(1)*DQ2(2))/DSHR
10529         DO 270 JR=1,2
10530           I=NS+JR
10531           IF(JR.EQ.1) IPO=IPUS1
10532           IF(JR.EQ.2) IPO=IPUS2
10533           DO 260 J=1,5
10534             K(I,J)=0
10535             P(I,J)=0D0
10536             V(I,J)=0D0
10537   260     CONTINUE
10538           K(I,1)=14
10539           K(I,2)=KFLS(JR+2)
10540           K(I,4)=IPO
10541           K(I,5)=IPO
10542           P(I,3)=DPLCM*(-1)**(JR+1)
10543           P(I,4)=(DSH+DQ2(3-JR)-DQ2(JR))/DSHR
10544           P(I,5)=-SQRT(DQ2(JR))
10545           K(IPO,1)=14
10546           K(IPO,3)=I
10547           K(IPO,4)=MOD(K(IPO,4),MSTU(5))+MSTU(5)*I
10548           K(IPO,5)=MOD(K(IPO,5),MSTU(5))+MSTU(5)*I
10549   270   CONTINUE
10550  
10551 C...Find maximum allowed mass of timelike parton.
10552       ELSEIF(N.GT.NS+2) THEN
10553         JR=3-JT
10554         DQ2(3)=Q2B
10555         DPC(1)=P(IS(1),4)
10556         DPC(2)=P(IS(2),4)
10557         DPC(3)=0.5D0*(ABS(P(IS(1),3))+ABS(P(IS(2),3)))
10558         DPD(1)=DSH+DQ2(JR)+DQ2(JT)
10559         DPD(2)=DSHZ+DQ2(JR)+DQ2(3)
10560         DPD(3)=SQRT(DPD(1)**2-4D0*DQ2(JR)*DQ2(JT))
10561         DPD(4)=SQRT(DPD(2)**2-4D0*DQ2(JR)*DQ2(3))
10562         IKIN=0
10563         IF(Q2S(JR).GE.0.25D0*Q2MNC.AND.DPD(1)-DPD(3).GE.
10564      &  1D-10*DPD(1)) IKIN=1
10565         IF(IKIN.EQ.0) DMSMA=(DQ2(JT)/ZS(JT)-DQ2(3))*
10566      &  (DSH/(DSH+DQ2(JT))-DSH/(DSHZ+DQ2(3)))
10567         IF(IKIN.EQ.1) DMSMA=(DPD(1)*DPD(2)-DPD(3)*DPD(4))/
10568      &  (2D0*DQ2(JR))-DQ2(JT)-DQ2(3)
10569  
10570 C...Generate timelike parton shower (if required).
10571         IT=N
10572         DO 280 J=1,5
10573           K(IT,J)=0
10574           P(IT,J)=0D0
10575           V(IT,J)=0D0
10576   280   CONTINUE
10577 C...f -> f + g (gamma).
10578         IF(IABS(KFLB).LE.20.AND.IABS(KFLS(JT+2)).LE.20) THEN
10579           K(IT,2)=21
10580           IF(IABS(KFLB).GE.11) K(IT,2)=22
10581 C...f -> g (gamma, W+-) + f.
10582         ELSEIF(IABS(KFLB).LE.20.AND.IABS(KFLS(JT+2)).GT.20) THEN
10583           K(IT,2)=KFLB
10584           IF(KFLS(JT+2).EQ.24) THEN
10585             K(IT,2)=-12
10586           ELSEIF(KFLS(JT+2).EQ.-24) THEN
10587             K(IT,2)=12
10588           ENDIF
10589 C...g (gamma) -> f + fbar, g + g.
10590         ELSE
10591           K(IT,2)=-KFLS(JT+2)
10592           IF(KFLS(JT+2).GT.20) K(IT,2)=KFLS(JT+2)
10593         ENDIF
10594         K(IT,1)=3
10595         IF((IABS(K(IT,2)).GE.11.AND.IABS(K(IT,2)).LE.18).OR.
10596      &  IABS(K(IT,2)).EQ.22) K(IT,1)=1
10597         P(IT,5)=PYMASS(K(IT,2))
10598         IF(DMSMA.LE.P(IT,5)**2) GOTO 100
10599         IF(MSTP(63).GE.1.AND.MCE.EQ.1) THEN
10600           MSTJ48=MSTJ(48)
10601           PARJ85=PARJ(85)
10602           P(IT,4)=(DSHZ-DSH-P(IT,5)**2)/DSHR
10603           P(IT,3)=SQRT(P(IT,4)**2-P(IT,5)**2)
10604           IF(MSTP(63).EQ.1) THEN
10605             Q2TIM=DMSMA
10606           ELSEIF(MSTP(63).EQ.2) THEN
10607             Q2TIM=MIN(DMSMA,PARP(71)*Q2S(JT))
10608           ELSE
10609             Q2TIM=DMSMA
10610             MSTJ(48)=1
10611             IF(IKIN.EQ.0) DPT2=DMSMA*(DSHZ+DQ2(3))/(DSH+DQ2(JT))
10612             IF(IKIN.EQ.1) DPT2=DMSMA*(0.5D0*DPD(1)*DPD(2)+0.5D0*DPD(3)*
10613      &      DPD(4)-DQ2(JR)*(DQ2(JT)+DQ2(3)))/(4D0*DSH*DPC(3)**2)
10614             PARJ(85)=SQRT(MAX(0D0,DPT2))*
10615      &      (1D0/P(IT,4)+1D0/P(IS(JT),4))
10616           ENDIF
10617           CALL PYSHOW(IT,0,SQRT(Q2TIM))
10618           MSTJ(48)=MSTJ48
10619           PARJ(85)=PARJ85
10620           IF(N.GE.IT+1) P(IT,5)=P(IT+1,5)
10621         ENDIF
10622  
10623 C...Reconstruct kinematics of branching: timelike parton shower.
10624         DMS=P(IT,5)**2
10625         IF(IKIN.EQ.0) DPT2=(DMSMA-DMS)*(DSHZ+DQ2(3))/(DSH+DQ2(JT))
10626         IF(IKIN.EQ.1) DPT2=(DMSMA-DMS)*(0.5D0*DPD(1)*DPD(2)+
10627      &  0.5D0*DPD(3)*DPD(4)-DQ2(JR)*(DQ2(JT)+DQ2(3)+DMS))/
10628      &  (4D0*DSH*DPC(3)**2)
10629         IF(DPT2.LT.0D0) GOTO 100
10630         DPB(1)=(0.5D0*DPD(2)-DPC(JR)*(DSHZ+DQ2(JR)-DQ2(JT)-DMS)/
10631      &  DSHR)/DPC(3)-DPC(3)
10632         P(IT,1)=SQRT(DPT2)
10633         P(IT,3)=DPB(1)*(-1)**(JT+1)
10634         P(IT,4)=SQRT(DPT2+DPB(1)**2+DMS)
10635         IF(N.GE.IT+1) THEN
10636           DPB(1)=SQRT(DPB(1)**2+DPT2)
10637           DPB(2)=SQRT(DPB(1)**2+DMS)
10638           DPB(3)=P(IT+1,3)
10639           DPB(4)=SQRT(DPB(3)**2+DMS)
10640           DBEZ=(DPB(4)*DPB(1)-DPB(3)*DPB(2))/(DPB(4)*DPB(2)-DPB(3)*
10641      &    DPB(1))
10642           CALL PYROBO(IT+1,N,0D0,0D0,0D0,0D0,DBEZ)
10643           THE=PYANGL(P(IT,3),P(IT,1))
10644           CALL PYROBO(IT+1,N,THE,0D0,0D0,0D0,0D0)
10645         ENDIF
10646  
10647 C...Reconstruct kinematics of branching: spacelike parton.
10648         DO 290 J=1,5
10649           K(N+1,J)=0
10650           P(N+1,J)=0D0
10651           V(N+1,J)=0D0
10652   290   CONTINUE
10653         K(N+1,1)=14
10654         K(N+1,2)=KFLB
10655         P(N+1,1)=P(IT,1)
10656         P(N+1,3)=P(IT,3)+P(IS(JT),3)
10657         P(N+1,4)=P(IT,4)+P(IS(JT),4)
10658         P(N+1,5)=-SQRT(DQ2(3))
10659  
10660 C...Define colour flow of branching.
10661         K(IS(JT),3)=N+1
10662         K(IT,3)=N+1
10663         IM1=N+1
10664         IM2=N+1
10665 C...f -> f + gamma (Z, W).
10666         IF(IABS(K(IT,2)).GE.22) THEN
10667           K(IT,1)=1
10668           ID1=IS(JT)
10669           ID2=IS(JT)
10670 C...f -> gamma (Z, W) + f.
10671         ELSEIF(IABS(K(IS(JT),2)).GE.22) THEN
10672           ID1=IT
10673           ID2=IT
10674 C...gamma -> q + qbar, g + g.
10675         ELSEIF(K(N+1,2).EQ.22) THEN
10676           ID1=IS(JT)
10677           ID2=IT
10678           IM1=ID2
10679           IM2=ID1
10680 C...q -> q + g.
10681         ELSEIF(K(N+1,2).GT.0.AND.K(N+1,2).NE.21.AND.K(IT,2).EQ.21) THEN
10682           ID1=IT
10683           ID2=IS(JT)
10684 C...q -> g + q.
10685         ELSEIF(K(N+1,2).GT.0.AND.K(N+1,2).NE.21) THEN
10686           ID1=IS(JT)
10687           ID2=IT
10688 C...qbar -> qbar + g.
10689         ELSEIF(K(N+1,2).LT.0.AND.K(IT,2).EQ.21) THEN
10690           ID1=IS(JT)
10691           ID2=IT
10692 C...qbar -> g + qbar.
10693         ELSEIF(K(N+1,2).LT.0) THEN
10694           ID1=IT
10695           ID2=IS(JT)
10696 C...g -> g + g; g -> q + qbar.
10697         ELSEIF((K(IT,2).EQ.21.AND.PYR(0).GT.0.5D0).OR.K(IT,2).LT.0) THEN
10698           ID1=IS(JT)
10699           ID2=IT
10700         ELSE
10701           ID1=IT
10702           ID2=IS(JT)
10703         ENDIF
10704         IF(IM1.EQ.N+1) K(IM1,4)=K(IM1,4)+ID1
10705         IF(IM2.EQ.N+1) K(IM2,5)=K(IM2,5)+ID2
10706         K(ID1,4)=K(ID1,4)+MSTU(5)*IM1
10707         K(ID2,5)=K(ID2,5)+MSTU(5)*IM2
10708         IF(ID1.NE.ID2) THEN
10709           K(ID1,5)=K(ID1,5)+MSTU(5)*ID2
10710           K(ID2,4)=K(ID2,4)+MSTU(5)*ID1
10711         ENDIF
10712         N=N+1
10713  
10714 C...Boost to new CM-frame.
10715         DBSVX=(P(N,1)+P(IS(JR),1))/(P(N,4)+P(IS(JR),4))
10716         DBSVZ=(P(N,3)+P(IS(JR),3))/(P(N,4)+P(IS(JR),4))
10717         IF(DBSVX**2+DBSVZ**2.GE.1D0) GOTO 100
10718         CALL PYROBO(NS+1,N,0D0,0D0,-DBSVX,0D0,-DBSVZ)
10719         IR=N+(JT-1)*(IS(1)-N)
10720         CALL PYROBO(NS+1,N,-PYANGL(P(IR,3),P(IR,1)),PARU(2)*PYR(0),
10721      &  0D0,0D0,0D0)
10722       ENDIF
10723  
10724 C...Update kinematics variables.
10725       IS(JT)=N
10726       DQ2(JT)=Q2B
10727       IF(MSTP(62).GE.3.AND.NTRY2.LT.200) THE2(JT)=THE2T
10728       DSH=DSHZ
10729  
10730 C...Save quantities; loop back.
10731       Q2S(JT)=Q2B
10732       IF((MCEV.EQ.1.AND.Q2B.GE.0.25D0*Q2MNC).OR.
10733      &(MEEV.EQ.1.AND.Q2B.GE.Q2MNE)) THEN
10734         KFLS(JT+2)=KFLS(JT)
10735         KFLS(JT)=KFLA
10736         XS(JT)=XA
10737         ZS(JT)=Z
10738         DO 300 KFL=-25,25
10739           XFS(JT,KFL)=XFA(KFL)
10740   300   CONTINUE
10741         TEVCSV(JT)=TEVCB
10742         TEVESV(JT)=TEVEB
10743       ELSE
10744         MORE(JT)=0
10745         IF(JT.EQ.1) IPU1=N
10746         IF(JT.EQ.2) IPU2=N
10747       ENDIF
10748       IF(N.GT.MSTU(4)-MSTU(32)-10) THEN
10749         CALL PYERRM(11,'(PYSSPA:) no more memory left in PYJETS')
10750         IF(MSTU(21).GE.1) N=NS
10751         IF(MSTU(21).GE.1) RETURN
10752       ENDIF
10753       IF(MORE(1).EQ.1.OR.MORE(2).EQ.1) GOTO 150
10754  
10755 C...Boost hard scattering partons to frame of shower initiators.
10756       DO 310 J=1,3
10757         ROBO(J+2)=(P(NS+1,J)+P(NS+2,J))/(P(NS+1,4)+P(NS+2,4))
10758   310 CONTINUE
10759       K(N+2,1)=1
10760       DO 320 J=1,5
10761         P(N+2,J)=P(NS+1,J)
10762   320 CONTINUE
10763       CALL PYROBO(N+2,N+2,0D0,0D0,-ROBO(3),-ROBO(4),-ROBO(5))
10764       ROBO(2)=PYANGL(P(N+2,1),P(N+2,2))
10765       ROBO(1)=PYANGL(P(N+2,3),SQRT(P(N+2,1)**2+P(N+2,2)**2))
10766       CALL PYROBO(MINT(83)+5,NS,ROBO(1),ROBO(2),ROBO(3),ROBO(4),
10767      &ROBO(5))
10768  
10769 C...Store user information. Reset Lambda value.
10770       K(IPU1,3)=MINT(83)+3
10771       K(IPU2,3)=MINT(83)+4
10772       DO 330 JT=1,2
10773         MINT(12+JT)=KFLS(JT)
10774         VINT(140+JT)=XS(JT)
10775         IF(MINT(18+JT).EQ.1) VINT(140+JT)=VINT(154+JT)*XS(JT)
10776   330 CONTINUE
10777       PARU(112)=ALAMS
10778  
10779       RETURN
10780       END
10781  
10782 C*********************************************************************
10783  
10784 C...PYRESD
10785 C...Allows resonances to decay (including parton showers for hadronic
10786 C...channels).
10787  
10788       SUBROUTINE PYRESD(IRES)
10789  
10790 C...Double precision and integer declarations.
10791       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
10792       IMPLICIT INTEGER(I-N)
10793       INTEGER PYK,PYCHGE,PYCOMP
10794 C...Parameter statement to help give large particle numbers.
10795       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
10796 C...Commonblocks.
10797       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
10798       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
10799       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
10800       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
10801       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
10802       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
10803       COMMON/PYINT1/MINT(400),VINT(400)
10804       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
10805       COMMON/PYINT4/MWID(500),WIDS(500,5)
10806       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,
10807      &/PYINT1/,/PYINT2/,/PYINT4/
10808 C...Local arrays and complex and character variables.
10809       DIMENSION IREF(50,8),KDCY(3),KFL1(3),KFL2(3),KFL3(3),KEQL(3),
10810      &KCQM(3),KCQ1(3),KCQ2(3),KCQ3(3),NSD(3),PMMN(3),ILIN(6),
10811      &HGZ(3,3),COUP(6,4),CORL(2,2,2),PK(6,4),PKK(6,6),CTHE(3),
10812      &PHI(3),WDTP(0:200),WDTE(0:200,0:5),DBEZQQ(3),DPMO(5),XM(5),
10813      &VDCY(4)
10814       COMPLEX FGK,HA(6,6),HC(6,6)
10815       REAL TIR,UIR
10816       CHARACTER CODE*9,MASS*9
10817  
10818 C...The F, Xi and Xj functions of Gunion and Kunszt
10819 C...(Phys. Rev. D33, 665, plus errata from the authors).
10820       FGK(I1,I2,I3,I4,I5,I6)=4.*HA(I1,I3)*HC(I2,I6)*(HA(I1,I5)*
10821      &HC(I1,I4)+HA(I3,I5)*HC(I3,I4))
10822       DIGK(DT,DU)=-4D0*D34*D56+DT*(3D0*DT+4D0*DU)+DT**2*(DT*DU/
10823      &(D34*D56)-2D0*(1D0/D34+1D0/D56)*(DT+DU)+2D0*(D34/D56+D56/D34))
10824       DJGK(DT,DU)=8D0*(D34+D56)**2-8D0*(D34+D56)*(DT+DU)-6D0*DT*DU-
10825      &2D0*DT*DU*(DT*DU/(D34*D56)-2D0*(1D0/D34+1D0/D56)*(DT+DU)+
10826      &2D0*(D34/D56+D56/D34))
10827  
10828 C...Some general constants.
10829       XW=PARU(102)
10830       XWV=XW
10831       IF(MSTP(8).GE.2) XW=1D0-(PMAS(24,1)/PMAS(23,1))**2
10832       XW1=1D0-XW
10833       SQMZ=PMAS(23,1)**2
10834       GMMZ=PMAS(23,1)*PMAS(23,2)
10835       SQMW=PMAS(24,1)**2
10836       GMMW=PMAS(24,1)*PMAS(24,2)
10837       SH=VINT(44)
10838  
10839 C...Reset original resonance configuration.
10840       DO 100 JT=1,8
10841         IREF(1,JT)=0
10842   100 CONTINUE
10843  
10844 C...Define initial one, two or three objects for subprocess.
10845       IF(IRES.EQ.0) THEN
10846         ISUB=MINT(1)
10847         IF(ISET(ISUB).EQ.1.OR.ISET(ISUB).EQ.3) THEN
10848           IREF(1,1)=MINT(84)+2+ISET(ISUB)
10849           IREF(1,4)=MINT(83)+6+ISET(ISUB)
10850           JTMAX=1
10851         ELSEIF(ISET(ISUB).EQ.2.OR.ISET(ISUB).EQ.4) THEN
10852           IREF(1,1)=MINT(84)+1+ISET(ISUB)
10853           IREF(1,2)=MINT(84)+2+ISET(ISUB)
10854           IREF(1,4)=MINT(83)+5+ISET(ISUB)
10855           IREF(1,5)=MINT(83)+6+ISET(ISUB)
10856           JTMAX=2
10857         ELSEIF(ISET(ISUB).EQ.5) THEN
10858           IREF(1,1)=MINT(84)+3
10859           IREF(1,2)=MINT(84)+4
10860           IREF(1,3)=MINT(84)+5
10861           IREF(1,4)=MINT(83)+7
10862           IREF(1,5)=MINT(83)+8
10863           IREF(1,6)=MINT(83)+9
10864           JTMAX=3
10865         ENDIF
10866  
10867 C...Define original resonance for odd cases.
10868       ELSE
10869         ISUB=0
10870         IREF(1,1)=IRES
10871         JTMAX=1
10872       ENDIF
10873  
10874 C...Check if initial resonance has been moved (in resonance + jet).
10875       DO 120 JT=1,3
10876         IF(IREF(1,JT).GT.0) THEN
10877           IF(K(IREF(1,JT),1).GT.10) THEN
10878             KFA=IABS(K(IREF(1,JT),2))
10879             IF(KFA.GE.6.AND.KCHG(PYCOMP(KFA),2).NE.0) THEN
10880               DO 110 I=IREF(1,JT)+1,N
10881                 IF(K(I,1).LE.10.AND.K(I,2).EQ.K(IREF(1,JT),2))
10882      &          IREF(1,JT)=I
10883   110         CONTINUE
10884             ELSE
10885               KDA=MOD(K(IREF(1,JT),4),MSTU(4))
10886               IF(MWID(PYCOMP(KFA)).NE.0.AND.KDA.GT.1) IREF(1,JT)=KDA
10887             ENDIF
10888           ENDIF
10889         ENDIF
10890   120 CONTINUE
10891  
10892 C.....Set decay vertex for initial resonances
10893       DO 140 JT=1,JTMAX
10894         DO 130 I=1,4
10895           V(IREF(1,JT),I)=0D0
10896   130   CONTINUE
10897   140 CONTINUE
10898  
10899 C...Loop over decay history.
10900       NP=1
10901       IP=0
10902   150 IP=IP+1
10903       NINH=0
10904       JTMAX=2
10905       IF(IREF(IP,2).EQ.0) JTMAX=1
10906       IF(IREF(IP,3).NE.0) JTMAX=3
10907       IT4=0
10908       NSAV=N
10909  
10910 C...Start treatment of one, two or three resonances in parallel.
10911   160 N=NSAV
10912       DO 250 JT=1,JTMAX
10913         ID=IREF(IP,JT)
10914         KDCY(JT)=0
10915         KFL1(JT)=0
10916         KFL2(JT)=0
10917         KFL3(JT)=0
10918         KEQL(JT)=0
10919         NSD(JT)=ID
10920  
10921 C...Check whether particle can/is allowed to decay.
10922         IF(ID.EQ.0) GOTO 240
10923         KFA=IABS(K(ID,2))
10924         KCA=PYCOMP(KFA)
10925         IF(MWID(KCA).EQ.0) GOTO 240
10926         IF(K(ID,1).GT.10.OR.MDCY(KCA,1).EQ.0) GOTO 240
10927         IF(KFA.EQ.6.OR.KFA.EQ.7.OR.KFA.EQ.8.OR.KFA.EQ.17.OR.
10928      &  KFA.EQ.18) IT4=IT4+1
10929         K(ID,4)=MSTU(5)*(K(ID,4)/MSTU(5))
10930         K(ID,5)=MSTU(5)*(K(ID,5)/MSTU(5))
10931  
10932 C...Choose lifetime and determine decay vertex.
10933         IF(K(ID,1).EQ.5) THEN
10934           V(ID,5)=0D0
10935         ELSEIF(K(ID,1).NE.4) THEN
10936           V(ID,5)=-PMAS(KCA,4)*LOG(PYR(0))
10937         ENDIF
10938         DO 170 J=1,4
10939           VDCY(J)=V(ID,J)+V(ID,5)*P(ID,J)/P(ID,5)
10940   170   CONTINUE
10941  
10942 C...Determine whether decay allowed or not.
10943         MOUT=0
10944         IF(MSTJ(22).EQ.2) THEN
10945           IF(PMAS(KCA,4).GT.PARJ(71)) MOUT=1
10946         ELSEIF(MSTJ(22).EQ.3) THEN
10947           IF(VDCY(1)**2+VDCY(2)**2+VDCY(3)**2.GT.PARJ(72)**2) MOUT=1
10948         ELSEIF(MSTJ(22).EQ.4) THEN
10949           IF(VDCY(1)**2+VDCY(2)**2.GT.PARJ(73)**2) MOUT=1
10950           IF(ABS(VDCY(3)).GT.PARJ(74)) MOUT=1
10951         ENDIF
10952         IF(MOUT.EQ.1.AND.K(ID,1).NE.5) THEN
10953           K(ID,1)=4
10954           GOTO 240
10955         ENDIF
10956  
10957 C...Info for selection of decay channel: sign, pairings.
10958         IF(KCHG(KCA,3).EQ.0) THEN
10959           IPM=2
10960         ELSE
10961           IPM=(5-ISIGN(1,K(ID,2)))/2
10962         ENDIF
10963         KFB=0
10964         IF(JTMAX.EQ.2) THEN
10965           KFB=IABS(K(IREF(IP,3-JT),2))
10966         ELSEIF(JTMAX.EQ.3) THEN
10967           JT2=JT+1-3*(JT/3)
10968           KFB=IABS(K(IREF(IP,JT2),2))
10969           IF(KFB.NE.KFA) THEN
10970             JT2=JT+2-3*((JT+1)/3)
10971             KFB=IABS(K(IREF(IP,JT2),2))
10972           ENDIF
10973         ENDIF
10974  
10975 C...Select decay channel.
10976         IF(ISUB.EQ.1.OR.ISUB.EQ.15.OR.ISUB.EQ.19.OR.ISUB.EQ.22.OR.
10977      &  ISUB.EQ.30.OR.ISUB.EQ.35.OR.ISUB.EQ.141) MINT(61)=1
10978         CALL PYWIDT(KFA,P(ID,5)**2,WDTP,WDTE)
10979         WDTE0S=WDTE(0,1)+WDTE(0,IPM)+WDTE(0,4)
10980         IF(KFB.EQ.KFA) WDTE0S=WDTE0S+WDTE(0,5)
10981         IF(WDTE0S.LE.0D0) GOTO 240
10982         RKFL=WDTE0S*PYR(0)
10983         IDL=0
10984   180   IDL=IDL+1
10985         IDC=IDL+MDCY(KCA,2)-1
10986         RKFL=RKFL-(WDTE(IDL,1)+WDTE(IDL,IPM)+WDTE(IDL,4))
10987         IF(KFB.EQ.KFA) RKFL=RKFL-WDTE(IDL,5)
10988         IF(IDL.LT.MDCY(KCA,3).AND.RKFL.GT.0D0) GOTO 180
10989  
10990 C...Read out flavours and colour charges of decay channel chosen.
10991         KCQM(JT)=KCHG(KCA,2)*ISIGN(1,K(ID,2))
10992         IF(KCQM(JT).EQ.-2) KCQM(JT)=2
10993         KFL1(JT)=KFDP(IDC,1)*ISIGN(1,K(ID,2))
10994         KFC1A=PYCOMP(IABS(KFL1(JT)))
10995         IF(KCHG(KFC1A,3).EQ.0) KFL1(JT)=IABS(KFL1(JT))
10996         KCQ1(JT)=KCHG(KFC1A,2)*ISIGN(1,KFL1(JT))
10997         IF(KCQ1(JT).EQ.-2) KCQ1(JT)=2
10998         KFL2(JT)=KFDP(IDC,2)*ISIGN(1,K(ID,2))
10999         KFC2A=PYCOMP(IABS(KFL2(JT)))
11000         IF(KCHG(KFC2A,3).EQ.0) KFL2(JT)=IABS(KFL2(JT))
11001         KCQ2(JT)=KCHG(KFC2A,2)*ISIGN(1,KFL2(JT))
11002         IF(KCQ2(JT).EQ.-2) KCQ2(JT)=2
11003         KFL3(JT)=KFDP(IDC,3)*ISIGN(1,K(ID,2))
11004         IF(KFL3(JT).NE.0) THEN
11005           KFC3A=PYCOMP(IABS(KFL3(JT)))
11006           IF(KCHG(KFC3A,3).EQ.0) KFL3(JT)=IABS(KFL3(JT))
11007           KCQ3(JT)=KCHG(KFC3A,2)*ISIGN(1,KFL3(JT))
11008           IF(KCQ3(JT).EQ.-2) KCQ3(JT)=2
11009         ENDIF
11010  
11011 C...Set/save further info on channel.
11012         KDCY(JT)=1
11013         IF(KFB.EQ.KFA) KEQL(JT)=MDME(IDC,1)
11014         NSD(JT)=N
11015         HGZ(JT,1)=VINT(111)
11016         HGZ(JT,2)=VINT(112)
11017         HGZ(JT,3)=VINT(114)
11018         JTZ=JT   
11019  
11020 C...Select masses; to begin with assume resonances narrow.
11021         DO 200 I=1,3
11022           P(N+I,5)=0D0
11023           PMMN(I)=0D0
11024           IF(I.EQ.1) THEN
11025             KFLW=IABS(KFL1(JT))
11026             KCW=KFC1A
11027           ELSEIF(I.EQ.2) THEN
11028             KFLW=IABS(KFL2(JT))
11029             KCW=KFC2A
11030           ELSEIF(I.EQ.3) THEN
11031             IF(KFL3(JT).EQ.0) GOTO 200
11032             KFLW=IABS(KFL3(JT))
11033             KCW=KFC3A
11034           ENDIF
11035           P(N+I,5)=PMAS(KCW,1)
11036 CMRENNA++
11037 C...This prevents SUSY/t particles from becoming too light.
11038           IF(KFLW/KSUSY1.EQ.1.OR.KFLW/KSUSY1.EQ.2) THEN
11039             PMMN(I)=PMAS(KCW,1)
11040             DO 190 IDC=MDCY(KCW,2),MDCY(KCW,2)+MDCY(KCW,3)-1
11041               IF(MDME(IDC,1).GT.0.AND.BRAT(IDC).GT.1E-4) THEN
11042                 PMSUM=PMAS(PYCOMP(KFDP(IDC,1)),1)+
11043      &          PMAS(PYCOMP(KFDP(IDC,2)),1)
11044                 IF(KFDP(IDC,3).NE.0) PMSUM=PMSUM+
11045      &          PMAS(PYCOMP(KFDP(IDC,3)),1)
11046                 PMMN(I)=MIN(PMMN(I),PMSUM)
11047               ENDIF
11048   190       CONTINUE
11049 CMRENNA--
11050           ELSEIF(KFLW.EQ.6) THEN
11051             PMMN(I)=PMAS(24,1)+PMAS(5,1)
11052           ENDIF
11053   200   CONTINUE
11054  
11055 C...Check which two out of three are widest.
11056         IWID1=1
11057         IWID2=2
11058         PWID1=PMAS(KFC1A,2)
11059         PWID2=PMAS(KFC2A,2)
11060         KFLW1=IABS(KFL1(JT))
11061         KFLW2=IABS(KFL2(JT))
11062         IF(KFL3(JT).NE.0) THEN
11063           PWID3=PMAS(KFC3A,2)
11064           IF(PWID3.GT.PWID1.AND.PWID2.GE.PWID1) THEN
11065             IWID1=3
11066             PWID1=PWID3
11067             KFLW1=IABS(KFL3(JT))
11068           ELSEIF(PWID3.GT.PWID2) THEN
11069             IWID2=3
11070             PWID2=PWID3
11071             KFLW2=IABS(KFL3(JT))
11072           ENDIF
11073         ENDIF
11074  
11075 C...If all narrow then only check that masses consistent.
11076         IF(MSTP(42).LE.0.OR.(PWID1.LT.PARP(41).AND.
11077      &  PWID2.LT.PARP(41))) THEN
11078 CMRENNA++
11079 C....Handle near degeneracy cases.
11080           IF(KFA/KSUSY1.EQ.1.OR.KFA/KSUSY1.EQ.2) THEN
11081             IF(P(N+1,5)+P(N+2,5)+P(N+3,5).GT.P(ID,5)) THEN
11082               P(N+1,5)=P(ID,5)-P(N+2,5)-0.5D0
11083               IF(P(N+1,5).LT.0D0) P(N+1,5)=0D0
11084             ENDIF
11085           ENDIF
11086 CMRENNA--
11087           IF(P(N+1,5)+P(N+2,5)+P(N+3,5).GT.P(ID,5)) THEN
11088             CALL PYERRM(13,'(PYRESD:) daughter masses too large')
11089             MINT(51)=1
11090             RETURN
11091           ELSEIF(P(N+1,5)+P(N+2,5)+P(N+3,5)+PARJ(64).GT.P(ID,5)) THEN
11092             CALL PYERRM(3,'(PYRESD:) daughter masses too large')
11093             MINT(51)=1
11094             RETURN
11095           ENDIF
11096  
11097 C...For three wide resonances select narrower of three
11098 C...according to BW decoupled from rest.
11099         ELSE
11100           PMTOT=P(ID,5)
11101           IF(KFL3(JT).NE.0) THEN
11102             IWID3=6-IWID1-IWID2
11103             KFLW3=IABS(KFL1(JT))+IABS(KFL2(JT))+IABS(KFL3(JT))-
11104      &      KFLW1-KFLW2
11105             LOOP=0
11106   210       LOOP=LOOP+1
11107             P(N+IWID3,5)=PYMASS(KFLW3)
11108             IF(LOOP.LE.10.AND. P(N+IWID3,5).LE.PMMN(IWID3)) GOTO 210
11109             PMTOT=PMTOT-P(N+IWID3,5)
11110           ENDIF
11111 C...Select other two correlated within remaining phase space.
11112           IF(IP.EQ.1) THEN
11113             CKIN45=CKIN(45)
11114             CKIN47=CKIN(47)
11115             CKIN(45)=MAX(PMMN(IWID1),CKIN(45))
11116             CKIN(47)=MAX(PMMN(IWID2),CKIN(47))
11117             CALL PYOFSH(2,KFA,KFLW1,KFLW2,PMTOT,P(N+IWID1,5),
11118      &      P(N+IWID2,5))
11119             CKIN(45)=CKIN45
11120             CKIN(47)=CKIN47
11121           ELSE
11122             CKIN(49)=PMMN(IWID1)
11123             CKIN(50)=PMMN(IWID2)
11124             CALL PYOFSH(5,KFA,KFLW1,KFLW2,PMTOT,P(N+IWID1,5),
11125      &      P(N+IWID2,5))
11126             CKIN(49)=0D0
11127             CKIN(50)=0D0
11128           ENDIF
11129           IF(MINT(51).EQ.1) RETURN
11130         ENDIF
11131  
11132 C...Begin fill decay products, with colour flow for coloured objects.
11133         MSTU10=MSTU(10)
11134         MSTU(10)=1
11135         MSTU(19)=1
11136  
11137 CMRENNA++
11138 C...1) Three-body decays of SUSY particles (plus special case top).
11139         IF(KFL3(JT).NE.0) THEN
11140           DO 230 I=N+1,N+3
11141             DO 220 J=1,5
11142               K(I,J)=0
11143 C              V(I,J)=0D0
11144   220       CONTINUE
11145   230     CONTINUE
11146           XM(1)=P(N+1,5)
11147           XM(2)=P(N+2,5)
11148           XM(3)=P(N+3,5)
11149           XM(5)=P(ID,5)
11150           CALL PYTBDY(XM)
11151           K(N+1,1)=1
11152           K(N+1,2)=KFL1(JT)
11153           K(N+2,1)=1
11154           K(N+2,2)=KFL2(JT)
11155           K(N+3,1)=1
11156           K(N+3,2)=KFL3(JT)
11157  
11158 C...Set colour flow for t -> W + b + Z.
11159           IF(KFA.EQ.6) THEN
11160             K(N+2,1)=3
11161             ISID=4
11162             IF(KCQM(JT).EQ.-1) ISID=5
11163             IDAU=N+2
11164             K(ID,ISID)=K(ID,ISID)+IDAU
11165             K(IDAU,ISID)=MSTU(5)*ID
11166  
11167 C...Set colour flow in three-body decays - programmed as special cases.
11168           ELSEIF(KFC2A.LE.6) THEN
11169             K(N+2,1)=3
11170             K(N+3,1)=3
11171             ISID=4
11172             IF(KFL2(JT).LT.0) ISID=5
11173             K(N+2,ISID)=MSTU(5)*(N+3)
11174             K(N+3,9-ISID)=MSTU(5)*(N+2)
11175           ENDIF
11176           IF(KFL1(JT).EQ.KSUSY1+21) THEN
11177             K(N+1,1)=3
11178             K(N+2,1)=3
11179             K(N+3,1)=3
11180             ISID=4
11181             IF(KFL2(JT).LT.0) ISID=5
11182             K(N+1,ISID)=MSTU(5)*(N+2)
11183             K(N+1,9-ISID)=MSTU(5)*(N+3)
11184             K(N+2,ISID)=MSTU(5)*(N+1)
11185             K(N+3,9-ISID)=MSTU(5)*(N+1)
11186           ENDIF
11187           IF(KFA.EQ.KSUSY1+21) THEN
11188             K(N+2,1)=3
11189             K(N+3,1)=3
11190             ISID=4
11191             IF(KFL2(JT).LT.0) ISID=5
11192             K(ID,ISID)=K(ID,ISID)+(N+2)
11193             K(ID,9-ISID)=K(ID,9-ISID)+(N+3)
11194             K(N+2,ISID)=MSTU(5)*ID
11195             K(N+3,9-ISID)=MSTU(5)*ID
11196           ENDIF
11197           N=N+3
11198 CMRENNA--
11199  
11200 C...2) Everything else two-body decay.
11201         ELSE
11202           CALL PY2ENT(N+1,KFL1(JT),KFL2(JT),P(ID,5))
11203 C...First set colour flow as if mother colour singlet.
11204           IF(KCQ1(JT).NE.0) THEN
11205             K(N-1,1)=3
11206             IF(KCQ1(JT).NE.-1) K(N-1,4)=MSTU(5)*N
11207             IF(KCQ1(JT).NE.1) K(N-1,5)=MSTU(5)*N
11208           ENDIF
11209           IF(KCQ2(JT).NE.0) THEN
11210             K(N,1)=3
11211             IF(KCQ2(JT).NE.-1) K(N,4)=MSTU(5)*(N-1)
11212             IF(KCQ2(JT).NE.1) K(N,5)=MSTU(5)*(N-1)
11213           ENDIF
11214 C...Then redirect colour flow if mother (anti)triplet.
11215           IF(KCQM(JT).EQ.0) THEN
11216           ELSEIF(KCQM(JT).NE.2) THEN
11217             ISID=4
11218             IF(KCQM(JT).EQ.-1) ISID=5
11219             IDAU=N-1
11220             IF(KCQ1(JT).EQ.0.OR.KCQ2(JT).EQ.2) IDAU=N
11221             K(ID,ISID)=K(ID,ISID)+IDAU
11222             K(IDAU,ISID)=MSTU(5)*ID
11223 C...Then redirect colour flow if mother octet.
11224           ELSEIF(KCQ1(JT).EQ.0.OR.KCQ2(JT).EQ.0) THEN
11225             IDAU=N-1
11226             IF(KCQ1(JT).EQ.0) IDAU=N
11227             K(ID,4)=K(ID,4)+IDAU
11228             K(ID,5)=K(ID,5)+IDAU
11229             K(IDAU,4)=MSTU(5)*ID
11230             K(IDAU,5)=MSTU(5)*ID
11231           ELSE
11232             ISID=4
11233             IF(KCQ1(JT).EQ.-1) ISID=5
11234             IF(KCQ1(JT).EQ.2) ISID=INT(4.5D0+PYR(0))
11235             K(ID,ISID)=K(ID,ISID)+(N-1)
11236             K(ID,9-ISID)=K(ID,9-ISID)+N
11237             K(N-1,ISID)=MSTU(5)*ID
11238             K(N,9-ISID)=MSTU(5)*ID
11239           ENDIF
11240         ENDIF
11241  
11242 C...End loop over resonances for daughter flavour and mass selection.
11243         MSTU(10)=MSTU10
11244   240   IF(MWID(KCA).NE.0.AND.(KFL1(JT).EQ.0.OR.KFL3(JT).NE.0))
11245      &  NINH=NINH+1
11246         IF(IRES.GT.0.AND.MWID(KCA).NE.0.AND.KFL1(JT).EQ.0) THEN
11247           WRITE(CODE,'(I9)') K(ID,2)
11248           WRITE(MASS,'(F9.3)') P(ID,5)
11249           CALL PYERRM(3,'(PYRESD:) Failed to decay particle'//
11250      &    CODE//' with mass'//MASS)
11251           MINT(51)=1
11252           RETURN
11253         ENDIF
11254   250 CONTINUE
11255  
11256 C...Check for allowed combinations. Skip if no decays.
11257       IF(JTMAX.EQ.1) THEN
11258         IF(KDCY(1).EQ.0) GOTO 620
11259       ELSEIF(JTMAX.EQ.2) THEN
11260         IF(KDCY(1).EQ.0.AND.KDCY(2).EQ.0) GOTO 620
11261         IF(KEQL(1).EQ.4.AND.KEQL(2).EQ.4) GOTO 160
11262         IF(KEQL(1).EQ.5.AND.KEQL(2).EQ.5) GOTO 160
11263       ELSEIF(JTMAX.EQ.3) THEN
11264         IF(KDCY(1).EQ.0.AND.KDCY(2).EQ.0.AND.KDCY(3).EQ.0) GOTO 620
11265         IF(KEQL(1).EQ.4.AND.KEQL(2).EQ.4) GOTO 160
11266         IF(KEQL(1).EQ.4.AND.KEQL(3).EQ.4) GOTO 160
11267         IF(KEQL(2).EQ.4.AND.KEQL(3).EQ.4) GOTO 160
11268         IF(KEQL(1).EQ.5.AND.KEQL(2).EQ.5) GOTO 160
11269         IF(KEQL(1).EQ.5.AND.KEQL(3).EQ.5) GOTO 160
11270         IF(KEQL(2).EQ.5.AND.KEQL(3).EQ.5) GOTO 160
11271       ENDIF
11272  
11273 C...Special case: matrix element option for Z0 decay to quarks.
11274       IF(MSTP(48).EQ.1.AND.ISUB.EQ.1.AND.JTMAX.EQ.1.AND.
11275      &IABS(MINT(11)).EQ.11.AND.IABS(KFL1(1)).LE.5) THEN
11276  
11277 C...Check consistency of MSTJ options set.
11278         IF(MSTJ(109).EQ.2.AND.MSTJ(110).NE.1) THEN
11279           CALL PYERRM(6,
11280      &    '(PYRESD:) MSTJ(109) value requires MSTJ(110) = 1')
11281           MSTJ(110)=1
11282         ENDIF
11283         IF(MSTJ(109).EQ.2.AND.MSTJ(111).NE.0) THEN
11284           CALL PYERRM(6,
11285      &    '(PYRESD) MSTJ(109) value requires MSTJ(111) = 0')
11286           MSTJ(111)=0
11287         ENDIF
11288  
11289 C...Select alpha_strong behaviour.
11290         MST111=MSTU(111)
11291         PAR112=PARU(112)
11292         MSTU(111)=MSTJ(108)
11293         IF(MSTJ(108).EQ.2.AND.(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.1))
11294      &  MSTU(111)=1
11295         PARU(112)=PARJ(121)
11296         IF(MSTU(111).EQ.2) PARU(112)=PARJ(122)
11297  
11298 C...Find axial fraction in total cross section for scalar gluon model.
11299         PARJ(171)=0D0
11300         IF((IABS(MSTJ(101)).EQ.1.AND.MSTJ(109).EQ.1).OR.
11301      &  (MSTJ(101).EQ.5.AND.MSTJ(49).EQ.1)) THEN
11302           POLL=1D0-PARJ(131)*PARJ(132)
11303           SFF=1D0/(16D0*XW*XW1)
11304           SFW=P(ID,5)**4/((P(ID,5)**2-PARJ(123)**2)**2+
11305      &    (PARJ(123)*PARJ(124))**2)
11306           SFI=SFW*(1D0-(PARJ(123)/P(ID,5))**2)
11307           VE=4D0*XW-1D0
11308           HF1I=SFI*SFF*(VE*POLL+PARJ(132)-PARJ(131))
11309           HF1W=SFW*SFF**2*((VE**2+1D0)*POLL+2D0*VE*
11310      &    (PARJ(132)-PARJ(131)))
11311           KFLC=IABS(KFL1(1))
11312           PMQ=PYMASS(KFLC)
11313           QF=KCHG(KFLC,1)/3D0
11314           VQ=1D0
11315           IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(MAX(0D0,
11316      &    1D0-(2D0*PMQ/P(ID,5))**2))
11317           VF=SIGN(1D0,QF)-4D0*QF*XW
11318           RFV=0.5D0*VQ*(3D0-VQ**2)*(QF**2*POLL-2D0*QF*VF*HF1I+
11319      &    VF**2*HF1W)+VQ**3*HF1W
11320           IF(RFV.GT.0D0) PARJ(171)=MIN(1D0,VQ**3*HF1W/RFV)
11321         ENDIF
11322  
11323 C...Choice of jet configuration.
11324         CALL PYXJET(P(ID,5),NJET,CUT)
11325         KFLC=IABS(KFL1(1))
11326         KFLN=21
11327         IF(NJET.EQ.4) THEN
11328           CALL PYX4JT(NJET,CUT,KFLC,P(ID,5),KFLN,X1,X2,X4,X12,X14)
11329         ELSEIF(NJET.EQ.3) THEN
11330           CALL PYX3JT(NJET,CUT,KFLC,P(ID,5),X1,X3)
11331         ELSE
11332           MSTJ(120)=1
11333         ENDIF
11334  
11335 C...Fill jet configuration; return if incorrect kinematics.
11336         NC=N-2
11337         IF(NJET.EQ.2.AND.MSTJ(101).NE.5) THEN
11338           CALL PY2ENT(NC+1,KFLC,-KFLC,P(ID,5))
11339         ELSEIF(NJET.EQ.2) THEN
11340           CALL PY2ENT(-(NC+1),KFLC,-KFLC,P(ID,5))
11341         ELSEIF(NJET.EQ.3) THEN
11342           CALL PY3ENT(NC+1,KFLC,21,-KFLC,P(ID,5),X1,X3)
11343         ELSEIF(KFLN.EQ.21) THEN
11344           CALL PY4ENT(NC+1,KFLC,KFLN,KFLN,-KFLC,P(ID,5),X1,X2,X4,
11345      &    X12,X14)
11346         ELSE
11347           CALL PY4ENT(NC+1,KFLC,-KFLN,KFLN,-KFLC,P(ID,5),X1,X2,X4,
11348      &    X12,X14)
11349         ENDIF
11350         IF(MSTU(24).NE.0) THEN
11351           MINT(51)=1
11352           MSTU(111)=MST111
11353           PARU(112)=PAR112
11354           RETURN
11355         ENDIF
11356  
11357 C...Angular orientation according to matrix element.
11358         IF(MSTJ(106).EQ.1) THEN
11359           CALL PYXDIF(NC,NJET,KFLC,P(ID,5),CHIZ,THEZ,PHIZ)
11360           IF(MINT(11).LT.0) THEZ=PARU(1)-THEZ
11361           CTHE(1)=COS(THEZ)
11362           CALL PYROBO(NC+1,N,0D0,CHIZ,0D0,0D0,0D0)
11363           CALL PYROBO(NC+1,N,THEZ,PHIZ,0D0,0D0,0D0)
11364         ENDIF
11365  
11366 C...Boost partons to Z0 rest frame.
11367         CALL PYROBO(NC+1,N,0D0,0D0,P(ID,1)/P(ID,4),
11368      &  P(ID,2)/P(ID,4),P(ID,3)/P(ID,4))
11369  
11370 C...Mark decayed resonance and add documentation lines,
11371         K(ID,1)=K(ID,1)+10
11372         IDOC=MINT(83)+MINT(4)
11373         DO 270 I=NC+1,N
11374           I1=MINT(83)+MINT(4)+1
11375           K(I,3)=I1
11376           IF(MSTP(128).GE.1) K(I,3)=ID
11377           IF(MSTP(128).LE.1.AND.MINT(4).LT.MSTP(126)) THEN
11378             MINT(4)=MINT(4)+1
11379             K(I1,1)=21
11380             K(I1,2)=K(I,2)
11381             K(I1,3)=IREF(IP,4)
11382             DO 260 J=1,5
11383               P(I1,J)=P(I,J)
11384   260       CONTINUE
11385           ENDIF
11386   270   CONTINUE
11387  
11388 C...Generate parton shower.
11389         IF(MSTJ(101).EQ.5) CALL PYSHOW(N-1,N,P(ID,5))
11390  
11391 C... End special case for Z0: skip ahead.
11392         MSTU(111)=MST111
11393         PARU(112)=PAR112
11394         GOTO 610
11395       ENDIF
11396  
11397 C...Order incoming partons and outgoing resonances.
11398       IF(JTMAX.EQ.2.AND.ISUB.NE.0.AND.MSTP(47).GE.1.AND.
11399      &NINH.EQ.0) THEN
11400         ILIN(1)=MINT(84)+1
11401         IF(K(MINT(84)+1,2).GT.0) ILIN(1)=MINT(84)+2
11402         IF(K(ILIN(1),2).EQ.21.OR.K(ILIN(1),2).EQ.22) 
11403      &  ILIN(1)=2*MINT(84)+3-ILIN(1)
11404         ILIN(2)=2*MINT(84)+3-ILIN(1)
11405         IMIN=1
11406         IF(IREF(IP,7).EQ.25.OR.IREF(IP,7).EQ.35.OR.IREF(IP,7)
11407      &  .EQ.36) IMIN=3
11408         IMAX=2
11409         IORD=1
11410         IF(K(IREF(IP,1),2).EQ.23) IORD=2
11411         IF(K(IREF(IP,1),2).EQ.24.AND.K(IREF(IP,2),2).EQ.-24) IORD=2
11412         IAKIPD=IABS(K(IREF(IP,IORD),2))
11413         IF(IAKIPD.EQ.25.OR.IAKIPD.EQ.35.OR.IAKIPD.EQ.36) IORD=3-IORD
11414         IF(KDCY(IORD).EQ.0) IORD=3-IORD
11415  
11416 C...Order decay products of resonances.
11417         DO 280 JT=IORD,3-IORD,3-2*IORD
11418           IF(KDCY(JT).EQ.0) THEN
11419             ILIN(IMAX+1)=NSD(JT)
11420             IMAX=IMAX+1
11421           ELSEIF(K(NSD(JT)+1,2).GT.0) THEN
11422             ILIN(IMAX+1)=N+2*JT-1
11423             ILIN(IMAX+2)=N+2*JT
11424             IMAX=IMAX+2
11425             K(N+2*JT-1,2)=K(NSD(JT)+1,2)
11426             K(N+2*JT,2)=K(NSD(JT)+2,2)
11427           ELSE
11428             ILIN(IMAX+1)=N+2*JT
11429             ILIN(IMAX+2)=N+2*JT-1
11430             IMAX=IMAX+2
11431             K(N+2*JT-1,2)=K(NSD(JT)+1,2)
11432             K(N+2*JT,2)=K(NSD(JT)+2,2)
11433           ENDIF
11434   280   CONTINUE
11435  
11436 C...Find charge, isospin, left- and righthanded couplings.
11437         DO 300 I=IMIN,IMAX
11438           DO 290 J=1,4
11439             COUP(I,J)=0D0
11440   290     CONTINUE
11441           KFA=IABS(K(ILIN(I),2))
11442           IF(KFA.EQ.0.OR.KFA.GT.20) GOTO 300
11443           COUP(I,1)=KCHG(KFA,1)/3D0
11444           COUP(I,2)=(-1)**MOD(KFA,2)
11445           COUP(I,4)=-2D0*COUP(I,1)*XWV
11446           COUP(I,3)=COUP(I,2)+COUP(I,4)
11447   300   CONTINUE
11448  
11449 C...Full propagator dependence and flavour correlations for 2 gamma*/Z.
11450         IF(ISUB.EQ.22) THEN
11451           DO 330 I=3,5,2
11452             I1=IORD
11453             IF(I.EQ.5) I1=3-IORD
11454             DO 320 J1=1,2
11455               DO 310 J2=1,2
11456                 CORL(I/2,J1,J2)=COUP(1,1)**2*HGZ(I1,1)*COUP(I,1)**2/
11457      &          16D0+COUP(1,1)*COUP(1,J1+2)*HGZ(I1,2)*COUP(I,1)*
11458      &          COUP(I,J2+2)/4D0+COUP(1,J1+2)**2*HGZ(I1,3)*
11459      &          COUP(I,J2+2)**2
11460   310         CONTINUE
11461   320       CONTINUE
11462   330     CONTINUE
11463           COWT12=(CORL(1,1,1)+CORL(1,1,2))*(CORL(2,1,1)+CORL(2,1,2))+
11464      &    (CORL(1,2,1)+CORL(1,2,2))*(CORL(2,2,1)+CORL(2,2,2))
11465           COMX12=(CORL(1,1,1)+CORL(1,1,2)+CORL(1,2,1)+CORL(1,2,2))*
11466      &    (CORL(2,1,1)+CORL(2,1,2)+CORL(2,2,1)+CORL(2,2,2))
11467           IF(COWT12.LT.PYR(0)*COMX12) GOTO 160
11468         ENDIF
11469       ENDIF
11470  
11471 C...Select angular orientation type - Z'/W' only.
11472       MZPWP=0
11473       IF(ISUB.EQ.141) THEN
11474         IF(PYR(0).LT.PARU(130)) MZPWP=1
11475         IF(IP.EQ.2) THEN
11476           IF(IABS(K(IREF(2,1),2)).EQ.37) MZPWP=2
11477           IAKIR=IABS(K(IREF(2,2),2))
11478           IF(IAKIR.EQ.25.OR.IAKIR.EQ.35.OR.IAKIR.EQ.36) MZPWP=2
11479           IF(IAKIR.LE.20) MZPWP=2
11480         ENDIF
11481         IF(IP.GE.3) MZPWP=2
11482       ELSEIF(ISUB.EQ.142) THEN
11483         IF(PYR(0).LT.PARU(136)) MZPWP=1
11484         IF(IP.EQ.2) THEN
11485           IAKIR=IABS(K(IREF(2,2),2))
11486           IF(IAKIR.EQ.25.OR.IAKIR.EQ.35.OR.IAKIR.EQ.36) MZPWP=2
11487           IF(IAKIR.LE.20) MZPWP=2
11488         ENDIF
11489         IF(IP.GE.3) MZPWP=2
11490       ENDIF
11491  
11492 C...Select random angles (begin of weighting procedure).
11493   340 DO 350 JT=1,JTMAX
11494         IF(KDCY(JT).EQ.0) GOTO 350
11495         IF(JTMAX.EQ.1.AND.ISUB.NE.0) THEN
11496           CTHE(JT)=VINT(13)+(VINT(33)-VINT(13)+VINT(34)-VINT(14))*PYR(0)
11497           IF(CTHE(JT).GT.VINT(33)) CTHE(JT)=CTHE(JT)+VINT(14)-VINT(33)
11498           PHI(JT)=VINT(24)
11499         ELSE
11500           CTHE(JT)=2D0*PYR(0)-1D0
11501           PHI(JT)=PARU(2)*PYR(0)
11502         ENDIF
11503   350 CONTINUE
11504  
11505       IF(JTMAX.EQ.2.AND.MSTP(47).GE.1.AND.NINH.EQ.0) THEN
11506 C...Construct massless four-vectors.
11507         DO 370 I=N+1,N+4
11508           K(I,1)=1
11509           DO 360 J=1,5
11510             P(I,J)=0D0
11511 C            V(I,J)=0D0
11512   360     CONTINUE
11513   370   CONTINUE
11514         DO 380 JT=1,JTMAX
11515           IF(KDCY(JT).EQ.0) GOTO 380
11516           ID=IREF(IP,JT)
11517           P(N+2*JT-1,3)=0.5D0*P(ID,5)
11518           P(N+2*JT-1,4)=0.5D0*P(ID,5)
11519           P(N+2*JT,3)=-0.5D0*P(ID,5)
11520           P(N+2*JT,4)=0.5D0*P(ID,5)
11521           CALL PYROBO(N+2*JT-1,N+2*JT,ACOS(CTHE(JT)),PHI(JT),
11522      &    P(ID,1)/P(ID,4),P(ID,2)/P(ID,4),P(ID,3)/P(ID,4))
11523   380   CONTINUE
11524  
11525 C...Store incoming and outgoing momenta, with random rotation to
11526 C...avoid accidental zeroes in HA expressions.
11527         IF(ISUB.NE.0) THEN 
11528           DO 400 I=1,IMAX
11529             K(N+4+I,1)=1
11530             P(N+4+I,4)=SQRT(P(ILIN(I),1)**2+P(ILIN(I),2)**2+
11531      &      P(ILIN(I),3)**2+P(ILIN(I),5)**2)
11532             P(N+4+I,5)=P(ILIN(I),5)
11533             DO 390 J=1,3
11534               P(N+4+I,J)=P(ILIN(I),J)
11535   390       CONTINUE
11536   400     CONTINUE
11537   410     THERR=ACOS(2D0*PYR(0)-1D0)
11538           PHIRR=PARU(2)*PYR(0)
11539           CALL PYROBO(N+5,N+4+IMAX,THERR,PHIRR,0D0,0D0,0D0)
11540           DO 430 I=1,IMAX
11541             IF(P(N+4+I,1)**2+P(N+4+I,2)**2.LT.1D-4*P(N+4+I,4)**2) 
11542      &      GOTO 410
11543             DO 420 J=1,4
11544               PK(I,J)=P(N+4+I,J)
11545   420       CONTINUE
11546   430     CONTINUE
11547         ENDIF
11548  
11549 C...Calculate internal products.
11550         IF(ISUB.EQ.22.OR.ISUB.EQ.23.OR.ISUB.EQ.25.OR.ISUB.EQ.141.OR.
11551      &  ISUB.EQ.142) THEN
11552           DO 450 I1=IMIN,IMAX-1
11553             DO 440 I2=I1+1,IMAX
11554               HA(I1,I2)=SNGL(SQRT((PK(I1,4)-PK(I1,3))*(PK(I2,4)+
11555      &        PK(I2,3))/(1D-20+PK(I1,1)**2+PK(I1,2)**2)))*
11556      &        CMPLX(SNGL(PK(I1,1)),SNGL(PK(I1,2)))-
11557      &        SNGL(SQRT((PK(I1,4)+PK(I1,3))*(PK(I2,4)-PK(I2,3))/
11558      &        (1D-20+PK(I2,1)**2+PK(I2,2)**2)))*
11559      &        CMPLX(SNGL(PK(I2,1)),SNGL(PK(I2,2)))
11560               HC(I1,I2)=CONJG(HA(I1,I2))
11561               IF(I1.LE.2) HA(I1,I2)=CMPLX(0.,1.)*HA(I1,I2)
11562               IF(I1.LE.2) HC(I1,I2)=CMPLX(0.,1.)*HC(I1,I2)
11563               HA(I2,I1)=-HA(I1,I2)
11564               HC(I2,I1)=-HC(I1,I2)
11565   440       CONTINUE
11566   450     CONTINUE
11567         ENDIF
11568
11569 C...Calculate four-products.
11570         IF(ISUB.NE.0) THEN
11571           DO 470 I=1,2
11572             DO 460 J=1,4
11573               PK(I,J)=-PK(I,J)
11574   460       CONTINUE
11575   470     CONTINUE
11576           DO 490 I1=IMIN,IMAX-1
11577             DO 480 I2=I1+1,IMAX
11578               PKK(I1,I2)=2D0*(PK(I1,4)*PK(I2,4)-PK(I1,1)*PK(I2,1)-
11579      &        PK(I1,2)*PK(I2,2)-PK(I1,3)*PK(I2,3))
11580               PKK(I2,I1)=PKK(I1,I2)
11581   480       CONTINUE
11582   490     CONTINUE
11583         ENDIF
11584       ENDIF
11585  
11586       KFAGM=IABS(IREF(IP,7))
11587       IF(MSTP(47).LE.0.OR.NINH.NE.0) THEN
11588 C...Isotropic decay selected by user.
11589         WT=1D0
11590         WTMAX=1D0
11591  
11592       ELSEIF(JTMAX.EQ.3) THEN
11593 C...Isotropic decay when three mother particles.
11594         WT=1D0
11595         WTMAX=1D0
11596  
11597       ELSEIF(IT4.GE.1) THEN
11598 C... Isotropic decay t -> b + W etc for 4th generation q and l.
11599         WT=1D0
11600         WTMAX=1D0
11601  
11602       ELSEIF(IREF(IP,7).EQ.25.OR.IREF(IP,7).EQ.35.OR.
11603      &  IREF(IP,7).EQ.36) THEN
11604 C...Angular weight for h0 -> Z0 + Z0 or W+ + W- -> 4 quarks/leptons.
11605         IF(IP.EQ.1) WTMAX=SH**2
11606         IF(IP.GE.2) WTMAX=P(IREF(IP,8),5)**4
11607         KFA=IABS(K(IREF(IP,1),2))
11608         IF(KFA.EQ.23) THEN
11609           KFLF1A=IABS(KFL1(1))
11610           EF1=KCHG(KFLF1A,1)/3D0
11611           AF1=SIGN(1D0,EF1+0.1D0)
11612           VF1=AF1-4D0*EF1*XWV
11613           KFLF2A=IABS(KFL1(2))
11614           EF2=KCHG(KFLF2A,1)/3D0
11615           AF2=SIGN(1D0,EF2+0.1D0)
11616           VF2=AF2-4D0*EF2*XWV
11617           VA12AS=4D0*VF1*AF1*VF2*AF2/((VF1**2+AF1**2)*(VF2**2+AF2**2))
11618           WT=8D0*(1D0+VA12AS)*PKK(3,5)*PKK(4,6)+
11619      &    8D0*(1D0-VA12AS)*PKK(3,6)*PKK(4,5)
11620         ELSEIF(KFA.EQ.24) THEN
11621           WT=16D0*PKK(3,5)*PKK(4,6)
11622         ELSE
11623           WT=WTMAX
11624         ENDIF
11625  
11626       ELSEIF((KFAGM.EQ.6.OR.KFAGM.EQ.7.OR.KFAGM.EQ.8.OR.
11627      &  KFAGM.EQ.17.OR.KFAGM.EQ.18).AND.IABS(K(IREF(IP,1),2)).EQ.24)
11628      &  THEN
11629 C...Angular correlation in f -> f' + W -> f' + 2 quarks/leptons.
11630         I1=IREF(IP,8)
11631         IF(MOD(KFAGM,2).EQ.0) THEN
11632           I2=N+1
11633           I3=N+2
11634         ELSE
11635           I2=N+2
11636           I3=N+1
11637         ENDIF
11638         I4=IREF(IP,2)
11639         WT=(P(I1,4)*P(I2,4)-P(I1,1)*P(I2,1)-P(I1,2)*P(I2,2)-
11640      &  P(I1,3)*P(I2,3))*(P(I3,4)*P(I4,4)-P(I3,1)*P(I4,1)-
11641      &  P(I3,2)*P(I4,2)-P(I3,3)*P(I4,3))
11642         WTMAX=(P(I1,5)**4-P(IREF(IP,1),5)**4)/8D0
11643  
11644       ELSEIF(ISUB.EQ.1) THEN
11645 C...Angular weight for gamma*/Z0 -> 2 quarks/leptons.
11646         EI=KCHG(IABS(MINT(15)),1)/3D0
11647         AI=SIGN(1D0,EI+0.1D0)
11648         VI=AI-4D0*EI*XWV
11649         EF=KCHG(IABS(KFL1(1)),1)/3D0
11650         AF=SIGN(1D0,EF+0.1D0)
11651         VF=AF-4D0*EF*XWV
11652         RMF=MIN(1D0,4D0*PMAS(IABS(KFL1(1)),1)**2/SH)
11653         WT1=EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*EF*VF+
11654      &  (VI**2+AI**2)*VINT(114)*(VF**2+(1D0-RMF)*AF**2)
11655         WT2=RMF*(EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*EF*VF+
11656      &  (VI**2+AI**2)*VINT(114)*VF**2)
11657         WT3=SQRT(1D0-RMF)*(EI*AI*VINT(112)*EF*AF+
11658      &  4D0*VI*AI*VINT(114)*VF*AF)
11659         WT=WT1*(1D0+CTHE(1)**2)+WT2*(1D0-CTHE(1)**2)+
11660      &  2D0*WT3*CTHE(1)*ISIGN(1,MINT(15)*KFL1(1))
11661         WTMAX=2D0*(WT1+ABS(WT3))
11662  
11663       ELSEIF(ISUB.EQ.2) THEN
11664 C...Angular weight for W+/- -> 2 quarks/leptons.
11665         WT=(1D0+CTHE(1)*ISIGN(1,MINT(15)*KFL1(1)))**2
11666         WTMAX=4D0
11667  
11668       ELSEIF(ISUB.EQ.15.OR.ISUB.EQ.19) THEN
11669 C...Angular weight for f + fbar -> gluon/gamma + (gamma*/Z0) ->
11670 C...-> gluon/gamma + 2 quarks/leptons.
11671         CLILF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11672      &  COUP(1,1)*COUP(1,3)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,3)/4D0+
11673      &  COUP(1,3)**2*HGZ(JTZ,3)*COUP(3,3)**2
11674         CLIRF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11675      &  COUP(1,1)*COUP(1,3)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,4)/4D0+
11676      &  COUP(1,3)**2*HGZ(JTZ,3)*COUP(3,4)**2
11677         CRILF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11678      &  COUP(1,1)*COUP(1,4)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,3)/4D0+
11679      &  COUP(1,4)**2*HGZ(JTZ,3)*COUP(3,3)**2
11680         CRIRF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11681      &  COUP(1,1)*COUP(1,4)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,4)/4D0+
11682      &  COUP(1,4)**2*HGZ(JTZ,3)*COUP(3,4)**2
11683         WT=(CLILF+CRIRF)*(PKK(1,3)**2+PKK(2,4)**2)+
11684      &  (CLIRF+CRILF)*(PKK(1,4)**2+PKK(2,3)**2)
11685         WTMAX=(CLILF+CLIRF+CRILF+CRIRF)*
11686      &  ((PKK(1,3)+PKK(1,4))**2+(PKK(2,3)+PKK(2,4))**2)
11687  
11688       ELSEIF(ISUB.EQ.16.OR.ISUB.EQ.20) THEN
11689 C...Angular weight for f + fbar' -> gluon/gamma + W+/- ->
11690 C...-> gluon/gamma + 2 quarks/leptons.
11691         WT=PKK(1,3)**2+PKK(2,4)**2
11692         WTMAX=(PKK(1,3)+PKK(1,4))**2+(PKK(2,3)+PKK(2,4))**2
11693  
11694       ELSEIF(ISUB.EQ.22) THEN
11695 C...Angular weight for f + fbar -> Z0 + Z0 -> 4 quarks/leptons.
11696         S34=P(IREF(IP,IORD),5)**2
11697         S56=P(IREF(IP,3-IORD),5)**2
11698         TI=PKK(1,3)+PKK(1,4)+S34
11699         UI=PKK(1,5)+PKK(1,6)+S56
11700         TIR=REAL(TI)
11701         UIR=REAL(UI)
11702         FGK135=ABS(FGK(1,2,3,4,5,6)/TIR+FGK(1,2,5,6,3,4)/UIR)**2
11703         FGK145=ABS(FGK(1,2,4,3,5,6)/TIR+FGK(1,2,5,6,4,3)/UIR)**2
11704         FGK136=ABS(FGK(1,2,3,4,6,5)/TIR+FGK(1,2,6,5,3,4)/UIR)**2
11705         FGK146=ABS(FGK(1,2,4,3,6,5)/TIR+FGK(1,2,6,5,4,3)/UIR)**2
11706         FGK253=ABS(FGK(2,1,5,6,3,4)/TIR+FGK(2,1,3,4,5,6)/UIR)**2
11707         FGK263=ABS(FGK(2,1,6,5,3,4)/TIR+FGK(2,1,3,4,6,5)/UIR)**2
11708         FGK254=ABS(FGK(2,1,5,6,4,3)/TIR+FGK(2,1,4,3,5,6)/UIR)**2
11709         FGK264=ABS(FGK(2,1,6,5,4,3)/TIR+FGK(2,1,4,3,6,5)/UIR)**2
11710         WT=
11711      &  CORL(1,1,1)*CORL(2,1,1)*FGK135+CORL(1,1,2)*CORL(2,1,1)*FGK145+
11712      &  CORL(1,1,1)*CORL(2,1,2)*FGK136+CORL(1,1,2)*CORL(2,1,2)*FGK146+
11713      &  CORL(1,2,1)*CORL(2,2,1)*FGK253+CORL(1,2,2)*CORL(2,2,1)*FGK263+
11714      &  CORL(1,2,1)*CORL(2,2,2)*FGK254+CORL(1,2,2)*CORL(2,2,2)*FGK264
11715         WTMAX=16D0*((CORL(1,1,1)+CORL(1,1,2))*(CORL(2,1,1)+CORL(2,1,2))+
11716      &  (CORL(1,2,1)+CORL(1,2,2))*(CORL(2,2,1)+CORL(2,2,2)))*S34*S56*
11717      &  ((TI**2+UI**2+2D0*SH*(S34+S56))/(TI*UI)-S34*S56*(1D0/TI**2+
11718      &  1D0/UI**2))
11719  
11720       ELSEIF(ISUB.EQ.23) THEN
11721 C...Angular weight for f + fbar' -> Z0 + W+/- -> 4 quarks/leptons.
11722         D34=P(IREF(IP,IORD),5)**2
11723         D56=P(IREF(IP,3-IORD),5)**2
11724         DT=PKK(1,3)+PKK(1,4)+D34
11725         DU=PKK(1,5)+PKK(1,6)+D56
11726         FACBW=1D0/((SH-SQMW)**2+GMMW**2)
11727         CAWZ=COUP(2,3)/DT-2D0*XW1*COUP(1,2)*(SH-SQMW)*FACBW
11728         CBWZ=COUP(1,3)/DU+2D0*XW1*COUP(1,2)*(SH-SQMW)*FACBW
11729         FGK135=ABS(REAL(CAWZ)*FGK(1,2,3,4,5,6)+
11730      &  REAL(CBWZ)*FGK(1,2,5,6,3,4))
11731         FGK136=ABS(REAL(CAWZ)*FGK(1,2,3,4,6,5)+
11732      &  REAL(CBWZ)*FGK(1,2,6,5,3,4))
11733         WT=(COUP(5,3)*FGK135)**2+(COUP(5,4)*FGK136)**2
11734         WTMAX=4D0*D34*D56*(COUP(5,3)**2+COUP(5,4)**2)*(CAWZ**2*
11735      &  DIGK(DT,DU)+CBWZ**2*DIGK(DU,DT)+CAWZ*CBWZ*DJGK(DT,DU))
11736  
11737       ELSEIF(ISUB.EQ.24.OR.ISUB.EQ.171.OR.ISUB.EQ.176) THEN
11738 C...Angular weight for f + fbar -> Z0 + h0 -> 2 quarks/leptons + h0
11739 C...(or H0, or A0).
11740         WT=((COUP(1,3)*COUP(3,3))**2+(COUP(1,4)*COUP(3,4))**2)*
11741      &  PKK(1,3)*PKK(2,4)+((COUP(1,3)*COUP(3,4))**2+(COUP(1,4)*
11742      &  COUP(3,3))**2)*PKK(1,4)*PKK(2,3)
11743         WTMAX=(COUP(1,3)**2+COUP(1,4)**2)*(COUP(3,3)**2+COUP(3,4)**2)*
11744      &  (PKK(1,3)+PKK(1,4))*(PKK(2,3)+PKK(2,4))
11745  
11746       ELSEIF(ISUB.EQ.25) THEN
11747 C...Angular weight for f + fbar -> W+ + W- -> 4 quarks/leptons.
11748         D34=P(IREF(IP,IORD),5)**2
11749         D56=P(IREF(IP,3-IORD),5)**2
11750         DT=PKK(1,3)+PKK(1,4)+D34
11751         DU=PKK(1,5)+PKK(1,6)+D56
11752         FACBW=1D0/((SH-SQMZ)**2+SQMZ*PMAS(23,2)**2)
11753         CDWW=(COUP(1,3)*SQMZ*(SH-SQMZ)*FACBW+COUP(1,2))/SH
11754         CAWW=CDWW+0.5D0*(COUP(1,2)+1D0)/DT
11755         CBWW=CDWW+0.5D0*(COUP(1,2)-1D0)/DU
11756         CCWW=COUP(1,4)*SQMZ*(SH-SQMZ)*FACBW/SH
11757         FGK135=ABS(REAL(CAWW)*FGK(1,2,3,4,5,6)-
11758      &  REAL(CBWW)*FGK(1,2,5,6,3,4))
11759         FGK253=ABS(FGK(2,1,5,6,3,4)-FGK(2,1,3,4,5,6))
11760         WT=FGK135**2+(CCWW*FGK253)**2
11761         WTMAX=4D0*D34*D56*(CAWW**2*DIGK(DT,DU)+CBWW**2*DIGK(DU,DT)-CAWW*
11762      &  CBWW*DJGK(DT,DU)+CCWW**2*(DIGK(DT,DU)+DIGK(DU,DT)-DJGK(DT,DU)))
11763  
11764       ELSEIF(ISUB.EQ.26.OR.ISUB.EQ.172.OR.ISUB.EQ.177) THEN
11765 C...Angular weight for f + fbar' -> W+/- + h0 -> 2 quarks/leptons + h0
11766 C...(or H0, or A0).
11767         WT=PKK(1,3)*PKK(2,4)
11768         WTMAX=(PKK(1,3)+PKK(1,4))*(PKK(2,3)+PKK(2,4))
11769  
11770       ELSEIF(ISUB.EQ.30.OR.ISUB.EQ.35) THEN
11771 C...Angular weight for f + g/gamma -> f + (gamma*/Z0)
11772 C...-> f + 2 quarks/leptons.
11773         CLILF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11774      &  COUP(1,1)*COUP(1,3)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,3)/4D0+
11775      &  COUP(1,3)**2*HGZ(JTZ,3)*COUP(3,3)**2
11776         CLIRF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11777      &  COUP(1,1)*COUP(1,3)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,4)/4D0+
11778      &  COUP(1,3)**2*HGZ(JTZ,3)*COUP(3,4)**2
11779         CRILF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11780      &  COUP(1,1)*COUP(1,4)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,3)/4D0+
11781      &  COUP(1,4)**2*HGZ(JTZ,3)*COUP(3,3)**2
11782         CRIRF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11783      &  COUP(1,1)*COUP(1,4)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,4)/4D0+
11784      &  COUP(1,4)**2*HGZ(JTZ,3)*COUP(3,4)**2
11785         IF(K(ILIN(1),2).GT.0) WT=(CLILF+CRIRF)*(PKK(1,4)**2+
11786      &  PKK(3,5)**2)+(CLIRF+CRILF)*(PKK(1,3)**2+PKK(4,5)**2)
11787         IF(K(ILIN(1),2).LT.0) WT=(CLILF+CRIRF)*(PKK(1,3)**2+
11788      &  PKK(4,5)**2)+(CLIRF+CRILF)*(PKK(1,4)**2+PKK(3,5)**2)
11789         WTMAX=(CLILF+CLIRF+CRILF+CRIRF)*
11790      &  ((PKK(1,3)+PKK(1,4))**2+(PKK(3,5)+PKK(4,5))**2)
11791  
11792       ELSEIF(ISUB.EQ.31.OR.ISUB.EQ.36) THEN
11793 C...Angular weight for f + g/gamma -> f' + W+/- -> f' + 2 fermions.
11794         IF(K(ILIN(1),2).GT.0) WT=PKK(1,4)**2+PKK(3,5)**2
11795         IF(K(ILIN(1),2).LT.0) WT=PKK(1,3)**2+PKK(4,5)**2
11796         WTMAX=(PKK(1,3)+PKK(1,4))**2+(PKK(3,5)+PKK(4,5))**2
11797  
11798       ELSEIF(ISUB.EQ.71.OR.ISUB.EQ.72.OR.ISUB.EQ.73.OR.ISUB.EQ.76.OR.
11799      &  ISUB.EQ.77) THEN
11800 C...Angular weight for V_L1 + V_L2 -> V_L3 + V_L4 (V = Z/W).
11801         WT=16D0*PKK(3,5)*PKK(4,6)
11802         WTMAX=SH**2
11803  
11804       ELSEIF(ISUB.EQ.110) THEN
11805 C...Angular weight for f + fbar -> gamma + h0 -> gamma + X is isotropic.
11806         WT=1D0
11807         WTMAX=1D0
11808  
11809       ELSEIF(ISUB.EQ.141) THEN
11810         IF(IP.EQ.1.AND.IABS(KFL1(1)).LT.20) THEN
11811 C...Angular weight for f + fbar -> gamma*/Z0/Z'0 -> 2 quarks/leptons.
11812 C...Couplings of incoming flavour.
11813           KFAI=IABS(MINT(15))
11814           EI=KCHG(KFAI,1)/3D0
11815           AI=SIGN(1D0,EI+0.1D0)
11816           VI=AI-4D0*EI*XWV
11817           KFAIC=1
11818           IF(KFAI.LE.10.AND.MOD(KFAI,2).EQ.0) KFAIC=2
11819           IF(KFAI.GT.10.AND.MOD(KFAI,2).NE.0) KFAIC=3
11820           IF(KFAI.GT.10.AND.MOD(KFAI,2).EQ.0) KFAIC=4
11821           IF(KFAI.LE.2.OR.KFAI.EQ.11.OR.KFAI.EQ.12) THEN
11822             VPI=PARU(119+2*KFAIC)
11823             API=PARU(120+2*KFAIC)
11824           ELSEIF(KFAI.LE.4.OR.KFAI.EQ.13.OR.KFAI.EQ.14) THEN
11825             VPI=PARJ(178+2*KFAIC)
11826             API=PARJ(179+2*KFAIC)
11827           ELSE
11828             VPI=PARJ(186+2*KFAIC)
11829             API=PARJ(187+2*KFAIC)
11830           ENDIF
11831 C...Couplings of final flavour.
11832           KFAF=IABS(KFL1(1))
11833           EF=KCHG(KFAF,1)/3D0
11834           AF=SIGN(1D0,EF+0.1D0)
11835           VF=AF-4D0*EF*XWV
11836           KFAFC=1
11837           IF(KFAF.LE.10.AND.MOD(KFAF,2).EQ.0) KFAFC=2
11838           IF(KFAF.GT.10.AND.MOD(KFAF,2).NE.0) KFAFC=3
11839           IF(KFAF.GT.10.AND.MOD(KFAF,2).EQ.0) KFAFC=4
11840           IF(KFAF.LE.2.OR.KFAF.EQ.11.OR.KFAF.EQ.12) THEN
11841             VPF=PARU(119+2*KFAFC)
11842             APF=PARU(120+2*KFAFC)
11843           ELSEIF(KFAF.LE.4.OR.KFAF.EQ.13.OR.KFAF.EQ.14) THEN
11844             VPF=PARJ(178+2*KFAFC)
11845             APF=PARJ(179+2*KFAFC)
11846           ELSE
11847             VPF=PARJ(186+2*KFAFC)
11848             APF=PARJ(187+2*KFAFC)
11849           ENDIF
11850 C...Asymmetry and weight.
11851           ASYM=2D0*(EI*AI*VINT(112)*EF*AF+EI*API*VINT(113)*EF*APF+
11852      &    4D0*VI*AI*VINT(114)*VF*AF+(VI*API+VPI*AI)*VINT(115)*
11853      &    (VF*APF+VPF*AF)+4D0*VPI*API*VINT(116)*VPF*APF)/
11854      &    (EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*EF*VF+
11855      &    EI*VPI*VINT(113)*EF*VPF+(VI**2+AI**2)*VINT(114)*
11856      &    (VF**2+AF**2)+(VI*VPI+AI*API)*VINT(115)*(VF*VPF+AF*APF)+
11857      &    (VPI**2+API**2)*VINT(116)*(VPF**2+APF**2))
11858           WT=1D0+ASYM*CTHE(1)*ISIGN(1,MINT(15)*KFL1(1))+CTHE(1)**2
11859           WTMAX=2D0+ABS(ASYM)
11860         ELSEIF(IP.EQ.1.AND.IABS(KFL1(1)).EQ.24) THEN
11861 C...Angular weight for f + fbar -> Z' -> W+ + W-.
11862           RM1=P(NSD(1)+1,5)**2/SH
11863           RM2=P(NSD(1)+2,5)**2/SH
11864           CCOS2=-(1D0/16D0)*((1D0-RM1-RM2)**2-4D0*RM1*RM2)*
11865      &    (1D0-2D0*RM1-2D0*RM2+RM1**2+RM2**2+10D0*RM1*RM2)
11866           CFLAT=-CCOS2+0.5D0*(RM1+RM2)*(1D0-2D0*RM1-2D0*RM2+
11867      &    (RM2-RM1)**2)
11868           WT=CFLAT+CCOS2*CTHE(1)**2
11869           WTMAX=CFLAT+MAX(0D0,CCOS2)
11870         ELSEIF(IP.EQ.1.AND.(KFL1(1).EQ.25.OR.KFL1(1).EQ.35.OR.
11871      &    IABS(KFL1(1)).EQ.37)) THEN
11872 C...Angular weight for f + fbar -> Z' -> h0 + A0, H0 + A0, H+ + H-.
11873           WT=1D0-CTHE(1)**2
11874           WTMAX=1D0
11875         ELSEIF(IP.EQ.1.AND.KFL2(1).EQ.25) THEN
11876 C...Angular weight for f + fbar -> Z' -> Z0 + h0.
11877           RM1=P(NSD(1)+1,5)**2/SH
11878           RM2=P(NSD(1)+2,5)**2/SH
11879           FLAM2=MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2)
11880           WT=1D0+FLAM2*(1D0-CTHE(1)**2)/(8D0*RM1)
11881           WTMAX=1D0+FLAM2/(8D0*RM1)
11882         ELSEIF(MZPWP.EQ.0) THEN
11883 C...Angular weight for f + fbar -> Z' -> W+ + W- -> 4 quarks/leptons
11884 C...(W:s like if intermediate Z).
11885           D34=P(IREF(IP,IORD),5)**2
11886           D56=P(IREF(IP,3-IORD),5)**2
11887           DT=PKK(1,3)+PKK(1,4)+D34
11888           DU=PKK(1,5)+PKK(1,6)+D56
11889           FGK135=ABS(FGK(1,2,3,4,5,6)-FGK(1,2,5,6,3,4))
11890           FGK253=ABS(FGK(2,1,5,6,3,4)-FGK(2,1,3,4,5,6))
11891           WT=(COUP(1,3)*FGK135)**2+(COUP(1,4)*FGK253)**2
11892           WTMAX=4D0*D34*D56*(COUP(1,3)**2+COUP(1,4)**2)*
11893      &    (DIGK(DT,DU)+DIGK(DU,DT)-DJGK(DT,DU))
11894         ELSEIF(MZPWP.EQ.1) THEN
11895 C...Angular weight for f + fbar -> Z' -> W+ + W- -> 4 quarks/leptons
11896 C...(W:s approximately longitudinal, like if intermediate H).
11897           WT=16D0*PKK(3,5)*PKK(4,6)
11898           WTMAX=SH**2
11899         ELSE
11900 C...Angular weight for f + fbar -> Z' -> H+ + H-, Z0 + h0, h0 + A0,
11901 C...H0 + A0 -> 4 quarks/leptons, t + tbar -> b + W+ + bbar + W- .
11902           WT=1D0
11903           WTMAX=1D0
11904         ENDIF
11905  
11906       ELSEIF(ISUB.EQ.142) THEN
11907         IF(IP.EQ.1.AND.IABS(KFL1(1)).LT.20) THEN
11908 C...Angular weight for f + fbar' -> W'+/- -> 2 quarks/leptons.
11909           KFAI=IABS(MINT(15))
11910           KFAIC=1
11911           IF(KFAI.GT.10) KFAIC=2
11912           VI=PARU(129+2*KFAIC)
11913           AI=PARU(130+2*KFAIC)
11914           KFAF=IABS(KFL1(1))
11915           KFAFC=1
11916           IF(KFAF.GT.10) KFAFC=2
11917           VF=PARU(129+2*KFAFC)
11918           AF=PARU(130+2*KFAFC)
11919           ASYM=8D0*VI*AI*VF*AF/((VI**2+AI**2)*(VF**2+AF**2))
11920           WT=1D0+ASYM*CTHE(1)*ISIGN(1,MINT(15)*KFL1(1))+CTHE(1)**2
11921           WTMAX=2D0+ABS(ASYM)
11922         ELSEIF(IP.EQ.1.AND.IABS(KFL2(1)).EQ.23) THEN
11923 C...Angular weight for f + fbar' -> W'+/- -> W+/- + Z0.
11924           RM1=P(NSD(1)+1,5)**2/SH
11925           RM2=P(NSD(1)+2,5)**2/SH
11926           CCOS2=-(1D0/16D0)*((1D0-RM1-RM2)**2-4D0*RM1*RM2)*
11927      &    (1D0-2D0*RM1-2D0*RM2+RM1**2+RM2**2+10D0*RM1*RM2)
11928           CFLAT=-CCOS2+0.5D0*(RM1+RM2)*(1D0-2D0*RM1-2D0*RM2+
11929      &    (RM2-RM1)**2)
11930           WT=CFLAT+CCOS2*CTHE(1)**2
11931           WTMAX=CFLAT+MAX(0D0,CCOS2)
11932         ELSEIF(IP.EQ.1.AND.KFL2(1).EQ.25) THEN
11933 C...Angular weight for f + fbar -> W'+/- -> W+/- + h0.
11934           RM1=P(NSD(1)+1,5)**2/SH
11935           RM2=P(NSD(1)+2,5)**2/SH
11936           FLAM2=MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2)
11937           WT=1D0+FLAM2*(1D0-CTHE(1)**2)/(8D0*RM1)
11938           WTMAX=1D0+FLAM2/(8D0*RM1)
11939         ELSEIF(MZPWP.EQ.0) THEN
11940 C...Angular weight for f + fbar' -> W' -> W + Z0 -> 4 quarks/leptons
11941 C...(W/Z like if intermediate W).
11942           D34=P(IREF(IP,IORD),5)**2
11943           D56=P(IREF(IP,3-IORD),5)**2
11944           DT=PKK(1,3)+PKK(1,4)+D34
11945           DU=PKK(1,5)+PKK(1,6)+D56
11946           FGK135=ABS(FGK(1,2,3,4,5,6)-FGK(1,2,5,6,3,4))
11947           FGK136=ABS(FGK(1,2,3,4,6,5)-FGK(1,2,6,5,3,4))
11948           WT=(COUP(5,3)*FGK135)**2+(COUP(5,4)*FGK136)**2
11949           WTMAX=4D0*D34*D56*(COUP(5,3)**2+COUP(5,4)**2)*
11950      &    (DIGK(DT,DU)+DIGK(DU,DT)-DJGK(DT,DU))
11951         ELSEIF(MZPWP.EQ.1) THEN
11952 C...Angular weight for f + fbar' -> W' -> W + Z0 -> 4 quarks/leptons
11953 C...(W/Z approximately longitudinal, like if intermediate H).
11954           WT=16D0*PKK(3,5)*PKK(4,6)
11955           WTMAX=SH**2
11956         ELSE
11957 C...Angular weight for f + fbar -> W' -> W + h0 -> whatever, 
11958 C...t + bbar -> t + W + bbar. 
11959           WT=1D0
11960           WTMAX=1D0
11961         ENDIF
11962  
11963       ELSEIF(ISUB.EQ.145.OR.ISUB.EQ.162.OR.ISUB.EQ.163.OR.ISUB.EQ.164)
11964      &  THEN
11965 C...Isotropic decay of leptoquarks (assumed spin 0).
11966         WT=1D0
11967         WTMAX=1D0
11968  
11969       ELSEIF(ISUB.GE.146.AND.ISUB.LE.148) THEN
11970 C...Decays of (spin 1/2) q*/e* -> q/e + (g,gamma) or (Z0,W+-).
11971         SIDE=1D0
11972         IF(MINT(16).EQ.21.OR.MINT(16).EQ.22) SIDE=-1D0
11973         IF(IP.EQ.1.AND.(KFL1(1).EQ.21.OR.KFL1(1).EQ.22)) THEN
11974           WT=1D0+SIDE*CTHE(1)
11975           WTMAX=2D0
11976         ELSEIF(IP.EQ.1) THEN
11977           RM1=P(NSD(1)+1,5)**2/SH
11978           WT=1D0+SIDE*CTHE(1)*(1D0-0.5D0*RM1)/(1D0+0.5D0*RM1)
11979           WTMAX=1D0+(1D0-0.5D0*RM1)/(1D0+0.5D0*RM1)
11980         ELSE
11981 C...W/Z decay assumed isotropic, since not known.
11982           WT=1D0
11983           WTMAX=1D0
11984         ENDIF
11985  
11986       ELSEIF(ISUB.EQ.149) THEN
11987 C...Isotropic decay of techni-eta.
11988         WT=1D0
11989         WTMAX=1D0
11990  
11991       ELSEIF(ISUB.EQ.191) THEN
11992         IF(IP.EQ.1.AND.IABS(KFL1(1)).GT.21) THEN
11993 C...Angular weight for f + fbar -> rho_tech0 -> W+ W-,
11994 C...W+ pi_tech-, pi_tech+ W- or pi_tech+ pi_tech-.
11995           WT=1D0-CTHE(1)**2
11996           WTMAX=1D0
11997         ELSEIF(IP.EQ.1) THEN
11998 C...Angular weight for f + fbar -> rho_tech0 -> f fbar.
11999           CTHESG=CTHE(1)*ISIGN(1,MINT(15))
12000           XWRHT=(1D0-2D0*XW)/(4D0*XW*(1D0-XW))
12001           BWZR=XWRHT*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
12002           BWZI=XWRHT*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
12003           KFAI=IABS(MINT(15))
12004           EI=KCHG(KFAI,1)/3D0
12005           AI=SIGN(1D0,EI+0.1D0)
12006           VI=AI-4D0*EI*XWV
12007           VALI=0.5D0*(VI+AI)
12008           VARI=0.5D0*(VI-AI)
12009           ALEFTI=(EI+VALI*BWZR)**2+(VALI*BWZI)**2
12010           ARIGHI=(EI+VARI*BWZR)**2+(VARI*BWZI)**2
12011           KFAF=IABS(KFL1(1))
12012           EF=KCHG(KFAF,1)/3D0
12013           AF=SIGN(1D0,EF+0.1D0)
12014           VF=AF-4D0*EF*XWV
12015           VALF=0.5D0*(VF+AF)
12016           VARF=0.5D0*(VF-AF)
12017           ALEFTF=(EF+VALF*BWZR)**2+(VALF*BWZI)**2
12018           ARIGHF=(EF+VARF*BWZR)**2+(VARF*BWZI)**2
12019           ASAME=ALEFTI*ALEFTF+ARIGHI*ARIGHF
12020           AFLIP=ALEFTI*ARIGHF+ARIGHI*ALEFTF
12021           WT=ASAME*(1D0+CTHESG)**2+AFLIP*(1D0-CTHESG)**2
12022           WTMAX=4D0*MAX(ASAME,AFLIP)
12023         ELSE
12024 C...Isotropic decay of W/pi_tech produced in rho_tech decay.
12025           WT=1D0
12026           WTMAX=1D0
12027         ENDIF
12028  
12029       ELSEIF(ISUB.EQ.192) THEN
12030         IF(IP.EQ.1.AND.IABS(KFL1(1)).GT.21) THEN
12031 C...Angular weight for f + fbar' -> rho_tech+ -> W+ Z0,
12032 C...W+ pi_tech0, pi_tech+ Z0 or pi_tech+ pi_tech0.
12033           WT=1D0-CTHE(1)**2
12034           WTMAX=1D0
12035         ELSEIF(IP.EQ.1) THEN
12036 C...Angular weight for f + fbar' -> rho_tech+ -> f fbar'.
12037           CTHESG=CTHE(1)*ISIGN(1,MINT(15))
12038           WT=(1D0+CTHESG)**2
12039           WTMAX=4D0
12040         ELSE
12041 C...Isotropic decay of W/Z/pi_tech produced in rho_tech+ decay.
12042           WT=1D0
12043           WTMAX=1D0
12044         ENDIF
12045  
12046       ELSEIF(ISUB.EQ.193) THEN
12047         IF(IP.EQ.1.AND.IABS(KFL1(1)).GT.21) THEN
12048 C...Angular weight for f + fbar -> omega_tech0 ->
12049 C...gamma pi_tech0 or Z0 pi_tech0.
12050           WT=1D0+CTHE(1)**2
12051           WTMAX=2D0
12052         ELSEIF(IP.EQ.1) THEN
12053 C...Angular weight for f + fbar -> omega_tech0 -> f fbar.
12054           CTHESG=CTHE(1)*ISIGN(1,MINT(15))
12055           BWZR=(0.5D0/(1D0-XW))*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
12056           BWZI=(0.5D0/(1D0-XW))*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
12057           KFAI=IABS(MINT(15))
12058           EI=KCHG(KFAI,1)/3D0
12059           AI=SIGN(1D0,EI+0.1D0)
12060           VI=AI-4D0*EI*XWV
12061           VALI=0.5D0*(VI+AI)
12062           VARI=0.5D0*(VI-AI)
12063           BLEFTI=(EI-VALI*BWZR)**2+(VALI*BWZI)**2
12064           BRIGHI=(EI-VARI*BWZR)**2+(VARI*BWZI)**2
12065           KFAF=IABS(KFL1(1))
12066           EF=KCHG(KFAF,1)/3D0
12067           AF=SIGN(1D0,EF+0.1D0)
12068           VF=AF-4D0*EF*XWV
12069           VALF=0.5D0*(VF+AF)
12070           VARF=0.5D0*(VF-AF)
12071           BLEFTF=(EF-VALF*BWZR)**2+(VALF*BWZI)**2
12072           BRIGHF=(EF-VARF*BWZR)**2+(VARF*BWZI)**2
12073           BSAME=BLEFTI*BLEFTF+BRIGHI*BRIGHF
12074           BFLIP=BLEFTI*BRIGHF+BRIGHI*BLEFTF
12075           WT=BSAME*(1D0+CTHESG)**2+BFLIP*(1D0-CTHESG)**2
12076           WTMAX=4D0*MAX(BSAME,BFLIP)
12077         ELSE
12078 C...Isotropic decay of Z/pi_tech produced in omega_tech decay.
12079           WT=1D0
12080           WTMAX=1D0
12081         ENDIF
12082  
12083 C...Obtain correct angular distribution by rejection techniques.
12084       ELSE
12085         WT=1D0
12086         WTMAX=1D0
12087       ENDIF
12088       IF(WT.LT.PYR(0)*WTMAX) GOTO 340
12089  
12090 C...Construct massive four-vectors using angles chosen.
12091   500 DO 600 JT=1,JTMAX
12092         IF(KDCY(JT).EQ.0) GOTO 600
12093         ID=IREF(IP,JT)
12094         DO 510 J=1,5
12095           DPMO(J)=P(ID,J)
12096   510   CONTINUE
12097         DPMO(4)=SQRT(DPMO(1)**2+DPMO(2)**2+DPMO(3)**2+DPMO(5)**2)
12098 CMRENNA++
12099         IF(KFL3(JT).EQ.0) THEN
12100           CALL PYROBO(NSD(JT)+1,NSD(JT)+2,ACOS(CTHE(JT)),PHI(JT),
12101      &    DPMO(1)/DPMO(4),DPMO(2)/DPMO(4),DPMO(3)/DPMO(4))
12102           N0=NSD(JT)+2
12103         ELSE
12104           CALL PYROBO(NSD(JT)+1,NSD(JT)+3,ACOS(CTHE(JT)),PHI(JT),
12105      &    DPMO(1)/DPMO(4),DPMO(2)/DPMO(4),DPMO(3)/DPMO(4))
12106           N0=NSD(JT)+3
12107         ENDIF
12108  
12109         DO 520 J=1,4
12110           VDCY(J)=V(ID,J)+V(ID,5)*P(ID,J)/P(ID,5)
12111   520   CONTINUE
12112 C...Fill in position of decay vertex.
12113         DO 540 I=NSD(JT)+1,N0
12114           DO 530 J=1,4
12115             V(I,J)=VDCY(J)
12116   530     CONTINUE
12117           V(I,5)=0D0
12118   540   CONTINUE
12119 CMRENNA--
12120  
12121 C...Mark decayed resonances; trace history.
12122         K(ID,1)=K(ID,1)+10
12123         KFA=IABS(K(ID,2))
12124         KCA=PYCOMP(KFA)
12125         IF(KCQM(JT).NE.0) THEN
12126 C...Do not kill colour flow through coloured resonance!
12127         ELSE
12128           K(ID,4)=NSD(JT)+1
12129           K(ID,5)=NSD(JT)+2
12130           IF(KFL3(JT).NE.0) K(ID,5)=NSD(JT)+3
12131         ENDIF
12132  
12133 C...Add documentation lines.
12134         IF(ISUB.NE.0) THEN
12135           IDOC=MINT(83)+MINT(4)
12136 CMRENNA+++
12137           IHI=NSD(JT)+2
12138           IF(KFL3(JT).NE.0) IHI=IHI+1
12139           DO 560 I=NSD(JT)+1,IHI
12140 CMRENNA---
12141             I1=MINT(83)+MINT(4)+1
12142             K(I,3)=I1
12143             IF(MSTP(128).GE.1) K(I,3)=ID
12144             IF(MSTP(128).LE.1.AND.MINT(4).LT.MSTP(126)) THEN
12145               MINT(4)=MINT(4)+1
12146               K(I1,1)=21
12147               K(I1,2)=K(I,2)
12148               K(I1,3)=IREF(IP,JT+3)
12149               DO 550 J=1,5
12150                 P(I1,J)=P(I,J)
12151   550         CONTINUE
12152             ENDIF
12153   560     CONTINUE
12154         ELSE
12155           K(NSD(JT)+1,3)=ID
12156           K(NSD(JT)+2,3)=ID
12157           IF(KFL3(JT).NE.0) K(NSD(JT)+3,3)=ID
12158         ENDIF
12159  
12160 C...Do showering if any of the two/three products can shower.
12161         NSHBEF=N
12162         IF(MSTP(71).GE.1) THEN
12163           ISHOW1=0
12164           KFL1A=IABS(KFL1(JT))
12165           IF(KFL1A.LE.22) ISHOW1=1
12166           ISHOW2=0
12167           KFL2A=IABS(KFL2(JT))
12168           IF(KFL2A.LE.22) ISHOW2=1
12169           ISHOW3=0
12170           IF(KFL3(JT).NE.0) THEN
12171             KFL3A=IABS(KFL3(JT))
12172             IF(KFL3A.LE.22) ISHOW3=1
12173           ENDIF
12174           IF(ISHOW1.EQ.0.AND.ISHOW2.EQ.0.AND.ISHOW3.EQ.0) THEN
12175           ELSEIF(KFL3(JT).EQ.0) THEN
12176             CALL PYSHOW(NSD(JT)+1,NSD(JT)+2,P(ID,5))
12177           ELSE
12178             NSD1=NSD(JT)+1
12179             NSD2=NSD(JT)+2
12180             IF(ISHOW1.EQ.0.AND.ISHOW3.NE.0) THEN
12181               NSD1=NSD(JT)+3
12182             ELSEIF(ISHOW2.EQ.0.AND.ISHOW3.NE.0) THEN
12183               NSD2=NSD(JT)+3
12184             ENDIF
12185             PMSHOW=SQRT(MAX(0D0,(P(NSD1,4)+P(NSD2,4))**2-
12186      &      (P(NSD1,1)+P(NSD2,1))**2-(P(NSD1,2)+P(NSD2,2))**2-
12187      &      (P(NSD1,3)+P(NSD2,3))**2))
12188             CALL PYSHOW(NSD1,NSD2,PMSHOW)
12189           ENDIF
12190         ENDIF
12191         NSHAFT=N
12192         IF(JT.EQ.1) NAFT1=N
12193  
12194 C...Check if decay products moved by shower.
12195         NSD1=NSD(JT)+1
12196         NSD2=NSD(JT)+2
12197         NSD3=NSD(JT)+3
12198         IF(NSHAFT.GT.NSHBEF) THEN
12199           IF(K(NSD1,1).GT.10) THEN
12200             DO 570 I=NSHBEF+1,NSHAFT
12201               IF(K(I,1).LT.10.AND.K(I,2).EQ.K(NSD1,2)) NSD1=I
12202   570       CONTINUE
12203           ENDIF
12204           IF(K(NSD2,1).GT.10) THEN
12205             DO 580 I=NSHBEF+1,NSHAFT
12206               IF(K(I,1).LT.10.AND.K(I,2).EQ.K(NSD2,2).AND.
12207      &        I.NE.NSD1) NSD2=I
12208   580       CONTINUE
12209           ENDIF
12210           IF(KFL3(JT).NE.0.AND.K(NSD3,1).GT.10) THEN
12211             DO 590 I=NSHBEF+1,NSHAFT
12212               IF(K(I,1).LT.10.AND.K(I,2).EQ.K(NSD3,2).AND.
12213      &        I.NE.NSD1.AND.I.NE.NSD2) NSD3=I
12214   590       CONTINUE
12215           ENDIF
12216         ENDIF
12217  
12218 C...Store decay products for further treatment.
12219         NP=NP+1
12220         IREF(NP,1)=NSD1
12221         IREF(NP,2)=NSD2
12222         IREF(NP,3)=0
12223         IF(KFL3(JT).NE.0) IREF(NP,3)=NSD3
12224         IREF(NP,4)=IDOC+1
12225         IREF(NP,5)=IDOC+2
12226         IREF(NP,6)=0
12227         IF(KFL3(JT).NE.0) IREF(NP,6)=IDOC+3
12228         IREF(NP,7)=K(IREF(IP,JT),2)
12229         IREF(NP,8)=IREF(IP,JT)
12230   600 CONTINUE
12231  
12232 C...Fill information for 2 -> 1 -> 2.
12233   610 IF(JTMAX.EQ.1.AND.KDCY(1).NE.0.AND.ISUB.NE.0) THEN
12234         MINT(7)=MINT(83)+6+2*ISET(ISUB)
12235         MINT(8)=MINT(83)+7+2*ISET(ISUB)
12236         MINT(25)=KFL1(1)
12237         MINT(26)=KFL2(1)
12238         VINT(23)=CTHE(1)
12239         RM3=P(N-1,5)**2/SH
12240         RM4=P(N,5)**2/SH
12241         BE34=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4))
12242         VINT(45)=-0.5D0*SH*(1D0-RM3-RM4-BE34*CTHE(1))
12243         VINT(46)=-0.5D0*SH*(1D0-RM3-RM4+BE34*CTHE(1))
12244         VINT(48)=0.25D0*SH*BE34**2*MAX(0D0,1D0-CTHE(1)**2)
12245         VINT(47)=SQRT(VINT(48))
12246       ENDIF
12247  
12248 C...Possibility of colour rearrangement in W+W- events.
12249       IF((ISUB.EQ.25.OR.ISUB.EQ.22).AND.MSTP(115).GE.1) THEN
12250         IAKF1=IABS(KFL1(1))
12251         IAKF2=IABS(KFL1(2))
12252         IAKF3=IABS(KFL2(1))
12253         IAKF4=IABS(KFL2(2))
12254         IF(MIN(IAKF1,IAKF2,IAKF3,IAKF4).GE.1.AND.
12255      &  MAX(IAKF1,IAKF2,IAKF3,IAKF4).LE.5) CALL
12256      &  PYRECO(IREF(1,1),IREF(1,2),NSD(1),NAFT1)
12257       ENDIF
12258  
12259 C...Loop back if needed.
12260   620 IF(IP.LT.NP) GOTO 150
12261  
12262       RETURN
12263       END
12264  
12265 C*********************************************************************
12266  
12267 C...PYMULT
12268 C...Initializes treatment of multiple interactions, selects kinematics
12269 C...of hardest interaction if low-pT physics included in run, and
12270 C...generates all non-hardest interactions.
12271  
12272       SUBROUTINE PYMULT(MMUL)
12273  
12274 C...Double precision and integer declarations.
12275       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
12276       IMPLICIT INTEGER(I-N)
12277       INTEGER PYK,PYCHGE,PYCOMP
12278 C...Commonblocks.
12279       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
12280       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
12281       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
12282       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
12283       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
12284       COMMON/PYINT1/MINT(400),VINT(400)
12285       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
12286       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
12287       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
12288       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
12289       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/,
12290      &/PYINT2/,/PYINT3/,/PYINT5/,/PYINT7/
12291 C...Local arrays and saved variables.
12292       DIMENSION NMUL(20),SIGM(20),KSTR(500,2),VINTSV(80)
12293       SAVE XT2,XT2FAC,XC2,XTS,IRBIN,RBIN,NMUL,SIGM
12294  
12295 C...Initialization of multiple interaction treatment.
12296       IF(MMUL.EQ.1) THEN
12297         IF(MSTP(122).GE.1) WRITE(MSTU(11),5000) MSTP(82)
12298         ISUB=96
12299         MINT(1)=96
12300         VINT(63)=0D0
12301         VINT(64)=0D0
12302         VINT(143)=1D0
12303         VINT(144)=1D0
12304  
12305 C...Loop over phase space points: xT2 choice in 20 bins.
12306   100   SIGSUM=0D0
12307         DO 120 IXT2=1,20
12308           NMUL(IXT2)=MSTP(83)
12309           SIGM(IXT2)=0D0
12310           DO 110 ITRY=1,MSTP(83)
12311             RSCA=0.05D0*((21-IXT2)-PYR(0))
12312             XT2=VINT(149)*(1D0+VINT(149))/(VINT(149)+RSCA)-VINT(149)
12313             XT2=MAX(0.01D0*VINT(149),XT2)
12314             VINT(25)=XT2
12315  
12316 C...Choose tau and y*. Calculate cos(theta-hat).
12317             IF(PYR(0).LE.COEF(ISUB,1)) THEN
12318               TAUT=(2D0*(1D0+SQRT(1D0-XT2))/XT2-1D0)**PYR(0)
12319               TAU=XT2*(1D0+TAUT)**2/(4D0*TAUT)
12320             ELSE
12321               TAU=XT2*(1D0+TAN(PYR(0)*ATAN(SQRT(1D0/XT2-1D0)))**2)
12322             ENDIF
12323             VINT(21)=TAU
12324             CALL PYKLIM(2)
12325             RYST=PYR(0)
12326             MYST=1
12327             IF(RYST.GT.COEF(ISUB,8)) MYST=2
12328             IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
12329             CALL PYKMAP(2,MYST,PYR(0))
12330             VINT(23)=SQRT(MAX(0D0,1D0-XT2/TAU))*(-1)**INT(1.5D0+PYR(0))
12331  
12332 C...Calculate differential cross-section.
12333             VINT(71)=0.5D0*VINT(1)*SQRT(XT2)
12334             CALL PYSIGH(NCHN,SIGS)
12335             SIGM(IXT2)=SIGM(IXT2)+SIGS
12336   110     CONTINUE
12337           SIGSUM=SIGSUM+SIGM(IXT2)
12338   120   CONTINUE
12339         SIGSUM=SIGSUM/(20D0*MSTP(83))
12340  
12341 C...Reject result if sigma(parton-parton) is smaller than hadronic one.
12342         IF(SIGSUM.LT.1.1D0*SIGT(0,0,5)) THEN
12343           IF(MSTP(122).GE.1) WRITE(MSTU(11),5100) 
12344      &    PARP(82)*(VINT(1)/PARP(89))**PARP(90),SIGSUM
12345           PARP(82)=0.9D0*PARP(82)
12346           VINT(149)=4D0*(PARP(82)*(VINT(1)/PARP(89))**PARP(90))**2/
12347      &    VINT(2)
12348           GOTO 100
12349         ENDIF
12350         IF(MSTP(122).GE.1) WRITE(MSTU(11),5200) 
12351      &  PARP(82)*(VINT(1)/PARP(89))**PARP(90), SIGSUM
12352  
12353 C...Start iteration to find k factor.
12354         YKE=SIGSUM/MAX(1D-10,SIGT(0,0,5))
12355         SO=0.5D0
12356         XI=0D0
12357         YI=0D0
12358         XF=0D0
12359         YF=0D0
12360         XK=0.5D0
12361         IIT=0
12362   130   IF(IIT.EQ.0) THEN
12363           XK=2D0*XK
12364         ELSEIF(IIT.EQ.1) THEN
12365           XK=0.5D0*XK
12366         ELSE
12367           XK=XI+(YKE-YI)*(XF-XI)/(YF-YI)
12368         ENDIF
12369  
12370 C...Evaluate overlap integrals.
12371         IF(MSTP(82).EQ.2) THEN
12372           SP=0.5D0*PARU(1)*(1D0-EXP(-XK))
12373           SOP=SP/PARU(1)
12374         ELSE
12375           IF(MSTP(82).EQ.3) DELTAB=0.02D0
12376           IF(MSTP(82).EQ.4) DELTAB=MIN(0.01D0,0.05D0*PARP(84))
12377           SP=0D0
12378           SOP=0D0
12379           B=-0.5D0*DELTAB
12380   140     B=B+DELTAB
12381           IF(MSTP(82).EQ.3) THEN
12382             OV=EXP(-B**2)/PARU(2)
12383           ELSE
12384             CQ2=PARP(84)**2
12385             OV=((1D0-PARP(83))**2*EXP(-MIN(50D0,B**2))+
12386      &      2D0*PARP(83)*(1D0-PARP(83))*2D0/(1D0+CQ2)*
12387      &      EXP(-MIN(50D0,B**2*2D0/(1D0+CQ2)))+
12388      &      PARP(83)**2/CQ2*EXP(-MIN(50D0,B**2/CQ2)))/PARU(2)
12389           ENDIF
12390           PACC=1D0-EXP(-MIN(50D0,PARU(1)*XK*OV))
12391           SP=SP+PARU(2)*B*DELTAB*PACC
12392           SOP=SOP+PARU(2)*B*DELTAB*OV*PACC
12393           IF(B.LT.1D0.OR.B*PACC.GT.1D-6) GOTO 140
12394         ENDIF
12395         YK=PARU(1)*XK*SO/SP
12396  
12397 C...Continue iteration until convergence.
12398         IF(YK.LT.YKE) THEN
12399           XI=XK
12400           YI=YK
12401           IF(IIT.EQ.1) IIT=2
12402         ELSE
12403           XF=XK
12404           YF=YK
12405           IF(IIT.EQ.0) IIT=1
12406         ENDIF
12407         IF(ABS(YK-YKE).GE.1D-5*YKE) GOTO 130
12408  
12409 C...Store some results for subsequent use.
12410         VINT(145)=SIGSUM
12411         VINT(146)=SOP/SO
12412         VINT(147)=SOP/SP
12413  
12414 C...Initialize iteration in xT2 for hardest interaction.
12415       ELSEIF(MMUL.EQ.2) THEN
12416         IF(MSTP(82).LE.0) THEN
12417         ELSEIF(MSTP(82).EQ.1) THEN
12418           XT2=1D0
12419           SIGRAT=XSEC(96,1)/MAX(1D-10,VINT(315)*VINT(316)*SIGT(0,0,5))
12420           IF(MINT(141).NE.0.OR.MINT(142).NE.0) SIGRAT=SIGRAT*
12421      &    VINT(317)/(VINT(318)*VINT(320))
12422           XT2FAC=SIGRAT*VINT(149)/(1D0-VINT(149))
12423         ELSEIF(MSTP(82).EQ.2) THEN
12424           XT2=1D0
12425           XT2FAC=VINT(146)*XSEC(96,1)/MAX(1D-10,SIGT(0,0,5))*
12426      &    VINT(149)*(1D0+VINT(149))
12427         ELSE
12428           XC2=4D0*CKIN(3)**2/VINT(2)
12429           IF(CKIN(3).LE.CKIN(5).OR.MINT(82).GE.2) XC2=0D0
12430         ENDIF
12431  
12432       ELSEIF(MMUL.EQ.3) THEN
12433 C...Low-pT or multiple interactions (first semihard interaction):
12434 C...choose xT2 according to dpT2/pT2**2*exp(-(sigma above pT2)/norm)
12435 C...or (MSTP(82)>=2) dpT2/(pT2+pT0**2)**2*exp(-....).
12436         ISUB=MINT(1)
12437         IF(MSTP(82).LE.0) THEN
12438           XT2=0D0
12439         ELSEIF(MSTP(82).EQ.1) THEN
12440           XT2=XT2FAC*XT2/(XT2FAC-XT2*LOG(PYR(0)))
12441         ELSEIF(MSTP(82).EQ.2) THEN
12442           IF(XT2.LT.1D0.AND.EXP(-XT2FAC*XT2/(VINT(149)*(XT2+
12443      &    VINT(149)))).GT.PYR(0)) XT2=1D0
12444           IF(XT2.GE.1D0) THEN
12445             XT2=(1D0+VINT(149))*XT2FAC/(XT2FAC-(1D0+VINT(149))*LOG(1D0-
12446      &      PYR(0)*(1D0-EXP(-XT2FAC/(VINT(149)*(1D0+VINT(149)))))))-
12447      &      VINT(149)
12448           ELSE
12449             XT2=-XT2FAC/LOG(EXP(-XT2FAC/(XT2+VINT(149)))+PYR(0)*
12450      &      (EXP(-XT2FAC/VINT(149))-EXP(-XT2FAC/(XT2+VINT(149)))))-
12451      &      VINT(149)
12452           ENDIF
12453           XT2=MAX(0.01D0*VINT(149),XT2)
12454         ELSE
12455           XT2=(XC2+VINT(149))*(1D0+VINT(149))/(1D0+VINT(149)-
12456      &    PYR(0)*(1D0-XC2))-VINT(149)
12457           XT2=MAX(0.01D0*VINT(149),XT2)
12458         ENDIF
12459         VINT(25)=XT2
12460  
12461 C...Low-pT: choose xT2, tau, y* and cos(theta-hat) fixed.
12462         IF(MSTP(82).LE.1.AND.XT2.LT.VINT(149)) THEN
12463           IF(MINT(82).EQ.1) NGEN(0,1)=NGEN(0,1)-1
12464           IF(MINT(82).EQ.1) NGEN(ISUB,1)=NGEN(ISUB,1)-1
12465           ISUB=95
12466           MINT(1)=ISUB
12467           VINT(21)=0.01D0*VINT(149)
12468           VINT(22)=0D0
12469           VINT(23)=0D0
12470           VINT(25)=0.01D0*VINT(149)
12471  
12472         ELSE
12473 C...Multiple interactions (first semihard interaction).
12474 C...Choose tau and y*. Calculate cos(theta-hat).
12475           IF(PYR(0).LE.COEF(ISUB,1)) THEN
12476             TAUT=(2D0*(1D0+SQRT(1D0-XT2))/XT2-1D0)**PYR(0)
12477             TAU=XT2*(1D0+TAUT)**2/(4D0*TAUT)
12478           ELSE
12479             TAU=XT2*(1D0+TAN(PYR(0)*ATAN(SQRT(1D0/XT2-1D0)))**2)
12480           ENDIF
12481           VINT(21)=TAU
12482           CALL PYKLIM(2)
12483           RYST=PYR(0)
12484           MYST=1
12485           IF(RYST.GT.COEF(ISUB,8)) MYST=2
12486           IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
12487           CALL PYKMAP(2,MYST,PYR(0))
12488           VINT(23)=SQRT(MAX(0D0,1D0-XT2/TAU))*(-1)**INT(1.5D0+PYR(0))
12489         ENDIF
12490         VINT(71)=0.5D0*VINT(1)*SQRT(VINT(25))
12491  
12492 C...Store results of cross-section calculation.
12493       ELSEIF(MMUL.EQ.4) THEN
12494         ISUB=MINT(1)
12495         XTS=VINT(25)
12496         IF(ISET(ISUB).EQ.1) XTS=VINT(21)
12497         IF(ISET(ISUB).EQ.2)
12498      &  XTS=(4D0*VINT(48)+2D0*VINT(63)+2D0*VINT(64))/VINT(2)
12499         IF(ISET(ISUB).GE.3.AND.ISET(ISUB).LE.5) XTS=VINT(26)
12500         RBIN=MAX(0.000001D0,MIN(0.999999D0,XTS*(1D0+VINT(149))/
12501      &  (XTS+VINT(149))))
12502         IRBIN=INT(1D0+20D0*RBIN)
12503         IF(ISUB.EQ.96.AND.MSTP(171).EQ.0) THEN
12504           NMUL(IRBIN)=NMUL(IRBIN)+1
12505           SIGM(IRBIN)=SIGM(IRBIN)+VINT(153)
12506         ENDIF
12507  
12508 C...Choose impact parameter.
12509       ELSEIF(MMUL.EQ.5) THEN
12510         ISUB=MINT(1)
12511   145   IF(MSTP(82).EQ.3) THEN
12512           VINT(148)=PYR(0)/(PARU(2)*VINT(147))
12513         ELSE
12514           RTYPE=PYR(0)
12515           CQ2=PARP(84)**2
12516           IF(RTYPE.LT.(1D0-PARP(83))**2) THEN
12517             B2=-LOG(PYR(0))
12518           ELSEIF(RTYPE.LT.1D0-PARP(83)**2) THEN
12519             B2=-0.5D0*(1D0+CQ2)*LOG(PYR(0))
12520           ELSE
12521             B2=-CQ2*LOG(PYR(0))
12522           ENDIF
12523           VINT(148)=((1D0-PARP(83))**2*EXP(-MIN(50D0,B2))+2D0*PARP(83)*
12524      &    (1D0-PARP(83))*2D0/(1D0+CQ2)*EXP(-MIN(50D0,B2*2D0/(1D0+CQ2)))+
12525      &    PARP(83)**2/CQ2*EXP(-MIN(50D0,B2/CQ2)))/(PARU(2)*VINT(147))
12526         ENDIF
12527  
12528 C...Multiple interactions (variable impact parameter) : reject with
12529 C...probability exp(-overlap*cross-section above pT/normalization).
12530         RNCOR=(IRBIN-20D0*RBIN)*NMUL(IRBIN)
12531         SIGCOR=(IRBIN-20D0*RBIN)*SIGM(IRBIN)
12532         DO 150 IBIN=IRBIN+1,20
12533           RNCOR=RNCOR+NMUL(IBIN)
12534           SIGCOR=SIGCOR+SIGM(IBIN)
12535   150   CONTINUE
12536         SIGABV=(SIGCOR/RNCOR)*VINT(149)*(1D0-XTS)/(XTS+VINT(149))
12537         IF(MSTP(171).EQ.1) SIGABV=SIGABV*VINT(2)/VINT(289)
12538         VINT(150)=EXP(-MIN(50D0,VINT(146)*VINT(148)*
12539      &  SIGABV/MAX(1D-10,SIGT(0,0,5))))
12540         IF(MSTP(86).EQ.3.OR.(MSTP(86).EQ.2.AND.ISUB.NE.11.AND.
12541      &  ISUB.NE.12.AND.ISUB.NE.13.AND.ISUB.NE.28.AND.ISUB.NE.53
12542      &  .AND.ISUB.NE.68.AND.ISUB.NE.95.AND.ISUB.NE.96)) THEN
12543           IF(VINT(150).LT.PYR(0)) GOTO 145
12544           VINT(150)=1D0
12545         ENDIF 
12546  
12547 C...Generate additional multiple semihard interactions.
12548       ELSEIF(MMUL.EQ.6) THEN
12549         ISUBSV=MINT(1)
12550         DO 160 J=11,80
12551           VINTSV(J)=VINT(J)
12552   160   CONTINUE
12553         ISUB=96
12554         MINT(1)=96
12555         VINT(151)=0D0
12556         VINT(152)=0D0
12557  
12558 C...Reconstruct strings in hard scattering.
12559         NMAX=MINT(84)+4
12560         IF(ISET(ISUBSV).EQ.1) NMAX=MINT(84)+2
12561         IF(ISET(ISUBSV).EQ.11) NMAX=MINT(84)+2+MINT(3)
12562         NSTR=0
12563         DO 180 I=MINT(84)+1,NMAX
12564           KCS=KCHG(PYCOMP(K(I,2)),2)*ISIGN(1,K(I,2))
12565           IF(KCS.EQ.0) GOTO 180
12566           DO 170 J=1,4
12567             IF(KCS.EQ.1.AND.(J.EQ.2.OR.J.EQ.4)) GOTO 170
12568             IF(KCS.EQ.-1.AND.(J.EQ.1.OR.J.EQ.3)) GOTO 170
12569             IF(J.LE.2) THEN
12570               IST=MOD(K(I,J+3)/MSTU(5),MSTU(5))
12571             ELSE
12572               IST=MOD(K(I,J+1),MSTU(5))
12573             ENDIF
12574             IF(IST.LT.MINT(84).OR.IST.GT.I) GOTO 170
12575             IF(KCHG(PYCOMP(K(IST,2)),2).EQ.0) GOTO 170
12576             NSTR=NSTR+1
12577             IF(J.EQ.1.OR.J.EQ.4) THEN
12578               KSTR(NSTR,1)=I
12579               KSTR(NSTR,2)=IST
12580             ELSE
12581               KSTR(NSTR,1)=IST
12582               KSTR(NSTR,2)=I
12583             ENDIF
12584   170     CONTINUE
12585   180   CONTINUE
12586  
12587 C...Set up starting values for iteration in xT2.
12588         IF(MSTP(86).EQ.3.OR.(MSTP(86).EQ.2.AND.ISUBSV.NE.11.AND.
12589      &  ISUBSV.NE.12.AND.ISUBSV.NE.13.AND.ISUBSV.NE.28.AND.
12590      &  ISUBSV.NE.53.AND.ISUBSV.NE.68.AND.ISUBSV.NE.95.AND.
12591      &  ISUBSV.NE.96)) THEN
12592           XT2=(1D0-VINT(141))*(1D0-VINT(142))
12593         ELSE
12594           XT2=VINT(25)
12595           IF(ISET(ISUBSV).EQ.1) XT2=VINT(21)
12596           IF(ISET(ISUBSV).EQ.2)
12597      &    XT2=(4D0*VINT(48)+2D0*VINT(63)+2D0*VINT(64))/VINT(2)
12598           IF(ISET(ISUBSV).GE.3.AND.ISET(ISUBSV).LE.5) XT2=VINT(26)
12599         ENDIF 
12600         IF(MSTP(82).LE.1) THEN
12601           SIGRAT=XSEC(ISUB,1)/MAX(1D-10,VINT(315)*VINT(316)*SIGT(0,0,5))
12602           IF(MINT(141).NE.0.OR.MINT(142).NE.0) SIGRAT=SIGRAT*
12603      &    VINT(317)/(VINT(318)*VINT(320))
12604           XT2FAC=SIGRAT*VINT(149)/(1D0-VINT(149))
12605         ELSE
12606           XT2FAC=VINT(146)*VINT(148)*XSEC(ISUB,1)/
12607      &    MAX(1D-10,SIGT(0,0,5))*VINT(149)*(1D0+VINT(149))
12608         ENDIF
12609         VINT(63)=0D0
12610         VINT(64)=0D0
12611         VINT(143)=1D0-VINT(141)
12612         VINT(144)=1D0-VINT(142)
12613  
12614 C...Iterate downwards in xT2.
12615   190   IF(MSTP(82).LE.1) THEN
12616           XT2=XT2FAC*XT2/(XT2FAC-XT2*LOG(PYR(0)))
12617           IF(XT2.LT.VINT(149)) GOTO 240
12618         ELSE
12619           IF(XT2.LE.0.01001D0*VINT(149)) GOTO 240
12620           XT2=XT2FAC*(XT2+VINT(149))/(XT2FAC-(XT2+VINT(149))*
12621      &    LOG(PYR(0)))-VINT(149)
12622           IF(XT2.LE.0D0) GOTO 240
12623           XT2=MAX(0.01D0*VINT(149),XT2)
12624         ENDIF
12625         VINT(25)=XT2
12626  
12627 C...Choose tau and y*. Calculate cos(theta-hat).
12628         IF(PYR(0).LE.COEF(ISUB,1)) THEN
12629           TAUT=(2D0*(1D0+SQRT(1D0-XT2))/XT2-1D0)**PYR(0)
12630           TAU=XT2*(1D0+TAUT)**2/(4D0*TAUT)
12631         ELSE
12632           TAU=XT2*(1D0+TAN(PYR(0)*ATAN(SQRT(1D0/XT2-1D0)))**2)
12633         ENDIF
12634         VINT(21)=TAU
12635         CALL PYKLIM(2)
12636         RYST=PYR(0)
12637         MYST=1
12638         IF(RYST.GT.COEF(ISUB,8)) MYST=2
12639         IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
12640         CALL PYKMAP(2,MYST,PYR(0))
12641         VINT(23)=SQRT(MAX(0D0,1D0-XT2/TAU))*(-1)**INT(1.5D0+PYR(0))
12642  
12643 C...Check that x not used up. Accept or reject kinematical variables.
12644         X1M=SQRT(TAU)*EXP(VINT(22))
12645         X2M=SQRT(TAU)*EXP(-VINT(22))
12646         IF(VINT(143)-X1M.LT.0.01D0.OR.VINT(144)-X2M.LT.0.01D0) GOTO 190
12647         VINT(71)=0.5D0*VINT(1)*SQRT(XT2)
12648         CALL PYSIGH(NCHN,SIGS)
12649         IF(MINT(141).NE.0.OR.MINT(142).NE.0) SIGS=SIGS*VINT(320)
12650         IF(SIGS.LT.XSEC(ISUB,1)*PYR(0)) GOTO 190
12651  
12652 C...Reset K, P and V vectors. Select some variables.
12653         DO 210 I=N+1,N+2
12654           DO 200 J=1,5
12655             K(I,J)=0
12656             P(I,J)=0D0
12657             V(I,J)=0D0
12658   200     CONTINUE
12659   210   CONTINUE
12660         RFLAV=PYR(0)
12661         PT=0.5D0*VINT(1)*SQRT(XT2)
12662         PHI=PARU(2)*PYR(0)
12663         CTH=VINT(23)
12664  
12665 C...Add first parton to event record.
12666         K(N+1,1)=3
12667         K(N+1,2)=21
12668         IF(RFLAV.GE.MAX(PARP(85),PARP(86))) K(N+1,2)=
12669      &  1+INT((2D0+PARJ(2))*PYR(0))
12670         P(N+1,1)=PT*COS(PHI)
12671         P(N+1,2)=PT*SIN(PHI)
12672         P(N+1,3)=0.25D0*VINT(1)*(VINT(41)*(1D0+CTH)-VINT(42)*(1D0-CTH))
12673         P(N+1,4)=0.25D0*VINT(1)*(VINT(41)*(1D0+CTH)+VINT(42)*(1D0-CTH))
12674         P(N+1,5)=0D0
12675  
12676 C...Add second parton to event record.
12677         K(N+2,1)=3
12678         K(N+2,2)=21
12679         IF(K(N+1,2).NE.21) K(N+2,2)=-K(N+1,2)
12680         P(N+2,1)=-P(N+1,1)
12681         P(N+2,2)=-P(N+1,2)
12682         P(N+2,3)=0.25D0*VINT(1)*(VINT(41)*(1D0-CTH)-VINT(42)*(1D0+CTH))
12683         P(N+2,4)=0.25D0*VINT(1)*(VINT(41)*(1D0-CTH)+VINT(42)*(1D0+CTH))
12684         P(N+2,5)=0D0
12685  
12686         IF(RFLAV.LT.PARP(85).AND.NSTR.GE.1) THEN
12687 C....Choose relevant string pieces to place gluons on.
12688           DO 230 I=N+1,N+2
12689             DMIN=1D8
12690             DO 220 ISTR=1,NSTR
12691               I1=KSTR(ISTR,1)
12692               I2=KSTR(ISTR,2)
12693               DIST=(P(I,4)*P(I1,4)-P(I,1)*P(I1,1)-P(I,2)*P(I1,2)-
12694      &        P(I,3)*P(I1,3))*(P(I,4)*P(I2,4)-P(I,1)*P(I2,1)-
12695      &        P(I,2)*P(I2,2)-P(I,3)*P(I2,3))/MAX(1D0,P(I1,4)*P(I2,4)-
12696      &        P(I1,1)*P(I2,1)-P(I1,2)*P(I2,2)-P(I1,3)*P(I2,3))
12697               IF(ISTR.EQ.1.OR.DIST.LT.DMIN) THEN
12698                 DMIN=DIST
12699                 IST1=I1
12700                 IST2=I2
12701                 ISTM=ISTR
12702               ENDIF
12703   220       CONTINUE
12704  
12705 C....Colour flow adjustments, new string pieces.
12706             IF(K(IST1,4)/MSTU(5).EQ.IST2) K(IST1,4)=MSTU(5)*I+
12707      &      MOD(K(IST1,4),MSTU(5))
12708             IF(MOD(K(IST1,5),MSTU(5)).EQ.IST2) K(IST1,5)=
12709      &      MSTU(5)*(K(IST1,5)/MSTU(5))+I
12710             K(I,5)=MSTU(5)*IST1
12711             K(I,4)=MSTU(5)*IST2
12712             IF(K(IST2,5)/MSTU(5).EQ.IST1) K(IST2,5)=MSTU(5)*I+
12713      &      MOD(K(IST2,5),MSTU(5))
12714             IF(MOD(K(IST2,4),MSTU(5)).EQ.IST1) K(IST2,4)=
12715      &      MSTU(5)*(K(IST2,4)/MSTU(5))+I
12716             KSTR(ISTM,2)=I
12717             KSTR(NSTR+1,1)=I
12718             KSTR(NSTR+1,2)=IST2
12719             NSTR=NSTR+1
12720   230     CONTINUE
12721  
12722 C...String drawing and colour flow for gluon loop.
12723         ELSEIF(K(N+1,2).EQ.21) THEN
12724           K(N+1,4)=MSTU(5)*(N+2)
12725           K(N+1,5)=MSTU(5)*(N+2)
12726           K(N+2,4)=MSTU(5)*(N+1)
12727           K(N+2,5)=MSTU(5)*(N+1)
12728           KSTR(NSTR+1,1)=N+1
12729           KSTR(NSTR+1,2)=N+2
12730           KSTR(NSTR+2,1)=N+2
12731           KSTR(NSTR+2,2)=N+1
12732           NSTR=NSTR+2
12733  
12734 C...String drawing and colour flow for qqbar pair.
12735         ELSE
12736           K(N+1,4)=MSTU(5)*(N+2)
12737           K(N+2,5)=MSTU(5)*(N+1)
12738           KSTR(NSTR+1,1)=N+1
12739           KSTR(NSTR+1,2)=N+2
12740           NSTR=NSTR+1
12741         ENDIF
12742  
12743 C...Update remaining energy; iterate.
12744         N=N+2
12745         IF(N.GT.MSTU(4)-MSTU(32)-10) THEN
12746           CALL PYERRM(11,'(PYMULT:) no more memory left in PYJETS')
12747           IF(MSTU(21).GE.1) RETURN
12748         ENDIF
12749         MINT(31)=MINT(31)+1
12750         VINT(151)=VINT(151)+VINT(41)
12751         VINT(152)=VINT(152)+VINT(42)
12752         VINT(143)=VINT(143)-VINT(41)
12753         VINT(144)=VINT(144)-VINT(42)
12754         IF(MINT(31).LT.240) GOTO 190
12755   240   CONTINUE
12756         MINT(1)=ISUBSV
12757         DO 250 J=11,80
12758           VINT(J)=VINTSV(J)
12759   250   CONTINUE
12760       ENDIF
12761  
12762 C...Format statements for printout.
12763  5000 FORMAT(/1X,'****** PYMULT: initialization of multiple inter',
12764      &'actions for MSTP(82) =',I2,' ******')
12765  5100 FORMAT(8X,'pT0 =',F5.2,' GeV gives sigma(parton-parton) =',1P,
12766      &D9.2,' mb: rejected')
12767  5200 FORMAT(8X,'pT0 =',F5.2,' GeV gives sigma(parton-parton) =',1P,
12768      &D9.2,' mb: accepted')
12769  
12770       RETURN
12771       END
12772  
12773 C*********************************************************************
12774  
12775 C...PYREMN
12776 C...Adds on target remnants (one or two from each side) and
12777 C...includes primordial kT for hadron beams.
12778  
12779       SUBROUTINE PYREMN(IPU1,IPU2)
12780  
12781 C...Double precision and integer declarations.
12782       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
12783       IMPLICIT INTEGER(I-N)
12784       INTEGER PYK,PYCHGE,PYCOMP
12785 C...Commonblocks.
12786       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
12787       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
12788       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
12789       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
12790       COMMON/PYINT1/MINT(400),VINT(400)
12791       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
12792 C...Local arrays.
12793       DIMENSION KFLCH(2),KFLSP(2),CHI(2),PMS(0:6),IS(2),ISN(2),ROBO(5),
12794      &PSYS(0:2,5),PMIN(0:2),QOLD(4),QNEW(4),DBE(3),PSUM(4)
12795  
12796 C...Find event type and remaining energy.
12797       ISUB=MINT(1)
12798       NS=N
12799       IF(MINT(50).EQ.0.OR.MSTP(81).LE.0) THEN
12800         VINT(143)=1D0-VINT(141)
12801         VINT(144)=1D0-VINT(142)
12802       ENDIF
12803  
12804 C...Define initial partons.
12805       NTRY=0
12806   100 NTRY=NTRY+1
12807       DO 130 JT=1,2
12808         I=MINT(83)+JT+2
12809         IF(JT.EQ.1) IPU=IPU1
12810         IF(JT.EQ.2) IPU=IPU2
12811         K(I,1)=21
12812         K(I,2)=K(IPU,2)
12813         K(I,3)=I-2
12814         PMS(JT)=0D0
12815         VINT(156+JT)=0D0
12816         VINT(158+JT)=0D0
12817         IF(MINT(47).EQ.1) THEN
12818           DO 110 J=1,5
12819             P(I,J)=P(I-2,J)
12820   110     CONTINUE
12821         ELSEIF(ISUB.EQ.95) THEN
12822           K(I,2)=21
12823         ELSE
12824           P(I,5)=P(IPU,5)
12825  
12826 C...No primordial kT, or chosen according to truncated Gaussian or
12827 C...exponential, or (for photon) predetermined or power law.
12828   120     IF(MINT(40+JT).EQ.2.AND.MINT(10+JT).NE.22) THEN
12829             IF(MSTP(91).LE.0) THEN
12830               PT=0D0
12831             ELSEIF(MSTP(91).EQ.1) THEN
12832               PT=PARP(91)*SQRT(-LOG(PYR(0)))
12833             ELSE
12834               RPT1=PYR(0)
12835               RPT2=PYR(0)
12836               PT=-PARP(92)*LOG(RPT1*RPT2)
12837             ENDIF
12838             IF(PT.GT.PARP(93)) GOTO 120
12839           ELSEIF(MINT(106+JT).EQ.3) THEN
12840             PTA=SQRT(VINT(282+JT))
12841             PTB=0D0
12842             IF(MSTP(66).EQ.5.AND.MSTP(93).EQ.1) THEN
12843               PTB=PARP(99)*SQRT(-LOG(PYR(0)))
12844             ELSEIF(MSTP(66).EQ.5.AND.MSTP(93).EQ.2) THEN
12845               RPT1=PYR(0)
12846               RPT2=PYR(0)
12847               PTB=-PARP(99)*LOG(RPT1*RPT2)
12848             ENDIF
12849             IF(PTB.GT.PARP(100)) GOTO 120
12850             PT=SQRT(PTA**2+PTB**2+2D0*PTA*PTB*COS(PARU(2)*PYR(0)))
12851             PT=PT*0.8D0**MINT(57)
12852             IF(NTRY.GT.10) PT=PT*0.8D0**(NTRY-10)
12853           ELSEIF(IABS(MINT(14+JT)).LE.8.OR.MINT(14+JT).EQ.21) THEN
12854             IF(MSTP(93).LE.0) THEN
12855               PT=0D0
12856             ELSEIF(MSTP(93).EQ.1) THEN
12857               PT=PARP(99)*SQRT(-LOG(PYR(0)))
12858             ELSEIF(MSTP(93).EQ.2) THEN
12859               RPT1=PYR(0)
12860               RPT2=PYR(0)
12861               PT=-PARP(99)*LOG(RPT1*RPT2)
12862             ELSEIF(MSTP(93).EQ.3) THEN
12863               HA=PARP(99)**2
12864               HB=PARP(100)**2
12865               PT=SQRT(MAX(0D0,HA*(HA+HB)/(HA+HB-PYR(0)*HB)-HA))
12866             ELSE
12867               HA=PARP(99)**2
12868               HB=PARP(100)**2
12869               IF(MSTP(93).EQ.5) HB=MIN(VINT(48),PARP(100)**2)
12870               PT=SQRT(MAX(0D0,HA*((HA+HB)/HA)**PYR(0)-HA))
12871             ENDIF
12872             IF(PT.GT.PARP(100)) GOTO 120
12873           ELSE
12874             PT=0D0
12875           ENDIF
12876           VINT(156+JT)=PT
12877           PHI=PARU(2)*PYR(0)
12878           P(I,1)=PT*COS(PHI)
12879           P(I,2)=PT*SIN(PHI)
12880           PMS(JT)=P(I,5)**2+P(I,1)**2+P(I,2)**2
12881         ENDIF
12882   130 CONTINUE
12883       IF(MINT(47).EQ.1) RETURN
12884  
12885 C...Kinematics construction for initial partons.
12886       I1=MINT(83)+3
12887       I2=MINT(83)+4
12888       IF(ISUB.EQ.95) THEN
12889         SHS=0D0
12890         SHR=0D0
12891       ELSE
12892         SHS=VINT(141)*VINT(142)*VINT(2)+(P(I1,1)+P(I2,1))**2+
12893      &  (P(I1,2)+P(I2,2))**2
12894         SHR=SQRT(MAX(0D0,SHS))
12895         IF((SHS-PMS(1)-PMS(2))**2-4D0*PMS(1)*PMS(2).LE.0D0) GOTO 100
12896         P(I1,4)=0.5D0*(SHR+(PMS(1)-PMS(2))/SHR)
12897         P(I1,3)=SQRT(MAX(0D0,P(I1,4)**2-PMS(1)))
12898         P(I2,4)=SHR-P(I1,4)
12899         P(I2,3)=-P(I1,3)
12900  
12901 C...Transform partons to overall CM-frame.
12902         ROBO(3)=(P(I1,1)+P(I2,1))/SHR
12903         ROBO(4)=(P(I1,2)+P(I2,2))/SHR
12904         CALL PYROBO(I1,I2,0D0,0D0,-ROBO(3),-ROBO(4),0D0)
12905         ROBO(2)=PYANGL(P(I1,1),P(I1,2))
12906         CALL PYROBO(I1,I2,0D0,-ROBO(2),0D0,0D0,0D0)
12907         ROBO(1)=PYANGL(P(I1,3),P(I1,1))
12908         CALL PYROBO(I1,I2,-ROBO(1),0D0,0D0,0D0,0D0)
12909         CALL PYROBO(I1,MINT(52),ROBO(1),ROBO(2),ROBO(3),ROBO(4),0D0)
12910         ROBO(5)=(VINT(141)-VINT(142))/(VINT(141)+VINT(142))
12911         CALL PYROBO(I1,MINT(52),0D0,0D0,0D0,0D0,ROBO(5))
12912       ENDIF
12913  
12914 C...Optionally fix up x and Q2 definitions for leptoproduction.
12915       IDISXQ=0
12916       IF((MINT(43).EQ.2.OR.MINT(43).EQ.3).AND.((ISUB.EQ.10.AND.
12917      &MSTP(23).GE.1).OR.(ISUB.EQ.83.AND.MSTP(23).GE.2))) IDISXQ=1
12918       IF(IDISXQ.EQ.1) THEN
12919  
12920 C...Find where incoming and outgoing leptons/partons are sitting.
12921         LESD=1
12922         IF(MINT(42).EQ.1) LESD=2
12923         LPIN=MINT(83)+3-LESD
12924         LEIN=MINT(84)+LESD
12925         LQIN=MINT(84)+3-LESD
12926         LEOUT=MINT(84)+2+LESD
12927         LQOUT=MINT(84)+5-LESD
12928         IF(K(LEIN,3).GT.LEIN) LEIN=K(LEIN,3)
12929         IF(K(LQIN,3).GT.LQIN) LQIN=K(LQIN,3)
12930         LSCMS=0
12931         DO 140 I=MINT(84)+5,N
12932           IF(K(I,2).EQ.94) THEN
12933             LSCMS=I
12934             LEOUT=I+LESD
12935             LQOUT=I+3-LESD
12936           ENDIF
12937   140   CONTINUE
12938         LQBG=IPU1
12939         IF(LESD.EQ.1) LQBG=IPU2
12940  
12941 C...Calculate actual and wanted momentum transfer.
12942         XNOM=VINT(43-LESD)
12943         Q2NOM=-VINT(45)
12944         HPK=2D0*(P(LPIN,4)*P(LEIN,4)-P(LPIN,1)*P(LEIN,1)-
12945      &  P(LPIN,2)*P(LEIN,2)-P(LPIN,3)*P(LEIN,3))*
12946      &  (P(MINT(83)+LESD,4)*VINT(40+LESD)/P(LEIN,4))
12947         HPT2=MAX(0D0,Q2NOM*(1D0-Q2NOM/(XNOM*HPK)))
12948         FAC=SQRT(HPT2/(P(LEOUT,1)**2+P(LEOUT,2)**2))
12949         P(N+1,1)=FAC*P(LEOUT,1)
12950         P(N+1,2)=FAC*P(LEOUT,2)
12951         P(N+1,3)=0.25D0*((HPK-Q2NOM/XNOM)/P(LPIN,4)-
12952      &  Q2NOM/(P(MINT(83)+LESD,4)*VINT(40+LESD)))*(-1)**(LESD+1)
12953         P(N+1,4)=SQRT(P(LEOUT,5)**2+P(N+1,1)**2+P(N+1,2)**2+
12954      &  P(N+1,3)**2)
12955         DO 150 J=1,4
12956           QOLD(J)=P(LEIN,J)-P(LEOUT,J)
12957           QNEW(J)=P(LEIN,J)-P(N+1,J)
12958   150   CONTINUE
12959  
12960 C...Boost outgoing electron and daughters.
12961         IF(LSCMS.EQ.0) THEN
12962           DO 160 J=1,4
12963             P(LEOUT,J)=P(N+1,J)
12964   160     CONTINUE
12965         ELSE
12966           DO 170 J=1,3
12967             P(N+2,J)=(P(N+1,J)-P(LEOUT,J))/(P(N+1,4)+P(LEOUT,4))
12968   170     CONTINUE
12969           PINV=2D0/(1D0+P(N+2,1)**2+P(N+2,2)**2+P(N+2,3)**2)
12970           DO 180 J=1,3
12971             DBE(J)=PINV*P(N+2,J)
12972   180     CONTINUE
12973           DO 200 I=LSCMS+1,N
12974             IORIG=I
12975   190       IORIG=K(IORIG,3)
12976             IF(IORIG.GT.LEOUT) GOTO 190
12977             IF(I.EQ.LEOUT.OR.IORIG.EQ.LEOUT)
12978      &      CALL PYROBO(I,I,0D0,0D0,DBE(1),DBE(2),DBE(3))
12979   200     CONTINUE
12980         ENDIF
12981  
12982 C...Copy shower initiator and all outgoing partons.
12983         NCOP=N+1
12984         K(NCOP,3)=LQBG
12985         DO 210 J=1,5
12986           P(NCOP,J)=P(LQBG,J)
12987   210   CONTINUE
12988         DO 240 I=MINT(84)+1,N
12989           ICOP=0
12990           IF(K(I,1).GT.10) GOTO 240
12991           IF(I.EQ.LQBG.OR.I.EQ.LQOUT) THEN
12992             ICOP=I
12993           ELSE
12994             IORIG=I
12995   220       IORIG=K(IORIG,3)
12996             IF(IORIG.EQ.LQBG.OR.IORIG.EQ.LQOUT) THEN
12997               ICOP=IORIG
12998             ELSEIF(IORIG.GT.MINT(84).AND.IORIG.LE.N) THEN
12999               GOTO 220
13000             ENDIF
13001           ENDIF
13002           IF(ICOP.NE.0) THEN
13003             NCOP=NCOP+1
13004             K(NCOP,3)=I
13005             DO 230 J=1,5
13006               P(NCOP,J)=P(I,J)
13007   230       CONTINUE
13008           ENDIF
13009   240   CONTINUE
13010  
13011 C...Calculate relative rescaling factors.
13012         SLC=3-2*LESD
13013         PLCSUM=0D0
13014         DO 250 I=N+2,NCOP
13015           PLCSUM=PLCSUM+(P(I,4)+SLC*P(I,3))
13016   250   CONTINUE
13017         DO 260 I=N+2,NCOP
13018           V(I,1)=(P(I,4)+SLC*P(I,3))/PLCSUM
13019   260   CONTINUE
13020  
13021 C...Transfer extra three-momentum of current.
13022         DO 280 I=N+2,NCOP
13023           DO 270 J=1,3
13024             P(I,J)=P(I,J)+V(I,1)*(QNEW(J)-QOLD(J))
13025   270     CONTINUE
13026           P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
13027   280   CONTINUE
13028  
13029 C...Iterate change of initiator momentum to get energy right.
13030         ITER=0
13031   290   ITER=ITER+1
13032         PEEX=-P(N+1,4)-QNEW(4)
13033         PEMV=-P(N+1,3)/P(N+1,4)
13034         DO 300 I=N+2,NCOP
13035           PEEX=PEEX+P(I,4)
13036           PEMV=PEMV+V(I,1)*P(I,3)/P(I,4)
13037   300   CONTINUE
13038         IF(ABS(PEMV).LT.1D-10) THEN
13039           MINT(51)=1
13040           MINT(57)=MINT(57)+1
13041           RETURN
13042         ENDIF
13043         PZCH=-PEEX/PEMV
13044         P(N+1,3)=P(N+1,3)+PZCH
13045         P(N+1,4)=SQRT(P(N+1,5)**2+P(N+1,1)**2+P(N+1,2)**2+P(N+1,3)**2)
13046         DO 310 I=N+2,NCOP
13047           P(I,3)=P(I,3)+V(I,1)*PZCH
13048           P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
13049   310   CONTINUE
13050         IF(ITER.LT.10.AND.ABS(PEEX).GT.1D-6*P(N+1,4)) GOTO 290
13051  
13052 C...Modify momenta in event record.
13053         HBE=2D0*(P(N+1,4)+P(LQBG,4))*(P(N+1,3)-P(LQBG,3))/
13054      &  ((P(N+1,4)+P(LQBG,4))**2+(P(N+1,3)-P(LQBG,3))**2)
13055         IF(ABS(HBE).GE.1D0) THEN
13056           MINT(51)=1
13057           MINT(57)=MINT(57)+1
13058           RETURN
13059         ENDIF
13060         I=MINT(83)+5-LESD
13061         CALL PYROBO(I,I,0D0,0D0,0D0,0D0,HBE)
13062         DO 330 I=N+1,NCOP
13063           ICOP=K(I,3)
13064           DO 320 J=1,4
13065             P(ICOP,J)=P(I,J)
13066   320     CONTINUE
13067   330   CONTINUE
13068       ENDIF
13069  
13070 C...Check minimum invariant mass of remnant system(s).
13071       PSYS(0,4)=P(I1,4)+P(I2,4)+0.5D0*VINT(1)*(VINT(151)+VINT(152))
13072       PSYS(0,3)=P(I1,3)+P(I2,3)+0.5D0*VINT(1)*(VINT(151)-VINT(152))
13073       PMS(0)=MAX(0D0,PSYS(0,4)**2-PSYS(0,3)**2)
13074       PMIN(0)=SQRT(PMS(0))
13075       DO 340 JT=1,2
13076         PSYS(JT,4)=0.5D0*VINT(1)*VINT(142+JT)
13077         PSYS(JT,3)=PSYS(JT,4)*(-1)**(JT-1)
13078         PMIN(JT)=0D0
13079         IF(MINT(44+JT).EQ.1) GOTO 340
13080         MINT(105)=MINT(102+JT)
13081         MINT(109)=MINT(106+JT)
13082         CALL PYSPLI(MINT(10+JT),MINT(12+JT),KFLCH(JT),KFLSP(JT))
13083         IF(MINT(51).NE.0) THEN
13084           MINT(57)=MINT(57)+1
13085           RETURN
13086         ENDIF           
13087         IF(KFLCH(JT).NE.0) PMIN(JT)=PMIN(JT)+PYMASS(KFLCH(JT))
13088         IF(KFLSP(JT).NE.0) PMIN(JT)=PMIN(JT)+PYMASS(KFLSP(JT))
13089         IF(KFLCH(JT)*KFLSP(JT).NE.0) PMIN(JT)=PMIN(JT)+0.5D0*PARP(111)
13090         PMIN(JT)=SQRT(PMIN(JT)**2+P(MINT(83)+JT+2,1)**2+
13091      &  P(MINT(83)+JT+2,2)**2)
13092   340 CONTINUE
13093       IF(PMIN(0)+PMIN(1)+PMIN(2).GT.VINT(1).OR.(MINT(45).GE.2.AND.
13094      &PMIN(1).GT.PSYS(1,4)).OR.(MINT(46).GE.2.AND.PMIN(2).GT.
13095      &PSYS(2,4))) THEN
13096         MINT(51)=1
13097         MINT(57)=MINT(57)+1
13098         RETURN
13099       ENDIF
13100  
13101 C...Loop over two remnants; skip if none there.
13102       I=NS
13103       DO 410 JT=1,2
13104         ISN(JT)=0
13105         IF(MINT(44+JT).EQ.1) GOTO 410
13106         IF(JT.EQ.1) IPU=IPU1
13107         IF(JT.EQ.2) IPU=IPU2
13108  
13109 C...Store first remnant parton.
13110         I=I+1
13111         IS(JT)=I
13112         ISN(JT)=1
13113         DO 350 J=1,5
13114           K(I,J)=0
13115           P(I,J)=0D0
13116           V(I,J)=0D0
13117   350   CONTINUE
13118         K(I,1)=1
13119         K(I,2)=KFLSP(JT)
13120         K(I,3)=MINT(83)+JT
13121         P(I,5)=PYMASS(K(I,2))
13122  
13123 C...First parton colour connections and kinematics.
13124         KCOL=KCHG(PYCOMP(KFLSP(JT)),2)
13125         IF(KCOL.EQ.2) THEN
13126           K(I,1)=3
13127           K(I,4)=MSTU(5)*IPU+IPU
13128           K(I,5)=MSTU(5)*IPU+IPU
13129           K(IPU,4)=MOD(K(IPU,4),MSTU(5))+MSTU(5)*I
13130           K(IPU,5)=MOD(K(IPU,5),MSTU(5))+MSTU(5)*I
13131         ELSEIF(KCOL.NE.0) THEN
13132           K(I,1)=3
13133           KFLS=(3-KCOL*ISIGN(1,KFLSP(JT)))/2
13134           K(I,KFLS+3)=IPU
13135           K(IPU,6-KFLS)=MOD(K(IPU,6-KFLS),MSTU(5))+MSTU(5)*I
13136         ENDIF
13137         IF(KFLCH(JT).EQ.0) THEN
13138           P(I,1)=-P(MINT(83)+JT+2,1)
13139           P(I,2)=-P(MINT(83)+JT+2,2)
13140           PMS(JT)=P(I,5)**2+P(I,1)**2+P(I,2)**2
13141           PSYS(JT,3)=SQRT(MAX(0D0,PSYS(JT,4)**2-PMS(JT)))*(-1)**(JT-1)
13142           P(I,3)=PSYS(JT,3)
13143           P(I,4)=PSYS(JT,4)
13144  
13145 C...When extra remnant parton or hadron: store extra remnant.
13146         ELSE
13147           I=I+1
13148           ISN(JT)=2
13149           DO 360 J=1,5
13150             K(I,J)=0
13151             P(I,J)=0D0
13152             V(I,J)=0D0
13153   360     CONTINUE
13154           K(I,1)=1
13155           K(I,2)=KFLCH(JT)
13156           K(I,3)=MINT(83)+JT
13157           P(I,5)=PYMASS(K(I,2))
13158  
13159 C...Find parton colour connections of extra remnant.
13160           KCOL=KCHG(PYCOMP(KFLCH(JT)),2)
13161           IF(KCOL.EQ.2) THEN
13162             K(I,1)=3
13163             K(I,4)=MSTU(5)*IPU+IPU
13164             K(I,5)=MSTU(5)*IPU+IPU
13165             K(IPU,4)=MOD(K(IPU,4),MSTU(5))+MSTU(5)*I
13166             K(IPU,5)=MOD(K(IPU,5),MSTU(5))+MSTU(5)*I
13167           ELSEIF(KCOL.NE.0) THEN
13168             K(I,1)=3
13169             KFLS=(3-KCOL*ISIGN(1,KFLCH(JT)))/2
13170             K(I,KFLS+3)=IPU
13171             K(IPU,6-KFLS)=MOD(K(IPU,6-KFLS),MSTU(5))+MSTU(5)*I
13172           ENDIF
13173  
13174 C...Relative transverse momentum when two remnants.
13175           LOOP=0
13176   370     LOOP=LOOP+1
13177           CALL PYPTDI(1,P(I-1,1),P(I-1,2))
13178           IF(IABS(MINT(10+JT)).LT.20) THEN
13179             P(I-1,1)=0D0
13180             P(I-1,2)=0D0
13181           ELSE
13182             P(I-1,1)=P(I-1,1)-0.5D0*P(MINT(83)+JT+2,1)
13183             P(I-1,2)=P(I-1,2)-0.5D0*P(MINT(83)+JT+2,2)        
13184           ENDIF
13185           PMS(JT+2)=P(I-1,5)**2+P(I-1,1)**2+P(I-1,2)**2
13186           P(I,1)=-P(MINT(83)+JT+2,1)-P(I-1,1)
13187           P(I,2)=-P(MINT(83)+JT+2,2)-P(I-1,2)
13188           PMS(JT+4)=P(I,5)**2+P(I,1)**2+P(I,2)**2
13189  
13190 C...Meson or baryon; photon as meson. For splitup below.
13191           IMB=1
13192           IF(MOD(MINT(10+JT)/1000,10).NE.0) IMB=2
13193  
13194 C***Relative distribution for electron into two electrons. Temporary!
13195           IF(IABS(MINT(10+JT)).LT.20.AND.MINT(14+JT).EQ.-MINT(10+JT))
13196      &    THEN
13197             CHI(JT)=PYR(0)
13198  
13199 C...Relative distribution of electron energy into electron plus parton.
13200           ELSEIF(IABS(MINT(10+JT)).LT.20) THEN
13201             XHRD=VINT(140+JT)
13202             XE=VINT(154+JT)
13203             CHI(JT)=(XE-XHRD)/(1D0-XHRD)
13204  
13205 C...Relative distribution of energy for particle into two jets.
13206           ELSEIF(IABS(KFLCH(JT)).LE.10.OR.KFLCH(JT).EQ.21) THEN
13207             CHIK=PARP(92+2*IMB)
13208             IF(MSTP(92).LE.1) THEN
13209               IF(IMB.EQ.1) CHI(JT)=PYR(0)
13210               IF(IMB.EQ.2) CHI(JT)=1D0-SQRT(PYR(0))
13211             ELSEIF(MSTP(92).EQ.2) THEN
13212               CHI(JT)=1D0-PYR(0)**(1D0/(1D0+CHIK))
13213             ELSEIF(MSTP(92).EQ.3) THEN
13214               CUT=2D0*0.3D0/VINT(1)
13215   380         CHI(JT)=PYR(0)**2
13216               IF((CHI(JT)**2/(CHI(JT)**2+CUT**2))**0.25D0*
13217      &        (1D0-CHI(JT))**CHIK.LT.PYR(0)) GOTO 380
13218             ELSEIF(MSTP(92).EQ.4) THEN
13219               CUT=2D0*0.3D0/VINT(1)
13220               CUTR=(1D0+SQRT(1D0+CUT**2))/CUT
13221   390         CHIR=CUT*CUTR**PYR(0)
13222               CHI(JT)=(CHIR**2-CUT**2)/(2D0*CHIR)
13223               IF((1D0-CHI(JT))**CHIK.LT.PYR(0)) GOTO 390
13224             ELSE
13225               CUT=2D0*0.3D0/VINT(1)
13226               CUTA=CUT**(1D0-PARP(98))
13227               CUTB=(1D0+CUT)**(1D0-PARP(98))
13228   400         CHI(JT)=(CUTA+PYR(0)*(CUTB-CUTA))**(1D0/(1D0-PARP(98)))
13229               IF(((CHI(JT)+CUT)**2/(2D0*(CHI(JT)**2+CUT**2)))**
13230      &        (0.5D0*PARP(98))*(1D0-CHI(JT))**CHIK.LT.PYR(0)) GOTO 400
13231             ENDIF
13232  
13233 C...Relative distribution of energy for particle into jet plus particle.
13234           ELSE
13235             IF(MSTP(94).LE.1) THEN
13236               IF(IMB.EQ.1) CHI(JT)=PYR(0)
13237               IF(IMB.EQ.2) CHI(JT)=1D0-SQRT(PYR(0))
13238               IF(MOD(KFLCH(JT)/1000,10).NE.0) CHI(JT)=1D0-CHI(JT)
13239             ELSEIF(MSTP(94).EQ.2) THEN
13240               CHI(JT)=1D0-PYR(0)**(1D0/(1D0+PARP(93+2*IMB)))
13241               IF(MOD(KFLCH(JT)/1000,10).NE.0) CHI(JT)=1D0-CHI(JT)
13242             ELSEIF(MSTP(94).EQ.3) THEN
13243               CALL PYZDIS(1,0,PMS(JT+4),ZZ)
13244               CHI(JT)=ZZ
13245             ELSE
13246               CALL PYZDIS(1000,0,PMS(JT+4),ZZ)
13247               CHI(JT)=ZZ
13248             ENDIF
13249           ENDIF
13250  
13251 C...Construct total transverse mass; reject if too large.
13252           CHI(JT)=MAX(1D-8,MIN(1D0-1D-8,CHI(JT))) 
13253           PMS(JT)=PMS(JT+4)/CHI(JT)+PMS(JT+2)/(1D0-CHI(JT))
13254           IF(PMS(JT).GT.PSYS(JT,4)**2) THEN
13255             IF(LOOP.LT.10) THEN
13256               GOTO 370
13257             ELSE
13258               MINT(51)=1
13259               MINT(57)=MINT(57)+1
13260               RETURN
13261             ENDIF
13262           ENDIF
13263           PSYS(JT,3)=SQRT(MAX(0D0,PSYS(JT,4)**2-PMS(JT)))*(-1)**(JT-1)
13264           VINT(158+JT)=CHI(JT)
13265  
13266 C...Subdivide longitudinal momentum according to value selected above.
13267           PW1=CHI(JT)*(PSYS(JT,4)+ABS(PSYS(JT,3)))
13268           P(IS(JT)+1,4)=0.5D0*(PW1+PMS(JT+4)/PW1)
13269           P(IS(JT)+1,3)=0.5D0*(PW1-PMS(JT+4)/PW1)*(-1)**(JT-1)
13270           P(IS(JT),4)=PSYS(JT,4)-P(IS(JT)+1,4)
13271           P(IS(JT),3)=PSYS(JT,3)-P(IS(JT)+1,3)
13272         ENDIF
13273   410 CONTINUE
13274       N=I
13275  
13276 C...Check if longitudinal boosts needed - if so pick two systems.
13277       PDEV=ABS(PSYS(0,4)+PSYS(1,4)+PSYS(2,4)-VINT(1))+
13278      &ABS(PSYS(0,3)+PSYS(1,3)+PSYS(2,3))
13279       IF(PDEV.LE.1D-6*VINT(1)) RETURN
13280       IF(ISN(1).EQ.0) THEN
13281         IR=0
13282         IL=2
13283       ELSEIF(ISN(2).EQ.0) THEN
13284         IR=1
13285         IL=0
13286       ELSEIF(VINT(143).GT.0.2D0.AND.VINT(144).GT.0.2D0) THEN
13287         IR=1
13288         IL=2
13289       ELSEIF(VINT(143).GT.0.2D0) THEN
13290         IR=1
13291         IL=0
13292       ELSEIF(VINT(144).GT.0.2D0) THEN
13293         IR=0
13294         IL=2
13295       ELSEIF(PMS(1)/PSYS(1,4)**2.GT.PMS(2)/PSYS(2,4)**2) THEN
13296         IR=1
13297         IL=0
13298       ELSE
13299         IR=0
13300         IL=2
13301       ENDIF
13302       IG=3-IR-IL
13303  
13304 C...E+-pL wanted for system to be modified.
13305       IF((IG.EQ.1.AND.ISN(1).EQ.0).OR.(IG.EQ.2.AND.ISN(2).EQ.0)) THEN
13306         PPB=VINT(1)
13307         PNB=VINT(1)
13308       ELSE
13309         PPB=VINT(1)-(PSYS(IG,4)+PSYS(IG,3))
13310         PNB=VINT(1)-(PSYS(IG,4)-PSYS(IG,3))
13311       ENDIF
13312  
13313 C...To keep x and Q2 in leptoproduction: do not count scattered lepton.
13314       IF(IDISXQ.EQ.1.AND.IG.NE.0) THEN
13315         PMTB=PPB*PNB
13316         PMTR=PMS(IR)
13317         PMTL=PMS(IL)
13318         SQLAM=SQRT(MAX(0D0,(PMTB-PMTR-PMTL)**2-4D0*PMTR*PMTL))
13319         SQSGN=SIGN(1D0,PSYS(IR,3)*PSYS(IL,4)-PSYS(IL,3)*PSYS(IR,4))
13320         RKR=(PMTB+PMTR-PMTL+SQLAM*SQSGN)/(2D0*(PSYS(IR,4)+PSYS(IR,3))
13321      &  *PNB)
13322         RKL=(PMTB+PMTL-PMTR+SQLAM*SQSGN)/(2D0*(PSYS(IL,4)-PSYS(IL,3))
13323      &  *PPB)
13324         BER=(RKR**2-1D0)/(RKR**2+1D0)
13325         BEL=-(RKL**2-1D0)/(RKL**2+1D0)
13326         PPB=PPB-(PSYS(0,4)+PSYS(0,3))
13327         PNB=PNB-(PSYS(0,4)-PSYS(0,3))
13328         DO 420 J=1,4
13329           PSYS(0,J)=0D0
13330   420   CONTINUE
13331         DO 450 I=MINT(84)+1,NS
13332           IF(K(I,1).GT.10) GOTO 450
13333           INCL=0
13334           IORIG=I
13335   430     IF(IORIG.EQ.LQOUT.OR.IORIG.EQ.LPIN+2) INCL=1
13336           IORIG=K(IORIG,3)
13337           IF(IORIG.GT.LPIN) GOTO 430
13338           IF(INCL.EQ.0) GOTO 450
13339           DO 440 J=1,4
13340             PSYS(0,J)=PSYS(0,J)+P(I,J)
13341   440     CONTINUE
13342   450   CONTINUE
13343         PMS(0)=MAX(0D0,PSYS(0,4)**2-PSYS(0,3)**2)
13344         PPB=PPB+(PSYS(0,4)+PSYS(0,3))
13345         PNB=PNB+(PSYS(0,4)-PSYS(0,3))
13346       ENDIF
13347  
13348 C...Construct longitudinal boosts.
13349       DPMTB=PPB*PNB
13350       DPMTR=PMS(IR)
13351       DPMTL=PMS(IL)
13352       DSQLAM=SQRT(MAX(0D0,(DPMTB-DPMTR-DPMTL)**2-4D0*DPMTR*DPMTL))
13353       IF(DSQLAM.LE.1D-6*DPMTB) THEN
13354         MINT(51)=1
13355         MINT(57)=MINT(57)+1
13356         RETURN
13357       ENDIF
13358       DSQSGN=SIGN(1D0,PSYS(IR,3)*PSYS(IL,4)-PSYS(IL,3)*PSYS(IR,4))
13359       DRKR=(DPMTB+DPMTR-DPMTL+DSQLAM*DSQSGN)/
13360      &(2D0*(PSYS(IR,4)+PSYS(IR,3))*PNB)
13361       DRKL=(DPMTB+DPMTL-DPMTR+DSQLAM*DSQSGN)/
13362      &(2D0*(PSYS(IL,4)-PSYS(IL,3))*PPB)
13363       DBER=(DRKR**2-1D0)/(DRKR**2+1D0)
13364       DBEL=-(DRKL**2-1D0)/(DRKL**2+1D0)
13365  
13366 C...Perform longitudinal boosts.
13367       IF(IR.EQ.1.AND.ISN(1).EQ.1.AND.DBER.LE.-0.99999999D0) THEN
13368         P(IS(1),3)=0D0
13369         P(IS(1),4)=SQRT(P(IS(1),5)**2+P(IS(1),1)**2+P(IS(1),2)**2)
13370       ELSEIF(IR.EQ.1) THEN
13371         CALL PYROBO(IS(1),IS(1)+ISN(1)-1,0D0,0D0,0D0,0D0,DBER)
13372       ELSEIF(IDISXQ.EQ.1) THEN
13373         DO 470 I=I1,NS
13374           INCL=0
13375           IORIG=I
13376   460     IF(IORIG.EQ.LQOUT.OR.IORIG.EQ.LPIN+2) INCL=1
13377           IORIG=K(IORIG,3)
13378           IF(IORIG.GT.LPIN) GOTO 460
13379           IF(INCL.EQ.1) CALL PYROBO(I,I,0D0,0D0,0D0,0D0,DBER)
13380   470   CONTINUE
13381       ELSE
13382         CALL PYROBO(I1,NS,0D0,0D0,0D0,0D0,DBER)
13383       ENDIF
13384       IF(IL.EQ.2.AND.ISN(2).EQ.1.AND.DBEL.GE.0.99999999D0) THEN
13385         P(IS(2),3)=0D0
13386         P(IS(2),4)=SQRT(P(IS(2),5)**2+P(IS(2),1)**2+P(IS(2),2)**2)
13387       ELSEIF(IL.EQ.2) THEN
13388         CALL PYROBO(IS(2),IS(2)+ISN(2)-1,0D0,0D0,0D0,0D0,DBEL)
13389       ELSEIF(IDISXQ.EQ.1) THEN
13390         DO 490 I=I1,NS
13391           INCL=0
13392           IORIG=I
13393   480     IF(IORIG.EQ.LQOUT.OR.IORIG.EQ.LPIN+2) INCL=1
13394           IORIG=K(IORIG,3)
13395           IF(IORIG.GT.LPIN) GOTO 480
13396           IF(INCL.EQ.1) CALL PYROBO(I,I,0D0,0D0,0D0,0D0,DBEL)
13397   490   CONTINUE
13398       ELSE
13399         CALL PYROBO(I1,NS,0D0,0D0,0D0,0D0,DBEL)
13400       ENDIF
13401  
13402 C...Final check that energy-momentum conservation worked.
13403       PESUM=0D0
13404       PZSUM=0D0
13405       DO 500 I=MINT(84)+1,N
13406         IF(K(I,1).GT.10) GOTO 500
13407         PESUM=PESUM+P(I,4)
13408         PZSUM=PZSUM+P(I,3)
13409   500 CONTINUE
13410       PDEV=ABS(PESUM-VINT(1))+ABS(PZSUM)
13411       IF(PDEV.GT.1D-4*VINT(1)) THEN
13412         MINT(51)=1
13413         MINT(57)=MINT(57)+1
13414         RETURN
13415       ENDIF
13416  
13417 C...Calculate rotation and boost from overall CM frame to
13418 C...hadronic CM frame in leptoproduction.
13419       MINT(91)=0
13420       IF(MINT(82).EQ.1.AND.(MINT(43).EQ.2.OR.MINT(43).EQ.3)) THEN
13421         MINT(91)=1
13422         LESD=1
13423         IF(MINT(42).EQ.1) LESD=2
13424         LPIN=MINT(83)+3-LESD
13425  
13426 C...Sum upp momenta of everything not lepton or photon to define boost.
13427         DO 510 J=1,4
13428           PSUM(J)=0D0
13429   510   CONTINUE
13430         DO 530 I=1,N
13431           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 530
13432           IF(IABS(K(I,2)).GE.11.AND.IABS(K(I,2)).LE.20) GOTO 530
13433           IF(K(I,2).EQ.22) GOTO 530
13434           DO 520 J=1,4
13435             PSUM(J)=PSUM(J)+P(I,J)
13436   520     CONTINUE
13437   530   CONTINUE
13438         VINT(223)=-PSUM(1)/PSUM(4)
13439         VINT(224)=-PSUM(2)/PSUM(4)
13440         VINT(225)=-PSUM(3)/PSUM(4)
13441  
13442 C...Boost incoming hadron to hadronic CM frame to determine rotations.
13443         K(N+1,1)=1
13444         DO 540 J=1,5
13445           P(N+1,J)=P(LPIN,J)
13446           V(N+1,J)=V(LPIN,J)
13447   540   CONTINUE
13448         CALL PYROBO(N+1,N+1,0D0,0D0,VINT(223),VINT(224),VINT(225))
13449         VINT(222)=-PYANGL(P(N+1,1),P(N+1,2))
13450         CALL PYROBO(N+1,N+1,0D0,VINT(222),0D0,0D0,0D0)
13451         IF(LESD.EQ.2) THEN
13452           VINT(221)=-PYANGL(P(N+1,3),P(N+1,1))
13453         ELSE
13454           VINT(221)=PYANGL(-P(N+1,3),P(N+1,1))
13455         ENDIF
13456       ENDIF
13457  
13458       RETURN
13459       END
13460  
13461 C*********************************************************************
13462  
13463 C...PYDIFF
13464 C...Handles diffractive and elastic scattering.
13465  
13466       SUBROUTINE PYDIFF
13467  
13468 C...Double precision and integer declarations.
13469       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
13470       IMPLICIT INTEGER(I-N)
13471       INTEGER PYK,PYCHGE,PYCOMP
13472 C...Commonblocks.
13473       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
13474       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
13475       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
13476       COMMON/PYINT1/MINT(400),VINT(400)
13477       SAVE /PYJETS/,/PYDAT1/,/PYPARS/,/PYINT1/
13478  
13479 C...Reset K, P and V vectors. Store incoming particles.
13480       DO 110 JT=1,MSTP(126)+10
13481         I=MINT(83)+JT
13482         DO 100 J=1,5
13483           K(I,J)=0
13484           P(I,J)=0D0
13485           V(I,J)=0D0
13486   100   CONTINUE
13487   110 CONTINUE
13488       N=MINT(84)
13489       MINT(3)=0
13490       MINT(21)=0
13491       MINT(22)=0
13492       MINT(23)=0
13493       MINT(24)=0
13494       MINT(4)=4
13495       DO 130 JT=1,2
13496         I=MINT(83)+JT
13497         K(I,1)=21
13498         K(I,2)=MINT(10+JT)
13499         DO 120 J=1,5
13500           P(I,J)=VINT(285+5*JT+J)
13501   120   CONTINUE
13502   130 CONTINUE
13503       MINT(6)=2
13504  
13505 C...Subprocess; kinematics.
13506       SQLAM=(VINT(2)-VINT(63)-VINT(64))**2-4D0*VINT(63)*VINT(64)
13507       PZ=SQRT(SQLAM)/(2D0*VINT(1))
13508       DO 200 JT=1,2
13509         I=MINT(83)+JT
13510         PE=(VINT(2)+VINT(62+JT)-VINT(65-JT))/(2D0*VINT(1))
13511         KFH=MINT(102+JT)
13512  
13513 C...Elastically scattered particle. (Except elastic GVMD states.)
13514         IF(MINT(16+JT).LE.0.AND.(MINT(10+JT).NE.22.OR.
13515      &  MINT(106+JT).NE.3)) THEN
13516           N=N+1
13517           K(N,1)=1
13518           K(N,2)=KFH
13519           K(N,3)=I+2
13520           P(N,3)=PZ*(-1)**(JT+1)
13521           P(N,4)=PE
13522           P(N,5)=SQRT(VINT(62+JT))
13523  
13524 C...Decay rho from elastic scattering of gamma with sin**2(theta)
13525 C...distribution of decay products (in rho rest frame).
13526           IF(KFH.EQ.113.AND.MINT(10+JT).EQ.22.AND.MSTP(102).EQ.1) THEN
13527             NSAV=N
13528             DBETAZ=P(N,3)/SQRT(P(N,3)**2+P(N,5)**2)
13529             P(N,3)=0D0
13530             P(N,4)=P(N,5)
13531             CALL PYDECY(NSAV)
13532             IF(N.EQ.NSAV+2.AND.IABS(K(NSAV+1,2)).EQ.211) THEN
13533               PHI=PYANGL(P(NSAV+1,1),P(NSAV+1,2))
13534               CALL PYROBO(NSAV+1,NSAV+2,0D0,-PHI,0D0,0D0,0D0)
13535               THE=PYANGL(P(NSAV+1,3),P(NSAV+1,1))
13536               CALL PYROBO(NSAV+1,NSAV+2,-THE,0D0,0D0,0D0,0D0)
13537   140         CTHE=2D0*PYR(0)-1D0
13538               IF(1D0-CTHE**2.LT.PYR(0)) GOTO 140
13539               CALL PYROBO(NSAV+1,NSAV+2,ACOS(CTHE),PHI,0D0,0D0,0D0)
13540             ENDIF
13541             CALL PYROBO(NSAV,NSAV+2,0D0,0D0,0D0,0D0,DBETAZ)
13542           ENDIF
13543  
13544 C...Diffracted particle: low-mass system to two particles.
13545         ELSEIF(VINT(62+JT).LT.(VINT(66+JT)+PARP(103))**2) THEN
13546           N=N+2
13547           K(N-1,1)=1
13548           K(N,1)=1
13549           K(N-1,3)=I+2
13550           K(N,3)=I+2
13551           PMMAS=SQRT(VINT(62+JT))
13552           NTRY=0
13553   150     NTRY=NTRY+1
13554           IF(NTRY.LT.20) THEN
13555             MINT(105)=MINT(102+JT)
13556             MINT(109)=MINT(106+JT)
13557             CALL PYSPLI(KFH,21,KFL1,KFL2)
13558             CALL PYKFDI(KFL1,0,KFL3,KF1)
13559             IF(KF1.EQ.0) GOTO 150
13560             CALL PYKFDI(KFL2,-KFL3,KFLDUM,KF2)
13561             IF(KF2.EQ.0) GOTO 150
13562           ELSE
13563             KF1=KFH
13564             KF2=111
13565           ENDIF
13566           PM1=PYMASS(KF1)
13567           PM2=PYMASS(KF2)
13568           IF(PM1+PM2+PARJ(64).GT.PMMAS) GOTO 150
13569           K(N-1,2)=KF1
13570           K(N,2)=KF2
13571           P(N-1,5)=PM1
13572           P(N,5)=PM2
13573           PZP=SQRT(MAX(0D0,(PMMAS**2-PM1**2-PM2**2)**2-
13574      &    4D0*PM1**2*PM2**2))/(2D0*PMMAS)
13575           P(N-1,3)=PZP
13576           P(N,3)=-PZP
13577           P(N-1,4)=SQRT(PM1**2+PZP**2)
13578           P(N,4)=SQRT(PM2**2+PZP**2)
13579           CALL PYROBO(N-1,N,ACOS(2D0*PYR(0)-1D0),PARU(2)*PYR(0),
13580      &    0D0,0D0,0D0)
13581           DBETAZ=PZ*(-1)**(JT+1)/SQRT(PZ**2+PMMAS**2)
13582           CALL PYROBO(N-1,N,0D0,0D0,0D0,0D0,DBETAZ)
13583  
13584 C...Diffracted particle: valence quark kicked out.
13585         ELSEIF(MSTP(101).EQ.1.OR.(MSTP(101).EQ.3.AND.PYR(0).LT.
13586      &    PARP(101))) THEN
13587           N=N+2
13588           K(N-1,1)=2
13589           K(N,1)=1
13590           K(N-1,3)=I+2
13591           K(N,3)=I+2
13592           MINT(105)=MINT(102+JT)
13593           MINT(109)=MINT(106+JT)
13594           CALL PYSPLI(KFH,21,K(N,2),K(N-1,2))
13595           P(N-1,5)=PYMASS(K(N-1,2))
13596           P(N,5)=PYMASS(K(N,2))
13597           SQLAM=(VINT(62+JT)-P(N-1,5)**2-P(N,5)**2)**2-
13598      &    4D0*P(N-1,5)**2*P(N,5)**2
13599           P(N-1,3)=(PE*SQRT(SQLAM)+PZ*(VINT(62+JT)+P(N-1,5)**2-
13600      &    P(N,5)**2))/(2D0*VINT(62+JT))*(-1)**(JT+1)
13601           P(N-1,4)=SQRT(P(N-1,3)**2+P(N-1,5)**2)
13602           P(N,3)=PZ*(-1)**(JT+1)-P(N-1,3)
13603           P(N,4)=SQRT(P(N,3)**2+P(N,5)**2)
13604  
13605 C...Diffracted particle: gluon kicked out.
13606         ELSE
13607           N=N+3
13608           K(N-2,1)=2
13609           K(N-1,1)=2
13610           K(N,1)=1
13611           K(N-2,3)=I+2
13612           K(N-1,3)=I+2
13613           K(N,3)=I+2
13614           MINT(105)=MINT(102+JT)
13615           MINT(109)=MINT(106+JT)
13616           CALL PYSPLI(KFH,21,K(N,2),K(N-2,2))
13617           K(N-1,2)=21
13618           P(N-2,5)=PYMASS(K(N-2,2))
13619           P(N-1,5)=0D0
13620           P(N,5)=PYMASS(K(N,2))
13621 C...Energy distribution for particle into two jets.
13622   160     IMB=1
13623           IF(MOD(KFH/1000,10).NE.0) IMB=2
13624           CHIK=PARP(92+2*IMB)
13625           IF(MSTP(92).LE.1) THEN
13626             IF(IMB.EQ.1) CHI=PYR(0)
13627             IF(IMB.EQ.2) CHI=1D0-SQRT(PYR(0))
13628           ELSEIF(MSTP(92).EQ.2) THEN
13629             CHI=1D0-PYR(0)**(1D0/(1D0+CHIK))
13630           ELSEIF(MSTP(92).EQ.3) THEN
13631             CUT=2D0*0.3D0/VINT(1)
13632   170       CHI=PYR(0)**2
13633             IF((CHI**2/(CHI**2+CUT**2))**0.25D0*(1D0-CHI)**CHIK.LT.
13634      &      PYR(0)) GOTO 170
13635           ELSEIF(MSTP(92).EQ.4) THEN
13636             CUT=2D0*0.3D0/VINT(1)
13637             CUTR=(1D0+SQRT(1D0+CUT**2))/CUT
13638   180       CHIR=CUT*CUTR**PYR(0)
13639             CHI=(CHIR**2-CUT**2)/(2D0*CHIR)
13640             IF((1D0-CHI)**CHIK.LT.PYR(0)) GOTO 180
13641           ELSE
13642             CUT=2D0*0.3D0/VINT(1)
13643             CUTA=CUT**(1D0-PARP(98))
13644             CUTB=(1D0+CUT)**(1D0-PARP(98))
13645   190       CHI=(CUTA+PYR(0)*(CUTB-CUTA))**(1D0/(1D0-PARP(98)))
13646             IF(((CHI+CUT)**2/(2D0*(CHI**2+CUT**2)))**
13647      &      (0.5D0*PARP(98))*(1D0-CHI)**CHIK.LT.PYR(0)) GOTO 190
13648           ENDIF
13649           IF(CHI.LT.P(N,5)**2/VINT(62+JT).OR.CHI.GT.1D0-P(N-2,5)**2/
13650      &    VINT(62+JT)) GOTO 160
13651           SQM=P(N-2,5)**2/(1D0-CHI)+P(N,5)**2/CHI
13652           PZI=(PE*(VINT(62+JT)-SQM)+PZ*(VINT(62+JT)+SQM))/
13653      &    (2D0*VINT(62+JT))
13654           PEI=SQRT(PZI**2+SQM)
13655           PQQP=(1D0-CHI)*(PEI+PZI)
13656           P(N-2,3)=0.5D0*(PQQP-P(N-2,5)**2/PQQP)*(-1)**(JT+1)
13657           P(N-2,4)=SQRT(P(N-2,3)**2+P(N-2,5)**2)
13658           P(N-1,4)=0.5D0*(VINT(62+JT)-SQM)/(PEI+PZI)
13659           P(N-1,3)=P(N-1,4)*(-1)**JT
13660           P(N,3)=PZI*(-1)**(JT+1)-P(N-2,3)
13661           P(N,4)=SQRT(P(N,3)**2+P(N,5)**2)
13662         ENDIF
13663  
13664 C...Documentation lines.
13665         K(I+2,1)=21
13666         IF(MINT(16+JT).EQ.0) K(I+2,2)=KFH
13667         IF(MINT(16+JT).NE.0.OR.(MINT(10+JT).EQ.22.AND.
13668      &  MINT(106+JT).EQ.3)) K(I+2,2)=10*(KFH/10)
13669         K(I+2,3)=I
13670         P(I+2,3)=PZ*(-1)**(JT+1)
13671         P(I+2,4)=PE
13672         P(I+2,5)=SQRT(VINT(62+JT))
13673   200 CONTINUE
13674  
13675 C...Rotate outgoing partons/particles using cos(theta).
13676       IF(VINT(23).LT.0.9D0) THEN
13677         CALL PYROBO(MINT(83)+3,N,ACOS(VINT(23)),VINT(24),0D0,0D0,0D0)
13678       ELSE
13679         CALL PYROBO(MINT(83)+3,N,ASIN(VINT(59)),VINT(24),0D0,0D0,0D0)
13680       ENDIF
13681  
13682       RETURN
13683       END
13684  
13685 C*********************************************************************
13686  
13687 C...PYDISG
13688 C...Set up a DIS process as gamma* + f -> f, with beam remnant
13689 C...and showering added consecutively. Photon flux by the PYGAGA
13690 C...routine (if at all).
13691  
13692       SUBROUTINE PYDISG
13693  
13694 C...Double precision and integer declarations.
13695       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
13696       IMPLICIT INTEGER(I-N)
13697       INTEGER PYK,PYCHGE,PYCOMP
13698 C...Parameter statement to help give large particle numbers.
13699       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
13700 C...Commonblocks.
13701       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
13702       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
13703       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
13704       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
13705       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
13706       COMMON/PYINT1/MINT(400),VINT(400)
13707       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/
13708 C...Local arrays.
13709       DIMENSION PMS(4)
13710
13711 C...Choice of subprocess, number of documentation lines
13712       IDOC=7
13713       MINT(3)=IDOC-6
13714       MINT(4)=IDOC
13715       IPU1=MINT(84)+1
13716       IPU2=MINT(84)+2
13717       IPU3=MINT(84)+3
13718       ISIDE=1
13719       IF(MINT(107).EQ.4) ISIDE=2   
13720  
13721 C...Reset K, P and V vectors. Store incoming particles
13722       DO 120 JT=1,MSTP(126)+20
13723         I=MINT(83)+JT
13724         DO 110 J=1,5
13725           K(I,J)=0
13726           P(I,J)=0D0
13727           V(I,J)=0D0
13728   110   CONTINUE
13729   120 CONTINUE
13730       DO 140 JT=1,2
13731         I=MINT(83)+JT
13732         K(I,1)=21
13733         K(I,2)=MINT(10+JT)
13734         DO 130 J=1,5
13735           P(I,J)=VINT(285+5*JT+J)
13736   130   CONTINUE
13737   140 CONTINUE
13738       MINT(6)=2
13739  
13740 C...Store incoming partons in hadronic CM-frame
13741       DO 150 JT=1,2
13742         I=MINT(84)+JT
13743         K(I,1)=14
13744         K(I,2)=MINT(14+JT)
13745         K(I,3)=MINT(83)+2+JT
13746   150 CONTINUE
13747       IF(MINT(15).EQ.22) THEN
13748         P(MINT(84)+1,3)=0.5D0*(VINT(1)+VINT(307)/VINT(1))     
13749         P(MINT(84)+1,4)=0.5D0*(VINT(1)-VINT(307)/VINT(1)) 
13750         P(MINT(84)+1,5)=-SQRT(VINT(307))    
13751         P(MINT(84)+2,3)=-0.5D0*VINT(307)/VINT(1)     
13752         P(MINT(84)+2,4)=0.5D0*VINT(307)/VINT(1) 
13753         KFRES=MINT(16) 
13754         ISIDE=2   
13755       ELSE
13756         P(MINT(84)+1,3)=0.5D0*VINT(308)/VINT(1)     
13757         P(MINT(84)+1,4)=0.5D0*VINT(308)/VINT(1)
13758         P(MINT(84)+2,3)=-0.5D0*(VINT(1)+VINT(308)/VINT(1))     
13759         P(MINT(84)+2,4)=0.5D0*(VINT(1)-VINT(308)/VINT(1)) 
13760         P(MINT(84)+1,5)=-SQRT(VINT(308))    
13761         KFRES=MINT(15)
13762         ISIDE=1    
13763       ENDIF
13764       SIDESG=(-1D0)**(ISIDE-1)     
13765  
13766 C...Copy incoming partons to documentation lines.
13767       DO 170 JT=1,2
13768         I1=MINT(83)+4+JT
13769         I2=MINT(84)+JT
13770         K(I1,1)=21
13771         K(I1,2)=K(I2,2)
13772         K(I1,3)=I1-2
13773         DO 160 J=1,5
13774           P(I1,J)=P(I2,J)
13775   160   CONTINUE
13776
13777 C...Second copy for partons before ISR shower, since no such.
13778         I1=MINT(83)+2+JT
13779         K(I1,1)=21
13780         K(I1,2)=K(I2,2)
13781         K(I1,3)=I1-2
13782         DO 165 J=1,5
13783           P(I1,J)=P(I2,J)
13784   165   CONTINUE
13785   170 CONTINUE
13786
13787 C...Define initial partons.
13788       NTRY=0
13789   200 NTRY=NTRY+1
13790       IF(NTRY.GT.100) THEN
13791         MINT(51)=1
13792         RETURN
13793       ENDIF 
13794
13795 C...Scattered quark in hadronic CM frame.
13796       I=MINT(83)+7
13797       K(IPU3,1)=3
13798       K(IPU3,2)=KFRES
13799       K(IPU3,3)=I
13800       P(IPU3,5)=PYMASS(KFRES)
13801       P(IPU3,3)=P(IPU1,3)+P(IPU2,3)
13802       P(IPU3,4)=P(IPU1,4)+P(IPU2,4)
13803       P(IPU3,5)=0D0
13804       K(I,1)=21
13805       K(I,2)=KFRES
13806       K(I,3)=MINT(83)+4+ISIDE
13807       P(I,3)=P(IPU3,3)
13808       P(I,4)=P(IPU3,4)
13809       P(I,5)=P(IPU3,5)
13810       N=IPU3
13811       MINT(21)=KFRES
13812       MINT(22)=0
13813
13814 C...No primordial kT, or chosen according to truncated Gaussian or
13815 C...exponential, or (for photon) predetermined or power law.
13816   220 IF(MINT(40+ISIDE).EQ.2.AND.MINT(10+ISIDE).NE.22) THEN
13817         IF(MSTP(91).LE.0) THEN
13818           PT=0D0
13819         ELSEIF(MSTP(91).EQ.1) THEN
13820           PT=PARP(91)*SQRT(-LOG(PYR(0)))
13821         ELSE
13822           RPT1=PYR(0)
13823           RPT2=PYR(0)
13824           PT=-PARP(92)*LOG(RPT1*RPT2)
13825         ENDIF
13826         IF(PT.GT.PARP(93)) GOTO 220
13827       ELSEIF(MINT(106+ISIDE).EQ.3) THEN
13828         PTA=SQRT(VINT(282+ISIDE))
13829         PTB=0D0
13830         IF(MSTP(66).EQ.5.AND.MSTP(93).EQ.1) THEN
13831           PTB=PARP(99)*SQRT(-LOG(PYR(0)))
13832         ELSEIF(MSTP(66).EQ.5.AND.MSTP(93).EQ.2) THEN
13833           RPT1=PYR(0)
13834           RPT2=PYR(0)
13835           PTB=-PARP(99)*LOG(RPT1*RPT2)
13836         ENDIF
13837         IF(PTB.GT.PARP(100)) GOTO 220
13838         PT=SQRT(PTA**2+PTB**2+2D0*PTA*PTB*COS(PARU(2)*PYR(0)))
13839         IF(NTRY.GT.10) PT=PT*0.8D0**(NTRY-10)
13840       ELSEIF(IABS(MINT(14+ISIDE)).LE.8.OR.MINT(14+ISIDE).EQ.21) THEN
13841         IF(MSTP(93).LE.0) THEN
13842           PT=0D0
13843         ELSEIF(MSTP(93).EQ.1) THEN
13844           PT=PARP(99)*SQRT(-LOG(PYR(0)))
13845         ELSEIF(MSTP(93).EQ.2) THEN
13846           RPT1=PYR(0)
13847           RPT2=PYR(0)
13848           PT=-PARP(99)*LOG(RPT1*RPT2)
13849         ELSEIF(MSTP(93).EQ.3) THEN
13850           HA=PARP(99)**2
13851           HB=PARP(100)**2
13852           PT=SQRT(MAX(0D0,HA*(HA+HB)/(HA+HB-PYR(0)*HB)-HA))
13853         ELSE
13854           HA=PARP(99)**2
13855           HB=PARP(100)**2
13856           IF(MSTP(93).EQ.5) HB=MIN(VINT(48),PARP(100)**2)
13857           PT=SQRT(MAX(0D0,HA*((HA+HB)/HA)**PYR(0)-HA))
13858         ENDIF
13859         IF(PT.GT.PARP(100)) GOTO 220
13860       ELSE
13861         PT=0D0
13862       ENDIF
13863       VINT(156+ISIDE)=PT
13864       PHI=PARU(2)*PYR(0)
13865       P(IPU3,1)=PT*COS(PHI)
13866       P(IPU3,2)=PT*SIN(PHI)
13867       P(IPU3,4)=SQRT(P(IPU3,5)**2+PT**2+P(IPU3,3)**2)  
13868       PMS(3-ISIDE)=P(IPU3,5)**2+P(IPU3,1)**2+P(IPU3,2)**2 
13869       PCP=P(IPU3,4)+ABS(P(IPU3,3))
13870
13871 C...Find one or two beam remnants.
13872       MINT(105)=MINT(102+ISIDE)
13873       MINT(109)=MINT(106+ISIDE)
13874       CALL PYSPLI(MINT(10+ISIDE),MINT(12+ISIDE),KFLCH,KFLSP)
13875       IF(MINT(51).NE.0) THEN
13876         MINT(51)=0
13877         GOTO 200
13878       ENDIF 
13879
13880 C...Store first remnant parton, with colour info and kinematics.
13881       I=N+1
13882       K(I,1)=1
13883       K(I,2)=KFLSP
13884       K(I,3)=MINT(83)+ISIDE
13885       P(I,5)=PYMASS(K(I,2))
13886       KCOL=KCHG(PYCOMP(KFLSP),2)
13887       IF(KCOL.NE.0) THEN
13888         K(I,1)=3
13889         KFLS=(3-KCOL*ISIGN(1,KFLSP))/2
13890         K(I,KFLS+3)=MSTU(5)*IPU3
13891         K(IPU3,6-KFLS)=MSTU(5)*I
13892         ICOLR=I 
13893       ENDIF
13894       IF(KFLCH.EQ.0) THEN
13895         P(I,1)=-P(IPU3,1)
13896         P(I,2)=-P(IPU3,2)
13897         PMS(ISIDE)=P(I,5)**2+P(I,1)**2+P(I,2)**2
13898         P(I,3)=-P(IPU3,3)
13899         P(I,4)=SQRT(PMS(ISIDE)+P(I,3)**2)
13900         PRP=P(I,4)+ABS(P(I,3))
13901  
13902 C...When extra remnant parton or hadron: store extra remnant.
13903       ELSE
13904         I=I+1
13905         K(I,1)=1
13906         K(I,2)=KFLCH
13907         K(I,3)=MINT(83)+ISIDE
13908         P(I,5)=PYMASS(K(I,2))
13909         KCOL=KCHG(PYCOMP(KFLCH),2)
13910         IF(KCOL.NE.0) THEN
13911           K(I,1)=3
13912           KFLS=(3-KCOL*ISIGN(1,KFLCH))/2
13913           K(I,KFLS+3)=MSTU(5)*IPU3
13914           K(IPU3,6-KFLS)=MSTU(5)*I
13915           ICOLR=I 
13916         ENDIF
13917  
13918 C...Relative transverse momentum when two remnants.
13919         LOOP=0
13920   370   LOOP=LOOP+1
13921         CALL PYPTDI(1,P(I-1,1),P(I-1,2))
13922         P(I-1,1)=P(I-1,1)-0.5D0*P(IPU3,1)
13923         P(I-1,2)=P(I-1,2)-0.5D0*P(IPU3,2)        
13924         PMS(3)=P(I-1,5)**2+P(I-1,1)**2+P(I-1,2)**2
13925         P(I,1)=-P(IPU3,1)-P(I-1,1)
13926         P(I,2)=-P(IPU3,2)-P(I-1,2)
13927         PMS(4)=P(I,5)**2+P(I,1)**2+P(I,2)**2
13928  
13929 C...Relative distribution of energy for particle into jet plus particle.
13930         IMB=1
13931         IF(MOD(MINT(10+ISIDE)/1000,10).NE.0) IMB=2
13932         IF(MSTP(94).LE.1) THEN
13933           IF(IMB.EQ.1) CHI=PYR(0)
13934           IF(IMB.EQ.2) CHI=1D0-SQRT(PYR(0))
13935           IF(MOD(KFLCH/1000,10).NE.0) CHI=1D0-CHI
13936         ELSEIF(MSTP(94).EQ.2) THEN
13937           CHI=1D0-PYR(0)**(1D0/(1D0+PARP(93+2*IMB)))
13938           IF(MOD(KFLCH/1000,10).NE.0) CHI=1D0-CHI
13939         ELSEIF(MSTP(94).EQ.3) THEN
13940           CALL PYZDIS(1,0,PMS(4),ZZ)
13941           CHI=ZZ
13942         ELSE
13943           CALL PYZDIS(1000,0,PMS(4),ZZ)
13944           CHI=ZZ
13945         ENDIF
13946  
13947 C...Construct total transverse mass; reject if too large.
13948         CHI=MAX(1D-8,MIN(1D0-1D-8,CHI)) 
13949         PMS(ISIDE)=PMS(4)/CHI+PMS(3)/(1D0-CHI)
13950         IF(PMS(ISIDE).GT.P(IPU3,4)**2) THEN
13951           IF(LOOP.LT.10) GOTO 370
13952           GOTO 200 
13953         ENDIF
13954         VINT(158+ISIDE)=CHI
13955  
13956 C...Subdivide longitudinal momentum according to value selected above.
13957         PRP=SQRT(PMS(ISIDE)+P(IPU3,3)**2)+ABS(P(IPU3,3))
13958         PW1=(1D0-CHI)*PRP
13959         P(I-1,4)=0.5D0*(PW1+PMS(3)/PW1)
13960         P(I-1,3)=0.5D0*(PW1-PMS(3)/PW1)*SIDESG
13961         PW2=CHI*PRP
13962         P(I,4)=0.5D0*(PW2+PMS(4)/PW2)
13963         P(I,3)=0.5D0*(PW2-PMS(4)/PW2)*SIDESG
13964       ENDIF
13965       N=I
13966
13967 C...Boost current and remnant systems to correct frame.
13968       IF(SQRT(PMS(1))+SQRT(PMS(2)).GT.0.99D0*VINT(1)) GOTO 200
13969       DSQLAM=SQRT(MAX(0D0,(VINT(2)-PMS(1)-PMS(2))**2-4D0*PMS(1)*PMS(2)))
13970       DRKC=(VINT(2)+PMS(3-ISIDE)-PMS(ISIDE)+DSQLAM)/
13971      &(2D0*VINT(1)*PCP)
13972       DRKR=(VINT(2)+PMS(ISIDE)-PMS(3-ISIDE)+DSQLAM)/
13973      &(2D0*VINT(1)*PRP)
13974       DBEC=-SIDESG*(DRKC**2-1D0)/(DRKC**2+1D0)
13975       DBER=SIDESG*(DRKR**2-1D0)/(DRKR**2+1D0)
13976       CALL PYROBO(IPU3,IPU3,0D0,0D0,0D0,0D0,DBEC)
13977       CALL PYROBO(IPU3+1,N,0D0,0D0,0D0,0D0,DBER)
13978
13979 C...Let current quark shower; recoil but no showering by colour partner.
13980       QMAX=SQRT(VINT(309-ISIDE))
13981       MSTJ48=MSTJ(48)
13982       MSTJ(48)=1
13983       PARJ86=PARJ(86)
13984       PARJ(86)=0D0  
13985       IF(MSTP(71).EQ.1) CALL PYSHOW(IPU3,ICOLR,QMAX)
13986       MSTJ(48)=MSTJ48
13987       PARJ(86)=PARJ86            
13988
13989       RETURN
13990       END
13991  
13992 C*********************************************************************
13993  
13994 C...PYDOCU
13995 C...Handles the documentation of the process in MSTI and PARI,
13996 C...and also computes cross-sections based on accumulated statistics.
13997  
13998       SUBROUTINE PYDOCU
13999  
14000 C...Double precision and integer declarations.
14001       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
14002       IMPLICIT INTEGER(I-N)
14003       INTEGER PYK,PYCHGE,PYCOMP
14004 C...Commonblocks.
14005       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
14006       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
14007       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
14008       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
14009       COMMON/PYINT1/MINT(400),VINT(400)
14010       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
14011       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
14012       SAVE /PYJETS/,/PYDAT1/,/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,
14013      &/PYINT5/
14014  
14015 C...Calculate Monte Carlo estimates of cross-sections.
14016       ISUB=MINT(1)
14017       IF(MSTP(111).NE.-1) NGEN(ISUB,3)=NGEN(ISUB,3)+1
14018       NGEN(0,3)=NGEN(0,3)+1
14019       XSEC(0,3)=0D0
14020       DO 100 I=1,500
14021         IF(I.EQ.96.OR.I.EQ.97) THEN
14022           XSEC(I,3)=0D0
14023         ELSEIF(MSUB(95).EQ.1.AND.(I.EQ.11.OR.I.EQ.12.OR.I.EQ.13.OR.
14024      &    I.EQ.28.OR.I.EQ.53.OR.I.EQ.68)) THEN
14025           XSEC(I,3)=XSEC(96,2)*NGEN(I,3)/MAX(1D0,DBLE(NGEN(96,1))*
14026      &    DBLE(NGEN(96,2)))
14027         ELSEIF(MSUB(I).EQ.0.OR.NGEN(I,1).EQ.0) THEN
14028           XSEC(I,3)=0D0
14029         ELSEIF(NGEN(I,2).EQ.0) THEN
14030           XSEC(I,3)=XSEC(I,2)*NGEN(0,3)/(DBLE(NGEN(I,1))*
14031      &    DBLE(NGEN(0,2)))
14032         ELSE
14033           XSEC(I,3)=XSEC(I,2)*NGEN(I,3)/(DBLE(NGEN(I,1))*
14034      &    DBLE(NGEN(I,2)))
14035         ENDIF
14036         XSEC(0,3)=XSEC(0,3)+XSEC(I,3)
14037   100 CONTINUE
14038  
14039 C...Rescale to known low-pT cross-section for standard QCD processes.
14040       IF(MSUB(95).EQ.1) THEN
14041         XSECH=XSEC(11,3)+XSEC(12,3)+XSEC(13,3)+XSEC(28,3)+XSEC(53,3)+
14042      &  XSEC(68,3)+XSEC(95,3)
14043         XSECW=XSEC(97,2)/MAX(1D0,DBLE(NGEN(97,1)))
14044         IF(XSECH.GT.1D-20.AND.XSECW.GT.1D-20) THEN
14045           FAC=XSECW/XSECH
14046           XSEC(11,3)=FAC*XSEC(11,3)
14047           XSEC(12,3)=FAC*XSEC(12,3)
14048           XSEC(13,3)=FAC*XSEC(13,3)
14049           XSEC(28,3)=FAC*XSEC(28,3)
14050           XSEC(53,3)=FAC*XSEC(53,3)
14051           XSEC(68,3)=FAC*XSEC(68,3)
14052           XSEC(95,3)=FAC*XSEC(95,3)
14053           XSEC(0,3)=XSEC(0,3)-XSECH+XSECW
14054         ENDIF
14055       ENDIF
14056  
14057 C...Save information for gamma-p and gamma-gamma.
14058       IF(MINT(121).GT.1) THEN
14059         IGA=MINT(122)
14060         CALL PYSAVE(2,IGA)
14061         CALL PYSAVE(5,0)
14062       ENDIF
14063  
14064 C...Reset information on hard interaction.
14065       DO 110 J=1,200
14066         MSTI(J)=0
14067         PARI(J)=0D0
14068   110 CONTINUE
14069  
14070 C...Copy integer valued information from MINT into MSTI.
14071       DO 120 J=1,32
14072         MSTI(J)=MINT(J)
14073   120 CONTINUE
14074       IF(MINT(121).GT.1) MSTI(9)=MINT(122)
14075  
14076 C...Store cross-section variables in PARI.
14077       PARI(1)=XSEC(0,3)
14078       PARI(2)=XSEC(0,3)/MINT(5)
14079       PARI(9)=VINT(99)
14080       PARI(10)=VINT(100)
14081       VINT(98)=VINT(98)+VINT(100)
14082       IF(MSTP(142).EQ.1) PARI(2)=XSEC(0,3)/VINT(98)
14083  
14084 C...Store kinematics variables in PARI.
14085       PARI(11)=VINT(1)
14086       PARI(12)=VINT(2)
14087       IF(ISUB.NE.95) THEN
14088         DO 130 J=13,26
14089           PARI(J)=VINT(30+J)
14090   130   CONTINUE
14091         PARI(31)=VINT(141)
14092         PARI(32)=VINT(142)
14093         PARI(33)=VINT(41)
14094         PARI(34)=VINT(42)
14095         PARI(35)=PARI(33)-PARI(34)
14096         PARI(36)=VINT(21)
14097         PARI(37)=VINT(22)
14098         PARI(38)=VINT(26)
14099         PARI(39)=VINT(157)
14100         PARI(40)=VINT(158)
14101         PARI(41)=VINT(23)
14102         PARI(42)=2D0*VINT(47)/VINT(1)
14103       ENDIF
14104  
14105 C...Store information on scattered partons in PARI.
14106       IF(ISUB.NE.95.AND.MINT(7)*MINT(8).NE.0) THEN
14107         DO 140 IS=7,8
14108           I=MINT(IS)
14109           PARI(36+IS)=P(I,3)/VINT(1)
14110           PARI(38+IS)=P(I,4)/VINT(1)
14111           PR=MAX(1D-20,P(I,5)**2+P(I,1)**2+P(I,2)**2)
14112           PARI(40+IS)=SIGN(LOG(MIN((SQRT(PR+P(I,3)**2)+ABS(P(I,3)))/
14113      &    SQRT(PR),1D20)),P(I,3))
14114           PR=MAX(1D-20,P(I,1)**2+P(I,2)**2)
14115           PARI(42+IS)=SIGN(LOG(MIN((SQRT(PR+P(I,3)**2)+ABS(P(I,3)))/
14116      &    SQRT(PR),1D20)),P(I,3))
14117           PARI(44+IS)=P(I,3)/SQRT(1D-20+P(I,1)**2+P(I,2)**2+P(I,3)**2)
14118           PARI(46+IS)=PYANGL(P(I,3),SQRT(P(I,1)**2+P(I,2)**2))
14119           PARI(48+IS)=PYANGL(P(I,1),P(I,2))
14120   140   CONTINUE
14121       ENDIF
14122  
14123 C...Store sum up transverse and longitudinal momenta.
14124       PARI(65)=2D0*PARI(17)
14125       IF(ISUB.LE.90.OR.ISUB.GE.95) THEN
14126         DO 150 I=MSTP(126)+1,N
14127           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 150
14128           PT=SQRT(P(I,1)**2+P(I,2)**2)
14129           PARI(69)=PARI(69)+PT
14130           IF(I.LE.MINT(52)) PARI(66)=PARI(66)+PT
14131           IF(I.GT.MINT(52).AND.I.LE.MINT(53)) PARI(68)=PARI(68)+PT
14132   150   CONTINUE
14133         PARI(67)=PARI(68)
14134         PARI(71)=VINT(151)
14135         PARI(72)=VINT(152)
14136         PARI(73)=VINT(151)
14137         PARI(74)=VINT(152)
14138       ELSE
14139         PARI(66)=PARI(65)
14140         PARI(69)=PARI(65)
14141       ENDIF
14142  
14143 C...Store various other pieces of information into PARI.
14144       PARI(61)=VINT(148)
14145       PARI(75)=VINT(155)
14146       PARI(76)=VINT(156)
14147       PARI(77)=VINT(159)
14148       PARI(78)=VINT(160)
14149       PARI(81)=VINT(138)
14150  
14151 C...Store information on lepton -> lepton + gamma in PYGAGA.
14152       MSTI(71)=MINT(141)
14153       MSTI(72)=MINT(142)
14154       PARI(101)=VINT(301)
14155       PARI(102)=VINT(302)
14156       DO 160 I=103,114
14157         PARI(I)=VINT(I+202)
14158   160 CONTINUE
14159  
14160 C...Set information for PYTABU.
14161       IF(ISET(ISUB).EQ.1.OR.ISET(ISUB).EQ.3) THEN
14162         MSTU(161)=MINT(21)
14163         MSTU(162)=0
14164       ELSEIF(ISET(ISUB).EQ.5) THEN
14165         MSTU(161)=MINT(23)
14166         MSTU(162)=0
14167       ELSE
14168         MSTU(161)=MINT(21)
14169         MSTU(162)=MINT(22)
14170       ENDIF
14171  
14172       RETURN
14173       END
14174  
14175 C*********************************************************************
14176  
14177 C...PYFRAM
14178 C...Performs transformations between different coordinate frames.
14179  
14180       SUBROUTINE PYFRAM(IFRAME)
14181  
14182 C...Double precision and integer declarations.
14183       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
14184       IMPLICIT INTEGER(I-N)
14185       INTEGER PYK,PYCHGE,PYCOMP
14186 C...Commonblocks.
14187       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
14188       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
14189       COMMON/PYINT1/MINT(400),VINT(400)
14190       SAVE /PYDAT1/,/PYPARS/,/PYINT1/
14191  
14192 C...Check that transformation can and should be done.
14193       IF(IFRAME.EQ.1.OR.IFRAME.EQ.2.OR.(IFRAME.EQ.3.AND.
14194      &MINT(91).EQ.1)) THEN
14195         IF(IFRAME.EQ.MINT(6)) RETURN
14196       ELSE
14197         WRITE(MSTU(11),5000) IFRAME,MINT(6)
14198         RETURN
14199       ENDIF
14200  
14201       IF(MINT(6).EQ.1) THEN
14202 C...Transform from fixed target or user specified frame to
14203 C...overall CM frame.
14204         CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
14205         CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
14206         CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
14207       ELSEIF(MINT(6).EQ.3) THEN
14208 C...Transform from hadronic CM frame in DIS to overall CM frame.
14209         CALL PYROBO(0,0,-VINT(221),-VINT(222),-VINT(223),-VINT(224),
14210      &  -VINT(225))
14211       ENDIF
14212  
14213       IF(IFRAME.EQ.1) THEN
14214 C...Transform from overall CM frame to fixed target or user specified
14215 C...frame.
14216         CALL PYROBO(0,0,VINT(6),VINT(7),VINT(8),VINT(9),VINT(10))
14217       ELSEIF(IFRAME.EQ.3) THEN
14218 C...Transform from overall CM frame to hadronic CM frame in DIS.
14219         CALL PYROBO(0,0,0D0,0D0,VINT(223),VINT(224),VINT(225))
14220         CALL PYROBO(0,0,0D0,VINT(222),0D0,0D0,0D0)
14221         CALL PYROBO(0,0,VINT(221),0D0,0D0,0D0,0D0)
14222       ENDIF
14223  
14224 C...Set information about new frame.
14225       MINT(6)=IFRAME
14226       MSTI(6)=IFRAME
14227  
14228  5000 FORMAT(1X,'Error: illegal values in subroutine PYFRAM.',1X,
14229      &'No transformation performed.'/1X,'IFRAME =',1X,I5,'; MINT(6) =',
14230      &1X,I5)
14231  
14232       RETURN
14233       END
14234  
14235 C*********************************************************************
14236  
14237 C...PYWIDT
14238 C...Calculates full and partial widths of resonances.
14239  
14240       SUBROUTINE PYWIDT(KFLR,SH,WDTP,WDTE)
14241  
14242 C...Double precision and integer declarations.
14243       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
14244       IMPLICIT INTEGER(I-N)
14245       INTEGER PYK,PYCHGE,PYCOMP
14246 C...Parameter statement to help give large particle numbers.
14247       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
14248 C...Commonblocks.
14249       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
14250       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
14251       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
14252       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
14253       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
14254       COMMON/PYINT1/MINT(400),VINT(400)
14255       COMMON/PYINT4/MWID(500),WIDS(500,5)
14256       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
14257       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
14258      &SFMIX(16,4)
14259       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
14260      &/PYINT4/,/PYMSSM/,/PYSSMT/
14261 C...Local arrays and saved variables.
14262       DIMENSION WDTP(0:200),WDTE(0:200,0:5),MOFSV(3,2),WIDWSV(3,2),
14263      &WID2SV(3,2),WDTPP(0:200),WDTEP(0:200,0:5)
14264       SAVE MOFSV,WIDWSV,WID2SV
14265       DATA MOFSV/6*0/,WIDWSV/6*0D0/,WID2SV/6*0D0/
14266  
14267 C...Compressed code and sign; mass.
14268       KFLA=IABS(KFLR)
14269       KFLS=ISIGN(1,KFLR)
14270       KC=PYCOMP(KFLA)
14271       SHR=SQRT(SH)
14272       PMR=PMAS(KC,1)
14273  
14274 C...Reset width information.
14275       DO 110 I=0,200
14276         WDTP(I)=0D0
14277         DO 100 J=0,5
14278           WDTE(I,J)=0D0
14279   100   CONTINUE
14280   110 CONTINUE
14281  
14282 C...Not to be treated as a resonance: return.
14283       IF((MWID(KC).LE.0.OR.MWID(KC).GE.4).AND.KFLA.NE.21.AND.
14284      &KFLA.NE.22) THEN
14285         WDTP(0)=1D0
14286         WDTE(0,0)=1D0
14287         MINT(61)=0
14288         MINT(62)=0
14289         MINT(63)=0
14290         RETURN
14291  
14292 C...Treatment as a resonance based on tabulated branching ratios.
14293       ELSEIF(MWID(KC).EQ.2.OR.(MWID(KC).EQ.3.AND.MINT(63).EQ.0)) THEN
14294 C...Loop over possible decay channels; skip irrelevant ones.
14295         DO 120 I=1,MDCY(KC,3)
14296           IDC=I+MDCY(KC,2)-1
14297           IF(MDME(IDC,1).LT.0) GOTO 120
14298  
14299 C...Read out decay products and nominal masses.
14300           KFD1=KFDP(IDC,1)
14301           KFC1=PYCOMP(KFD1)
14302           IF(KCHG(KFC1,3).EQ.1) KFD1=KFLS*KFD1
14303           PM1=PMAS(KFC1,1)
14304           KFD2=KFDP(IDC,2)
14305           KFC2=PYCOMP(KFD2)
14306           IF(KCHG(KFC2,3).EQ.1) KFD2=KFLS*KFD2
14307           PM2=PMAS(KFC2,1)
14308           KFD3=KFDP(IDC,3)
14309           PM3=0D0
14310           IF(KFD3.NE.0) THEN
14311             KFC3=PYCOMP(KFD3)
14312             IF(KCHG(KFC3,3).EQ.1) KFD3=KFLS*KFD3
14313             PM3=PMAS(KFC3,1)
14314           ENDIF
14315  
14316 C...Naive partial width and alternative threshold factors.
14317           WDTP(I)=PMAS(KC,2)*BRAT(IDC)*(SHR/PMR)
14318           IF(MDME(IDC,2).GE.51.AND.MDME(IDC,2).LE.53.AND.
14319      &    PM1+PM2+PM3.GE.SHR) THEN
14320              WDTP(I)=0D0
14321           ELSEIF(MDME(IDC,2).EQ.52.AND.KFD3.EQ.0) THEN
14322             WDTP(I)=WDTP(I)*SQRT(MAX(0D0,(SH-PM1**2-PM2**2)**2-
14323      &      4D0*PM1**2*PM2**2))/SH
14324           ELSEIF(MDME(IDC,2).EQ.52) THEN
14325             PMA=MAX(PM1,PM2,PM3)
14326             PMC=MIN(PM1,PM2,PM3)
14327             PMB=PM1+PM2+PM3-PMA-PMC
14328             PMBC=PMB+PMC+0.5D0*(SHR-PMA-PMC-PMC)
14329             PMAN=PMA**2/SH
14330             PMBN=PMB**2/SH
14331             PMCN=PMC**2/SH
14332             PMBCN=PMBC**2/SH
14333             WDTP(I)=WDTP(I)*SQRT(MAX(0D0,
14334      &      ((1D0-PMAN-PMBCN)**2-4D0*PMAN*PMBCN)*
14335      &      ((PMBCN-PMBN-PMCN)**2-4D0*PMBN*PMCN)))*
14336      &      ((SHR-PMA)**2-(PMB+PMC)**2)*
14337      &      (1D0+0.25D0*(PMA+PMB+PMC)/SHR)/
14338      &      ((1D0-PMBCN)*PMBCN*SH)
14339           ELSEIF(MDME(IDC,2).EQ.53.AND.KFD3.EQ.0) THEN
14340             WDTP(I)=WDTP(I)*SQRT(
14341      &      MAX(0D0,(SH-PM1**2-PM2**2)**2-4D0*PM1**2*PM2**2)/
14342      &      MAX(1D-4,(PMR**2-PM1**2-PM2**2)**2-4D0*PM1**2*PM2**2))
14343           ELSEIF(MDME(IDC,2).EQ.53) THEN
14344             PMA=MAX(PM1,PM2,PM3)
14345             PMC=MIN(PM1,PM2,PM3)
14346             PMB=PM1+PM2+PM3-PMA-PMC
14347             PMBC=PMB+PMC+0.5D0*(SHR-PMA-PMB-PMC)
14348             PMAN=PMA**2/SH
14349             PMBN=PMB**2/SH
14350             PMCN=PMC**2/SH
14351             PMBCN=PMBC**2/SH
14352             FACACT=SQRT(MAX(0D0,
14353      &      ((1D0-PMAN-PMBCN)**2-4D0*PMAN*PMBCN)*
14354      &      ((PMBCN-PMBN-PMCN)**2-4D0*PMBN*PMCN)))*
14355      &      ((SHR-PMA)**2-(PMB+PMC)**2)*
14356      &      (1D0+0.25D0*(PMA+PMB+PMC)/SHR)/
14357      &      ((1D0-PMBCN)*PMBCN*SH)
14358             PMBC=PMB+PMC+0.5D0*(PMR-PMA-PMB-PMC)
14359             PMAN=PMA**2/PMR**2
14360             PMBN=PMB**2/PMR**2
14361             PMCN=PMC**2/PMR**2
14362             PMBCN=PMBC**2/PMR**2
14363             FACNOM=SQRT(MAX(0D0,
14364      &      ((1D0-PMAN-PMBCN)**2-4D0*PMAN*PMBCN)*
14365      &      ((PMBCN-PMBN-PMCN)**2-4D0*PMBN*PMCN)))*
14366      &      ((PMR-PMA)**2-(PMB+PMC)**2)*
14367      &      (1D0+0.25D0*(PMA+PMB+PMC)/PMR)/
14368      &      ((1D0-PMBCN)*PMBCN*PMR**2)
14369             WDTP(I)=WDTP(I)*FACACT/MAX(1D-6,FACNOM)
14370           ENDIF
14371           WDTP(0)=WDTP(0)+WDTP(I)
14372  
14373 C...Calculate secondary width (at most two identical/opposite).
14374           WID2=1D0
14375           IF(MDME(IDC,1).GT.0) THEN
14376             IF(KFD2.EQ.KFD1) THEN
14377               IF(KCHG(KFC1,3).EQ.0) THEN
14378                 WID2=WIDS(KFC1,1)
14379               ELSEIF(KFD1.GT.0) THEN
14380                 WID2=WIDS(KFC1,4)
14381               ELSE
14382                 WID2=WIDS(KFC1,5)
14383               ENDIF
14384               IF(KFD3.GT.0) THEN
14385                 WID2=WID2*WIDS(KFC3,2)
14386               ELSEIF(KFD3.LT.0) THEN
14387                 WID2=WID2*WIDS(KFC3,3)
14388               ENDIF
14389             ELSEIF(KFD2.EQ.-KFD1) THEN
14390               WID2=WIDS(KFC1,1)
14391               IF(KFD3.GT.0) THEN
14392                 WID2=WID2*WIDS(KFC3,2)
14393               ELSEIF(KFD3.LT.0) THEN
14394                 WID2=WID2*WIDS(KFC3,3)
14395               ENDIF
14396             ELSEIF(KFD3.EQ.KFD1) THEN
14397               IF(KCHG(KFC1,3).EQ.0) THEN
14398                 WID2=WIDS(KFC1,1)
14399               ELSEIF(KFD1.GT.0) THEN
14400                 WID2=WIDS(KFC1,4)
14401               ELSE
14402                 WID2=WIDS(KFC1,5)
14403               ENDIF
14404               IF(KFD2.GT.0) THEN
14405                 WID2=WID2*WIDS(KFC2,2)
14406               ELSEIF(KFD2.LT.0) THEN
14407                 WID2=WID2*WIDS(KFC2,3)
14408               ENDIF
14409             ELSEIF(KFD3.EQ.-KFD1) THEN
14410               WID2=WIDS(KFC1,1)
14411               IF(KFD2.GT.0) THEN
14412                 WID2=WID2*WIDS(KFC2,2)
14413               ELSEIF(KFD2.LT.0) THEN
14414                 WID2=WID2*WIDS(KFC2,3)
14415               ENDIF
14416             ELSEIF(KFD3.EQ.KFD2) THEN
14417               IF(KCHG(KFC2,3).EQ.0) THEN
14418                 WID2=WIDS(KFC2,1)
14419               ELSEIF(KFD2.GT.0) THEN
14420                 WID2=WIDS(KFC2,4)
14421               ELSE
14422                 WID2=WIDS(KFC2,5)
14423               ENDIF
14424               IF(KFD1.GT.0) THEN
14425                 WID2=WID2*WIDS(KFC1,2)
14426               ELSEIF(KFD1.LT.0) THEN
14427                 WID2=WID2*WIDS(KFC1,3)
14428               ENDIF
14429             ELSEIF(KFD3.EQ.-KFD2) THEN
14430               WID2=WIDS(KFC2,1)
14431               IF(KFD1.GT.0) THEN
14432                 WID2=WID2*WIDS(KFC1,2)
14433               ELSEIF(KFD1.LT.0) THEN
14434                 WID2=WID2*WIDS(KFC1,3)
14435               ENDIF
14436             ELSE
14437               IF(KFD1.GT.0) THEN
14438                 WID2=WIDS(KFC1,2)
14439               ELSE
14440                 WID2=WIDS(KFC1,3)
14441               ENDIF
14442               IF(KFD2.GT.0) THEN
14443                 WID2=WID2*WIDS(KFC2,2)
14444               ELSE
14445                 WID2=WID2*WIDS(KFC2,3)
14446               ENDIF
14447               IF(KFD3.GT.0) THEN
14448                 WID2=WID2*WIDS(KFC3,2)
14449               ELSEIF(KFD3.LT.0) THEN
14450                 WID2=WID2*WIDS(KFC3,3)
14451               ENDIF
14452             ENDIF
14453  
14454 C...Store effective widths according to case.
14455             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14456             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14457             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14458             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14459           ENDIF
14460   120   CONTINUE
14461 C...Return.
14462         MINT(61)=0
14463         MINT(62)=0
14464         MINT(63)=0
14465         RETURN
14466       ENDIF
14467  
14468 C...Here begins detailed dynamical calculation of resonance widths.
14469 C...Shared treatment of Higgs states.
14470       KFHIGG=25
14471       IHIGG=1
14472       IF(KFLA.EQ.35.OR.KFLA.EQ.36) THEN
14473         KFHIGG=KFLA
14474         IHIGG=KFLA-33
14475       ENDIF
14476  
14477 C...Common electroweak and strong constants.
14478       XW=PARU(102)
14479       XWV=XW
14480       IF(MSTP(8).GE.2) XW=1D0-(PMAS(24,1)/PMAS(23,1))**2
14481       XW1=1D0-XW
14482       AEM=PYALEM(SH)
14483       IF(MSTP(8).GE.1) AEM=SQRT(2D0)*PARU(105)*PMAS(24,1)**2*XW/PARU(1)
14484       AS=PYALPS(SH)
14485       RADC=1D0+AS/PARU(1)
14486  
14487       IF(KFLA.EQ.6) THEN
14488 C...t quark.
14489         FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
14490         RADCT=1D0-2.5D0*AS/PARU(1)
14491         DO 130 I=1,MDCY(KC,3)
14492           IDC=I+MDCY(KC,2)-1
14493           IF(MDME(IDC,1).LT.0) GOTO 130
14494           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
14495           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
14496           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 130
14497           WID2=1D0
14498           IF(I.GE.4.AND.I.LE.7) THEN
14499 C...t -> W + q; including approximate QCD correction factor.
14500             WDTP(I)=FAC*VCKM(3,I-3)*RADCT*
14501      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14502      &      ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
14503             IF(KFLR.GT.0) THEN
14504               WID2=WIDS(24,2)
14505               IF(I.EQ.7) WID2=WID2*WIDS(7,2)
14506             ELSE
14507               WID2=WIDS(24,3)
14508               IF(I.EQ.7) WID2=WID2*WIDS(7,3)
14509             ENDIF
14510           ELSEIF(I.EQ.9) THEN
14511 C...t -> H + b.
14512             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14513      &      ((1D0+RM2-RM1)*(RM2*PARU(141)**2+1D0/PARU(141)**2)+4D0*RM2)
14514             WID2=WIDS(37,2)
14515             IF(KFLR.LT.0) WID2=WIDS(37,3)
14516 CMRENNA++
14517           ELSEIF(I.GE.10.AND.I.LE.13.AND.IMSS(1).NE.0) THEN
14518 C...t -> ~t + ~chi_i0, i = 1, 2, 3 or 4.
14519             BETA=ATAN(RMSS(5))
14520             SINB=SIN(BETA)
14521             TANW=SQRT(PARU(102)/(1D0-PARU(102)))
14522             ET=KCHG(6,1)/3D0
14523             T3L=SIGN(0.5D0,ET)
14524             KFC1=PYCOMP(KFDP(IDC,1))
14525             KFC2=PYCOMP(KFDP(IDC,2))
14526             PMNCHI=PMAS(KFC1,1)
14527             PMSTOP=PMAS(KFC2,1)
14528             IF(SHR.GT.PMNCHI+PMSTOP) THEN
14529               IZ=I-9
14530               AL=SHR*ZMIX(IZ,4)/(2.0D0*PMAS(24,1)*SINB)
14531               AR=-ET*ZMIX(IZ,1)*TANW
14532               BL=T3L*(ZMIX(IZ,2)-ZMIX(IZ,1)*TANW)-AR
14533               BR=AL
14534               FL=SFMIX(6,1)*AL+SFMIX(6,2)*AR
14535               FR=SFMIX(6,1)*BL+SFMIX(6,2)*BR
14536               PCM=SQRT((SH-(PMNCHI+PMSTOP)**2)*
14537      &        (SH-(PMNCHI-PMSTOP)**2))/(2D0*SHR)
14538               WDTP(I)=(0.5D0*PYALEM(SH)/PARU(102))*PCM*((FL**2+FR**2)*
14539      &        (SH+PMNCHI**2-PMSTOP**2)+SMZ(IZ)*4D0*SHR*FL*FR)/SH
14540               IF(KFLR.GT.0) THEN
14541                 WID2=WIDS(KFC1,2)*WIDS(KFC2,2)
14542               ELSE
14543                 WID2=WIDS(KFC1,2)*WIDS(KFC2,3)
14544               ENDIF
14545             ENDIF
14546           ELSEIF(I.EQ.14.AND.IMSS(1).NE.0) THEN
14547 C...t -> ~g + ~t
14548             KFC1=PYCOMP(KFDP(IDC,1))
14549             KFC2=PYCOMP(KFDP(IDC,2))
14550             PMNCHI=PMAS(KFC1,1)
14551             PMSTOP=PMAS(KFC2,1)
14552             IF(SHR.GT.PMNCHI+PMSTOP) THEN
14553               FL=SFMIX(6,1)
14554               FR=-SFMIX(6,2)
14555               PCM=SQRT((SH-(PMNCHI+PMSTOP)**2)*
14556      &        (SH-(PMNCHI-PMSTOP)**2))/(2D0*SHR)
14557               WDTP(I)=4D0/3D0*0.5D0*PYALPS(SH)*PCM*((FL**2+FR**2)*
14558      &        (SH+PMNCHI**2-PMSTOP**2)+PMNCHI*4D0*SHR*FL*FR)/SH
14559               IF(KFLR.GT.0) THEN
14560                 WID2=WIDS(KFC1,2)*WIDS(KFC2,2)
14561               ELSE
14562                 WID2=WIDS(KFC1,2)*WIDS(KFC2,3)
14563               ENDIF
14564             ENDIF
14565           ELSEIF(I.EQ.15.AND.IMSS(1).NE.0) THEN
14566 C...t -> ~gravitino + ~t
14567             XMP2=RMSS(29)**2
14568             KFC1=PYCOMP(KFDP(IDC,1))
14569             XMGR2=PMAS(KFC1,1)**2
14570             WDTP(I)=SH**2*SHR/(96D0*PARU(1)*XMP2*XMGR2)*(1D0-RM2)**4
14571             KFC2=PYCOMP(KFDP(IDC,2))
14572             WID2=WIDS(KFC2,2)
14573             IF(KFLR.LT.0) WID2=WIDS(KFC2,3)
14574 CMRENNA--
14575           ENDIF
14576           WDTP(0)=WDTP(0)+WDTP(I)
14577           IF(MDME(IDC,1).GT.0) THEN
14578             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14579             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14580             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14581             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14582           ENDIF
14583   130   CONTINUE
14584  
14585       ELSEIF(KFLA.EQ.7) THEN
14586 C...b' quark.
14587         FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
14588         DO 140 I=1,MDCY(KC,3)
14589           IDC=I+MDCY(KC,2)-1
14590           IF(MDME(IDC,1).LT.0) GOTO 140
14591           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
14592           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
14593           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 140
14594           WID2=1D0
14595           IF(I.GE.4.AND.I.LE.7) THEN
14596 C...b' -> W + q.
14597             WDTP(I)=FAC*VCKM(I-3,4)*
14598      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14599      &      ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
14600             IF(KFLR.GT.0) THEN
14601               WID2=WIDS(24,3)
14602               IF(I.EQ.6) WID2=WID2*WIDS(6,2)
14603               IF(I.EQ.7) WID2=WID2*WIDS(8,2)
14604             ELSE
14605               WID2=WIDS(24,2)
14606               IF(I.EQ.6) WID2=WID2*WIDS(6,3)
14607               IF(I.EQ.7) WID2=WID2*WIDS(8,3)
14608             ENDIF
14609             WID2=WIDS(24,3)
14610             IF(KFLR.LT.0) WID2=WIDS(24,2)
14611           ELSEIF(I.EQ.9.OR.I.EQ.10) THEN
14612 C...b' -> H + q.
14613             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14614      &      ((1D0+RM2-RM1)*(PARU(141)**2+RM2/PARU(141)**2)+4D0*RM2)
14615             IF(KFLR.GT.0) THEN
14616               WID2=WIDS(37,3)
14617               IF(I.EQ.10) WID2=WID2*WIDS(6,2)
14618             ELSE
14619               WID2=WIDS(37,2)
14620               IF(I.EQ.10) WID2=WID2*WIDS(6,3)
14621             ENDIF
14622           ENDIF
14623           WDTP(0)=WDTP(0)+WDTP(I)
14624           IF(MDME(IDC,1).GT.0) THEN
14625             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14626             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14627             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14628             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14629           ENDIF
14630   140   CONTINUE
14631  
14632       ELSEIF(KFLA.EQ.8) THEN
14633 C...t' quark.
14634         FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
14635         DO 150 I=1,MDCY(KC,3)
14636           IDC=I+MDCY(KC,2)-1
14637           IF(MDME(IDC,1).LT.0) GOTO 150
14638           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
14639           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
14640           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 150
14641           WID2=1D0
14642           IF(I.GE.4.AND.I.LE.7) THEN
14643 C...t' -> W + q.
14644             WDTP(I)=FAC*VCKM(4,I-3)*
14645      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14646      &      ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
14647             IF(KFLR.GT.0) THEN
14648               WID2=WIDS(24,2)
14649               IF(I.EQ.7) WID2=WID2*WIDS(7,2)
14650             ELSE
14651               WID2=WIDS(24,3)
14652               IF(I.EQ.7) WID2=WID2*WIDS(7,3)
14653             ENDIF
14654           ELSEIF(I.EQ.9.OR.I.EQ.10) THEN
14655 C...t' -> H + q.
14656             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14657      &      ((1D0+RM2-RM1)*(RM2*PARU(141)**2+1D0/PARU(141)**2)+4D0*RM2)
14658             IF(KFLR.GT.0) THEN
14659               WID2=WIDS(37,2)
14660               IF(I.EQ.10) WID2=WID2*WIDS(7,2)
14661             ELSE
14662               WID2=WIDS(37,3)
14663               IF(I.EQ.10) WID2=WID2*WIDS(7,3)
14664             ENDIF
14665           ENDIF
14666           WDTP(0)=WDTP(0)+WDTP(I)
14667           IF(MDME(IDC,1).GT.0) THEN
14668             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14669             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14670             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14671             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14672           ENDIF
14673   150   CONTINUE
14674  
14675       ELSEIF(KFLA.EQ.17) THEN
14676 C...tau' lepton.
14677         FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
14678         DO 160 I=1,MDCY(KC,3)
14679           IDC=I+MDCY(KC,2)-1
14680           IF(MDME(IDC,1).LT.0) GOTO 160
14681           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
14682           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
14683           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 160
14684           WID2=1D0
14685           IF(I.EQ.3) THEN
14686 C...tau' -> W + nu'_tau.
14687             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14688      &      ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
14689             IF(KFLR.GT.0) THEN
14690               WID2=WIDS(24,3)
14691               WID2=WID2*WIDS(18,2)
14692             ELSE
14693               WID2=WIDS(24,2)
14694               WID2=WID2*WIDS(18,3)
14695             ENDIF
14696           ELSEIF(I.EQ.5) THEN
14697 C...tau' -> H + nu'_tau.
14698             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14699      &      ((1D0+RM2-RM1)*(PARU(141)**2+RM2/PARU(141)**2)+4D0*RM2)
14700             IF(KFLR.GT.0) THEN
14701               WID2=WIDS(37,3)
14702               WID2=WID2*WIDS(18,2)
14703             ELSE
14704               WID2=WIDS(37,2)
14705               WID2=WID2*WIDS(18,3)
14706             ENDIF
14707           ENDIF
14708           WDTP(0)=WDTP(0)+WDTP(I)
14709           IF(MDME(IDC,1).GT.0) THEN
14710             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14711             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14712             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14713             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14714           ENDIF
14715   160   CONTINUE
14716  
14717       ELSEIF(KFLA.EQ.18) THEN
14718 C...nu'_tau neutrino.
14719         FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
14720         DO 170 I=1,MDCY(KC,3)
14721           IDC=I+MDCY(KC,2)-1
14722           IF(MDME(IDC,1).LT.0) GOTO 170
14723           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
14724           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
14725           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 170
14726           WID2=1D0
14727           IF(I.EQ.2) THEN
14728 C...nu'_tau -> W + tau'.
14729             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14730      &      ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
14731             IF(KFLR.GT.0) THEN
14732               WID2=WIDS(24,2)
14733               WID2=WID2*WIDS(17,2)
14734             ELSE
14735               WID2=WIDS(24,3)
14736               WID2=WID2*WIDS(17,3)
14737             ENDIF
14738           ELSEIF(I.EQ.3) THEN
14739 C...nu'_tau -> H + tau'.
14740             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14741      &      ((1D0+RM2-RM1)*(RM2*PARU(141)**2+1D0/PARU(141)**2)+4D0*RM2)
14742             IF(KFLR.GT.0) THEN
14743               WID2=WIDS(37,2)
14744               WID2=WID2*WIDS(17,2)
14745             ELSE
14746               WID2=WIDS(37,3)
14747               WID2=WID2*WIDS(17,3)
14748             ENDIF
14749           ENDIF
14750           WDTP(0)=WDTP(0)+WDTP(I)
14751           IF(MDME(IDC,1).GT.0) THEN
14752             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14753             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14754             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14755             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14756           ENDIF
14757   170   CONTINUE
14758  
14759       ELSEIF(KFLA.EQ.21) THEN
14760 C...QCD:
14761 C***Note that widths are not given in dimensional quantities here.
14762         DO 180 I=1,MDCY(KC,3)
14763           IDC=I+MDCY(KC,2)-1
14764           IF(MDME(IDC,1).LT.0) GOTO 180
14765           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
14766           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
14767           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 180
14768           WID2=1D0
14769           IF(I.LE.8) THEN
14770 C...QCD -> q + qbar
14771             WDTP(I)=(1D0+2D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
14772             IF(I.EQ.6) WID2=WIDS(6,1)
14773             IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
14774           ENDIF
14775           WDTP(0)=WDTP(0)+WDTP(I)
14776           IF(MDME(IDC,1).GT.0) THEN
14777             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14778             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14779             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14780             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14781           ENDIF
14782   180   CONTINUE
14783  
14784       ELSEIF(KFLA.EQ.22) THEN
14785 C...QED photon.
14786 C***Note that widths are not given in dimensional quantities here.
14787         DO 190 I=1,MDCY(KC,3)
14788           IDC=I+MDCY(KC,2)-1
14789           IF(MDME(IDC,1).LT.0) GOTO 190
14790           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
14791           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
14792           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 190
14793           WID2=1D0
14794           IF(I.LE.8) THEN
14795 C...QED -> q + qbar.
14796             EF=KCHG(I,1)/3D0
14797             FCOF=3D0*RADC
14798             IF(I.GE.6.AND.MSTP(35).GE.1) FCOF=FCOF*PYHFTH(SH,SH*RM1,1D0)
14799             WDTP(I)=FCOF*EF**2*(1D0+2D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
14800             IF(I.EQ.6) WID2=WIDS(6,1)
14801             IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
14802           ELSEIF(I.LE.12) THEN
14803 C...QED -> l+ + l-.
14804             EF=KCHG(9+2*(I-8),1)/3D0
14805             WDTP(I)=EF**2*(1D0+2D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
14806             IF(I.EQ.12) WID2=WIDS(17,1)
14807           ENDIF
14808           WDTP(0)=WDTP(0)+WDTP(I)
14809           IF(MDME(IDC,1).GT.0) THEN
14810             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14811             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14812             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14813             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14814           ENDIF
14815   190   CONTINUE
14816  
14817       ELSEIF(KFLA.EQ.23) THEN
14818 C...Z0:
14819         ICASE=1
14820         XWC=1D0/(16D0*XW*XW1)
14821         FAC=(AEM*XWC/3D0)*SHR
14822   200   CONTINUE
14823         IF(MINT(61).GE.1.AND.ICASE.EQ.2) THEN
14824           VINT(111)=0D0
14825           VINT(112)=0D0
14826           VINT(114)=0D0
14827         ENDIF
14828         IF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
14829           KFI=IABS(MINT(15))
14830           IF(KFI.GT.20) KFI=IABS(MINT(16))
14831           EI=KCHG(KFI,1)/3D0
14832           AI=SIGN(1D0,EI)
14833           VI=AI-4D0*EI*XWV
14834           SQMZ=PMAS(23,1)**2
14835           HZ=SHR*WDTP(0)
14836           IF(MSTP(43).EQ.1.OR.MSTP(43).EQ.3) VINT(111)=1D0
14837           IF(MSTP(43).EQ.3) VINT(112)=
14838      &    2D0*XWC*SH*(SH-SQMZ)/((SH-SQMZ)**2+HZ**2)
14839           IF(MSTP(43).EQ.2.OR.MSTP(43).EQ.3) VINT(114)=
14840      &    XWC**2*SH**2/((SH-SQMZ)**2+HZ**2)
14841         ENDIF
14842         DO 210 I=1,MDCY(KC,3)
14843           IDC=I+MDCY(KC,2)-1
14844           IF(MDME(IDC,1).LT.0) GOTO 210
14845           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
14846           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
14847           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 210
14848           WID2=1D0
14849           IF(I.LE.8) THEN
14850 C...Z0 -> q + qbar
14851             EF=KCHG(I,1)/3D0
14852             AF=SIGN(1D0,EF+0.1D0)
14853             VF=AF-4D0*EF*XWV
14854             FCOF=3D0*RADC
14855             IF(I.GE.6.AND.MSTP(35).GE.1) FCOF=FCOF*PYHFTH(SH,SH*RM1,1D0)
14856             IF(I.EQ.6) WID2=WIDS(6,1)
14857             IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
14858           ELSEIF(I.LE.16) THEN
14859 C...Z0 -> l+ + l-, nu + nubar
14860             EF=KCHG(I+2,1)/3D0
14861             AF=SIGN(1D0,EF+0.1D0)
14862             VF=AF-4D0*EF*XWV
14863             FCOF=1D0
14864             IF((I.EQ.15.OR.I.EQ.16)) WID2=WIDS(2+I,1)
14865           ENDIF
14866           BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
14867           IF(ICASE.EQ.1) THEN
14868             WDTP(I)=FAC*FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*
14869      &      BE34
14870           ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
14871             WDTP(I)=FAC*FCOF*((EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*
14872      &      EF*VF+(VI**2+AI**2)*VINT(114)*VF**2)*(1D0+2D0*RM1)+
14873      &      (VI**2+AI**2)*VINT(114)*AF**2*(1D0-4D0*RM1))*BE34
14874           ELSEIF(MINT(61).EQ.2.AND.ICASE.EQ.2) THEN
14875             FGGF=FCOF*EF**2*(1D0+2D0*RM1)*BE34
14876             FGZF=FCOF*EF*VF*(1D0+2D0*RM1)*BE34
14877             FZZF=FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*BE34
14878           ENDIF
14879           IF(ICASE.EQ.1) WDTP(0)=WDTP(0)+WDTP(I)
14880           IF(MDME(IDC,1).GT.0) THEN
14881             IF((ICASE.EQ.1.AND.MINT(61).NE.1).OR.
14882      &      (ICASE.EQ.2.AND.MINT(61).EQ.1)) THEN
14883               WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14884               WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+
14885      &        WDTE(I,MDME(IDC,1))
14886               WDTE(I,0)=WDTE(I,MDME(IDC,1))
14887               WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14888             ENDIF
14889             IF(MINT(61).EQ.2.AND.ICASE.EQ.2) THEN
14890               IF(MSTP(43).EQ.1.OR.MSTP(43).EQ.3) VINT(111)=
14891      &        VINT(111)+FGGF*WID2
14892               IF(MSTP(43).EQ.3) VINT(112)=VINT(112)+FGZF*WID2
14893               IF(MSTP(43).EQ.2.OR.MSTP(43).EQ.3) VINT(114)=
14894      &        VINT(114)+FZZF*WID2
14895             ENDIF
14896           ENDIF
14897   210   CONTINUE
14898         IF(MINT(61).GE.1) ICASE=3-ICASE
14899         IF(ICASE.EQ.2) GOTO 200
14900  
14901       ELSEIF(KFLA.EQ.24) THEN
14902 C...W+/-:
14903         FAC=(AEM/(24D0*XW))*SHR
14904         DO 220 I=1,MDCY(KC,3)
14905           IDC=I+MDCY(KC,2)-1
14906           IF(MDME(IDC,1).LT.0) GOTO 220
14907           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
14908           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
14909           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 220
14910           WID2=1D0
14911           IF(I.LE.16) THEN
14912 C...W+/- -> q + qbar'
14913             FCOF=3D0*RADC*VCKM((I-1)/4+1,MOD(I-1,4)+1)
14914             IF(KFLR.GT.0) THEN
14915               IF(MOD(I,4).EQ.3) WID2=WIDS(6,2)
14916               IF(MOD(I,4).EQ.0) WID2=WIDS(8,2)
14917               IF(I.GE.13) WID2=WID2*WIDS(7,3)
14918             ELSE
14919               IF(MOD(I,4).EQ.3) WID2=WIDS(6,3)
14920               IF(MOD(I,4).EQ.0) WID2=WIDS(8,3)
14921               IF(I.GE.13) WID2=WID2*WIDS(7,2)
14922             ENDIF
14923           ELSEIF(I.LE.20) THEN
14924 C...W+/- -> l+/- + nu
14925             FCOF=1D0
14926             IF(KFLR.GT.0) THEN
14927               IF(I.EQ.20) WID2=WIDS(17,3)*WIDS(18,2)
14928             ELSE
14929               IF(I.EQ.20) WID2=WIDS(17,2)*WIDS(18,3)
14930             ENDIF
14931           ENDIF
14932           WDTP(I)=FAC*FCOF*(2D0-RM1-RM2-(RM1-RM2)**2)*
14933      &    SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
14934           WDTP(0)=WDTP(0)+WDTP(I)
14935           IF(MDME(IDC,1).GT.0) THEN
14936             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14937             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14938             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14939             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14940           ENDIF
14941   220   CONTINUE
14942  
14943       ELSEIF(KFLA.EQ.25.OR.KFLA.EQ.35.OR.KFLA.EQ.36) THEN
14944 C...h0 (or H0, or A0):
14945         IF(MSTP(49).EQ.0) THEN
14946           FAC=(AEM/(8D0*XW))*(SH/PMAS(24,1)**2)*SHR
14947         ELSE
14948           FAC=(AEM/(8D0*XW))*(PMAS(KFHIGG,1)/PMAS(24,1))**2*SHR
14949         ENDIF
14950         DO 260 I=1,MDCY(KFHIGG,3)
14951           IDC=I+MDCY(KFHIGG,2)-1
14952           IF(MDME(IDC,1).LT.0) GOTO 260
14953           KFC1=PYCOMP(KFDP(IDC,1))
14954           KFC2=PYCOMP(KFDP(IDC,2))
14955           RM1=PMAS(KFC1,1)**2/SH
14956           RM2=PMAS(KFC2,1)**2/SH
14957           IF(I.NE.16.AND.I.NE.17.AND.SQRT(RM1)+SQRT(RM2).GT.1D0)
14958      &    GOTO 260
14959           WID2=1D0
14960  
14961           IF(I.LE.8) THEN
14962 C...h0 -> q + qbar
14963             WDTP(I)=FAC*3D0*(PYMRUN(KFDP(IDC,1),SH)**2/SH)*
14964      &      SQRT(MAX(0D0,1D0-4D0*RM1))*RADC
14965 C...A0 behaves like beta, ho and H0 like beta**3.
14966             IF(IHIGG.NE.3) WDTP(I)=WDTP(I)*(1D0-4D0*RM1)
14967             IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
14968               IF(MOD(I,2).EQ.1) WDTP(I)=WDTP(I)*PARU(151+10*IHIGG)**2
14969               IF(MOD(I,2).EQ.0) WDTP(I)=WDTP(I)*PARU(152+10*IHIGG)**2
14970             ENDIF
14971             IF(I.EQ.6) WID2=WIDS(6,1)
14972             IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
14973  
14974           ELSEIF(I.LE.12) THEN
14975 C...h0 -> l+ + l-
14976             WDTP(I)=FAC*RM1*SQRT(MAX(0D0,1D0-4D0*RM1))
14977 C...A0 behaves like beta, ho and H0 like beta**3.
14978             IF(IHIGG.NE.3) WDTP(I)=WDTP(I)*(1D0-4D0*RM1)
14979             IF(MSTP(4).GE.1.OR.IHIGG.GE.2) WDTP(I)=WDTP(I)*
14980      &      PARU(153+10*IHIGG)**2
14981             IF(I.EQ.12) WID2=WIDS(17,1)
14982  
14983           ELSEIF(I.EQ.13) THEN
14984 C...h0 -> g + g; quark loop contribution only
14985             ETARE=0D0
14986             ETAIM=0D0
14987             DO 230 J=1,2*MSTP(1)
14988               EPS=(2D0*PMAS(J,1))**2/SH
14989 C...Loop integral; function of eps=4m^2/shat; different for A0.
14990               IF(EPS.LE.1D0) THEN
14991                 IF(EPS.GT.1D-4) THEN
14992                   ROOT=SQRT(1D0-EPS)
14993                   RLN=LOG((1D0+ROOT)/(1D0-ROOT))
14994                 ELSE
14995                   RLN=LOG(4D0/EPS-2D0)
14996                 ENDIF
14997                 PHIRE=-0.25D0*(RLN**2-PARU(1)**2)
14998                 PHIIM=0.5D0*PARU(1)*RLN
14999               ELSE
15000                 PHIRE=(ASIN(1D0/SQRT(EPS)))**2
15001                 PHIIM=0D0
15002               ENDIF
15003               IF(IHIGG.LE.2) THEN
15004                 ETAREJ=-0.5D0*EPS*(1D0+(1D0-EPS)*PHIRE)
15005                 ETAIMJ=-0.5D0*EPS*(1D0-EPS)*PHIIM
15006               ELSE
15007                 ETAREJ=-0.5D0*EPS*PHIRE
15008                 ETAIMJ=-0.5D0*EPS*PHIIM
15009               ENDIF
15010 C...Couplings (=1 for standard model Higgs).
15011               IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
15012                 IF(MOD(J,2).EQ.1) THEN
15013                   ETAREJ=ETAREJ*PARU(151+10*IHIGG)
15014                   ETAIMJ=ETAIMJ*PARU(151+10*IHIGG)
15015                 ELSE
15016                   ETAREJ=ETAREJ*PARU(152+10*IHIGG)
15017                   ETAIMJ=ETAIMJ*PARU(152+10*IHIGG)
15018                 ENDIF
15019               ENDIF
15020               ETARE=ETARE+ETAREJ
15021               ETAIM=ETAIM+ETAIMJ
15022   230       CONTINUE
15023             ETA2=ETARE**2+ETAIM**2
15024             WDTP(I)=FAC*(AS/PARU(1))**2*ETA2
15025  
15026           ELSEIF(I.EQ.14) THEN
15027 C...h0 -> gamma + gamma; quark, lepton, W+- and H+- loop contributions
15028             ETARE=0D0
15029             ETAIM=0D0
15030             JMAX=3*MSTP(1)+1
15031             IF(MSTP(4).GE.1.OR.IHIGG.GE.2) JMAX=JMAX+1
15032             DO 240 J=1,JMAX
15033               IF(J.LE.2*MSTP(1)) THEN
15034                 EJ=KCHG(J,1)/3D0
15035                 EPS=(2D0*PMAS(J,1))**2/SH
15036               ELSEIF(J.LE.3*MSTP(1)) THEN
15037                 JL=2*(J-2*MSTP(1))-1
15038                 EJ=KCHG(10+JL,1)/3D0
15039                 EPS=(2D0*PMAS(10+JL,1))**2/SH
15040               ELSEIF(J.EQ.3*MSTP(1)+1) THEN
15041                 EPS=(2D0*PMAS(24,1))**2/SH
15042               ELSE
15043                 EPS=(2D0*PMAS(37,1))**2/SH
15044               ENDIF
15045 C...Loop integral; function of eps=4m^2/shat.
15046               IF(EPS.LE.1D0) THEN
15047                 IF(EPS.GT.1D-4) THEN
15048                   ROOT=SQRT(1D0-EPS)
15049                   RLN=LOG((1D0+ROOT)/(1D0-ROOT))
15050                 ELSE
15051                   RLN=LOG(4D0/EPS-2D0)
15052                 ENDIF
15053                 PHIRE=-0.25D0*(RLN**2-PARU(1)**2)
15054                 PHIIM=0.5D0*PARU(1)*RLN
15055               ELSE
15056                 PHIRE=(ASIN(1D0/SQRT(EPS)))**2
15057                 PHIIM=0D0
15058               ENDIF
15059               IF(J.LE.3*MSTP(1)) THEN
15060 C...Fermion loops: loop integral different for A0; charges.
15061                 IF(IHIGG.LE.2) THEN
15062                   PHIPRE=-0.5D0*EPS*(1D0+(1D0-EPS)*PHIRE)
15063                   PHIPIM=-0.5D0*EPS*(1D0-EPS)*PHIIM
15064                 ELSE
15065                   PHIPRE=-0.5D0*EPS*PHIRE
15066                   PHIPIM=-0.5D0*EPS*PHIIM
15067                 ENDIF
15068                 IF(J.LE.2*MSTP(1).AND.MOD(J,2).EQ.1) THEN
15069                   EJC=3D0*EJ**2
15070                   EJH=PARU(151+10*IHIGG)
15071                 ELSEIF(J.LE.2*MSTP(1)) THEN
15072                   EJC=3D0*EJ**2
15073                   EJH=PARU(152+10*IHIGG)
15074                 ELSE
15075                   EJC=EJ**2
15076                   EJH=PARU(153+10*IHIGG)
15077                 ENDIF
15078                 IF(MSTP(4).EQ.0.AND.IHIGG.EQ.1) EJH=1D0
15079                 ETAREJ=EJC*EJH*PHIPRE
15080                 ETAIMJ=EJC*EJH*PHIPIM
15081               ELSEIF(J.EQ.3*MSTP(1)+1) THEN
15082 C...W loops: loop integral and charges.
15083                 ETAREJ=0.5D0+0.75D0*EPS*(1D0+(2D0-EPS)*PHIRE)
15084                 ETAIMJ=0.75D0*EPS*(2D0-EPS)*PHIIM
15085                 IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
15086                   ETAREJ=ETAREJ*PARU(155+10*IHIGG)
15087                   ETAIMJ=ETAIMJ*PARU(155+10*IHIGG)
15088                 ENDIF
15089               ELSE
15090 C...Charged H loops: loop integral and charges.
15091                 FACHHH=(PMAS(24,1)/PMAS(37,1))**2*
15092      &          PARU(158+10*IHIGG+2*(IHIGG/3))
15093                 ETAREJ=EPS*(1D0-EPS*PHIRE)*FACHHH
15094                 ETAIMJ=-EPS**2*PHIIM*FACHHH
15095               ENDIF
15096               ETARE=ETARE+ETAREJ
15097               ETAIM=ETAIM+ETAIMJ
15098   240       CONTINUE
15099             ETA2=ETARE**2+ETAIM**2
15100             WDTP(I)=FAC*(AEM/PARU(1))**2*0.5D0*ETA2
15101  
15102           ELSEIF(I.EQ.15) THEN
15103 C...h0 -> gamma + Z0; quark, lepton, W and H+- loop contributions
15104             ETARE=0D0
15105             ETAIM=0D0
15106             JMAX=3*MSTP(1)+1
15107             IF(MSTP(4).GE.1.OR.IHIGG.GE.2) JMAX=JMAX+1
15108             DO 250 J=1,JMAX
15109               IF(J.LE.2*MSTP(1)) THEN
15110                 EJ=KCHG(J,1)/3D0
15111                 AJ=SIGN(1D0,EJ+0.1D0)
15112                 VJ=AJ-4D0*EJ*XWV
15113                 EPS=(2D0*PMAS(J,1))**2/SH
15114                 EPSP=(2D0*PMAS(J,1)/PMAS(23,1))**2
15115               ELSEIF(J.LE.3*MSTP(1)) THEN
15116                 JL=2*(J-2*MSTP(1))-1
15117                 EJ=KCHG(10+JL,1)/3D0
15118                 AJ=SIGN(1D0,EJ+0.1D0)
15119                 VJ=AJ-4D0*EJ*XWV
15120                 EPS=(2D0*PMAS(10+JL,1))**2/SH
15121                 EPSP=(2D0*PMAS(10+JL,1)/PMAS(23,1))**2
15122               ELSE
15123                 EPS=(2D0*PMAS(24,1))**2/SH
15124                 EPSP=(2D0*PMAS(24,1)/PMAS(23,1))**2
15125               ENDIF
15126 C...Loop integrals; functions of eps=4m^2/shat and eps'=4m^2/m_Z^2.
15127               IF(EPS.LE.1D0) THEN
15128                 ROOT=SQRT(1D0-EPS)
15129                 IF(EPS.GT.1D-4) THEN
15130                   RLN=LOG((1D0+ROOT)/(1D0-ROOT))
15131                 ELSE
15132                   RLN=LOG(4D0/EPS-2D0)
15133                 ENDIF
15134                 PHIRE=-0.25D0*(RLN**2-PARU(1)**2)
15135                 PHIIM=0.5D0*PARU(1)*RLN
15136                 PSIRE=0.5D0*ROOT*RLN
15137                 PSIIM=-0.5D0*ROOT*PARU(1)
15138               ELSE
15139                 PHIRE=(ASIN(1D0/SQRT(EPS)))**2
15140                 PHIIM=0D0
15141                 PSIRE=SQRT(EPS-1D0)*ASIN(1D0/SQRT(EPS))
15142                 PSIIM=0D0
15143               ENDIF
15144               IF(EPSP.LE.1D0) THEN
15145                 ROOT=SQRT(1D0-EPSP)
15146                 IF(EPSP.GT.1D-4) THEN
15147                   RLN=LOG((1D0+ROOT)/(1D0-ROOT))
15148                 ELSE
15149                   RLN=LOG(4D0/EPSP-2D0)
15150                 ENDIF
15151                 PHIREP=-0.25D0*(RLN**2-PARU(1)**2)
15152                 PHIIMP=0.5D0*PARU(1)*RLN
15153                 PSIREP=0.5D0*ROOT*RLN
15154                 PSIIMP=-0.5D0*ROOT*PARU(1)
15155               ELSE
15156                 PHIREP=(ASIN(1D0/SQRT(EPSP)))**2
15157                 PHIIMP=0D0
15158                 PSIREP=SQRT(EPSP-1D0)*ASIN(1D0/SQRT(EPSP))
15159                 PSIIMP=0D0
15160               ENDIF
15161               FXYRE=EPS*EPSP/(8D0*(EPS-EPSP))*(1D0+EPS*EPSP/(EPS-EPSP)*
15162      &        (PHIRE-PHIREP)+2D0*EPS/(EPS-EPSP)*(PSIRE-PSIREP))
15163               FXYIM=EPS**2*EPSP/(8D0*(EPS-EPSP)**2)*
15164      &        (EPSP*(PHIIM-PHIIMP)+2D0*(PSIIM-PSIIMP))
15165               F1RE=-EPS*EPSP/(2D0*(EPS-EPSP))*(PHIRE-PHIREP)
15166               F1IM=-EPS*EPSP/(2D0*(EPS-EPSP))*(PHIIM-PHIIMP)
15167               IF(J.LE.3*MSTP(1)) THEN
15168 C...Fermion loops: loop integral different for A0; charges.
15169                 IF(IHIGG.EQ.3) FXYRE=0D0
15170                 IF(IHIGG.EQ.3) FXYIM=0D0
15171                 IF(J.LE.2*MSTP(1).AND.MOD(J,2).EQ.1) THEN
15172                   EJC=-3D0*EJ*VJ
15173                   EJH=PARU(151+10*IHIGG)
15174                 ELSEIF(J.LE.2*MSTP(1)) THEN
15175                   EJC=-3D0*EJ*VJ
15176                   EJH=PARU(152+10*IHIGG)
15177                 ELSE
15178                   EJC=-EJ*VJ
15179                   EJH=PARU(153+10*IHIGG)
15180                 ENDIF
15181                 IF(MSTP(4).EQ.0.AND.IHIGG.EQ.1) EJH=1D0
15182                 ETAREJ=EJC*EJH*(FXYRE-0.25D0*F1RE)
15183                 ETAIMJ=EJC*EJH*(FXYIM-0.25D0*F1IM)
15184               ELSEIF(J.EQ.3*MSTP(1)+1) THEN
15185 C...W loops: loop integral and charges.
15186                 HEPS=(1D0+2D0/EPS)*XW/XW1-(5D0+2D0/EPS)
15187                 ETAREJ=-XW1*((3D0-XW/XW1)*F1RE+HEPS*FXYRE)
15188                 ETAIMJ=-XW1*((3D0-XW/XW1)*F1IM+HEPS*FXYIM)
15189                 IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
15190                   ETAREJ=ETAREJ*PARU(155+10*IHIGG)
15191                   ETAIMJ=ETAIMJ*PARU(155+10*IHIGG)
15192                 ENDIF
15193               ELSE
15194 C...Charged H loops: loop integral and charges.
15195                 FACHHH=(PMAS(24,1)/PMAS(37,1))**2*(1D0-2D0*XW)*
15196      &          PARU(158+10*IHIGG+2*(IHIGG/3))
15197                 ETAREJ=FACHHH*FXYRE
15198                 ETAIMJ=FACHHH*FXYIM
15199               ENDIF
15200               ETARE=ETARE+ETAREJ
15201               ETAIM=ETAIM+ETAIMJ
15202   250       CONTINUE
15203             ETA2=(ETARE**2+ETAIM**2)/(XW*XW1)
15204             WDTP(I)=FAC*(AEM/PARU(1))**2*(1D0-PMAS(23,1)**2/SH)**3*ETA2
15205             WID2=WIDS(23,2)
15206  
15207           ELSEIF(I.LE.17) THEN
15208 C...h0 -> Z0 + Z0, W+ + W-
15209             PM1=PMAS(IABS(KFDP(IDC,1)),1)
15210             PG1=PMAS(IABS(KFDP(IDC,1)),2)
15211             IF(MINT(62).GE.1) THEN
15212               IF(MSTP(42).EQ.0.OR.(4D0*(PM1+10D0*PG1)**2.LT.SH.AND.
15213      &        CKIN(46).LT.CKIN(45).AND.CKIN(48).LT.CKIN(47).AND.
15214      &        MAX(CKIN(45),CKIN(47)).LT.PM1-10D0*PG1)) THEN
15215                 MOFSV(IHIGG,I-15)=0
15216                 WIDW=(1D0-4D0*RM1+12D0*RM1**2)*SQRT(MAX(0D0,
15217      &          1D0-4D0*RM1))
15218                 WID2=1D0
15219               ELSE
15220                 MOFSV(IHIGG,I-15)=1
15221                 RMAS=SQRT(MAX(0D0,SH))
15222                 CALL PYOFSH(1,KFLA,KFDP(IDC,1),KFDP(IDC,2),RMAS,WIDW,
15223      &          WID2)
15224                 WIDWSV(IHIGG,I-15)=WIDW
15225                 WID2SV(IHIGG,I-15)=WID2
15226               ENDIF
15227             ELSE
15228               IF(MOFSV(IHIGG,I-15).EQ.0) THEN
15229                 WIDW=(1D0-4D0*RM1+12D0*RM1**2)*SQRT(MAX(0D0,
15230      &          1D0-4D0*RM1))
15231                 WID2=1D0
15232               ELSE
15233                 WIDW=WIDWSV(IHIGG,I-15)
15234                 WID2=WID2SV(IHIGG,I-15)
15235               ENDIF
15236             ENDIF
15237             WDTP(I)=FAC*WIDW/(2D0*(18-I))
15238             IF(MSTP(4).GE.1.OR.IHIGG.GE.2) WDTP(I)=WDTP(I)*
15239      &      PARU(138+I+10*IHIGG)**2
15240             WID2=WID2*WIDS(7+I,1)
15241  
15242           ELSEIF(I.EQ.18.AND.KFLA.EQ.35) THEN
15243 C***H0 -> Z0 + h0 (not yet implemented).
15244  
15245           ELSEIF(I.EQ.19.AND.KFLA.EQ.35) THEN
15246 C...H0 -> h0 + h0.
15247             WDTP(I)=FAC*PARU(176)**2*0.25D0*PMAS(23,1)**4/SH**2*
15248      &      SQRT(MAX(0D0,1D0-4D0*RM1))
15249             WID2=WIDS(25,2)**2
15250  
15251           ELSEIF(I.EQ.20.AND.KFLA.EQ.35) THEN
15252 C...H0 -> A0 + A0.
15253             WDTP(I)=FAC*PARU(177)**2*0.25D0*PMAS(23,1)**4/SH**2*
15254      &      SQRT(MAX(0D0,1D0-4D0*RM1))
15255             WID2=WIDS(36,2)**2
15256  
15257           ELSEIF(I.EQ.18.AND.KFLA.EQ.36) THEN
15258 C...A0 -> Z0 + h0.
15259             WDTP(I)=FAC*PARU(186)**2*0.5D0*SQRT(MAX(0D0,
15260      &      (1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15261             WID2=WIDS(23,2)*WIDS(25,2)
15262  
15263 CMRENNA++
15264           ELSE
15265 C...Add in SUSY decays (two-body) by rescaling by phase space factor.
15266             RM10=RM1*SH/PMR**2
15267             RM20=RM2*SH/PMR**2
15268             WFAC0=1D0+RM10**2+RM20**2-2D0*(RM10+RM20+RM10*RM20)
15269             WFAC=1D0+RM1**2+RM2**2-2D0*(RM1+RM2+RM1*RM2)
15270             IF(WFAC.LE.0D0 .OR. WFAC0.LE.0D0) THEN
15271               WFAC=0D0
15272             ELSE
15273               WFAC=WFAC/WFAC0
15274             ENDIF
15275             WDTP(I)=PMAS(KFLA,2)*BRAT(IDC)*(SHR/PMR)*SQRT(WFAC)
15276 CMRENNA--
15277             IF(KFC2.EQ.KFC1) THEN
15278               WID2=WIDS(KFC1,1)
15279             ELSE
15280               KSGN1=2
15281               IF(KFDP(IDC,1).LT.0) KSGN1=3
15282               KSGN2=2
15283               IF(KFDP(IDC,2).LT.0) KSGN2=3
15284               WID2=WIDS(KFC1,KSGN1)*WIDS(KFC2,KSGN2)
15285             ENDIF
15286           ENDIF
15287           WDTP(0)=WDTP(0)+WDTP(I)
15288           IF(MDME(IDC,1).GT.0) THEN
15289             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15290             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15291             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15292             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15293           ENDIF
15294   260   CONTINUE
15295  
15296       ELSEIF(KFLA.EQ.32) THEN
15297 C...Z'0:
15298         ICASE=1
15299         XWC=1D0/(16D0*XW*XW1)
15300         FAC=(AEM*XWC/3D0)*SHR
15301         VINT(117)=0D0
15302   270   CONTINUE
15303         IF(MINT(61).GE.1.AND.ICASE.EQ.2) THEN
15304           VINT(111)=0D0
15305           VINT(112)=0D0
15306           VINT(113)=0D0
15307           VINT(114)=0D0
15308           VINT(115)=0D0
15309           VINT(116)=0D0
15310         ENDIF
15311         IF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
15312           KFAI=IABS(MINT(15))
15313           EI=KCHG(KFAI,1)/3D0
15314           AI=SIGN(1D0,EI+0.1D0)
15315           VI=AI-4D0*EI*XWV
15316           KFAIC=1
15317           IF(KFAI.LE.10.AND.MOD(KFAI,2).EQ.0) KFAIC=2
15318           IF(KFAI.GT.10.AND.MOD(KFAI,2).NE.0) KFAIC=3
15319           IF(KFAI.GT.10.AND.MOD(KFAI,2).EQ.0) KFAIC=4
15320           IF(KFAI.LE.2.OR.KFAI.EQ.11.OR.KFAI.EQ.12) THEN
15321             VPI=PARU(119+2*KFAIC)
15322             API=PARU(120+2*KFAIC)
15323           ELSEIF(KFAI.LE.4.OR.KFAI.EQ.13.OR.KFAI.EQ.14) THEN
15324             VPI=PARJ(178+2*KFAIC)
15325             API=PARJ(179+2*KFAIC)
15326           ELSE
15327             VPI=PARJ(186+2*KFAIC)
15328             API=PARJ(187+2*KFAIC)
15329           ENDIF
15330           SQMZ=PMAS(23,1)**2
15331           HZ=SHR*VINT(117)
15332           SQMZP=PMAS(32,1)**2
15333           HZP=SHR*WDTP(0)
15334           IF(MSTP(44).EQ.1.OR.MSTP(44).EQ.4.OR.MSTP(44).EQ.5.OR.
15335      &    MSTP(44).EQ.7) VINT(111)=1D0
15336           IF(MSTP(44).EQ.4.OR.MSTP(44).EQ.7) VINT(112)=
15337      &    2D0*XWC*SH*(SH-SQMZ)/((SH-SQMZ)**2+HZ**2)
15338           IF(MSTP(44).EQ.5.OR.MSTP(44).EQ.7) VINT(113)=
15339      &    2D0*XWC*SH*(SH-SQMZP)/((SH-SQMZP)**2+HZP**2)
15340           IF(MSTP(44).EQ.2.OR.MSTP(44).EQ.4.OR.MSTP(44).EQ.6.OR.
15341      &    MSTP(44).EQ.7) VINT(114)=XWC**2*SH**2/((SH-SQMZ)**2+HZ**2)
15342           IF(MSTP(44).EQ.6.OR.MSTP(44).EQ.7) VINT(115)=
15343      &    2D0*XWC**2*SH**2*((SH-SQMZ)*(SH-SQMZP)+HZ*HZP)/
15344      &    (((SH-SQMZ)**2+HZ**2)*((SH-SQMZP)**2+HZP**2))
15345           IF(MSTP(44).EQ.3.OR.MSTP(44).EQ.5.OR.MSTP(44).EQ.6.OR.
15346      &    MSTP(44).EQ.7) VINT(116)=XWC**2*SH**2/((SH-SQMZP)**2+HZP**2)
15347         ENDIF
15348         DO 280 I=1,MDCY(KC,3)
15349           IDC=I+MDCY(KC,2)-1
15350           IF(MDME(IDC,1).LT.0) GOTO 280
15351           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15352           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15353           IF(SQRT(RM1)+SQRT(RM2).GT.1D0.OR.MDME(IDC,1).LT.0) GOTO 280
15354           WID2=1D0
15355           IF(I.LE.16) THEN
15356             IF(I.LE.8) THEN
15357 C...Z'0 -> q + qbar
15358               EF=KCHG(I,1)/3D0
15359               AF=SIGN(1D0,EF+0.1D0)
15360               VF=AF-4D0*EF*XWV
15361               IF(I.LE.2) THEN
15362                 VPF=PARU(123-2*MOD(I,2))
15363                 APF=PARU(124-2*MOD(I,2))
15364               ELSEIF(I.LE.4) THEN
15365                 VPF=PARJ(182-2*MOD(I,2))
15366                 APF=PARJ(183-2*MOD(I,2))
15367               ELSE
15368                 VPF=PARJ(190-2*MOD(I,2))
15369                 APF=PARJ(191-2*MOD(I,2))
15370               ENDIF
15371               FCOF=3D0*RADC
15372               IF(I.GE.6.AND.MSTP(35).GE.1) FCOF=FCOF*
15373      &        PYHFTH(SH,SH*RM1,1D0)
15374               IF(I.EQ.6) WID2=WIDS(6,1)
15375               IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
15376             ELSEIF(I.LE.16) THEN
15377 C...Z'0 -> l+ + l-, nu + nubar
15378               EF=KCHG(I+2,1)/3D0
15379               AF=SIGN(1D0,EF+0.1D0)
15380               VF=AF-4D0*EF*XWV
15381               IF(I.LE.10) THEN
15382                 VPF=PARU(127-2*MOD(I,2))
15383                 APF=PARU(128-2*MOD(I,2))
15384               ELSEIF(I.LE.12) THEN
15385                 VPF=PARJ(186-2*MOD(I,2))
15386                 APF=PARJ(187-2*MOD(I,2))
15387               ELSE
15388                 VPF=PARJ(194-2*MOD(I,2))
15389                 APF=PARJ(195-2*MOD(I,2))
15390               ENDIF
15391               FCOF=1D0
15392               IF((I.EQ.15.OR.I.EQ.16)) WID2=WIDS(2+I,1)
15393             ENDIF
15394             BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
15395             IF(ICASE.EQ.1) THEN
15396               WDTPZ=FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*BE34
15397               WDTP(I)=FAC*FCOF*(VPF**2*(1D0+2D0*RM1)+
15398      &        APF**2*(1D0-4D0*RM1))*BE34
15399             ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
15400               WDTP(I)=FAC*FCOF*((EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*
15401      &        EF*VF+EI*VPI*VINT(113)*EF*VPF+(VI**2+AI**2)*VINT(114)*
15402      &        VF**2+(VI*VPI+AI*API)*VINT(115)*VF*VPF+(VPI**2+API**2)*
15403      &        VINT(116)*VPF**2)*(1D0+2D0*RM1)+((VI**2+AI**2)*VINT(114)*
15404      &        AF**2+(VI*VPI+AI*API)*VINT(115)*AF*APF+(VPI**2+API**2)*
15405      &        VINT(116)*APF**2)*(1D0-4D0*RM1))*BE34
15406             ELSEIF(MINT(61).EQ.2) THEN
15407               FGGF=FCOF*EF**2*(1D0+2D0*RM1)*BE34
15408               FGZF=FCOF*EF*VF*(1D0+2D0*RM1)*BE34
15409               FGZPF=FCOF*EF*VPF*(1D0+2D0*RM1)*BE34
15410               FZZF=FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*BE34
15411               FZZPF=FCOF*(VF*VPF*(1D0+2D0*RM1)+AF*APF*(1D0-4D0*RM1))*
15412      &        BE34
15413               FZPZPF=FCOF*(VPF**2*(1D0+2D0*RM1)+APF**2*(1D0-4D0*RM1))*
15414      &        BE34
15415             ENDIF
15416           ELSEIF(I.EQ.17) THEN
15417 C...Z'0 -> W+ + W-
15418             WDTPZP=PARU(129)**2*XW1**2*
15419      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
15420      &      (1D0+10D0*RM1+10D0*RM2+RM1**2+RM2**2+10D0*RM1*RM2)
15421             IF(ICASE.EQ.1) THEN
15422               WDTPZ=0D0
15423               WDTP(I)=FAC*WDTPZP
15424             ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
15425               WDTP(I)=FAC*(VPI**2+API**2)*VINT(116)*WDTPZP
15426             ELSEIF(MINT(61).EQ.2) THEN
15427               FGGF=0D0
15428               FGZF=0D0
15429               FGZPF=0D0
15430               FZZF=0D0
15431               FZZPF=0D0
15432               FZPZPF=WDTPZP
15433             ENDIF
15434             WID2=WIDS(24,1)
15435           ELSEIF(I.EQ.18) THEN
15436 C...Z'0 -> H+ + H-
15437             CZC=2D0*(1D0-2D0*XW)
15438             BE34C=(1D0-4D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
15439             IF(ICASE.EQ.1) THEN
15440               WDTPZ=0.25D0*PARU(142)**2*CZC**2*BE34C
15441               WDTP(I)=FAC*0.25D0*PARU(143)**2*CZC**2*BE34C
15442             ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
15443               WDTP(I)=FAC*0.25D0*(EI**2*VINT(111)+PARU(142)*EI*VI*
15444      &        VINT(112)*CZC+PARU(143)*EI*VPI*VINT(113)*CZC+PARU(142)**2*
15445      &        (VI**2+AI**2)*VINT(114)*CZC**2+PARU(142)*PARU(143)*
15446      &        (VI*VPI+AI*API)*VINT(115)*CZC**2+PARU(143)**2*
15447      &        (VPI**2+API**2)*VINT(116)*CZC**2)*BE34C
15448             ELSEIF(MINT(61).EQ.2) THEN
15449               FGGF=0.25D0*BE34C
15450               FGZF=0.25D0*PARU(142)*CZC*BE34C
15451               FGZPF=0.25D0*PARU(143)*CZC*BE34C
15452               FZZF=0.25D0*PARU(142)**2*CZC**2*BE34C
15453               FZZPF=0.25D0*PARU(142)*PARU(143)*CZC**2*BE34C
15454               FZPZPF=0.25D0*PARU(143)**2*CZC**2*BE34C
15455             ENDIF
15456             WID2=WIDS(37,1)
15457           ELSEIF(I.EQ.19) THEN
15458 C...Z'0 -> Z0 + gamma.
15459           ELSEIF(I.EQ.20) THEN
15460 C...Z'0 -> Z0 + h0
15461             FLAM=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15462             WDTPZP=PARU(145)**2*4D0*ABS(1D0-2D0*XW)*
15463      &      (3D0*RM1+0.25D0*FLAM**2)*FLAM
15464             IF(ICASE.EQ.1) THEN
15465               WDTPZ=0D0
15466               WDTP(I)=FAC*WDTPZP
15467             ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
15468               WDTP(I)=FAC*(VPI**2+API**2)*VINT(116)*WDTPZP
15469             ELSEIF(MINT(61).EQ.2) THEN
15470               FGGF=0D0
15471               FGZF=0D0
15472               FGZPF=0D0
15473               FZZF=0D0
15474               FZZPF=0D0
15475               FZPZPF=WDTPZP
15476             ENDIF
15477             WID2=WIDS(23,2)*WIDS(25,2)
15478           ELSEIF(I.EQ.21.OR.I.EQ.22) THEN
15479 C...Z' -> h0 + A0 or H0 + A0.
15480             BE34C=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15481             IF(I.EQ.21) THEN
15482               CZAH=PARU(186)
15483               CZPAH=PARU(188)
15484             ELSE
15485               CZAH=PARU(187)
15486               CZPAH=PARU(189)
15487             ENDIF
15488             IF(ICASE.EQ.1) THEN
15489               WDTPZ=CZAH**2*BE34C
15490               WDTP(I)=FAC*CZPAH**2*BE34C
15491             ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
15492               WDTP(I)=FAC*(CZAH**2*(VI**2+AI**2)*VINT(114)+CZAH*CZPAH*
15493      &        (VI*VPI+AI*API)*VINT(115)+CZPAH**2*(VPI**2+API**2)*
15494      &        VINT(116))*BE34C
15495             ELSEIF(MINT(61).EQ.2) THEN
15496               FGGF=0D0
15497               FGZF=0D0
15498               FGZPF=0D0
15499               FZZF=CZAH**2*BE34C
15500               FZZPF=CZAH*CZPAH*BE34C
15501               FZPZPF=CZPAH**2*BE34C
15502             ENDIF
15503             IF(I.EQ.21) WID2=WIDS(25,2)*WIDS(36,2)
15504             IF(I.EQ.22) WID2=WIDS(35,2)*WIDS(36,2)
15505           ENDIF
15506           IF(ICASE.EQ.1) THEN
15507             VINT(117)=VINT(117)+FAC*WDTPZ
15508             WDTP(0)=WDTP(0)+WDTP(I)
15509           ENDIF
15510           IF(MDME(IDC,1).GT.0) THEN
15511             IF((ICASE.EQ.1.AND.MINT(61).NE.1).OR.
15512      &      (ICASE.EQ.2.AND.MINT(61).EQ.1)) THEN
15513               WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15514               WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+
15515      &        WDTE(I,MDME(IDC,1))
15516               WDTE(I,0)=WDTE(I,MDME(IDC,1))
15517               WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15518             ENDIF
15519             IF(MINT(61).EQ.2.AND.ICASE.EQ.2) THEN
15520               IF(MSTP(44).EQ.1.OR.MSTP(44).EQ.4.OR.MSTP(44).EQ.5.OR.
15521      &        MSTP(44).EQ.7) VINT(111)=VINT(111)+FGGF*WID2
15522               IF(MSTP(44).EQ.4.OR.MSTP(44).EQ.7) VINT(112)=VINT(112)+
15523      &        FGZF*WID2
15524               IF(MSTP(44).EQ.5.OR.MSTP(44).EQ.7) VINT(113)=VINT(113)+
15525      &        FGZPF*WID2
15526               IF(MSTP(44).EQ.2.OR.MSTP(44).EQ.4.OR.MSTP(44).EQ.6.OR.
15527      &        MSTP(44).EQ.7) VINT(114)=VINT(114)+FZZF*WID2
15528               IF(MSTP(44).EQ.6.OR.MSTP(44).EQ.7) VINT(115)=VINT(115)+
15529      &        FZZPF*WID2
15530               IF(MSTP(44).EQ.3.OR.MSTP(44).EQ.5.OR.MSTP(44).EQ.6.OR.
15531      &        MSTP(44).EQ.7) VINT(116)=VINT(116)+FZPZPF*WID2
15532             ENDIF
15533           ENDIF
15534   280   CONTINUE
15535         IF(MINT(61).GE.1) ICASE=3-ICASE
15536         IF(ICASE.EQ.2) GOTO 270
15537  
15538       ELSEIF(KFLA.EQ.34) THEN
15539 C...W'+/-:
15540         FAC=(AEM/(24D0*XW))*SHR
15541         DO 290 I=1,MDCY(KC,3)
15542           IDC=I+MDCY(KC,2)-1
15543           IF(MDME(IDC,1).LT.0) GOTO 290
15544           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15545           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15546           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 290
15547           WID2=1D0
15548           IF(I.LE.20) THEN
15549             IF(I.LE.16) THEN
15550 C...W'+/- -> q + qbar'
15551               FCOF=3D0*RADC*(PARU(131)**2+PARU(132)**2)*
15552      &        VCKM((I-1)/4+1,MOD(I-1,4)+1)
15553               IF(KFLR.GT.0) THEN
15554                 IF(MOD(I,4).EQ.3) WID2=WIDS(6,2)
15555                 IF(MOD(I,4).EQ.0) WID2=WIDS(8,2)
15556                 IF(I.GE.13) WID2=WID2*WIDS(7,3)
15557               ELSE
15558                 IF(MOD(I,4).EQ.3) WID2=WIDS(6,3)
15559                 IF(MOD(I,4).EQ.0) WID2=WIDS(8,3)
15560                 IF(I.GE.13) WID2=WID2*WIDS(7,2)
15561               ENDIF
15562             ELSEIF(I.LE.20) THEN
15563 C...W'+/- -> l+/- + nu
15564               FCOF=PARU(133)**2+PARU(134)**2
15565               IF(KFLR.GT.0) THEN
15566                 IF(I.EQ.20) WID2=WIDS(17,3)*WIDS(18,2)
15567               ELSE
15568                 IF(I.EQ.20) WID2=WIDS(17,2)*WIDS(18,3)
15569               ENDIF
15570             ENDIF
15571             WDTP(I)=FAC*FCOF*0.5D0*(2D0-RM1-RM2-(RM1-RM2)**2)*
15572      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15573           ELSEIF(I.EQ.21) THEN
15574 C...W'+/- -> W+/- + Z0
15575             WDTP(I)=FAC*PARU(135)**2*0.5D0*XW1*(RM1/RM2)*
15576      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
15577      &      (1D0+10D0*RM1+10D0*RM2+RM1**2+RM2**2+10D0*RM1*RM2)
15578             IF(KFLR.GT.0) WID2=WIDS(24,2)*WIDS(23,2)
15579             IF(KFLR.LT.0) WID2=WIDS(24,3)*WIDS(23,2)
15580           ELSEIF(I.EQ.23) THEN
15581 C...W'+/- -> W+/- + h0
15582             FLAM=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15583             WDTP(I)=FAC*PARU(146)**2*2D0*(3D0*RM1+0.25D0*FLAM**2)*FLAM
15584             IF(KFLR.GT.0) WID2=WIDS(24,2)*WIDS(25,2)
15585             IF(KFLR.LT.0) WID2=WIDS(24,3)*WIDS(25,2)
15586           ENDIF
15587           WDTP(0)=WDTP(0)+WDTP(I)
15588           IF(MDME(IDC,1).GT.0) THEN
15589             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15590             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15591             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15592             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15593           ENDIF
15594   290   CONTINUE
15595  
15596       ELSEIF(KFLA.EQ.37) THEN
15597 C...H+/-:
15598         FAC=(AEM/(8D0*XW))*(SH/PMAS(24,1)**2)*SHR
15599         DO 300 I=1,MDCY(KC,3)
15600           IDC=I+MDCY(KC,2)-1
15601           IF(MDME(IDC,1).LT.0) GOTO 300
15602           KFC1=PYCOMP(KFDP(IDC,1))
15603           KFC2=PYCOMP(KFDP(IDC,2))
15604           RM1=PMAS(KFC1,1)**2/SH
15605           RM2=PMAS(KFC2,1)**2/SH
15606           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 300
15607           WID2=1D0
15608           IF(I.LE.4) THEN
15609 C...H+/- -> q + qbar'
15610             RM1R=PYMRUN(KFDP(IDC,1),SH)**2/SH
15611             RM2R=PYMRUN(KFDP(IDC,2),SH)**2/SH
15612             WDTP(I)=FAC*3D0*RADC*MAX(0D0,(RM1R*PARU(141)**2+
15613      &      RM2R/PARU(141)**2)*(1D0-RM1R-RM2R)-4D0*RM1R*RM2R)*
15614      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15615             IF(KFLR.GT.0) THEN
15616               IF(I.EQ.3) WID2=WIDS(6,2)
15617               IF(I.EQ.4) WID2=WIDS(7,3)*WIDS(8,2)
15618             ELSE
15619               IF(I.EQ.3) WID2=WIDS(6,3)
15620               IF(I.EQ.4) WID2=WIDS(7,2)*WIDS(8,3)
15621             ENDIF
15622           ELSEIF(I.LE.8) THEN
15623 C...H+/- -> l+/- + nu
15624             WDTP(I)=FAC*((RM1*PARU(141)**2+RM2/PARU(141)**2)*
15625      &      (1D0-RM1-RM2)-4D0*RM1*RM2)*
15626      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15627             IF(KFLR.GT.0) THEN
15628               IF(I.EQ.8) WID2=WIDS(17,3)*WIDS(18,2)
15629             ELSE
15630               IF(I.EQ.8) WID2=WIDS(17,2)*WIDS(18,3)
15631             ENDIF
15632           ELSEIF(I.EQ.9) THEN
15633 C...H+/- -> W+/- + h0.
15634             WDTP(I)=FAC*PARU(195)**2*0.5D0*SQRT(MAX(0D0,
15635      &      (1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15636             IF(KFLR.GT.0) WID2=WIDS(24,2)*WIDS(25,2)
15637             IF(KFLR.LT.0) WID2=WIDS(24,3)*WIDS(25,2)
15638  
15639 CMRENNA++
15640           ELSE
15641 C...Add in SUSY decays (two-body) by rescaling by phase space factor.
15642             RM10=RM1*SH/PMR**2
15643             RM20=RM2*SH/PMR**2
15644             WFAC0=1D0+RM10**2+RM20**2-2D0*(RM10+RM20+RM10*RM20)
15645             WFAC=1D0+RM1**2+RM2**2-2D0*(RM1+RM2+RM1*RM2)
15646             IF(WFAC.LE.0D0 .OR. WFAC0.LE.0D0) THEN
15647               WFAC=0D0
15648             ELSE
15649               WFAC=WFAC/WFAC0
15650             ENDIF
15651             WDTP(I)=PMAS(KC,2)*BRAT(IDC)*(SHR/PMR)*SQRT(WFAC)
15652 CMRENNA--
15653             KSGN1=2
15654             IF(KFLS*KFDP(IDC,1).LT.0.AND.KCHG(KFC1,3).EQ.1) KSGN1=3
15655             KSGN2=2
15656             IF(KFLS*KFDP(IDC,2).LT.0.AND.KCHG(KFC2,3).EQ.1) KSGN2=3
15657             WID2=WIDS(KFC1,KSGN1)*WIDS(KFC2,KSGN2)
15658           ENDIF
15659           WDTP(0)=WDTP(0)+WDTP(I)
15660           IF(MDME(IDC,1).GT.0) THEN
15661             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15662             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15663             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15664             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15665           ENDIF
15666   300   CONTINUE
15667  
15668       ELSEIF(KFLA.EQ.38) THEN
15669 C...Techni-eta.
15670         FAC=(SH/PARP(46)**2)*SHR
15671         DO 310 I=1,MDCY(KC,3)
15672           IDC=I+MDCY(KC,2)-1
15673           IF(MDME(IDC,1).LT.0) GOTO 310
15674           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15675           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15676           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 310
15677           WID2=1D0
15678           IF(I.LE.2) THEN
15679             WDTP(I)=FAC*RM1*SQRT(MAX(0D0,1D0-4D0*RM1))/(4D0*PARU(1))
15680             IF(I.EQ.2) WID2=WIDS(6,1)
15681           ELSE
15682             WDTP(I)=FAC*5D0*AS**2/(96D0*PARU(1)**3)
15683           ENDIF
15684           WDTP(0)=WDTP(0)+WDTP(I)
15685           IF(MDME(IDC,1).GT.0) THEN
15686             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15687             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15688             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15689             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15690           ENDIF
15691   310   CONTINUE
15692  
15693       ELSEIF(KFLA.EQ.39) THEN
15694 C...LQ (leptoquark).
15695         FAC=(AEM/4D0)*PARU(151)*SHR
15696         DO 320 I=1,MDCY(KC,3)
15697           IDC=I+MDCY(KC,2)-1
15698           IF(MDME(IDC,1).LT.0) GOTO 320
15699           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15700           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15701           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 320
15702           WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15703           WID2=1D0
15704           ILQQ=KFDP(IDC,1)*ISIGN(1,KFLR)
15705           IF(ILQQ.GE.6) WID2=WIDS(ILQQ,2)
15706           IF(ILQQ.LE.-6) WID2=WIDS(-ILQQ,3)
15707           ILQL=KFDP(IDC,2)*ISIGN(1,KFLR)
15708           IF(ILQL.GE.17) WID2=WID2*WIDS(ILQL,2)
15709           IF(ILQL.LE.-17) WID2=WID2*WIDS(-ILQL,3)
15710           WDTP(0)=WDTP(0)+WDTP(I)
15711           IF(MDME(IDC,1).GT.0) THEN
15712             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15713             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15714             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15715             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15716           ENDIF
15717   320   CONTINUE
15718  
15719       ELSEIF(KFLA.EQ.40) THEN
15720 C...R:
15721         FAC=(AEM/(12D0*XW))*SHR
15722         DO 330 I=1,MDCY(KC,3)
15723           IDC=I+MDCY(KC,2)-1
15724           IF(MDME(IDC,1).LT.0) GOTO 330
15725           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15726           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15727           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 330
15728           WID2=1D0
15729           IF(I.LE.6) THEN
15730 C...R -> q + qbar'
15731             FCOF=3D0*RADC
15732           ELSEIF(I.LE.9) THEN
15733 C...R -> l+ + l'-
15734             FCOF=1D0
15735           ENDIF
15736           WDTP(I)=FAC*FCOF*(2D0-RM1-RM2-(RM1-RM2)**2)*
15737      &    SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15738           IF(KFLR.GT.0) THEN
15739             IF(I.EQ.4) WID2=WIDS(6,3)
15740             IF(I.EQ.5) WID2=WIDS(7,3)
15741             IF(I.EQ.6) WID2=WIDS(6,2)*WIDS(8,3)
15742             IF(I.EQ.9) WID2=WIDS(17,3)
15743           ELSE
15744             IF(I.EQ.4) WID2=WIDS(6,2)
15745             IF(I.EQ.5) WID2=WIDS(7,2)
15746             IF(I.EQ.6) WID2=WIDS(6,3)*WIDS(8,2)
15747             IF(I.EQ.9) WID2=WIDS(17,2)
15748           ENDIF
15749           WDTP(0)=WDTP(0)+WDTP(I)
15750           IF(MDME(IDC,1).GT.0) THEN
15751             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15752             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15753             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15754             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15755           ENDIF
15756   330   CONTINUE
15757  
15758       ELSEIF(KFLA.EQ.51.OR.KFLA.EQ.53) THEN
15759 C...Techni-pi0 and techni-pi0':
15760         FAC=(1D0/(32D0*PARU(1)*PARP(142)**2))*SHR
15761         DO 340 I=1,MDCY(KC,3)
15762           IDC=I+MDCY(KC,2)-1
15763           IF(MDME(IDC,1).LT.0) GOTO 340
15764           PM1=PMAS(PYCOMP(KFDP(IDC,1)),1)
15765           PM2=PMAS(PYCOMP(KFDP(IDC,2)),1)
15766           RM1=PM1**2/SH
15767           RM2=PM2**2/SH
15768           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 340
15769           WID2=1D0
15770 C...pi_tech -> g + g
15771           IF(I.EQ.8) THEN
15772             FACP=(AS/(4D0*PARU(1))*PARP(144)/PARP(142))**2
15773      &      /(8D0*PARU(1))*SH*SHR
15774             IF(KFLA.EQ.51) THEN
15775               FACP=FACP*PARP(149)
15776             ELSE
15777               FACP=FACP*PARP(150)
15778             ENDIF
15779             WDTP(I)=FACP
15780           ELSE
15781 C...pi_tech -> f + fbar.
15782             FCOF=1D0
15783             IKA=IABS(KFDP(IDC,1))
15784             IF(IKA.LT.10) FCOF=3D0*RADC
15785             HM1=PM1
15786             HM2=PM2
15787             IF(IKA.GE.4.AND.IKA.LE.6) THEN
15788                FCOF=FCOF*PARP(141+IKA)**2
15789                HM1=PYMRUN(KFDP(IDC,1),SH)
15790                HM2=PYMRUN(KFDP(IDC,2),SH)
15791             ELSEIF(IKA.EQ.15) THEN
15792                FCOF=FCOF*PARP(148)**2
15793             ENDIF
15794             WDTP(I)=FAC*FCOF*(HM1+HM2)**2*
15795      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15796           ENDIF
15797           WDTP(0)=WDTP(0)+WDTP(I)
15798           IF(MDME(IDC,1).GT.0) THEN
15799             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15800             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15801             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15802             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15803           ENDIF
15804   340   CONTINUE
15805  
15806       ELSEIF(KFLA.EQ.52) THEN
15807 C...pi+_tech
15808         FAC=(1D0/(32D0*PARU(1)*PARP(142)**2))*SHR
15809         DO 350 I=1,MDCY(KC,3)
15810           IDC=I+MDCY(KC,2)-1
15811           IF(MDME(IDC,1).LT.0) GOTO 350
15812           PM1=PMAS(PYCOMP(KFDP(IDC,1)),1)
15813           PM2=PMAS(PYCOMP(KFDP(IDC,2)),1)
15814           PM3=0D0
15815           IF(I.EQ.3) PM3=PMAS(PYCOMP(KFDP(IDC,3)),1)
15816           RM1=PM1**2/SH
15817           RM2=PM2**2/SH
15818           RM3=PM3**2/SH
15819           IF(SQRT(RM1)+SQRT(RM2)+SQRT(RM3).GT.1D0) GOTO 350
15820           WID2=1D0
15821 C...pi_tech -> f + f'.
15822           FCOF=1D0
15823           IF(IABS(KFDP(IDC,1)).LT.10) FCOF=3D0*RADC
15824 C...pi_tech+ -> W b b~
15825           IF(I.EQ.3.AND.SHR.LT.PMAS(6,1)+PMAS(5,1)) THEN
15826             FCOF=3D0*RADC
15827             XMT2=PMAS(6,1)**2/SH
15828             FACP=FAC/(4D0*PARU(1))*FCOF*XMT2*PARP(147)**2
15829             KFC3=PYCOMP(KFDP(IDC,3))
15830             CHECK = SQRT(RM1)+SQRT(RM2)+SQRT(RM3)
15831             CHECK = SQRT(RM1)
15832             T0 = (1D0-CHECK**2)*
15833      &      (XMT2*(6.*XMT2**2+3.*XMT2*RM1-4.*RM1**2)-
15834      &      (5.*XMT2**2+2.*XMT2*RM1-8.*RM1**2))/(4.*XMT2**2)
15835             T1 = (1D0-XMT2)*(RM1-XMT2)*((XMT2**2+XMT2*RM1+4.*RM1**2)
15836      &      -3.*XMT2**2*(XMT2+RM1))/(2.0*XMT2**3)
15837             T3 = RM1**2/XMT2**3*(3.0*XMT2-4.0*RM1+4.0*XMT2*RM1)
15838             WDTP(I)=FACP*(T0 + T1*LOG((XMT2-CHECK**2)/(XMT2-1D0))
15839      &      +T3*LOG(CHECK))
15840             IF(KFLR.GT.0) THEN
15841                WID2=WIDS(24,2)
15842             ELSE
15843                WID2=WIDS(24,3)
15844             ENDIF
15845           ELSE
15846             FCOF=1D0
15847             IKA=IABS(KFDP(IDC,1))
15848             IF(IKA.LT.10) FCOF=3D0*RADC
15849             HM1=PM1
15850             HM2=PM2
15851             IF(I.GE.1.AND.I.LE.3) THEN
15852               FCOF=FCOF*PARP(144+I)**2
15853               HM1=PYMRUN(KFDP(IDC,1),SH)
15854               HM2=PYMRUN(KFDP(IDC,2),SH)
15855             ELSEIF(I.EQ.6) THEN
15856               FCOF=FCOF*PARP(148)**2
15857             ENDIF
15858             WDTP(I)=FAC*FCOF*(HM1+HM2)**2*
15859      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15860           ENDIF
15861           WDTP(0)=WDTP(0)+WDTP(I)
15862           IF(MDME(IDC,1).GT.0) THEN
15863             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15864             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15865             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15866             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15867           ENDIF
15868   350     CONTINUE
15869  
15870       ELSEIF(KFLA.EQ.54) THEN
15871 C...Techni-rho0:
15872         ALPRHT=2.91D0*(3D0/PARP(144))
15873         FAC=(ALPRHT/12D0)*SHR
15874         FACF=(1D0/6D0)*(AEM**2/ALPRHT)*SHR
15875         SQMZ=PMAS(23,1)**2
15876         SQMW=PMAS(24,1)**2
15877         SHP=SH
15878         CALL PYWIDX(23,SHP,WDTPP,WDTEP)
15879         GMMZ=SHR*WDTPP(0)
15880         XWRHT=(1D0-2D0*XW)/(4D0*XW*(1D0-XW))
15881         BWZR=XWRHT*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
15882         BWZI=XWRHT*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
15883         DO 360 I=1,MDCY(KC,3)
15884           IDC=I+MDCY(KC,2)-1
15885           IF(MDME(IDC,1).LT.0) GOTO 360
15886           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15887           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15888           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 360
15889           WID2=1D0
15890           IF(I.EQ.1) THEN
15891 C...rho_tech0 -> W+ + W-.
15892             WDTP(I)=FAC*PARP(141)**4*
15893      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15894             WID2=WIDS(24,1)
15895           ELSEIF(I.EQ.2) THEN
15896 C...rho_tech0 -> W+ + pi_tech-.
15897             WDTP(I)=FAC*PARP(141)**2*(1D0-PARP(141)**2)*
15898      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3+
15899      &      AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
15900      &      ((1D0-RM1-RM2)**2-4D0*RM1*RM2 + 6D0*SQMW/SH)*
15901      &      (1D0-PARP(141)**2)/4D0/XW/24D0/PARJ(173)**2*SHR**3
15902             WID2=WIDS(24,2)*WIDS(52,3)
15903           ELSEIF(I.EQ.3) THEN
15904 C...rho_tech0 -> pi_tech+ + W-.
15905             WDTP(I)=FAC*PARP(141)**2*(1D0-PARP(141)**2)*
15906      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3+
15907      &      AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
15908      &      ((1D0-RM1-RM2)**2-4D0*RM1*RM2 + 6D0*SQMW/SH)*
15909      &      (1D0-PARP(141)**2)/4D0/XW/24D0/PARJ(173)**2*SHR**3
15910             WID2=WIDS(52,2)*WIDS(24,3)
15911           ELSEIF(I.EQ.4) THEN
15912 C...rho_tech0 -> pi_tech+ + pi_tech-.
15913             WDTP(I)=FAC*(1D0-PARP(141)**2)**2*
15914      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15915             WID2=WIDS(52,1)
15916           ELSEIF(I.EQ.5) THEN
15917 C...rho_tech0 -> gamma + pi_tech0
15918             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
15919      &      (2D0*PARP(143)-1D0)**2*(1D0-PARP(141)**2)/24D0/PARJ(172)**2*
15920      &      SHR**3
15921             WID2=WIDS(51,2)
15922           ELSEIF(I.EQ.6) THEN
15923 C...rho_tech0 -> gamma + pi_tech0'
15924             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
15925      &      (1D0-PARJ(174)**2)/24D0/PARJ(172)**2*SHR**3
15926             WID2=WIDS(53,2)
15927           ELSEIF(I.EQ.7) THEN
15928 C...rho_tech0 -> Z0 + pi_tech0
15929             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
15930      &      (2D0*PARP(143)-1D0)**2*(1D0-PARP(141)**2)/24D0/PARJ(172)**2*
15931      &      XW/XW1*SHR**3
15932             WID2=WIDS(23,2)*WIDS(51,2)
15933           ELSEIF(I.EQ.8) THEN
15934 C...rho_tech0 -> Z0 + pi_tech0'
15935             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
15936      &      (1D0-PARJ(174)**2)/24D0/PARJ(172)**2*(1D0-2D0*XW)**2/4D0/
15937      &      XW/XW1*SHR**3
15938             WID2=WIDS(23,2)*WIDS(53,2)
15939           ELSE
15940 C...rho_tech0 -> f + fbar.
15941             WID2=1D0
15942             IF(I.LE.16) THEN
15943               IA=I-8
15944               FCOF=3D0*RADC
15945               IF(IA.GE.6.AND.IA.LE.8) WID2=WIDS(IA,1)
15946             ELSE
15947               IA=I-6
15948               FCOF=1D0
15949               IF(IA.GE.17) WID2=WIDS(IA,1)
15950             ENDIF
15951             EI=KCHG(IA,1)/3D0
15952             AI=SIGN(1D0,EI+0.1D0)
15953             VI=AI-4D0*EI*XWV
15954             VALI=0.5D0*(VI+AI)
15955             VARI=0.5D0*(VI-AI)
15956             WDTP(I)=FACF*FCOF*SQRT(MAX(0D0,1D0-4D0*RM1))*((1D0-RM1)*
15957      &      ((EI+VALI*BWZR)**2+(VALI*BWZI)**2+
15958      &      (EI+VARI*BWZR)**2+(VARI*BWZI)**2)+6D0*RM1*(
15959      &      (EI+VALI*BWZR)*(EI+VARI*BWZR)+VALI*VARI*BWZI**2))
15960           ENDIF
15961           WDTP(0)=WDTP(0)+WDTP(I)
15962           IF(MDME(IDC,1).GT.0) THEN
15963             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15964             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15965             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15966             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15967           ENDIF
15968   360   CONTINUE
15969  
15970       ELSEIF(KFLA.EQ.55) THEN
15971 C...Techni-rho+/-:
15972         ALPRHT=2.91D0*(3D0/PARP(144))
15973         FAC=(ALPRHT/12D0)*SHR
15974         SQMZ=PMAS(23,1)**2
15975         SQMW=PMAS(24,1)**2
15976         SHP=SH
15977         CALL PYWIDX(24,SHP,WDTPP,WDTEP)
15978         GMMW=SHR*WDTPP(0)
15979         FACF=(1D0/12D0)*(AEM**2/ALPRHT)*SHR*
15980      &  (0.125D0/XW**2)*SH**2/((SH-SQMW)**2+GMMW**2)
15981         DO 370 I=1,MDCY(KC,3)
15982           IDC=I+MDCY(KC,2)-1
15983           IF(MDME(IDC,1).LT.0) GOTO 370
15984           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15985           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15986           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 370
15987           WID2=1D0
15988           IF(I.EQ.1) THEN
15989 C...rho_tech+ -> W+ + Z0.
15990             WDTP(I)=FAC*PARP(141)**4*
15991      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15992             IF(KFLR.GT.0) THEN
15993               WID2=WIDS(24,2)*WIDS(23,2)
15994             ELSE
15995               WID2=WIDS(24,3)*WIDS(23,2)
15996             ENDIF
15997           ELSEIF(I.EQ.2) THEN
15998 C...rho_tech+ -> W+ + pi_tech0.
15999             WDTP(I)=FAC*PARP(141)**2*(1D0-PARP(141)**2)*
16000      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3+
16001      &      AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
16002      &      ((1D0-RM1-RM2)**2-4D0*RM1*RM2 + 6D0*SQMW/SH)*
16003      &      (1D0-PARP(141)**2)/4D0/XW/24D0/PARJ(173)**2*SHR**3
16004             IF(KFLR.GT.0) THEN
16005               WID2=WIDS(24,2)*WIDS(51,2)
16006             ELSE
16007               WID2=WIDS(24,3)*WIDS(51,2)
16008             ENDIF
16009           ELSEIF(I.EQ.3) THEN
16010 C...rho_tech+ -> pi_tech+ + Z0.
16011             WDTP(I)=FAC*PARP(141)**2*(1D0-PARP(141)**2)*
16012      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3+
16013      &      AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
16014      &      ((1D0-RM1-RM2)**2-4D0*RM1*RM2 + 6D0*SQMZ/SH)*
16015      &      (1D0-PARP(141)**2)/4D0/XW/XW1/24D0/PARJ(173)**2*SHR**3+
16016      &      AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16017      &      (2D0*PARP(143)-1D0)**2*(1D0-PARP(141)**2)/24D0/PARJ(172)**2*
16018      &      SHR**3*XW/XW1
16019             IF(KFLR.GT.0) THEN
16020               WID2=WIDS(52,2)*WIDS(23,2)
16021             ELSE
16022               WID2=WIDS(52,3)*WIDS(23,2)
16023             ENDIF
16024           ELSEIF(I.EQ.4) THEN
16025 C...rho_tech+ -> pi_tech+ + pi_tech0.
16026             WDTP(I)=FAC*(1D0-PARP(141)**2)**2*
16027      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
16028             IF(KFLR.GT.0) THEN
16029               WID2=WIDS(52,2)*WIDS(51,2)
16030             ELSE
16031               WID2=WIDS(52,3)*WIDS(51,2)
16032             ENDIF
16033           ELSEIF(I.EQ.5) THEN
16034 C...rho_tech+ -> pi_tech+ + gamma
16035             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16036      &      (2D0*PARP(143)-1D0)**2*(1D0-PARP(141)**2)/24D0/PARJ(172)**2*
16037      &      SHR**3
16038             IF(KFLR.GT.0) THEN
16039               WID2=WIDS(52,2)
16040             ELSE
16041               WID2=WIDS(52,3)
16042             ENDIF
16043           ELSEIF(I.EQ.6) THEN
16044 C...rho_tech+ -> W+ + pi_tech0'
16045             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16046      &      (1D0-PARJ(174)**2)/4D0/XW/24D0/PARJ(172)**2*SHR**3
16047             IF(KFLR.GT.0) THEN
16048               WID2=WIDS(24,2)*WIDS(53,2)
16049             ELSE
16050               WID2=WIDS(24,3)*WIDS(53,2)
16051             ENDIF
16052           ELSE
16053 C...rho_tech+ -> f + fbar'.
16054             IA=I-6
16055             WID2=1D0
16056             IF(IA.LE.16) THEN
16057               FCOF=3D0*RADC*VCKM((IA-1)/4+1,MOD(IA-1,4)+1)
16058               IF(KFLR.GT.0) THEN
16059                 IF(MOD(IA,4).EQ.3) WID2=WIDS(6,2)
16060                 IF(MOD(IA,4).EQ.0) WID2=WIDS(8,2)
16061                 IF(IA.GE.13) WID2=WID2*WIDS(7,3)
16062               ELSE
16063                 IF(MOD(IA,4).EQ.3) WID2=WIDS(6,3)
16064                 IF(MOD(IA,4).EQ.0) WID2=WIDS(8,3)
16065                 IF(IA.GE.13) WID2=WID2*WIDS(7,2)
16066               ENDIF
16067             ELSE
16068               FCOF=1D0
16069               IF(KFLR.GT.0) THEN
16070                 IF(IA.EQ.20) WID2=WIDS(17,3)*WIDS(18,2)
16071               ELSE
16072                 IF(IA.EQ.20) WID2=WIDS(17,2)*WIDS(18,3)
16073               ENDIF
16074             ENDIF
16075             WDTP(I)=FACF*FCOF*(2D0-RM1-RM2-(RM1-RM2)**2)*
16076      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
16077           ENDIF
16078           WDTP(0)=WDTP(0)+WDTP(I)
16079           IF(MDME(IDC,1).GT.0) THEN
16080             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16081             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16082             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16083             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16084           ENDIF
16085   370   CONTINUE
16086  
16087       ELSEIF(KFLA.EQ.56) THEN
16088 C...Techni-omega:
16089         ALPRHT=2.91D0*(3D0/PARP(144))
16090         FAC=(ALPRHT/12D0)*SHR
16091         FACF=(1D0/6D0)*(AEM**2/ALPRHT)*SHR*(2D0*PARP(143)-1D0)**2
16092         SQMZ=PMAS(23,1)**2
16093         SHP=SH
16094         CALL PYWIDX(23,SHP,WDTPP,WDTEP)
16095         GMMZ=SHR*WDTPP(0)
16096         BWZR=(0.5D0/(1D0-XW))*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
16097         BWZI=(0.5D0/(1D0-XW))*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
16098         DO 380 I=1,MDCY(KC,3)
16099           IDC=I+MDCY(KC,2)-1
16100           IF(MDME(IDC,1).LT.0) GOTO 380
16101           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
16102           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
16103           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 380
16104           WID2=1D0
16105           IF(I.EQ.1) THEN
16106 C...omega_tech0 -> gamma + pi_tech0.
16107             WDTP(I)=AEM/24D0/PARJ(172)**2*(1D0-PARP(141)**2)*
16108      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*SHR**3
16109             WID2=WIDS(51,2)
16110           ELSEIF(I.EQ.2) THEN
16111 C...omega_tech0 -> Z0 + pi_tech0 
16112             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16113      &      (1D0-PARP(141)**2)/24D0/PARJ(172)**2*(1D0-2D0*XW)**2/4D0/
16114      &      XW/XW1*SHR**3
16115             WID2=WIDS(23,2)*WIDS(51,2)
16116           ELSEIF(I.EQ.3) THEN
16117 C...omega_tech0 -> gamma + pi_tech0'
16118             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16119      &      (2D0*PARP(143)-1D0)**2*(1D0-PARJ(174)**2)/24D0/PARJ(172)**2*
16120      &      SHR**3
16121             WID2=WIDS(53,2)
16122           ELSEIF(I.EQ.4) THEN
16123 C...omega_tech0 -> Z0 + pi_tech0'
16124             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16125      &      (2D0*PARP(143)-1D0)**2*(1D0-PARJ(174)**2)/24D0/PARJ(172)**2*
16126      &      XW/XW1*SHR**3
16127             WID2=WIDS(23,2)*WIDS(51,2)
16128           ELSEIF(I.EQ.5) THEN
16129 C...omega_tech0 -> W+ + pi_tech-
16130             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16131      &      (1D0-PARP(141)**2)/4D0/XW/24D0/PARJ(172)**2*SHR**3+
16132      &      FAC*PARP(141)**2*(1D0-PARP(141)**2)*PARJ(175)**2*
16133      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
16134             WID2=WIDS(24,2)*WIDS(52,3)
16135           ELSEIF(I.EQ.6) THEN
16136 C...omega_tech0 -> pi_tech+ + W-
16137             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16138      &      (1D0-PARP(141)**2)/4D0/XW/24D0/PARJ(172)**2*SHR**3+
16139      &      FAC*PARP(141)**2*(1D0-PARP(141)**2)*PARJ(175)**2*
16140      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
16141             WID2=WIDS(24,3)*WIDS(52,2)
16142           ELSEIF(I.EQ.7) THEN
16143 C...omega_tech0 -> W+ + W-.
16144             WDTP(I)=FAC*PARP(141)**4*PARJ(175)**2*
16145      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
16146             WID2=WIDS(24,1)
16147           ELSEIF(I.EQ.8) THEN
16148 C...omega_tech0 -> pi_tech+ + pi_tech-.
16149             WDTP(I)=FAC*(1D0-PARP(141)**2)**2*PARJ(175)**2*
16150      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
16151             WID2=WIDS(52,1)
16152           ELSE
16153 C...omega_tech0 -> f + fbar.
16154             WID2=1D0
16155             IF(I.LE.14) THEN
16156               IA=I-8
16157               FCOF=3D0*RADC
16158               IF(IA.GE.6.AND.IA.LE.8) WID2=WIDS(IA,1)
16159             ELSE
16160               IA=I-6
16161               FCOF=1D0
16162               IF(IA.GE.17) WID2=WIDS(IA,1)
16163             ENDIF
16164             EI=KCHG(IA,1)/3D0
16165             AI=SIGN(1D0,EI+0.1D0)
16166             VI=AI-4D0*EI*XWV
16167             VALI=0.5D0*(VI+AI)
16168             VARI=0.5D0*(VI-AI)
16169             WDTP(I)=FACF*FCOF*SQRT(MAX(0D0,1D0-4D0*RM1))*((1D0-RM1)*
16170      &      ((EI+VALI*BWZR)**2+(VALI*BWZI)**2+
16171      &      (EI+VARI*BWZR)**2+(VARI*BWZI)**2)+6D0*RM1*(
16172      &      (EI+VALI*BWZR)*(EI+VARI*BWZR)+VALI*VARI*BWZI**2))
16173           ENDIF
16174           WDTP(0)=WDTP(0)+WDTP(I)
16175           IF(MDME(IDC,1).GT.0) THEN
16176             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16177             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16178             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16179             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16180           ENDIF
16181   380   CONTINUE
16182  
16183       ELSEIF(KFLA.EQ.61) THEN
16184 C...H_L++/--:
16185         FAC=(1D0/(8D0*PARU(1)))*SHR
16186         DO 372 I=1,MDCY(KC,3)
16187           IDC=I+MDCY(KC,2)-1
16188           IF(MDME(IDC,1).LT.0) GOTO 372
16189           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
16190           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
16191           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 372
16192           WID2=1D0
16193           IF(I.LE.6) THEN
16194 C...H_L++/-- -> l+/- + l'+/-
16195             FCOF=PARP(180+3*((IABS(KFDP(IDC,1))-11)/2)+
16196      &      (IABS(KFDP(IDC,2))-9)/2)**2
16197 C***Should be factor 4 below ???
16198             IF(KFDP(IDC,1).NE.KFDP(IDC,2)) FCOF=2D0*FCOF 
16199           ELSEIF(I.EQ.7) THEN
16200 C...H_L++/-- -> W_L+/- + W_L+/-
16201             FCOF=0.5D0*PARP(190)**4*PARP(192)**2/PMAS(24,1)**2*
16202      &      (3D0*RM1+0.25D0/RM1-1D0)
16203             WID2=WIDS(24,4+(1-KFLS)/2)
16204           ENDIF
16205           WDTP(I)=FAC*FCOF*
16206      &    SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
16207           WDTP(0)=WDTP(0)+WDTP(I)
16208           IF(MDME(IDC,1).GT.0) THEN
16209             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16210             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16211             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16212             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16213           ENDIF
16214   372   CONTINUE
16215
16216       ELSEIF(KFLA.EQ.62) THEN
16217 C...H_R++/--:
16218         FAC=(1D0/(8D0*PARU(1)))*SHR
16219         DO 373 I=1,MDCY(KC,3)
16220           IDC=I+MDCY(KC,2)-1
16221           IF(MDME(IDC,1).LT.0) GOTO 373
16222           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
16223           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
16224           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 373
16225           WID2=1D0
16226           IF(I.LE.6) THEN
16227 C...H_R++/-- -> l+/- + l'+/-
16228             FCOF=PARP(180+3*((IABS(KFDP(IDC,1))-11)/2)+
16229      &      (IABS(KFDP(IDC,2))-9)/2)**2
16230             IF(KFDP(IDC,1).NE.KFDP(IDC,2)) FCOF=2D0*FCOF
16231           ELSEIF(I.EQ.7) THEN
16232 C...H_R++/-- -> W_R+/- + W_R+/-
16233             FCOF=PARP(191)**2*(3D0*RM1+0.25D0/RM1-1D0)
16234             WID2=WIDS(63,4+(1-KFLS)/2)
16235           ENDIF
16236           WDTP(I)=FAC*FCOF*
16237      &    SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
16238           WDTP(0)=WDTP(0)+WDTP(I)
16239           IF(MDME(IDC,1).GT.0) THEN
16240             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16241             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16242             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16243             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16244           ENDIF
16245  373   CONTINUE
16246
16247       ELSEIF(KFLA.EQ.63) THEN
16248 C...W_R+/-:
16249         FAC=(AEM/(24D0*XW))*SHR
16250         DO 374 I=1,MDCY(KC,3)
16251           IDC=I+MDCY(KC,2)-1
16252           IF(MDME(IDC,1).LT.0) GOTO 374
16253           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
16254           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
16255           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 374
16256           WID2=1D0
16257           IF(I.LE.9) THEN
16258 C...W_R+/- -> q + qbar'
16259             FCOF=3D0*RADC*VCKM((I-1)/3+1,MOD(I-1,3)+1)
16260             IF(KFLR.GT.0) THEN
16261               IF(MOD(I,3).EQ.0) WID2=WIDS(6,2)
16262             ELSE
16263               IF(MOD(I,3).EQ.0) WID2=WIDS(6,3)
16264             ENDIF
16265           ELSEIF(I.LE.12) THEN
16266 C...W_R+/- -> l+/- + nu_R
16267             FCOF=1D0
16268           ENDIF
16269           WDTP(I)=FAC*FCOF*(2D0-RM1-RM2-(RM1-RM2)**2)*
16270      &    SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
16271           WDTP(0)=WDTP(0)+WDTP(I)
16272           IF(MDME(IDC,1).GT.0) THEN
16273             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16274             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16275             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16276             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16277           ENDIF
16278  374   CONTINUE
16279  
16280       ELSEIF(KFLA.EQ.KEXCIT+1) THEN
16281 C...d* excited quark.
16282         FAC=(SH/PARU(155)**2)*SHR
16283         DO 390 I=1,MDCY(KC,3)
16284           IDC=I+MDCY(KC,2)-1
16285           IF(MDME(IDC,1).LT.0) GOTO 390
16286           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
16287           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
16288           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 390
16289           WID2=1D0
16290           IF(I.EQ.1) THEN
16291 C...d* -> g + d.
16292             WDTP(I)=FAC*AS*PARU(159)**2/3D0
16293             WID2=1D0
16294           ELSEIF(I.EQ.2) THEN
16295 C...d* -> gamma + d.
16296             QF=-PARU(157)/2D0+PARU(158)/6D0
16297             WDTP(I)=FAC*AEM*QF**2/4D0
16298             WID2=1D0
16299           ELSEIF(I.EQ.3) THEN
16300 C...d* -> Z0 + d.
16301             QF=-PARU(157)*XW1/2D0-PARU(158)*XW/6D0
16302             WDTP(I)=FAC*AEM*QF**2/(8D0*XW*XW1)*
16303      &      (1D0-RM1)**2*(2D0+RM1)
16304             WID2=WIDS(23,2)
16305           ELSEIF(I.EQ.4) THEN
16306 C...d* -> W- + u.
16307             WDTP(I)=FAC*AEM*PARU(157)**2/(16D0*XW)*
16308      &      (1D0-RM1)**2*(2D0+RM1)
16309             IF(KFLR.GT.0) WID2=WIDS(24,3)
16310             IF(KFLR.LT.0) WID2=WIDS(24,2)
16311           ENDIF
16312           WDTP(0)=WDTP(0)+WDTP(I)
16313           IF(MDME(IDC,1).GT.0) THEN
16314             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16315             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16316             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16317             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16318           ENDIF
16319   390   CONTINUE
16320  
16321       ELSEIF(KFLA.EQ.KEXCIT+2) THEN
16322 C...u* excited quark.
16323         FAC=(SH/PARU(155)**2)*SHR
16324         DO 400 I=1,MDCY(KC,3)
16325           IDC=I+MDCY(KC,2)-1
16326           IF(MDME(IDC,1).LT.0) GOTO 400
16327           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
16328           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
16329           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 400
16330           WID2=1D0
16331           IF(I.EQ.1) THEN
16332 C...u* -> g + u.
16333             WDTP(I)=FAC*AS*PARU(159)**2/3D0
16334             WID2=1D0
16335           ELSEIF(I.EQ.2) THEN
16336 C...u* -> gamma + u.
16337             QF=PARU(157)/2D0+PARU(158)/6D0
16338             WDTP(I)=FAC*AEM*QF**2/4D0
16339             WID2=1D0
16340           ELSEIF(I.EQ.3) THEN
16341 C...u* -> Z0 + u.
16342             QF=PARU(157)*XW1/2D0-PARU(158)*XW/6D0
16343             WDTP(I)=FAC*AEM*QF**2/(8D0*XW*XW1)*
16344      &      (1D0-RM1)**2*(2D0+RM1)
16345             WID2=WIDS(23,2)
16346           ELSEIF(I.EQ.4) THEN
16347 C...u* -> W+ + d.
16348             WDTP(I)=FAC*AEM*PARU(157)**2/(16D0*XW)*
16349      &      (1D0-RM1)**2*(2D0+RM1)
16350             IF(KFLR.GT.0) WID2=WIDS(24,2)
16351             IF(KFLR.LT.0) WID2=WIDS(24,3)
16352           ENDIF
16353           WDTP(0)=WDTP(0)+WDTP(I)
16354           IF(MDME(IDC,1).GT.0) THEN
16355             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16356             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16357             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16358             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16359           ENDIF
16360   400   CONTINUE
16361  
16362       ELSEIF(KFLA.EQ.KEXCIT+11) THEN
16363 C...e* excited lepton.
16364         FAC=(SH/PARU(155)**2)*SHR
16365         DO 410 I=1,MDCY(KC,3)
16366           IDC=I+MDCY(KC,2)-1
16367           IF(MDME(IDC,1).LT.0) GOTO 410
16368           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
16369           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
16370           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 410
16371           WID2=1D0
16372           IF(I.EQ.1) THEN
16373 C...e* -> gamma + e.
16374             QF=-PARU(157)/2D0-PARU(158)/2D0
16375             WDTP(I)=FAC*AEM*QF**2/4D0
16376             WID2=1D0
16377           ELSEIF(I.EQ.2) THEN
16378 C...e* -> Z0 + e.
16379             QF=-PARU(157)*XW1/2D0+PARU(158)*XW/2D0
16380             WDTP(I)=FAC*AEM*QF**2/(8D0*XW*XW1)*
16381      &      (1D0-RM1)**2*(2D0+RM1)
16382             WID2=WIDS(23,2)
16383           ELSEIF(I.EQ.3) THEN
16384 C...e* -> W- + nu.
16385             WDTP(I)=FAC*AEM*PARU(157)**2/(16D0*XW)*
16386      &      (1D0-RM1)**2*(2D0+RM1)
16387             IF(KFLR.GT.0) WID2=WIDS(24,3)
16388             IF(KFLR.LT.0) WID2=WIDS(24,2)
16389           ENDIF
16390           WDTP(0)=WDTP(0)+WDTP(I)
16391           IF(MDME(IDC,1).GT.0) THEN
16392             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16393             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16394             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16395             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16396           ENDIF
16397   410   CONTINUE
16398  
16399       ELSEIF(KFLA.EQ.KEXCIT+12) THEN
16400 C...nu*_e excited neutrino.
16401         FAC=(SH/PARU(155)**2)*SHR
16402         DO 420 I=1,MDCY(KC,3)
16403           IDC=I+MDCY(KC,2)-1
16404           IF(MDME(IDC,1).LT.0) GOTO 420
16405           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
16406           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
16407           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 420
16408           WID2=1D0
16409           IF(I.EQ.1) THEN
16410 C...nu*_e -> Z0 + nu*_e.
16411             QF=PARU(157)*XW1/2D0+PARU(158)*XW/2D0
16412             WDTP(I)=FAC*AEM*QF**2/(8D0*XW*XW1)*
16413      &      (1D0-RM1)**2*(2D0+RM1)
16414             WID2=WIDS(23,2)
16415           ELSEIF(I.EQ.2) THEN
16416 C...nu*_e -> W+ + e.
16417             WDTP(I)=FAC*AEM*PARU(157)**2/(16D0*XW)*
16418      &      (1D0-RM1)**2*(2D0+RM1)
16419             IF(KFLR.GT.0) WID2=WIDS(24,2)
16420             IF(KFLR.LT.0) WID2=WIDS(24,3)
16421           ENDIF
16422           WDTP(0)=WDTP(0)+WDTP(I)
16423           IF(MDME(IDC,1).GT.0) THEN
16424             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16425             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16426             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16427             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16428           ENDIF
16429   420   CONTINUE
16430  
16431       ENDIF
16432       MINT(61)=0
16433       MINT(62)=0
16434       MINT(63)=0
16435  
16436       RETURN
16437       END
16438  
16439 C***********************************************************************
16440
16441 C...PYWIDX
16442 C...Calculates full and partial widths of resonances.
16443 C....copy of PYWIDT, used for techniparticle widths
16444  
16445       SUBROUTINE PYWIDX(KFLR,SH,WDTP,WDTE)
16446  
16447 C...Double precision and integer declarations.
16448       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
16449       IMPLICIT INTEGER(I-N)
16450       INTEGER PYK,PYCHGE,PYCOMP
16451 C...Parameter statement to help give large particle numbers.
16452       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
16453 C...Commonblocks.
16454       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
16455       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
16456       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
16457       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
16458       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
16459       COMMON/PYINT1/MINT(400),VINT(400)
16460       COMMON/PYINT4/MWID(500),WIDS(500,5)
16461       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
16462       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
16463      &SFMIX(16,4)
16464       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
16465      &/PYINT4/,/PYMSSM/,/PYSSMT/
16466 C...Local arrays and saved variables.
16467       DIMENSION WDTP(0:200),WDTE(0:200,0:5),MOFSV(3,2),WIDWSV(3,2),
16468      &WID2SV(3,2)
16469       SAVE MOFSV,WIDWSV,WID2SV
16470       DATA MOFSV/6*0/,WIDWSV/6*0D0/,WID2SV/6*0D0/
16471  
16472 C...Compressed code and sign; mass.
16473       KFLA=IABS(KFLR)
16474       KFLS=ISIGN(1,KFLR)
16475       KC=PYCOMP(KFLA)
16476       SHR=SQRT(SH)
16477       PMR=PMAS(KC,1)
16478  
16479 C...Reset width information.
16480       DO 110 I=0,200
16481         WDTP(I)=0D0
16482         DO 100 J=0,5
16483           WDTE(I,J)=0D0
16484   100   CONTINUE
16485   110 CONTINUE
16486   
16487 C...Common electroweak and strong constants.
16488       XW=PARU(102)
16489       XWV=XW
16490       IF(MSTP(8).GE.2) XW=1D0-(PMAS(24,1)/PMAS(23,1))**2
16491       XW1=1D0-XW
16492       AEM=PYALEM(SH)
16493       IF(MSTP(8).GE.1) AEM=SQRT(2D0)*PARU(105)*PMAS(24,1)**2*XW/PARU(1)
16494       AS=PYALPS(SH)
16495       RADC=1D0+AS/PARU(1)
16496   
16497       IF(KFLA.EQ.23) THEN
16498 C...Z0:
16499         ICASE=1
16500         XWC=1D0/(16D0*XW*XW1)
16501         FAC=(AEM*XWC/3D0)*SHR
16502   200   CONTINUE
16503         DO 210 I=1,MDCY(KC,3)
16504           IDC=I+MDCY(KC,2)-1
16505           IF(MDME(IDC,1).LT.0) GOTO 210
16506           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
16507           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
16508           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 210
16509           WID2=1D0
16510           IF(I.LE.8) THEN
16511 C...Z0 -> q + qbar
16512             EF=KCHG(I,1)/3D0
16513             AF=SIGN(1D0,EF+0.1D0)
16514             VF=AF-4D0*EF*XWV
16515             FCOF=3D0*RADC
16516             IF(I.GE.6.AND.MSTP(35).GE.1) FCOF=FCOF*PYHFTH(SH,SH*RM1,1D0)
16517             IF(I.EQ.6) WID2=WIDS(6,1)
16518             IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
16519           ELSEIF(I.LE.16) THEN
16520 C...Z0 -> l+ + l-, nu + nubar
16521             EF=KCHG(I+2,1)/3D0
16522             AF=SIGN(1D0,EF+0.1D0)
16523             VF=AF-4D0*EF*XWV
16524             FCOF=1D0
16525             IF((I.EQ.15.OR.I.EQ.16)) WID2=WIDS(2+I,1)
16526           ENDIF
16527           BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
16528             WDTP(I)=FAC*FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*
16529      &      BE34
16530             WDTP(0)=WDTP(0)+WDTP(I)
16531           IF(MDME(IDC,1).GT.0) THEN
16532               WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16533               WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+
16534      &        WDTE(I,MDME(IDC,1))
16535               WDTE(I,0)=WDTE(I,MDME(IDC,1))
16536               WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16537           ENDIF
16538   210   CONTINUE
16539
16540  
16541       ELSEIF(KFLA.EQ.24) THEN
16542 C...W+/-:
16543         FAC=(AEM/(24D0*XW))*SHR
16544         DO 220 I=1,MDCY(KC,3)
16545           IDC=I+MDCY(KC,2)-1
16546           IF(MDME(IDC,1).LT.0) GOTO 220
16547           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
16548           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
16549           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 220
16550           WID2=1D0
16551           IF(I.LE.16) THEN
16552 C...W+/- -> q + qbar'
16553             FCOF=3D0*RADC*VCKM((I-1)/4+1,MOD(I-1,4)+1)
16554             IF(KFLR.GT.0) THEN
16555               IF(MOD(I,4).EQ.3) WID2=WIDS(6,2)
16556               IF(MOD(I,4).EQ.0) WID2=WIDS(8,2)
16557               IF(I.GE.13) WID2=WID2*WIDS(7,3)
16558             ELSE
16559               IF(MOD(I,4).EQ.3) WID2=WIDS(6,3)
16560               IF(MOD(I,4).EQ.0) WID2=WIDS(8,3)
16561               IF(I.GE.13) WID2=WID2*WIDS(7,2)
16562             ENDIF
16563           ELSEIF(I.LE.20) THEN
16564 C...W+/- -> l+/- + nu
16565             FCOF=1D0
16566             IF(KFLR.GT.0) THEN
16567               IF(I.EQ.20) WID2=WIDS(17,3)*WIDS(18,2)
16568             ELSE
16569               IF(I.EQ.20) WID2=WIDS(17,2)*WIDS(18,3)
16570             ENDIF
16571           ENDIF
16572           WDTP(I)=FAC*FCOF*(2D0-RM1-RM2-(RM1-RM2)**2)*
16573      &    SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
16574           WDTP(0)=WDTP(0)+WDTP(I)
16575           IF(MDME(IDC,1).GT.0) THEN
16576             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16577             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16578             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16579             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16580           ENDIF
16581   220   CONTINUE 
16582       ENDIF
16583  
16584       RETURN
16585       END
16586  
16587 C***********************************************************************
16588  
16589 C...PYOFSH
16590 C...Calculates partial width and differential cross-section maxima
16591 C...of channels/processes not allowed on mass-shell, and selects
16592 C...masses in such channels/processes.
16593  
16594       SUBROUTINE PYOFSH(MOFSH,KFMO,KFD1,KFD2,PMMO,RET1,RET2)
16595  
16596 C...Double precision and integer declarations.
16597       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
16598       IMPLICIT INTEGER(I-N)
16599       INTEGER PYK,PYCHGE,PYCOMP
16600 C...Commonblocks.
16601       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
16602       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
16603       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
16604       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
16605       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
16606       COMMON/PYINT1/MINT(400),VINT(400)
16607       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
16608       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
16609       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
16610      &/PYINT2/,/PYINT5/
16611 C...Local arrays.
16612       DIMENSION KFD(2),MBW(2),PMD(2),PGD(2),PMG(2),PML(2),PMU(2),
16613      &PMH(2),ATL(2),ATU(2),ATH(2),RMG(2),INX1(100),XPT1(100),
16614      &FPT1(100),INX2(100),XPT2(100),FPT2(100),WDTP(0:200),
16615      &WDTE(0:200,0:5)
16616  
16617 C...Find if particles equal, maximum mass, matrix elements, etc.
16618       MINT(51)=0
16619       ISUB=MINT(1)
16620       KFD(1)=IABS(KFD1)
16621       KFD(2)=IABS(KFD2)
16622       MEQL=0
16623       IF(KFD(1).EQ.KFD(2)) MEQL=1
16624       MLM=0
16625       IF(MOFSH.GE.2.AND.MEQL.EQ.1) MLM=INT(1.5D0+PYR(0))
16626       IF(MOFSH.LE.2.OR.MOFSH.EQ.5) THEN
16627         NOFF=44
16628         PMMX=PMMO
16629       ELSE
16630         NOFF=40
16631         PMMX=VINT(1)
16632         IF(CKIN(2).GT.CKIN(1)) PMMX=MIN(CKIN(2),VINT(1))
16633       ENDIF
16634       MMED=0
16635       IF((KFMO.EQ.25.OR.KFMO.EQ.35.OR.KFMO.EQ.36).AND.MEQL.EQ.1.AND.
16636      &(KFD(1).EQ.23.OR.KFD(1).EQ.24)) MMED=1
16637       IF((KFMO.EQ.32.OR.IABS(KFMO).EQ.34).AND.(KFD(1).EQ.23.OR.
16638      &KFD(1).EQ.24).AND.(KFD(2).EQ.23.OR.KFD(2).EQ.24)) MMED=2
16639       IF((KFMO.EQ.32.OR.IABS(KFMO).EQ.34).AND.(KFD(2).EQ.25.OR.
16640      &KFD(2).EQ.35.OR.KFD(2).EQ.36)) MMED=3
16641       LOOP=1
16642  
16643 C...Find where Breit-Wigners are required, else select discrete masses.
16644   100 DO 110 I=1,2
16645         KFCA=PYCOMP(KFD(I))
16646         IF(KFCA.GT.0) THEN
16647           PMD(I)=PMAS(KFCA,1)
16648           PGD(I)=PMAS(KFCA,2)
16649         ELSE
16650           PMD(I)=0D0
16651           PGD(I)=0D0
16652         ENDIF
16653         IF(MSTP(42).LE.0.OR.PGD(I).LT.PARP(41)) THEN
16654           MBW(I)=0
16655           PMG(I)=PMD(I)
16656           RMG(I)=(PMG(I)/PMMX)**2
16657         ELSE
16658           MBW(I)=1
16659         ENDIF
16660   110 CONTINUE
16661  
16662 C...Find allowed mass range and Breit-Wigner parameters.
16663       DO 120 I=1,2
16664         IF(MOFSH.EQ.1.AND.LOOP.EQ.1.AND.MBW(I).EQ.1) THEN
16665           PML(I)=PARP(42)
16666           PMU(I)=PMMX-PARP(42)
16667           IF(MBW(3-I).EQ.0) PMU(I)=MIN(PMU(I),PMMX-PMD(3-I))
16668           IF(PMU(I).LT.PML(I)+PARJ(64)) MBW(I)=-1
16669         ELSEIF(MBW(I).EQ.1.AND.MOFSH.NE.5) THEN
16670           ILM=I
16671           IF(MLM.EQ.2) ILM=3-I
16672           PML(I)=MAX(CKIN(NOFF+2*ILM-1),PARP(42))
16673           IF(MBW(3-I).EQ.0) THEN
16674             PMU(I)=PMMX-PMD(3-I)
16675           ELSE
16676             PMU(I)=PMMX-MAX(CKIN(NOFF+5-2*ILM),PARP(42))
16677           ENDIF  
16678           IF(CKIN(NOFF+2*ILM).GT.CKIN(NOFF+2*ILM-1)) PMU(I)=
16679      &    MIN(PMU(I),CKIN(NOFF+2*ILM))
16680           IF(I.EQ.MLM) PMU(I)=MIN(PMU(I),0.5D0*PMMX)
16681           IF(MEQL.EQ.0) PMH(I)=MIN(PMU(I),0.5D0*PMMX)
16682           IF(PMU(I).LT.PML(I)+PARJ(64)) MBW(I)=-1
16683           IF(MBW(I).EQ.1) THEN
16684             ATL(I)=ATAN((PML(I)**2-PMD(I)**2)/(PMD(I)*PGD(I)))
16685             ATU(I)=ATAN((PMU(I)**2-PMD(I)**2)/(PMD(I)*PGD(I)))
16686             IF(MEQL.EQ.0) ATH(I)=ATAN((PMH(I)**2-PMD(I)**2)/(PMD(I)*
16687      &      PGD(I)))
16688           ENDIF
16689         ELSEIF(MBW(I).EQ.1.AND.MOFSH.EQ.5) THEN
16690           ILM=I
16691           IF(MLM.EQ.2) ILM=3-I
16692           PML(I)=MAX(CKIN(48+I),PARP(42))
16693           PMU(I)=PMMX-MAX(CKIN(51-I),PARP(42))
16694           IF(MBW(3-I).EQ.0) PMU(I)=MIN(PMU(I),PMMX-PMD(3-I))
16695           IF(I.EQ.MLM) PMU(I)=MIN(PMU(I),0.5D0*PMMX)
16696           IF(MEQL.EQ.0) PMH(I)=MIN(PMU(I),0.5D0*PMMX)
16697           IF(PMU(I).LT.PML(I)+PARJ(64)) MBW(I)=-1
16698           IF(MBW(I).EQ.1) THEN
16699             ATL(I)=ATAN((PML(I)**2-PMD(I)**2)/(PMD(I)*PGD(I)))
16700             ATU(I)=ATAN((PMU(I)**2-PMD(I)**2)/(PMD(I)*PGD(I)))
16701             IF(MEQL.EQ.0) ATH(I)=ATAN((PMH(I)**2-PMD(I)**2)/(PMD(I)*
16702      &      PGD(I)))
16703           ENDIF
16704         ENDIF
16705   120 CONTINUE
16706       IF(MBW(1).LT.0.OR.MBW(2).LT.0.OR.(MBW(1).EQ.0.AND.MBW(2).EQ.0))
16707      &THEN
16708         CALL PYERRM(3,'(PYOFSH:) no allowed decay product masses')
16709         MINT(51)=1
16710         RETURN
16711       ENDIF
16712  
16713 C...Calculation of partial width of resonance.
16714       IF(MOFSH.EQ.1) THEN
16715  
16716 C..If only one integration, pick that to be the inner.
16717         IF(MBW(1).EQ.0) THEN
16718           PM2=PMD(1)
16719           PMD(1)=PMD(2)
16720           PGD(1)=PGD(2)
16721           PML(1)=PML(2)
16722           PMU(1)=PMU(2)
16723         ELSEIF(MBW(2).EQ.0) THEN
16724           PM2=PMD(2)
16725         ENDIF
16726  
16727 C...Start outer loop of integration.
16728         IF(MBW(1).EQ.1.AND.MBW(2).EQ.1) THEN
16729           ATL2=ATAN((PML(2)**2-PMD(2)**2)/(PMD(2)*PGD(2)))
16730           ATU2=ATAN((PMU(2)**2-PMD(2)**2)/(PMD(2)*PGD(2)))
16731           NPT2=1
16732           XPT2(1)=1D0
16733           INX2(1)=0
16734           FMAX2=0D0
16735         ENDIF
16736   130   IF(MBW(1).EQ.1.AND.MBW(2).EQ.1) THEN
16737           PM2S=PMD(2)**2+PMD(2)*PGD(2)*TAN(ATL2+XPT2(NPT2)*(ATU2-ATL2))
16738           PM2=MIN(PMU(2),MAX(PML(2),SQRT(MAX(0D0,PM2S))))
16739         ENDIF
16740         RM2=(PM2/PMMX)**2
16741  
16742 C...Start inner loop of integration.
16743         PML1=PML(1)
16744         PMU1=MIN(PMU(1),PMMX-PM2)
16745         IF(MEQL.EQ.1) PMU1=MIN(PMU1,PM2)
16746         ATL1=ATAN((PML1**2-PMD(1)**2)/(PMD(1)*PGD(1)))
16747         ATU1=ATAN((PMU1**2-PMD(1)**2)/(PMD(1)*PGD(1)))
16748         IF(PML1+PARJ(64).GE.PMU1.OR.ATL1+1D-7.GE.ATU1) THEN
16749           FUNC2=0D0
16750           GOTO 180
16751         ENDIF
16752         NPT1=1
16753         XPT1(1)=1D0
16754         INX1(1)=0
16755         FMAX1=0D0
16756   140   PM1S=PMD(1)**2+PMD(1)*PGD(1)*TAN(ATL1+XPT1(NPT1)*(ATU1-ATL1))
16757         PM1=MIN(PMU1,MAX(PML1,SQRT(MAX(0D0,PM1S))))
16758         RM1=(PM1/PMMX)**2
16759  
16760 C...Evaluate function value - inner loop.
16761         FUNC1=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
16762         IF(MMED.EQ.1) FUNC1=FUNC1*((1D0-RM1-RM2)**2+8D0*RM1*RM2)
16763         IF(MMED.EQ.2) FUNC1=FUNC1**3*(1D0+10D0*RM1+10D0*RM2+RM1**2+
16764      &  RM2**2+10D0*RM1*RM2)
16765         IF(FUNC1.GT.FMAX1) FMAX1=FUNC1
16766         FPT1(NPT1)=FUNC1
16767  
16768 C...Go to next position in inner loop.
16769         IF(NPT1.EQ.1) THEN
16770           NPT1=NPT1+1
16771           XPT1(NPT1)=0D0
16772           INX1(NPT1)=1
16773           GOTO 140
16774         ELSEIF(NPT1.LE.8) THEN
16775           NPT1=NPT1+1
16776           IF(NPT1.LE.4.OR.NPT1.EQ.6) ISH1=1
16777           ISH1=ISH1+1
16778           XPT1(NPT1)=0.5D0*(XPT1(ISH1)+XPT1(INX1(ISH1)))
16779           INX1(NPT1)=INX1(ISH1)
16780           INX1(ISH1)=NPT1
16781           GOTO 140
16782         ELSEIF(NPT1.LT.100) THEN
16783           ISN1=ISH1
16784   150     ISH1=ISH1+1
16785           IF(ISH1.GT.NPT1) ISH1=2
16786           IF(ISH1.EQ.ISN1) GOTO 160
16787           DFPT1=ABS(FPT1(ISH1)-FPT1(INX1(ISH1)))
16788           IF(DFPT1.LT.PARP(43)*FMAX1) GOTO 150
16789           NPT1=NPT1+1
16790           XPT1(NPT1)=0.5D0*(XPT1(ISH1)+XPT1(INX1(ISH1)))
16791           INX1(NPT1)=INX1(ISH1)
16792           INX1(ISH1)=NPT1
16793           GOTO 140
16794         ENDIF
16795  
16796 C...Calculate integral over inner loop.
16797   160   FSUM1=0D0
16798         DO 170 IPT1=2,NPT1
16799           FSUM1=FSUM1+0.5D0*(FPT1(IPT1)+FPT1(INX1(IPT1)))*
16800      &    (XPT1(INX1(IPT1))-XPT1(IPT1))
16801   170   CONTINUE
16802         FUNC2=FSUM1*(ATU1-ATL1)/PARU(1)
16803   180   IF(MBW(1).EQ.1.AND.MBW(2).EQ.1) THEN
16804           IF(FUNC2.GT.FMAX2) FMAX2=FUNC2
16805           FPT2(NPT2)=FUNC2
16806  
16807 C...Go to next position in outer loop.
16808           IF(NPT2.EQ.1) THEN
16809             NPT2=NPT2+1
16810             XPT2(NPT2)=0D0
16811             INX2(NPT2)=1
16812             GOTO 130
16813           ELSEIF(NPT2.LE.8) THEN
16814             NPT2=NPT2+1
16815             IF(NPT2.LE.4.OR.NPT2.EQ.6) ISH2=1
16816             ISH2=ISH2+1
16817             XPT2(NPT2)=0.5D0*(XPT2(ISH2)+XPT2(INX2(ISH2)))
16818             INX2(NPT2)=INX2(ISH2)
16819             INX2(ISH2)=NPT2
16820             GOTO 130
16821           ELSEIF(NPT2.LT.100) THEN
16822             ISN2=ISH2
16823   190       ISH2=ISH2+1
16824             IF(ISH2.GT.NPT2) ISH2=2
16825             IF(ISH2.EQ.ISN2) GOTO 200
16826             DFPT2=ABS(FPT2(ISH2)-FPT2(INX2(ISH2)))
16827             IF(DFPT2.LT.PARP(43)*FMAX2) GOTO 190
16828             NPT2=NPT2+1
16829             XPT2(NPT2)=0.5D0*(XPT2(ISH2)+XPT2(INX2(ISH2)))
16830             INX2(NPT2)=INX2(ISH2)
16831             INX2(ISH2)=NPT2
16832             GOTO 130
16833           ENDIF
16834  
16835 C...Calculate integral over outer loop.
16836   200     FSUM2=0D0
16837           DO 210 IPT2=2,NPT2
16838             FSUM2=FSUM2+0.5D0*(FPT2(IPT2)+FPT2(INX2(IPT2)))*
16839      &      (XPT2(INX2(IPT2))-XPT2(IPT2))
16840   210     CONTINUE
16841           FSUM2=FSUM2*(ATU2-ATL2)/PARU(1)
16842           IF(MEQL.EQ.1) FSUM2=2D0*FSUM2
16843         ELSE
16844           FSUM2=FUNC2
16845         ENDIF
16846  
16847 C...Save result; second integration for user-selected mass range.
16848         IF(LOOP.EQ.1) WIDW=FSUM2
16849         WID2=FSUM2
16850         IF(LOOP.EQ.1.AND.(CKIN(46).GE.CKIN(45).OR.CKIN(48).GE.CKIN(47)
16851      &  .OR.MAX(CKIN(45),CKIN(47)).GE.1.01D0*PARP(42))) THEN
16852           LOOP=2
16853           GOTO 100
16854         ENDIF
16855         RET1=WIDW
16856         RET2=WID2/WIDW
16857  
16858 C...Select two decay product masses of a resonance.
16859       ELSEIF(MOFSH.EQ.2.OR.MOFSH.EQ.5) THEN
16860   220   DO 230 I=1,2
16861           IF(MBW(I).EQ.0) GOTO 230
16862           PMBW=PMD(I)**2+PMD(I)*PGD(I)*TAN(ATL(I)+PYR(0)*
16863      &    (ATU(I)-ATL(I)))
16864           PMG(I)=MIN(PMU(I),MAX(PML(I),SQRT(MAX(0D0,PMBW))))
16865           RMG(I)=(PMG(I)/PMMX)**2
16866   230   CONTINUE
16867         IF((MEQL.EQ.1.AND.PMG(MAX(1,MLM)).GT.PMG(MIN(2,3-MLM))).OR.
16868      &  PMG(1)+PMG(2)+PARJ(64).GT.PMMX) GOTO 220
16869  
16870 C...Weight with matrix element (if none known, use beta factor).
16871         FLAM=SQRT(MAX(0D0,(1D0-RMG(1)-RMG(2))**2-4D0*RMG(1)*RMG(2)))
16872         IF(MMED.EQ.1) THEN
16873           WTBE=FLAM*((1D0-RMG(1)-RMG(2))**2+8D0*RMG(1)*RMG(2))
16874         ELSEIF(MMED.EQ.2) THEN
16875           WTBE=FLAM**3*(1D0+10D0*RMG(1)+10D0*RMG(2)+RMG(1)**2+
16876      &    RMG(2)**2+10D0*RMG(1)*RMG(2))
16877         ELSEIF(MMED.EQ.3) THEN
16878           WTBE=FLAM*(RMG(1)+FLAM**2/12D0)
16879         ELSE
16880           WTBE=FLAM
16881         ENDIF
16882         IF(WTBE.LT.PYR(0)) GOTO 220
16883         RET1=PMG(1)
16884         RET2=PMG(2)
16885  
16886 C...Find suitable set of masses for initialization of 2 -> 2 processes.
16887       ELSEIF(MOFSH.EQ.3) THEN
16888         IF(MBW(1).NE.0.AND.MBW(2).EQ.0) THEN
16889           PMG(1)=MIN(PMD(1),0.5D0*(PML(1)+PMU(1)))
16890           PMG(2)=PMD(2)
16891         ELSEIF(MBW(2).NE.0.AND.MBW(1).EQ.0) THEN
16892           PMG(1)=PMD(1)
16893           PMG(2)=MIN(PMD(2),0.5D0*(PML(2)+PMU(2)))
16894         ELSE
16895           IDIV=-1
16896   240     IDIV=IDIV+1
16897           PMG(1)=MIN(PMD(1),0.1D0*(IDIV*PML(1)+(10-IDIV)*PMU(1)))
16898           PMG(2)=MIN(PMD(2),0.1D0*(IDIV*PML(2)+(10-IDIV)*PMU(2)))
16899           IF(IDIV.LE.9.AND.PMG(1)+PMG(2).GT.0.9D0*PMMX) GOTO 240
16900         ENDIF
16901         RET1=PMG(1)
16902         RET2=PMG(2)
16903  
16904 C...Evaluate importance of excluded tails of Breit-Wigners.
16905         IF(MEQL.EQ.0.AND.MBW(1).EQ.1.AND.MBW(2).EQ.1.AND.PMD(1)+PMD(2)
16906      &  .GT.PMMX.AND.PMH(1).GT.PML(1).AND.PMH(2).GT.PML(2)) MEQL=2
16907         IF(MEQL.LE.1) THEN
16908           VINT(80)=1D0
16909           DO 250 I=1,2
16910             IF(MBW(I).NE.0) VINT(80)=VINT(80)*1.25D0*(ATU(I)-ATL(I))/
16911      &      PARU(1)
16912   250     CONTINUE
16913         ELSE
16914           VINT(80)=(1.25D0/PARU(1))**2*MAX((ATU(1)-ATL(1))*
16915      &    (ATH(2)-ATL(2)),(ATH(1)-ATL(1))*(ATU(2)-ATL(2)))
16916         ENDIF
16917         IF((ISUB.EQ.15.OR.ISUB.EQ.19.OR.ISUB.EQ.30.OR.ISUB.EQ.35).AND.
16918      &  MSTP(43).NE.2) VINT(80)=2D0*VINT(80)
16919         IF(ISUB.EQ.22.AND.MSTP(43).NE.2) VINT(80)=4D0*VINT(80)
16920         IF(MEQL.GE.1) VINT(80)=2D0*VINT(80)
16921  
16922 C...Pick one particle to be the lighter (if improves efficiency).
16923       ELSEIF(MOFSH.EQ.4) THEN
16924         IF(MEQL.EQ.0.AND.MBW(1).EQ.1.AND.MBW(2).EQ.1.AND.PMD(1)+PMD(2)
16925      &  .GT.PMMX.AND.PMH(1).GT.PML(1).AND.PMH(2).GT.PML(2)) MEQL=2
16926   260   IF(MEQL.EQ.2) MLM=INT(1.5D0+PYR(0))
16927  
16928 C...Select two masses according to Breit-Wigner + flat in s + 1/s.
16929         DO 270 I=1,2
16930           IF(MBW(I).EQ.0) GOTO 270
16931           PMV=PMU(I)
16932           IF(MEQL.EQ.2.AND.I.EQ.MLM) PMV=PMH(I)
16933           ATV=ATU(I)
16934           IF(MEQL.EQ.2.AND.I.EQ.MLM) ATV=ATH(I)
16935           RBR=PYR(0)
16936           IF((ISUB.EQ.15.OR.ISUB.EQ.19.OR.ISUB.EQ.22.OR.ISUB.EQ.30.OR.
16937      &    ISUB.EQ.35).AND.MSTP(43).NE.2) RBR=2D0*RBR
16938           IF(RBR.LT.0.8D0) THEN
16939             PMSR=PMD(I)**2+PMD(I)*PGD(I)*TAN(ATL(I)+PYR(0)*(ATV-ATL(I)))
16940             PMG(I)=MIN(PMV,MAX(PML(I),SQRT(MAX(0D0,PMSR))))
16941           ELSEIF(RBR.LT.0.9D0) THEN
16942             PMG(I)=SQRT(MAX(0D0,PML(I)**2+PYR(0)*(PMV**2-PML(I)**2)))
16943           ELSEIF(RBR.LT.1.5D0) THEN
16944             PMG(I)=PML(I)*(PMV/PML(I))**PYR(0)
16945           ELSE
16946             PMG(I)=SQRT(MAX(0D0,PML(I)**2*PMV**2/(PML(I)**2+PYR(0)*
16947      &      (PMV**2-PML(I)**2))))
16948           ENDIF
16949   270   CONTINUE
16950         IF((MEQL.GE.1.AND.PMG(MAX(1,MLM)).GT.PMG(MIN(2,3-MLM))).OR.
16951      &  PMG(1)+PMG(2)+PARJ(64).GT.PMMX) THEN
16952           IF(MINT(48).EQ.1) THEN
16953             NGEN(0,1)=NGEN(0,1)+1
16954             NGEN(MINT(1),1)=NGEN(MINT(1),1)+1
16955             GOTO 260
16956           ELSE
16957             MINT(51)=1
16958             RETURN
16959           ENDIF
16960         ENDIF
16961         RET1=PMG(1)
16962         RET2=PMG(2)
16963  
16964 C...Give weight for selected mass distribution.
16965         VINT(80)=1D0
16966         DO 280 I=1,2
16967           IF(MBW(I).EQ.0) GOTO 280
16968           PMV=PMU(I)
16969           IF(MEQL.EQ.2.AND.I.EQ.MLM) PMV=PMH(I)
16970           ATV=ATU(I)
16971           IF(MEQL.EQ.2.AND.I.EQ.MLM) ATV=ATH(I)
16972           F0=PMD(I)*PGD(I)/((PMG(I)**2-PMD(I)**2)**2+
16973      &    (PMD(I)*PGD(I))**2)/PARU(1)
16974           F1=1D0
16975           F2=1D0/PMG(I)**2
16976           F3=1D0/PMG(I)**4
16977           FI0=(ATV-ATL(I))/PARU(1)
16978           FI1=PMV**2-PML(I)**2
16979           FI2=2D0*LOG(PMV/PML(I))
16980           FI3=1D0/PML(I)**2-1D0/PMV**2
16981           IF((ISUB.EQ.15.OR.ISUB.EQ.19.OR.ISUB.EQ.22.OR.ISUB.EQ.30.OR.
16982      &    ISUB.EQ.35).AND.MSTP(43).NE.2) THEN
16983             VINT(80)=VINT(80)*20D0/(8D0+(FI0/F0)*(F1/FI1+6D0*F2/FI2+
16984      &      5D0*F3/FI3))
16985           ELSE
16986             VINT(80)=VINT(80)*10D0/(8D0+(FI0/F0)*(F1/FI1+F2/FI2))
16987           ENDIF
16988           VINT(80)=VINT(80)*FI0
16989   280   CONTINUE
16990         IF(MEQL.GE.1) VINT(80)=2D0*VINT(80)
16991       ENDIF
16992  
16993       RETURN
16994       END
16995  
16996 C***********************************************************************
16997  
16998 C...PYRECO
16999 C...Handles the possibility of colour reconnection in W+W- events,
17000 C...Based on the main scenarios of the Sjostrand and Khoze study:
17001 C...I, II, II', intermediate and instantaneous; plus one model
17002 C...along the lines of the Gustafson and Hakkinen: GH.
17003 C...Note: also handles Z0 Z0 and W-W+ events, but notation below
17004 C...is as if first resonance is W+ and second W-.
17005
17006       SUBROUTINE PYRECO(IW1,IW2,NSD1,NAFT1)
17007  
17008 C...Double precision and integer declarations.
17009       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
17010       IMPLICIT INTEGER(I-N)
17011       INTEGER PYK,PYCHGE,PYCOMP
17012 C...Parameter value; number of points in MC integration.
17013       PARAMETER (NPT=100)
17014 C...Commonblocks.
17015       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
17016       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
17017       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
17018       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
17019       COMMON/PYINT1/MINT(400),VINT(400)
17020       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
17021 C...Local arrays.
17022       DIMENSION NBEG(2),NEND(2),INP(50),INM(50),BEWW(3),XP(3),XM(3),
17023      &V1(3),V2(3),BETP(50,4),DIRP(50,3),BETM(50,4),DIRM(50,3),
17024      &XD(4),XB(4),IAP(NPT),IAM(NPT),WTA(NPT),V1P(3),V2P(3),V1M(3),
17025      &V2M(3),Q(4,3),XPP(3),XMM(3),IPC(20),IMC(20),TC(0:20),TPC(20),
17026      &TMC(20),IJOIN(100)
17027  
17028 C...Functions to give four-product and to do determinants.
17029       FOUR(I,J)=P(I,4)*P(J,4)-P(I,1)*P(J,1)-P(I,2)*P(J,2)-P(I,3)*P(J,3)
17030       DETER(I,J,L)=Q(I,1)*Q(J,2)*Q(L,3)-Q(I,1)*Q(L,2)*Q(J,3)+
17031      &Q(J,1)*Q(L,2)*Q(I,3)-Q(J,1)*Q(I,2)*Q(L,3)+
17032      &Q(L,1)*Q(I,2)*Q(J,3)-Q(L,1)*Q(J,2)*Q(I,3)
17033  
17034 C...Only allow fraction of recoupling for GH, intermediate and
17035 C...instantaneous.
17036       IF(MSTP(115).EQ.5.OR.MSTP(115).EQ.11.OR.MSTP(115).EQ.12) THEN
17037         IF(PYR(0).GT.PARP(120)) RETURN
17038       ENDIF
17039       ISUB=MINT(1)
17040  
17041 C...Common part for scenarios I, II, II', and GH.
17042       IF(MSTP(115).EQ.1.OR.MSTP(115).EQ.2.OR.MSTP(115).EQ.3.OR.
17043      &MSTP(115).EQ.5) THEN
17044  
17045 C...Read out frequently-used parameters.
17046         PI=PARU(1)
17047         HBAR=PARU(3)
17048         PMW=PMAS(24,1)
17049         IF(ISUB.EQ.22) PMW=PMAS(23,1)
17050         PGW=PMAS(24,2)
17051         IF(ISUB.EQ.22) PGW=PMAS(23,2)
17052         TFRAG=PARP(115)
17053         RHAD=PARP(116)
17054         FACT=PARP(117)
17055         BLOWR=PARP(118)
17056         BLOWT=PARP(119)
17057  
17058 C...Find range of decay products of the W's.
17059 C...Background: the W's are stored in IW1 and IW2.
17060 C...Their direct decay products in NSD1+1 through NSD1+4.
17061 C...Products after shower (if any) in NSD1+5 through NAFT1
17062 C...for first W and in NAFT1+1 through N for the second.
17063         IF(NAFT1.GT.NSD1+4) THEN
17064           NBEG(1)=NSD1+5
17065           NEND(1)=NAFT1
17066         ELSE
17067           NBEG(1)=NSD1+1
17068           NEND(1)=NSD1+2
17069         ENDIF
17070         IF(N.GT.NAFT1) THEN
17071           NBEG(2)=NAFT1+1
17072           NEND(2)=N
17073         ELSE
17074           NBEG(2)=NSD1+3
17075           NEND(2)=NSD1+4
17076         ENDIF
17077  
17078 C...Rearrange parton shower products along strings.
17079         NOLD=N
17080         CALL PYPREP(NSD1+1)
17081  
17082 C...Find partons pointing back to W+ and W-; store them with quark
17083 C...end of string first.
17084         NNP=0
17085         NNM=0
17086         ISGP=0
17087         ISGM=0
17088         DO 120 I=NOLD+1,N
17089           IF(K(I,1).NE.1.AND.K(I,1).NE.2) GOTO 120
17090           IF(IABS(K(I,2)).GE.22) GOTO 120
17091           IF(K(I,3).GE.NBEG(1).AND.K(I,3).LE.NEND(1)) THEN
17092             IF(ISGP.EQ.0) ISGP=ISIGN(1,K(I,2))
17093             NNP=NNP+1
17094             IF(ISGP.EQ.1) THEN
17095               INP(NNP)=I
17096             ELSE
17097               DO 100 I1=NNP,2,-1
17098                 INP(I1)=INP(I1-1)
17099   100         CONTINUE
17100               INP(1)=I
17101             ENDIF
17102             IF(K(I,1).EQ.1) ISGP=0
17103           ELSEIF(K(I,3).GE.NBEG(2).AND.K(I,3).LE.NEND(2)) THEN
17104             IF(ISGM.EQ.0) ISGM=ISIGN(1,K(I,2))
17105             NNM=NNM+1
17106             IF(ISGM.EQ.1) THEN
17107               INM(NNM)=I
17108             ELSE
17109               DO 110 I1=NNM,2,-1
17110                 INM(I1)=INM(I1-1)
17111   110         CONTINUE
17112               INM(1)=I
17113             ENDIF
17114             IF(K(I,1).EQ.1) ISGM=0
17115           ENDIF
17116   120   CONTINUE
17117  
17118 C...Boost to W+W- rest frame (not strictly needed).
17119         DO 130 J=1,3
17120           BEWW(J)=(P(IW1,J)+P(IW2,J))/(P(IW1,4)+P(IW2,4))
17121   130   CONTINUE
17122         CALL PYROBO(IW1,IW1,0D0,0D0,-BEWW(1),-BEWW(2),-BEWW(3))
17123         CALL PYROBO(IW2,IW2,0D0,0D0,-BEWW(1),-BEWW(2),-BEWW(3))
17124         CALL PYROBO(NOLD+1,N,0D0,0D0,-BEWW(1),-BEWW(2),-BEWW(3))
17125  
17126 C...Select decay vertices of W+ and W-.
17127         TP=HBAR*(-LOG(PYR(0)))*P(IW1,4)/
17128      &  SQRT((P(IW1,5)**2-PMW**2)**2+(P(IW1,5)**2*PGW/PMW)**2)
17129         TM=HBAR*(-LOG(PYR(0)))*P(IW2,4)/
17130      &  SQRT((P(IW2,5)**2-PMW**2)**2+(P(IW2,5)**2*PGW/PMW)**2)
17131         GTMAX=MAX(TP,TM)
17132         DO 140 J=1,3
17133           XP(J)=TP*P(IW1,J)/P(IW1,4)
17134           XM(J)=TM*P(IW2,J)/P(IW2,4)
17135   140   CONTINUE
17136  
17137 C...Begin scenario I specifics.
17138         IF(MSTP(115).EQ.1) THEN
17139  
17140 C...Reconstruct velocity and direction of W+ string pieces.
17141           DO 170 IIP=1,NNP-1
17142             IF(K(INP(IIP),2).LT.0) GOTO 170
17143             I1=INP(IIP)
17144             I2=INP(IIP+1)
17145             P1A=SQRT(P(I1,1)**2+P(I1,2)**2+P(I1,3)**2)
17146             P2A=SQRT(P(I2,1)**2+P(I2,2)**2+P(I2,3)**2)
17147             DO 150 J=1,3
17148               V1(J)=P(I1,J)/P1A
17149               V2(J)=P(I2,J)/P2A
17150               BETP(IIP,J)=0.5D0*(V1(J)+V2(J))
17151               DIRP(IIP,J)=V1(J)-V2(J)
17152   150       CONTINUE
17153             BETP(IIP,4)=1D0/SQRT(1D0-BETP(IIP,1)**2-BETP(IIP,2)**2-
17154      &      BETP(IIP,3)**2)
17155             DIRL=SQRT(DIRP(IIP,1)**2+DIRP(IIP,2)**2+DIRP(IIP,3)**2)
17156             DO 160 J=1,3
17157               DIRP(IIP,J)=DIRP(IIP,J)/DIRL
17158   160       CONTINUE
17159   170     CONTINUE
17160  
17161 C...Reconstruct velocity and direction of W- string pieces.
17162           DO 200 IIM=1,NNM-1
17163             IF(K(INM(IIM),2).LT.0) GOTO 200
17164             I1=INM(IIM)
17165             I2=INM(IIM+1)
17166             P1A=SQRT(P(I1,1)**2+P(I1,2)**2+P(I1,3)**2)
17167             P2A=SQRT(P(I2,1)**2+P(I2,2)**2+P(I2,3)**2)
17168             DO 180 J=1,3
17169               V1(J)=P(I1,J)/P1A
17170               V2(J)=P(I2,J)/P2A
17171               BETM(IIM,J)=0.5D0*(V1(J)+V2(J))
17172               DIRM(IIM,J)=V1(J)-V2(J)
17173   180       CONTINUE
17174             BETM(IIM,4)=1D0/SQRT(1D0-BETM(IIM,1)**2-BETM(IIM,2)**2-
17175      &      BETM(IIM,3)**2)
17176             DIRL=SQRT(DIRM(IIM,1)**2+DIRM(IIM,2)**2+DIRM(IIM,3)**2)
17177             DO 190 J=1,3
17178               DIRM(IIM,J)=DIRM(IIM,J)/DIRL
17179   190       CONTINUE
17180   200     CONTINUE
17181  
17182 C...Loop over number of space-time points.
17183           NACC=0
17184           SUM=0D0
17185           DO 250 IPT=1,NPT
17186  
17187 C...Pick x,y,z,t Gaussian (width RHAD and TFRAG, respectively).
17188             R=SQRT(-LOG(PYR(0)))
17189             PHI=2D0*PI*PYR(0)
17190             X=BLOWR*RHAD*R*COS(PHI)
17191             Y=BLOWR*RHAD*R*SIN(PHI)
17192             R=SQRT(-LOG(PYR(0)))
17193             PHI=2D0*PI*PYR(0)
17194             Z=BLOWR*RHAD*R*COS(PHI)
17195             T=GTMAX+BLOWT*SQRT(0.5D0)*TFRAG*R*ABS(SIN(PHI))
17196  
17197 C...Weight for sample distribution.
17198             WTSMP=EXP(-(X**2+Y**2+Z**2)/(BLOWR*RHAD)**2)*
17199      &      EXP(-2D0*(T-GTMAX)**2/(BLOWT*TFRAG)**2)
17200  
17201 C...Loop over W+ string pieces and find one with largest weight.
17202             IMAXP=0
17203             WTMAXP=1D-10
17204             XD(1)=X-XP(1)
17205             XD(2)=Y-XP(2)
17206             XD(3)=Z-XP(3)
17207             XD(4)=T-TP
17208             DO 220 IIP=1,NNP-1
17209               IF(K(INP(IIP),2).LT.0) GOTO 220
17210               BED=BETP(IIP,1)*XD(1)+BETP(IIP,2)*XD(2)+BETP(IIP,3)*XD(3)
17211               BEDG=BETP(IIP,4)*(BETP(IIP,4)*BED/(1D0+BETP(IIP,4))-XD(4))
17212               DO 210 J=1,3
17213                 XB(J)=XD(J)+BEDG*BETP(IIP,J)
17214   210         CONTINUE
17215               XB(4)=BETP(IIP,4)*(XD(4)-BED)
17216               SR2=XB(1)**2+XB(2)**2+XB(3)**2
17217               SZ2=(DIRP(IIP,1)*XB(1)+DIRP(IIP,2)*XB(2)+
17218      &        DIRP(IIP,3)*XB(3))**2
17219               WTP=EXP(-(SR2-SZ2)/(2D0*RHAD**2))*EXP(-(XB(4)**2-SZ2)/
17220      &        TFRAG**2)
17221               IF(XB(4)-SQRT(SR2).LT.0D0) WTP=0D0
17222               IF(WTP.GT.WTMAXP) THEN
17223                 IMAXP=IIP
17224                 WTMAXP=WTP
17225               ENDIF
17226   220       CONTINUE
17227  
17228 C...Loop over W- string pieces and find one with largest weight.
17229             IMAXM=0
17230             WTMAXM=1D-10
17231             XD(1)=X-XM(1)
17232             XD(2)=Y-XM(2)
17233             XD(3)=Z-XM(3)
17234             XD(4)=T-TM
17235             DO 240 IIM=1,NNM-1
17236               IF(K(INM(IIM),2).LT.0) GOTO 240
17237               BED=BETM(IIM,1)*XD(1)+BETM(IIM,2)*XD(2)+BETM(IIM,3)*XD(3)
17238               BEDG=BETM(IIM,4)*(BETM(IIM,4)*BED/(1D0+BETM(IIM,4))-XD(4))
17239               DO 230 J=1,3
17240                 XB(J)=XD(J)+BEDG*BETM(IIM,J)
17241   230         CONTINUE
17242               XB(4)=BETM(IIM,4)*(XD(4)-BED)
17243               SR2=XB(1)**2+XB(2)**2+XB(3)**2
17244               SZ2=(DIRM(IIM,1)*XB(1)+DIRM(IIM,2)*XB(2)+
17245      &        DIRM(IIM,3)*XB(3))**2
17246               WTM=EXP(-(SR2-SZ2)/(2D0*RHAD**2))*EXP(-(XB(4)**2-SZ2)/
17247      &        TFRAG**2)
17248               IF(XB(4)-SQRT(SR2).LT.0D0) WTM=0D0
17249               IF(WTM.GT.WTMAXM) THEN
17250                 IMAXM=IIM
17251                 WTMAXM=WTM
17252               ENDIF
17253   240       CONTINUE
17254  
17255 C...Result of integration.
17256             WT=0D0
17257             IF(IMAXP.NE.0.AND.IMAXM.NE.0) THEN
17258               WT=WTMAXP*WTMAXM/WTSMP
17259               SUM=SUM+WT
17260               NACC=NACC+1
17261               IAP(NACC)=IMAXP
17262               IAM(NACC)=IMAXM
17263               WTA(NACC)=WT
17264             ENDIF
17265   250     CONTINUE
17266           RES=BLOWR**3*BLOWT*SUM/NPT
17267  
17268 C...Decide whether to reconnect and, if so, where.
17269           IACC=0
17270           PREC=1D0-EXP(-FACT*RES)
17271           IF(PREC.GT.PYR(0)) THEN
17272             RSUM=PYR(0)*SUM
17273             DO 260 IA=1,NACC
17274               IACC=IA
17275               RSUM=RSUM-WTA(IA)
17276               IF(RSUM.LE.0D0) GOTO 270
17277   260       CONTINUE
17278   270       IIP=IAP(IACC)
17279             IIM=IAM(IACC)
17280           ENDIF
17281  
17282 C...Begin scenario II and II' specifics.
17283         ELSEIF(MSTP(115).EQ.2.OR.MSTP(115).EQ.3) THEN
17284  
17285 C...Loop through all string pieces, one from W+ and one from W-.
17286           NCROSS=0
17287           TC(0)=0D0
17288           DO 340 IIP=1,NNP-1
17289             IF(K(INP(IIP),2).LT.0) GOTO 340
17290             I1P=INP(IIP)
17291             I2P=INP(IIP+1)
17292             DO 330 IIM=1,NNM-1
17293               IF(K(INM(IIM),2).LT.0) GOTO 330
17294               I1M=INM(IIM)
17295               I2M=INM(IIM+1)
17296  
17297 C...Find endpoint velocity vectors.
17298               DO 280 J=1,3
17299                 V1P(J)=P(I1P,J)/P(I1P,4)
17300                 V2P(J)=P(I2P,J)/P(I2P,4)
17301                 V1M(J)=P(I1M,J)/P(I1M,4)
17302                 V2M(J)=P(I2M,J)/P(I2M,4)
17303   280         CONTINUE
17304  
17305 C...Define q matrix and find t.
17306               DO 290 J=1,3
17307                 Q(1,J)=V2P(J)-V1P(J)
17308                 Q(2,J)=-(V2M(J)-V1M(J))
17309                 Q(3,J)=XP(J)-XM(J)-TP*V1P(J)+TM*V1M(J)
17310                 Q(4,J)=V1P(J)-V1M(J)
17311   290         CONTINUE
17312               T=-DETER(1,2,3)/DETER(1,2,4)
17313  
17314 C...Find alpha and beta; i.e. coordinates of crossing point.
17315               S11=Q(1,1)*(T-TP)
17316               S12=Q(2,1)*(T-TM)
17317               S13=Q(3,1)+Q(4,1)*T
17318               S21=Q(1,2)*(T-TP)
17319               S22=Q(2,2)*(T-TM)
17320               S23=Q(3,2)+Q(4,2)*T
17321               DEN=S11*S22-S12*S21
17322               ALP=(S12*S23-S22*S13)/DEN
17323               BET=(S21*S13-S11*S23)/DEN
17324  
17325 C...Check if solution acceptable.
17326               IANSW=1
17327               IF(T.LT.GTMAX) IANSW=0
17328               IF(ALP.LT.0D0.OR.ALP.GT.1D0) IANSW=0
17329               IF(BET.LT.0D0.OR.BET.GT.1D0) IANSW=0
17330  
17331 C...Find point of crossing and check that not inconsistent.
17332               DO 300 J=1,3
17333                 XPP(J)=XP(J)+(V1P(J)+ALP*(V2P(J)-V1P(J)))*(T-TP)
17334                 XMM(J)=XM(J)+(V1M(J)+BET*(V2M(J)-V1M(J)))*(T-TM)
17335   300         CONTINUE
17336               D2PM=(XPP(1)-XMM(1))**2+(XPP(2)-XMM(2))**2+
17337      &        (XPP(3)-XMM(3))**2
17338               D2P=XPP(1)**2+XPP(2)**2+XPP(3)**2
17339               D2M=XMM(1)**2+XMM(2)**2+XMM(3)**2
17340               IF(D2PM.GT.1D-4*(D2P+D2M)) IANSW=-1
17341  
17342 C...Find string eigentimes at crossing.
17343               IF(IANSW.EQ.1) THEN
17344                 TAUP=SQRT(MAX(0D0,(T-TP)**2-(XPP(1)-XP(1))**2-
17345      &          (XPP(2)-XP(2))**2-(XPP(3)-XP(3))**2))
17346                 TAUM=SQRT(MAX(0D0,(T-TM)**2-(XMM(1)-XM(1))**2-
17347      &          (XMM(2)-XM(2))**2-(XMM(3)-XM(3))**2))
17348               ELSE
17349                 TAUP=0D0
17350                 TAUM=0D0
17351               ENDIF
17352  
17353 C...Order crossings by time. End loop over crossings.
17354               IF(IANSW.EQ.1.AND.NCROSS.LT.20) THEN
17355                 NCROSS=NCROSS+1
17356                 DO 310 I1=NCROSS,1,-1
17357                   IF(T.GT.TC(I1-1).OR.I1.EQ.1) THEN
17358                     IPC(I1)=IIP
17359                     IMC(I1)=IIM
17360                     TC(I1)=T
17361                     TPC(I1)=TAUP
17362                     TMC(I1)=TAUM
17363                     GOTO 320
17364                   ELSE
17365                     IPC(I1)=IPC(I1-1)
17366                     IMC(I1)=IMC(I1-1)
17367                     TC(I1)=TC(I1-1)
17368                     TPC(I1)=TPC(I1-1)
17369                     TMC(I1)=TMC(I1-1)
17370                   ENDIF
17371   310           CONTINUE
17372   320           CONTINUE
17373               ENDIF
17374   330       CONTINUE
17375   340     CONTINUE
17376  
17377 C...Loop over crossings; find first (if any) acceptable one.
17378           IACC=0
17379           IF(NCROSS.GE.1) THEN
17380             DO 350 IC=1,NCROSS
17381               PNFRAG=EXP(-(TPC(IC)**2+TMC(IC)**2)/TFRAG**2)
17382               IF(PNFRAG.GT.PYR(0)) THEN
17383 C...Scenario II: only compare with fragmentation time.
17384                 IF(MSTP(115).EQ.2) THEN
17385                   IACC=IC
17386                   IIP=IPC(IACC)
17387                   IIM=IMC(IACC)
17388                   GOTO 360
17389 C...Scenario II': also require that string length decreases.
17390                 ELSE
17391                   IIP=IPC(IC)
17392                   IIM=IMC(IC)
17393                   I1P=INP(IIP)
17394                   I2P=INP(IIP+1)
17395                   I1M=INM(IIM)
17396                   I2M=INM(IIM+1)
17397                   ELOLD=FOUR(I1P,I2P)*FOUR(I1M,I2M)
17398                   ELNEW=FOUR(I1P,I2M)*FOUR(I1M,I2P)
17399                   IF(ELNEW.LT.ELOLD) THEN
17400                     IACC=IC
17401                     IIP=IPC(IACC)
17402                     IIM=IMC(IACC)
17403                     GOTO 360
17404                   ENDIF
17405                 ENDIF
17406               ENDIF
17407   350       CONTINUE
17408   360       CONTINUE
17409           ENDIF
17410  
17411 C...Begin scenario GH specifics.
17412         ELSEIF(MSTP(115).EQ.5) THEN
17413  
17414 C...Loop through all string pieces, one from W+ and one from W-.
17415           IACC=0
17416           ELMIN=1D0
17417           DO 380 IIP=1,NNP-1
17418             IF(K(INP(IIP),2).LT.0) GOTO 380
17419             I1P=INP(IIP)
17420             I2P=INP(IIP+1)
17421             DO 370 IIM=1,NNM-1
17422               IF(K(INM(IIM),2).LT.0) GOTO 370
17423               I1M=INM(IIM)
17424               I2M=INM(IIM+1)
17425  
17426 C...Look for largest decrease of (exponent of) Lambda measure.
17427               ELOLD=FOUR(I1P,I2P)*FOUR(I1M,I2M)
17428               ELNEW=FOUR(I1P,I2M)*FOUR(I1M,I2P)
17429               ELDIF=ELNEW/MAX(1D-10,ELOLD)
17430               IF(ELDIF.LT.ELMIN) THEN
17431                 IACC=IIP+IIM
17432                 ELMIN=ELDIF
17433                 IPC(1)=IIP
17434                 IMC(1)=IIM
17435               ENDIF
17436   370       CONTINUE
17437   380     CONTINUE
17438           IIP=IPC(1)
17439           IIM=IMC(1)
17440         ENDIF
17441  
17442 C...Common for scenarios I, II, II' and GH: reconnect strings.
17443         IF(IACC.NE.0) THEN
17444           MINT(32)=1
17445           NJOIN=0
17446           DO 390 IS=1,NNP+NNM
17447             NJOIN=NJOIN+1
17448             IF(IS.LE.IIP) THEN
17449               I=INP(IS)
17450             ELSEIF(IS.LE.IIP+NNM-IIM) THEN
17451               I=INM(IS-IIP+IIM)
17452             ELSEIF(IS.LE.IIP+NNM) THEN
17453               I=INM(IS-IIP-NNM+IIM)
17454             ELSE
17455               I=INP(IS-NNM)
17456             ENDIF
17457             IJOIN(NJOIN)=I
17458             IF(K(I,2).LT.0) THEN
17459               CALL PYJOIN(NJOIN,IJOIN)
17460               NJOIN=0
17461             ENDIF
17462   390     CONTINUE
17463  
17464 C...Restore original event record if no reconnection.
17465         ELSE
17466           DO 400 I=NSD1+1,NOLD
17467             IF(K(I,1).EQ.13.OR.K(I,1).EQ.14) THEN
17468               K(I,4)=MOD(K(I,4),MSTU(5)**2)
17469               K(I,5)=MOD(K(I,5),MSTU(5)**2)
17470             ENDIF
17471   400     CONTINUE
17472           DO 410 I=NOLD+1,N
17473             K(K(I,3),1)=3
17474   410     CONTINUE
17475           N=NOLD
17476         ENDIF
17477  
17478 C...Boost back system.
17479         CALL PYROBO(IW1,IW1,0D0,0D0,BEWW(1),BEWW(2),BEWW(3))
17480         CALL PYROBO(IW2,IW2,0D0,0D0,BEWW(1),BEWW(2),BEWW(3))
17481         IF(N.GT.NOLD) CALL PYROBO(NOLD+1,N,0D0,0D0,
17482      &  BEWW(1),BEWW(2),BEWW(3))
17483  
17484 C...Common part for intermediate and instantaneous scenarios.
17485       ELSEIF(MSTP(115).EQ.11.OR.MSTP(115).EQ.12) THEN
17486         MINT(32)=1
17487  
17488 C...Remove old shower products and reset showering ones.
17489         N=NSD1+4
17490         DO 420 I=NSD1+1,NSD1+4
17491           K(I,1)=3
17492           K(I,4)=MOD(K(I,4),MSTU(5)**2)
17493           K(I,5)=MOD(K(I,5),MSTU(5)**2)
17494   420   CONTINUE
17495  
17496 C...Identify quark-antiquark pairs.
17497         IQ1=NSD1+1
17498         IQ2=NSD1+2
17499         IQ3=NSD1+3
17500         IF(K(IQ1,2)*K(IQ3,2).LT.0) IQ3=NSD1+4
17501         IQ4=2*NSD1+7-IQ3
17502  
17503 C...Reconnect strings.
17504         IJOIN(1)=IQ1
17505         IJOIN(2)=IQ4
17506         CALL PYJOIN(2,IJOIN)
17507         IJOIN(1)=IQ3
17508         IJOIN(2)=IQ2
17509         CALL PYJOIN(2,IJOIN)
17510  
17511 C...Do new parton showers in intermediate scenario.
17512         IF(MSTP(71).GE.1.AND.MSTP(115).EQ.11) THEN
17513           MSTJ50=MSTJ(50)
17514           MSTJ(50)=0
17515           CALL PYSHOW(IQ1,IQ2,P(IW1,5))
17516           CALL PYSHOW(IQ3,IQ4,P(IW2,5))
17517           MSTJ(50)=MSTJ50
17518  
17519 C...Do new parton showers in instantaneous scenario.
17520         ELSEIF(MSTP(71).GE.1.AND.MSTP(115).EQ.12) THEN
17521           PPM2=(P(IQ1,4)+P(IQ4,4))**2-(P(IQ1,1)+P(IQ4,1))**2-
17522      &    (P(IQ1,2)+P(IQ4,2))**2-(P(IQ1,3)+P(IQ4,3))**2
17523           PPM=SQRT(MAX(0D0,PPM2))
17524           CALL PYSHOW(IQ1,IQ4,PPM)
17525           PPM2=(P(IQ3,4)+P(IQ2,4))**2-(P(IQ3,1)+P(IQ2,1))**2-
17526      &    (P(IQ3,2)+P(IQ2,2))**2-(P(IQ3,3)+P(IQ2,3))**2
17527           PPM=SQRT(MAX(0D0,PPM2))
17528           CALL PYSHOW(IQ3,IQ2,PPM)
17529         ENDIF
17530       ENDIF
17531  
17532       RETURN
17533       END
17534  
17535 C***********************************************************************
17536  
17537 C...PYKLIM
17538 C...Checks generated variables against pre-set kinematical limits;
17539 C...also calculates limits on variables used in generation.
17540  
17541       SUBROUTINE PYKLIM(ILIM)
17542  
17543 C...Double precision and integer declarations.
17544       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
17545       IMPLICIT INTEGER(I-N)
17546       INTEGER PYK,PYCHGE,PYCOMP
17547 C...Commonblocks.
17548       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
17549       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
17550       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
17551       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
17552       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
17553       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
17554       COMMON/PYINT1/MINT(400),VINT(400)
17555       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
17556       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,
17557      &/PYINT1/,/PYINT2/
17558  
17559 C...Common kinematical expressions.
17560       MINT(51)=0
17561       ISUB=MINT(1)
17562       ISTSB=ISET(ISUB)
17563       IF(ISUB.EQ.96) GOTO 100
17564       SQM3=VINT(63)
17565       SQM4=VINT(64)
17566       IF(ILIM.NE.0) THEN
17567         IF(ABS(SQM3).LT.1D-4.AND.ABS(SQM4).LT.1D-4) THEN
17568           CKIN09=MAX(CKIN(9),CKIN(13))
17569           CKIN10=MIN(CKIN(10),CKIN(14))
17570           CKIN11=MAX(CKIN(11),CKIN(15))
17571           CKIN12=MIN(CKIN(12),CKIN(16))
17572         ELSE
17573           CKIN09=MAX(CKIN(9),MIN(0D0,CKIN(13)))
17574           CKIN10=MIN(CKIN(10),MAX(0D0,CKIN(14)))
17575           CKIN11=MAX(CKIN(11),MIN(0D0,CKIN(15)))
17576           CKIN12=MIN(CKIN(12),MAX(0D0,CKIN(16)))
17577         ENDIF
17578       ENDIF
17579       IF(ILIM.NE.1) THEN
17580         TAU=VINT(21)
17581         RM3=SQM3/(TAU*VINT(2))
17582         RM4=SQM4/(TAU*VINT(2))
17583         BE34=SQRT(MAX(1D-20,(1D0-RM3-RM4)**2-4D0*RM3*RM4))
17584       ENDIF
17585       PTHMIN=CKIN(3)
17586       IF(MIN(SQM3,SQM4).LT.CKIN(6)**2.AND.ISTSB.NE.1.AND.ISTSB.NE.3)
17587      &PTHMIN=MAX(CKIN(3),CKIN(5))
17588  
17589       IF(ILIM.EQ.0) THEN
17590 C...Check generated values of tau, y*, cos(theta-hat), and tau' against
17591 C...pre-set kinematical limits.
17592         YST=VINT(22)
17593         CTH=VINT(23)
17594         TAUP=VINT(26)
17595         TAUE=TAU
17596         IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=TAUP
17597         X1=SQRT(TAUE)*EXP(YST)
17598         X2=SQRT(TAUE)*EXP(-YST)
17599         XF=X1-X2
17600         IF(MINT(47).NE.1) THEN
17601           IF(TAU*VINT(2).LT.CKIN(1)**2) MINT(51)=1
17602           IF(CKIN(2).GE.0D0.AND.TAU*VINT(2).GT.CKIN(2)**2) MINT(51)=1
17603           IF(YST.LT.CKIN(7).OR.YST.GT.CKIN(8)) MINT(51)=1
17604           IF(XF.LT.CKIN(25).OR.XF.GT.CKIN(26)) MINT(51)=1
17605         ENDIF
17606         IF(MINT(45).NE.1) THEN
17607           IF(X1.LT.CKIN(21).OR.X1.GT.CKIN(22)) MINT(51)=1
17608         ENDIF
17609         IF(MINT(46).NE.1) THEN
17610           IF(X2.LT.CKIN(23).OR.X2.GT.CKIN(24)) MINT(51)=1
17611         ENDIF
17612         IF(MINT(45).EQ.2) THEN
17613           IF(X1.GT.1D0-2D0*PARP(111)/VINT(1)) MINT(51)=1
17614         ENDIF
17615         IF(MINT(46).EQ.2) THEN
17616           IF(X2.GT.1D0-2D0*PARP(111)/VINT(1)) MINT(51)=1
17617         ENDIF
17618         IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
17619           PTH=0.5D0*BE34*SQRT(TAU*VINT(2)*MAX(0D0,1D0-CTH**2))
17620           EXPY3=MAX(1D-20,(1D0+RM3-RM4+BE34*CTH)/
17621      &    MAX(1D-20,(1D0+RM3-RM4-BE34*CTH)))
17622           EXPY4=MAX(1D-20,(1D0-RM3+RM4-BE34*CTH)/
17623      &    MAX(1D-20,(1D0-RM3+RM4+BE34*CTH)))
17624           Y3=YST+0.5D0*LOG(EXPY3)
17625           Y4=YST+0.5D0*LOG(EXPY4)
17626           YLARGE=MAX(Y3,Y4)
17627           YSMALL=MIN(Y3,Y4)
17628           ETALAR=20D0
17629           ETASMA=-20D0
17630           STH=SQRT(MAX(0D0,1D0-CTH**2))
17631           EXSQ3=SQRT(MAX(1D-20,((1D0+RM3-RM4)*COSH(YST)+BE34*SINH(YST)*
17632      &    CTH)**2-4D0*RM3))
17633           EXSQ4=SQRT(MAX(1D-20,((1D0-RM3+RM4)*COSH(YST)-BE34*SINH(YST)*
17634      &    CTH)**2-4D0*RM4))
17635           IF(STH.GE.1D-10) THEN
17636             EXPET3=((1D0+RM3-RM4)*SINH(YST)+BE34*COSH(YST)*CTH+EXSQ3)/
17637      &      (BE34*STH)
17638             EXPET4=((1D0-RM3+RM4)*SINH(YST)-BE34*COSH(YST)*CTH+EXSQ4)/
17639      &      (BE34*STH)
17640             ETA3=LOG(MIN(1D10,MAX(1D-10,EXPET3)))
17641             ETA4=LOG(MIN(1D10,MAX(1D-10,EXPET4)))
17642             ETALAR=MAX(ETA3,ETA4)
17643             ETASMA=MIN(ETA3,ETA4)
17644           ENDIF
17645           CTS3=((1D0+RM3-RM4)*SINH(YST)+BE34*COSH(YST)*CTH)/EXSQ3
17646           CTS4=((1D0-RM3+RM4)*SINH(YST)-BE34*COSH(YST)*CTH)/EXSQ4
17647           CTSLAR=MIN(1D0,MAX(-1D0,CTS3,CTS4))
17648           CTSSMA=MAX(-1D0,MIN(1D0,CTS3,CTS4))
17649           SH=TAU*VINT(2)
17650           RPTS=4D0*VINT(71)**2/SH
17651           BE34L=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4-RPTS))
17652           RM34=MAX(1D-20,2D0*RM3*RM4)
17653           IF(2D0*VINT(71)**2/(VINT(21)*VINT(2)).LT.0.0001D0)
17654      &    RM34=MAX(RM34,2D0*VINT(71)**2/(VINT(21)*VINT(2)))
17655           RTHM=(4D0*RM3*RM4+RPTS)/(1D0-RM3-RM4+BE34L)
17656           THA=0.5D0*SH*MAX(RTHM,1D0-RM3-RM4-BE34*CTH)
17657           UHA=0.5D0*SH*MAX(RTHM,1D0-RM3-RM4+BE34*CTH)
17658           IF(PTH.LT.PTHMIN) MINT(51)=1
17659           IF(CKIN(4).GE.0D0.AND.PTH.GT.CKIN(4)) MINT(51)=1
17660           IF(YLARGE.LT.CKIN(9).OR.YLARGE.GT.CKIN(10)) MINT(51)=1
17661           IF(YSMALL.LT.CKIN(11).OR.YSMALL.GT.CKIN(12)) MINT(51)=1
17662           IF(ETALAR.LT.CKIN(13).OR.ETALAR.GT.CKIN(14)) MINT(51)=1
17663           IF(ETASMA.LT.CKIN(15).OR.ETASMA.GT.CKIN(16)) MINT(51)=1
17664           IF(CTSLAR.LT.CKIN(17).OR.CTSLAR.GT.CKIN(18)) MINT(51)=1
17665           IF(CTSSMA.LT.CKIN(19).OR.CTSSMA.GT.CKIN(20)) MINT(51)=1
17666           IF(CTH.LT.CKIN(27).OR.CTH.GT.CKIN(28)) MINT(51)=1
17667           IF(THA.LT.CKIN(35)) MINT(51)=1
17668           IF(CKIN(36).GE.0D0.AND.THA.GT.CKIN(36)) MINT(51)=1
17669           IF(UHA.LT.CKIN(37)) MINT(51)=1
17670           IF(CKIN(38).GE.0D0.AND.UHA.GT.CKIN(38)) MINT(51)=1
17671         ENDIF
17672         IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
17673           IF(TAUP*VINT(2).LT.CKIN(31)**2) MINT(51)=1
17674           IF(CKIN(32).GE.0D0.AND.TAUP*VINT(2).GT.CKIN(32)**2) MINT(51)=1
17675         ENDIF
17676  
17677 C...Additional cuts on W2 (approximately) in DIS.
17678         IF(ISUB.EQ.10.AND.MINT(43).GE.2) THEN
17679           XBJ=X2
17680           IF(IABS(MINT(12)).LT.20) XBJ=X1
17681           Q2BJ=THA
17682           W2BJ=Q2BJ*(1D0-XBJ)/XBJ
17683           IF(W2BJ.LT.CKIN(39)) MINT(51)=1
17684           IF(CKIN(40).GT.0D0.AND.W2BJ.GT.CKIN(40)) MINT(51)=1
17685         ENDIF
17686  
17687       ELSEIF(ILIM.EQ.1) THEN
17688 C...Calculate limits on tau
17689 C...0) due to definition
17690         TAUMN0=0D0
17691         TAUMX0=1D0
17692 C...1) due to limits on subsystem mass
17693         TAUMN1=CKIN(1)**2/VINT(2)
17694         TAUMX1=1D0
17695         IF(CKIN(2).GE.0D0) TAUMX1=CKIN(2)**2/VINT(2)
17696 C...2) due to limits on pT-hat (and non-overlapping rapidity intervals)
17697         TM3=SQRT(SQM3+PTHMIN**2)
17698         TM4=SQRT(SQM4+PTHMIN**2)
17699         YDCOSH=1D0
17700         IF(CKIN09.GT.CKIN12) YDCOSH=COSH(CKIN09-CKIN12)
17701         TAUMN2=(TM3**2+2D0*TM3*TM4*YDCOSH+TM4**2)/VINT(2)
17702         TAUMX2=1D0
17703 C...3) due to limits on pT-hat and cos(theta-hat)
17704         CTH2MN=MIN(CKIN(27)**2,CKIN(28)**2)
17705         CTH2MX=MAX(CKIN(27)**2,CKIN(28)**2)
17706         TAUMN3=0D0
17707         IF(CKIN(27)*CKIN(28).GT.0D0) TAUMN3=
17708      &  (SQRT(SQM3+PTHMIN**2/(1D0-CTH2MN))+
17709      &  SQRT(SQM4+PTHMIN**2/(1D0-CTH2MN)))**2/VINT(2)
17710         TAUMX3=1D0
17711         IF(CKIN(4).GE.0D0.AND.CTH2MX.LT.1D0) TAUMX3=
17712      &  (SQRT(SQM3+CKIN(4)**2/(1D0-CTH2MX))+
17713      &  SQRT(SQM4+CKIN(4)**2/(1D0-CTH2MX)))**2/VINT(2)
17714 C...4) due to limits on x1 and x2
17715         TAUMN4=CKIN(21)*CKIN(23)
17716         TAUMX4=CKIN(22)*CKIN(24)
17717 C...5) due to limits on xF
17718         TAUMN5=0D0
17719         TAUMX5=MAX(1D0-CKIN(25),1D0+CKIN(26))
17720 C...6) due to limits on that and uhat
17721         TAUMN6=(SQM3+SQM4+CKIN(35)+CKIN(37))/VINT(2)
17722         TAUMX6=1D0
17723         IF(CKIN(36).GT.0D0.AND.CKIN(38).GT.0D0) TAUMX6=
17724      &  (SQM3+SQM4+CKIN(36)+CKIN(38))/VINT(2)
17725  
17726 C...Net effect of all separate limits.
17727         VINT(11)=MAX(TAUMN0,TAUMN1,TAUMN2,TAUMN3,TAUMN4,TAUMN5,TAUMN6)
17728         VINT(31)=MIN(TAUMX0,TAUMX1,TAUMX2,TAUMX3,TAUMX4,TAUMX5,TAUMX6)
17729         IF(MINT(47).EQ.1.AND.(ISTSB.EQ.1.OR.ISTSB.EQ.2)) THEN
17730           VINT(11)=1D0-1D-9
17731           VINT(31)=1D0+1D-9
17732         ELSEIF(MINT(47).EQ.5) THEN
17733           VINT(31)=MIN(VINT(31),1D0-2D-10)
17734         ELSEIF(MINT(47).GE.6) THEN
17735           VINT(31)=MIN(VINT(31),1D0-1D-10)
17736         ENDIF
17737         IF(VINT(31).LE.VINT(11)) MINT(51)=1
17738  
17739       ELSEIF(ILIM.EQ.2) THEN
17740 C...Calculate limits on y*
17741         TAUE=TAU
17742         IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINT(26)
17743         TAURT=SQRT(TAUE)
17744 C...0) due to kinematics
17745         YSTMN0=LOG(TAURT)
17746         YSTMX0=-YSTMN0
17747 C...1) due to explicit limits
17748         YSTMN1=CKIN(7)
17749         YSTMX1=CKIN(8)
17750 C...2) due to limits on x1
17751         YSTMN2=LOG(MAX(TAUE,CKIN(21))/TAURT)
17752         YSTMX2=LOG(MAX(TAUE,CKIN(22))/TAURT)
17753 C...3) due to limits on x2
17754         YSTMN3=-LOG(MAX(TAUE,CKIN(24))/TAURT)
17755         YSTMX3=-LOG(MAX(TAUE,CKIN(23))/TAURT)
17756 C...4) due to limits on xF
17757         YEPMN4=0.5D0*ABS(CKIN(25))/TAURT
17758         YSTMN4=SIGN(LOG(MAX(1D-20,SQRT(1D0+YEPMN4**2)+YEPMN4)),CKIN(25))
17759         YEPMX4=0.5D0*ABS(CKIN(26))/TAURT
17760         YSTMX4=SIGN(LOG(MAX(1D-20,SQRT(1D0+YEPMX4**2)+YEPMX4)),CKIN(26))
17761 C...5) due to simultaneous limits on y-large and y-small
17762         YEPSMN=(RM3-RM4)*SINH(CKIN09-CKIN11)
17763         YEPSMX=(RM3-RM4)*SINH(CKIN10-CKIN12)
17764         YDIFMN=ABS(LOG(MAX(1D-20,SQRT(1D0+YEPSMN**2)-YEPSMN)))
17765         YDIFMX=ABS(LOG(MAX(1D-20,SQRT(1D0+YEPSMX**2)-YEPSMX)))
17766         YSTMN5=0.5D0*(CKIN09+CKIN11-YDIFMN)
17767         YSTMX5=0.5D0*(CKIN10+CKIN12+YDIFMX)
17768 C...6) due to simultaneous limits on cos(theta-hat) and y-large or
17769 C...   y-small
17770         CTHLIM=SQRT(MAX(0D0,1D0-4D0*PTHMIN**2/(BE34**2*TAUE*VINT(2))))
17771         RZMN=BE34*MAX(CKIN(27),-CTHLIM)
17772         RZMX=BE34*MIN(CKIN(28),CTHLIM)
17773         YEX3MX=(1D0+RM3-RM4+RZMX)/MAX(1D-10,1D0+RM3-RM4-RZMX)
17774         YEX4MX=(1D0+RM4-RM3-RZMN)/MAX(1D-10,1D0+RM4-RM3+RZMN)
17775         YEX3MN=MAX(1D-10,1D0+RM3-RM4+RZMN)/(1D0+RM3-RM4-RZMN)
17776         YEX4MN=MAX(1D-10,1D0+RM4-RM3-RZMX)/(1D0+RM4-RM3+RZMX)
17777         YSTMN6=CKIN09-0.5D0*LOG(MAX(YEX3MX,YEX4MX))
17778         YSTMX6=CKIN12-0.5D0*LOG(MIN(YEX3MN,YEX4MN))
17779  
17780 C...Net effect of all separate limits.
17781         VINT(12)=MAX(YSTMN0,YSTMN1,YSTMN2,YSTMN3,YSTMN4,YSTMN5,YSTMN6)
17782         VINT(32)=MIN(YSTMX0,YSTMX1,YSTMX2,YSTMX3,YSTMX4,YSTMX5,YSTMX6)
17783         IF(MINT(47).EQ.1) THEN
17784           VINT(12)=-1D-9
17785           VINT(32)=1D-9
17786         ELSEIF(MINT(47).EQ.2.OR.MINT(47).EQ.6) THEN
17787           VINT(12)=(1D0-1D-9)*YSTMX0
17788           VINT(32)=(1D0+1D-9)*YSTMX0
17789         ELSEIF(MINT(47).EQ.3.OR.MINT(47).EQ.7) THEN
17790           VINT(12)=-(1D0+1D-9)*YSTMX0
17791           VINT(32)=-(1D0-1D-9)*YSTMX0
17792         ELSEIF(MINT(47).EQ.5) THEN
17793           YSTEE=LOG((1D0-1D-10)/TAURT)
17794           VINT(12)=MAX(VINT(12),-YSTEE)
17795           VINT(32)=MIN(VINT(32),YSTEE)
17796         ENDIF
17797         IF(VINT(32).LE.VINT(12)) MINT(51)=1
17798  
17799       ELSEIF(ILIM.EQ.3) THEN
17800 C...Calculate limits on cos(theta-hat)
17801         YST=VINT(22)
17802 C...0) due to definition
17803         CTNMN0=-1D0
17804         CTNMX0=0D0
17805         CTPMN0=0D0
17806         CTPMX0=1D0
17807 C...1) due to explicit limits
17808         CTNMN1=MIN(0D0,CKIN(27))
17809         CTNMX1=MIN(0D0,CKIN(28))
17810         CTPMN1=MAX(0D0,CKIN(27))
17811         CTPMX1=MAX(0D0,CKIN(28))
17812 C...2) due to limits on pT-hat
17813         CTNMN2=-SQRT(MAX(0D0,1D0-4D0*PTHMIN**2/(BE34**2*TAU*VINT(2))))
17814         CTPMX2=-CTNMN2
17815         CTNMX2=0D0
17816         CTPMN2=0D0
17817         IF(CKIN(4).GE.0D0) THEN
17818           CTNMX2=-SQRT(MAX(0D0,1D0-4D0*CKIN(4)**2/
17819      &    (BE34**2*TAU*VINT(2))))
17820           CTPMN2=-CTNMX2
17821         ENDIF
17822 C...3) due to limits on y-large and y-small
17823         CTNMN3=MIN(0D0,MAX((1D0+RM3-RM4)/BE34*TANH(CKIN11-YST),
17824      &  -(1D0-RM3+RM4)/BE34*TANH(CKIN10-YST)))
17825         CTNMX3=MIN(0D0,(1D0+RM3-RM4)/BE34*TANH(CKIN12-YST),
17826      &  -(1D0-RM3+RM4)/BE34*TANH(CKIN09-YST))
17827         CTPMN3=MAX(0D0,(1D0+RM3-RM4)/BE34*TANH(CKIN09-YST),
17828      &  -(1D0-RM3+RM4)/BE34*TANH(CKIN12-YST))
17829         CTPMX3=MAX(0D0,MIN((1D0+RM3-RM4)/BE34*TANH(CKIN10-YST),
17830      &  -(1D0-RM3+RM4)/BE34*TANH(CKIN11-YST)))
17831 C...4) due to limits on that
17832         CTNMN4=-1D0
17833         CTNMX4=0D0
17834         CTPMN4=0D0
17835         CTPMX4=1D0
17836         SH=TAU*VINT(2)
17837         IF(CKIN(35).GT.0D0) THEN
17838           CTLIM=(1D0-RM3-RM4-2D0*CKIN(35)/SH)/BE34
17839           IF(CTLIM.GT.0D0) THEN
17840             CTPMX4=CTLIM
17841           ELSE
17842             CTPMX4=0D0
17843             CTNMX4=CTLIM
17844           ENDIF
17845         ENDIF
17846         IF(CKIN(36).GT.0D0) THEN
17847           CTLIM=(1D0-RM3-RM4-2D0*CKIN(36)/SH)/BE34
17848           IF(CTLIM.LT.0D0) THEN
17849             CTNMN4=CTLIM
17850           ELSE
17851             CTNMN4=0D0
17852             CTPMN4=CTLIM
17853           ENDIF
17854         ENDIF
17855 C...5) due to limits on uhat
17856         CTNMN5=-1D0
17857         CTNMX5=0D0
17858         CTPMN5=0D0
17859         CTPMX5=1D0
17860         IF(CKIN(37).GT.0D0) THEN
17861           CTLIM=(2D0*CKIN(37)/SH-(1D0-RM3-RM4))/BE34
17862           IF(CTLIM.LT.0D0) THEN
17863             CTNMN5=CTLIM
17864           ELSE
17865             CTNMN5=0D0
17866             CTPMN5=CTLIM
17867           ENDIF
17868         ENDIF
17869         IF(CKIN(38).GT.0D0) THEN
17870           CTLIM=(2D0*CKIN(38)/SH-(1D0-RM3-RM4))/BE34
17871           IF(CTLIM.GT.0D0) THEN
17872             CTPMX5=CTLIM
17873           ELSE
17874             CTPMX5=0D0
17875             CTNMX5=CTLIM
17876           ENDIF
17877         ENDIF
17878  
17879 C...Net effect of all separate limits.
17880         VINT(13)=MAX(CTNMN0,CTNMN1,CTNMN2,CTNMN3,CTNMN4,CTNMN5)
17881         VINT(33)=MIN(CTNMX0,CTNMX1,CTNMX2,CTNMX3,CTNMX4,CTNMX5)
17882         VINT(14)=MAX(CTPMN0,CTPMN1,CTPMN2,CTPMN3,CTPMN4,CTPMN5)
17883         VINT(34)=MIN(CTPMX0,CTPMX1,CTPMX2,CTPMX3,CTPMX4,CTPMX5)
17884         IF(VINT(33).LE.VINT(13).AND.VINT(34).LE.VINT(14)) MINT(51)=1
17885  
17886       ELSEIF(ILIM.EQ.4) THEN
17887 C...Calculate limits on tau'
17888 C...0) due to kinematics
17889         TAPMN0=TAU
17890         IF(ISTSB.EQ.5.AND.KFPR(ISUB,2).GT.0) THEN
17891           PQRAT=2D0*PMAS(PYCOMP(KFPR(ISUB,2)),1)/VINT(1)
17892           TAPMN0=(SQRT(TAU)+PQRAT)**2
17893         ENDIF
17894         TAPMX0=1D0
17895 C...1) due to explicit limits
17896         TAPMN1=CKIN(31)**2/VINT(2)
17897         TAPMX1=1D0
17898         IF(CKIN(32).GE.0D0) TAPMX1=CKIN(32)**2/VINT(2)
17899  
17900 C...Net effect of all separate limits.
17901         VINT(16)=MAX(TAPMN0,TAPMN1)
17902         VINT(36)=MIN(TAPMX0,TAPMX1)
17903         IF(MINT(47).EQ.1) THEN
17904           VINT(16)=1D0-1D-9
17905           VINT(36)=1D0+1D-9
17906         ELSEIF(MINT(47).EQ.5) THEN
17907           VINT(36)=MIN(VINT(36),1D0-2D-10)
17908         ELSEIF(MINT(47).EQ.6.OR.MINT(47).EQ.7) THEN
17909           VINT(36)=MIN(VINT(36),1D0-1D-10)
17910         ENDIF
17911         IF(VINT(36).LE.VINT(16)) MINT(51)=1
17912  
17913       ENDIF
17914       RETURN
17915  
17916 C...Special case for low-pT and multiple interactions:
17917 C...effective kinematical limits for tau, y*, cos(theta-hat).
17918   100 IF(ILIM.EQ.0) THEN
17919       ELSEIF(ILIM.EQ.1) THEN
17920         IF(MSTP(82).LE.1) THEN
17921           VINT(11)=4D0*(PARP(81)*(VINT(1)/PARP(89))**PARP(90))**2/
17922      &    VINT(2)
17923         ELSE
17924           VINT(11)=(PARP(82)*(VINT(1)/PARP(89))**PARP(90))**2/VINT(2)
17925         ENDIF
17926         VINT(31)=1D0
17927       ELSEIF(ILIM.EQ.2) THEN
17928         VINT(12)=0.5D0*LOG(VINT(21))
17929         VINT(32)=-VINT(12)
17930       ELSEIF(ILIM.EQ.3) THEN
17931         IF(MSTP(82).LE.1) THEN
17932           ST2EFF=4D0*(PARP(81)*(VINT(1)/PARP(89))**PARP(90))**2/
17933      &    (VINT(21)*VINT(2))
17934         ELSE
17935           ST2EFF=0.01D0*(PARP(82)*(VINT(1)/PARP(89))**PARP(90))**2/
17936      &    (VINT(21)*VINT(2))
17937         ENDIF
17938         VINT(13)=-SQRT(MAX(0D0,1D0-ST2EFF))
17939         VINT(33)=0D0
17940         VINT(14)=0D0
17941         VINT(34)=-VINT(13)
17942       ENDIF
17943  
17944       RETURN
17945       END
17946  
17947 C*********************************************************************
17948  
17949 C...PYKMAP
17950 C...Maps a uniform distribution into a distribution of a kinematical
17951 C...variable according to one of the possibilities allowed. It is
17952 C...assumed that kinematical limits have been set by a PYKLIM call.
17953  
17954       SUBROUTINE PYKMAP(IVAR,MVAR,VVAR)
17955  
17956 C...Double precision and integer declarations.
17957       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
17958       IMPLICIT INTEGER(I-N)
17959       INTEGER PYK,PYCHGE,PYCOMP
17960 C...Commonblocks.
17961       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
17962       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
17963       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
17964       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
17965       COMMON/PYINT1/MINT(400),VINT(400)
17966       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
17967       SAVE /PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/
17968  
17969 C...Convert VVAR to tau variable.
17970       ISUB=MINT(1)
17971       ISTSB=ISET(ISUB)
17972       IF(IVAR.EQ.1) THEN
17973         TAUMIN=VINT(11)
17974         TAUMAX=VINT(31)
17975         IF(MVAR.EQ.3.OR.MVAR.EQ.4) THEN
17976           TAURE=VINT(73)
17977           GAMRE=VINT(74)
17978         ELSEIF(MVAR.EQ.5.OR.MVAR.EQ.6) THEN
17979           TAURE=VINT(75)
17980           GAMRE=VINT(76)
17981         ENDIF
17982         IF(MINT(47).EQ.1.AND.(ISTSB.EQ.1.OR.ISTSB.EQ.2)) THEN
17983           TAU=1D0
17984         ELSEIF(MVAR.EQ.1) THEN
17985           TAU=TAUMIN*(TAUMAX/TAUMIN)**VVAR
17986         ELSEIF(MVAR.EQ.2) THEN
17987           TAU=TAUMAX*TAUMIN/(TAUMIN+(TAUMAX-TAUMIN)*VVAR)
17988         ELSEIF(MVAR.EQ.3.OR.MVAR.EQ.5) THEN
17989           RATGEN=(TAURE+TAUMAX)/(TAURE+TAUMIN)*TAUMIN/TAUMAX
17990           TAU=TAURE*TAUMIN/((TAURE+TAUMIN)*RATGEN**VVAR-TAUMIN)
17991         ELSEIF(MVAR.EQ.4.OR.MVAR.EQ.6) THEN
17992           AUPP=ATAN((TAUMAX-TAURE)/GAMRE)
17993           ALOW=ATAN((TAUMIN-TAURE)/GAMRE)
17994           TAU=TAURE+GAMRE*TAN(ALOW+(AUPP-ALOW)*VVAR)
17995         ELSEIF(MINT(47).EQ.5) THEN
17996           AUPP=LOG(MAX(2D-10,1D0-TAUMAX))
17997           ALOW=LOG(MAX(2D-10,1D0-TAUMIN))
17998           TAU=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
17999         ELSE
18000           AUPP=LOG(MAX(1D-10,1D0-TAUMAX))
18001           ALOW=LOG(MAX(1D-10,1D0-TAUMIN))
18002           TAU=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
18003         ENDIF
18004         VINT(21)=MIN(TAUMAX,MAX(TAUMIN,TAU))
18005  
18006 C...Convert VVAR to y* variable.
18007       ELSEIF(IVAR.EQ.2) THEN
18008         YSTMIN=VINT(12)
18009         YSTMAX=VINT(32)
18010         TAUE=VINT(21)
18011         IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINT(26)
18012         IF(MINT(47).EQ.1) THEN
18013           YST=0D0
18014         ELSEIF(MINT(47).EQ.2.OR.MINT(47).EQ.6) THEN
18015           YST=-0.5D0*LOG(TAUE)
18016         ELSEIF(MINT(47).EQ.3.OR.MINT(47).EQ.7) THEN
18017           YST=0.5D0*LOG(TAUE)
18018         ELSEIF(MVAR.EQ.1) THEN
18019           YST=YSTMIN+(YSTMAX-YSTMIN)*SQRT(VVAR)
18020         ELSEIF(MVAR.EQ.2) THEN
18021           YST=YSTMAX-(YSTMAX-YSTMIN)*SQRT(1D0-VVAR)
18022         ELSEIF(MVAR.EQ.3) THEN
18023           AUPP=ATAN(EXP(YSTMAX))
18024           ALOW=ATAN(EXP(YSTMIN))
18025           YST=LOG(TAN(ALOW+(AUPP-ALOW)*VVAR))
18026         ELSEIF(MVAR.EQ.4) THEN
18027           YST0=-0.5D0*LOG(TAUE)
18028           AUPP=LOG(MAX(1D-10,EXP(YST0-YSTMIN)-1D0))
18029           ALOW=LOG(MAX(1D-10,EXP(YST0-YSTMAX)-1D0))
18030           YST=YST0-LOG(1D0+EXP(ALOW+VVAR*(AUPP-ALOW)))
18031         ELSE
18032           YST0=-0.5D0*LOG(TAUE)
18033           AUPP=LOG(MAX(1D-10,EXP(YST0+YSTMIN)-1D0))
18034           ALOW=LOG(MAX(1D-10,EXP(YST0+YSTMAX)-1D0))
18035           YST=LOG(1D0+EXP(AUPP+VVAR*(ALOW-AUPP)))-YST0
18036         ENDIF
18037         VINT(22)=MIN(YSTMAX,MAX(YSTMIN,YST))
18038  
18039 C...Convert VVAR to cos(theta-hat) variable.
18040       ELSEIF(IVAR.EQ.3) THEN
18041         RM34=MAX(1D-20,2D0*VINT(63)*VINT(64)/(VINT(21)*VINT(2))**2)
18042         RSQM=1D0+RM34
18043         IF(2D0*VINT(71)**2/(VINT(21)*VINT(2)).LT.0.0001D0)
18044      &  RM34=MAX(RM34,2D0*VINT(71)**2/(VINT(21)*VINT(2)))
18045         CTNMIN=VINT(13)
18046         CTNMAX=VINT(33)
18047         CTPMIN=VINT(14)
18048         CTPMAX=VINT(34)
18049         IF(MVAR.EQ.1) THEN
18050           ANEG=CTNMAX-CTNMIN
18051           APOS=CTPMAX-CTPMIN
18052           IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
18053             VCTN=VVAR*(ANEG+APOS)/ANEG
18054             CTH=CTNMIN+(CTNMAX-CTNMIN)*VCTN
18055           ELSE
18056             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
18057             CTH=CTPMIN+(CTPMAX-CTPMIN)*VCTP
18058           ENDIF
18059         ELSEIF(MVAR.EQ.2) THEN
18060           RMNMIN=MAX(RM34,RSQM-CTNMIN)
18061           RMNMAX=MAX(RM34,RSQM-CTNMAX)
18062           RMPMIN=MAX(RM34,RSQM-CTPMIN)
18063           RMPMAX=MAX(RM34,RSQM-CTPMAX)
18064           ANEG=LOG(RMNMIN/RMNMAX)
18065           APOS=LOG(RMPMIN/RMPMAX)
18066           IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
18067             VCTN=VVAR*(ANEG+APOS)/ANEG
18068             CTH=RSQM-RMNMIN*(RMNMAX/RMNMIN)**VCTN
18069           ELSE
18070             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
18071             CTH=RSQM-RMPMIN*(RMPMAX/RMPMIN)**VCTP
18072           ENDIF
18073         ELSEIF(MVAR.EQ.3) THEN
18074           RMNMIN=MAX(RM34,RSQM+CTNMIN)
18075           RMNMAX=MAX(RM34,RSQM+CTNMAX)
18076           RMPMIN=MAX(RM34,RSQM+CTPMIN)
18077           RMPMAX=MAX(RM34,RSQM+CTPMAX)
18078           ANEG=LOG(RMNMAX/RMNMIN)
18079           APOS=LOG(RMPMAX/RMPMIN)
18080           IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
18081             VCTN=VVAR*(ANEG+APOS)/ANEG
18082             CTH=RMNMIN*(RMNMAX/RMNMIN)**VCTN-RSQM
18083           ELSE
18084             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
18085             CTH=RMPMIN*(RMPMAX/RMPMIN)**VCTP-RSQM
18086           ENDIF
18087         ELSEIF(MVAR.EQ.4) THEN
18088           RMNMIN=MAX(RM34,RSQM-CTNMIN)
18089           RMNMAX=MAX(RM34,RSQM-CTNMAX)
18090           RMPMIN=MAX(RM34,RSQM-CTPMIN)
18091           RMPMAX=MAX(RM34,RSQM-CTPMAX)
18092           ANEG=1D0/RMNMAX-1D0/RMNMIN
18093           APOS=1D0/RMPMAX-1D0/RMPMIN
18094           IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
18095             VCTN=VVAR*(ANEG+APOS)/ANEG
18096             CTH=RSQM-1D0/(1D0/RMNMIN+ANEG*VCTN)
18097           ELSE
18098             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
18099             CTH=RSQM-1D0/(1D0/RMPMIN+APOS*VCTP)
18100           ENDIF
18101         ELSEIF(MVAR.EQ.5) THEN
18102           RMNMIN=MAX(RM34,RSQM+CTNMIN)
18103           RMNMAX=MAX(RM34,RSQM+CTNMAX)
18104           RMPMIN=MAX(RM34,RSQM+CTPMIN)
18105           RMPMAX=MAX(RM34,RSQM+CTPMAX)
18106           ANEG=1D0/RMNMIN-1D0/RMNMAX
18107           APOS=1D0/RMPMIN-1D0/RMPMAX
18108           IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
18109             VCTN=VVAR*(ANEG+APOS)/ANEG
18110             CTH=1D0/(1D0/RMNMIN-ANEG*VCTN)-RSQM
18111           ELSE
18112             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
18113             CTH=1D0/(1D0/RMPMIN-APOS*VCTP)-RSQM
18114           ENDIF
18115         ENDIF
18116         IF(CTH.LT.0D0) CTH=MIN(CTNMAX,MAX(CTNMIN,CTH))
18117         IF(CTH.GT.0D0) CTH=MIN(CTPMAX,MAX(CTPMIN,CTH))
18118         VINT(23)=CTH
18119  
18120 C...Convert VVAR to tau' variable.
18121       ELSEIF(IVAR.EQ.4) THEN
18122         TAU=VINT(21)
18123         TAUPMN=VINT(16)
18124         TAUPMX=VINT(36)
18125         IF(MINT(47).EQ.1) THEN
18126           TAUP=1D0
18127         ELSEIF(MVAR.EQ.1) THEN
18128           TAUP=TAUPMN*(TAUPMX/TAUPMN)**VVAR
18129         ELSEIF(MVAR.EQ.2) THEN
18130           AUPP=(1D0-TAU/TAUPMX)**4
18131           ALOW=(1D0-TAU/TAUPMN)**4
18132           TAUP=TAU/MAX(1D-10,1D0-(ALOW+(AUPP-ALOW)*VVAR)**0.25D0)
18133         ELSEIF(MINT(47).EQ.5) THEN
18134           AUPP=LOG(MAX(2D-10,1D0-TAUPMX))
18135           ALOW=LOG(MAX(2D-10,1D0-TAUPMN))
18136           TAUP=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
18137         ELSE
18138           AUPP=LOG(MAX(1D-10,1D0-TAUPMX))
18139           ALOW=LOG(MAX(1D-10,1D0-TAUPMN))
18140           TAUP=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
18141         ENDIF
18142         VINT(26)=MIN(TAUPMX,MAX(TAUPMN,TAUP))
18143  
18144 C...Selection of extra variables needed in 2 -> 3 process:
18145 C...pT1, pT2, phi1, phi2, y3 for three outgoing particles.
18146 C...Since no options are available, the functions of PYKLIM
18147 C...and PYKMAP are joint for these choices.
18148       ELSEIF(IVAR.EQ.5) THEN
18149  
18150 C...Read out total energy and particle masses.
18151         MINT(51)=0
18152         MPTPK=1
18153         IF(ISUB.EQ.123.OR.ISUB.EQ.124.OR.ISUB.EQ.173.OR.ISUB.EQ.174
18154      &  .OR.ISUB.EQ.178.OR.ISUB.EQ.179.OR.ISUB.EQ.351.OR.ISUB.EQ.352) 
18155      &  MPTPK=2
18156         SHP=VINT(26)*VINT(2)
18157         SHPR=SQRT(SHP)
18158         PM1=VINT(201)
18159         PM2=VINT(206)
18160         PM3=SQRT(VINT(21))*VINT(1)
18161         IF(PM1+PM2+PM3.GT.0.9999D0*SHPR) THEN
18162           MINT(51)=1
18163           RETURN
18164         ENDIF
18165         PMRS1=VINT(204)**2
18166         PMRS2=VINT(209)**2
18167  
18168 C...Specify coefficients of pT choice; upper and lower limits.
18169         IF(MPTPK.EQ.1) THEN
18170           HWT1=0.4D0
18171           HWT2=0.4D0
18172         ELSE
18173           HWT1=0.05D0
18174           HWT2=0.05D0
18175         ENDIF
18176         HWT3=1D0-HWT1-HWT2
18177         PTSMX1=((SHP-PM1**2-(PM2+PM3)**2)**2-(2D0*PM1*(PM2+PM3))**2)/
18178      &  (4D0*SHP)
18179         IF(CKIN(52).GT.0D0) PTSMX1=MIN(PTSMX1,CKIN(52)**2)
18180         PTSMN1=CKIN(51)**2
18181         PTSMX2=((SHP-PM2**2-(PM1+PM3)**2)**2-(2D0*PM2*(PM1+PM3))**2)/
18182      &  (4D0*SHP)
18183         IF(CKIN(54).GT.0D0) PTSMX2=MIN(PTSMX2,CKIN(54)**2)
18184         PTSMN2=CKIN(53)**2
18185  
18186 C...Select transverse momenta according to
18187 C...dp_T^2 * (a + b/(M^2 + p_T^2) + c/(M^2 + p_T^2)^2).
18188         HMX=PMRS1+PTSMX1
18189         HMN=PMRS1+PTSMN1
18190         IF(HMX.LT.1.0001D0*HMN) THEN
18191           MINT(51)=1
18192           RETURN
18193         ENDIF
18194         HDE=PTSMX1-PTSMN1
18195         RPT=PYR(0)
18196         IF(RPT.LT.HWT1) THEN
18197           PTS1=PTSMN1+PYR(0)*HDE
18198         ELSEIF(RPT.LT.HWT1+HWT2) THEN
18199           PTS1=MAX(PTSMN1,HMN*(HMX/HMN)**PYR(0)-PMRS1)
18200         ELSE
18201           PTS1=MAX(PTSMN1,HMN*HMX/(HMN+PYR(0)*HDE)-PMRS1)
18202         ENDIF
18203         WTPTS1=HDE/(HWT1+HWT2*HDE/(LOG(HMX/HMN)*(PMRS1+PTS1))+
18204      &  HWT3*HMN*HMX/(PMRS1+PTS1)**2)
18205         HMX=PMRS2+PTSMX2
18206         HMN=PMRS2+PTSMN2
18207         IF(HMX.LT.1.0001D0*HMN) THEN
18208           MINT(51)=1
18209           RETURN
18210         ENDIF
18211         HDE=PTSMX2-PTSMN2
18212         RPT=PYR(0)
18213         IF(RPT.LT.HWT1) THEN
18214           PTS2=PTSMN2+PYR(0)*HDE
18215         ELSEIF(RPT.LT.HWT1+HWT2) THEN
18216           PTS2=MAX(PTSMN2,HMN*(HMX/HMN)**PYR(0)-PMRS2)
18217         ELSE
18218           PTS2=MAX(PTSMN2,HMN*HMX/(HMN+PYR(0)*HDE)-PMRS2)
18219         ENDIF
18220         WTPTS2=HDE/(HWT1+HWT2*HDE/(LOG(HMX/HMN)*(PMRS2+PTS2))+
18221      &  HWT3*HMN*HMX/(PMRS2+PTS2)**2)
18222  
18223 C...Select azimuthal angles and check pT choice.
18224         PHI1=PARU(2)*PYR(0)
18225         PHI2=PARU(2)*PYR(0)
18226         PHIR=PHI2-PHI1
18227         PTS3=MAX(0D0,PTS1+PTS2+2D0*SQRT(PTS1*PTS2)*COS(PHIR))
18228         IF(PTS3.LT.CKIN(55)**2.OR.(CKIN(56).GT.0D0.AND.PTS3.GT.
18229      &  CKIN(56)**2)) THEN
18230           MINT(51)=1
18231           RETURN
18232         ENDIF
18233  
18234 C...Calculate transverse masses and check phase space not closed.
18235         PMS1=PM1**2+PTS1
18236         PMS2=PM2**2+PTS2
18237         PMS3=PM3**2+PTS3
18238         PMT1=SQRT(PMS1)
18239         PMT2=SQRT(PMS2)
18240         PMT3=SQRT(PMS3)
18241         PM12=(PMT1+PMT2)**2
18242         IF(PMT1+PMT2+PMT3.GT.0.9999D0*SHPR) THEN
18243           MINT(51)=1
18244           RETURN
18245         ENDIF
18246  
18247 C...Select rapidity for particle 3 and check phase space not closed.
18248         Y3MAX=LOG((SHP+PMS3-PM12+SQRT(MAX(0D0,(SHP-PMS3-PM12)**2-
18249      &  4D0*PMS3*PM12)))/(2D0*SHPR*PMT3))
18250         IF(Y3MAX.LT.1D-6) THEN
18251           MINT(51)=1
18252           RETURN
18253         ENDIF
18254         Y3=(2D0*PYR(0)-1D0)*0.999999D0*Y3MAX
18255         PZ3=PMT3*SINH(Y3)
18256         PE3=PMT3*COSH(Y3)
18257  
18258 C...Find momentum transfers in two mirror solutions (in 1-2 frame).
18259         PZ12=-PZ3
18260         PE12=SHPR-PE3
18261         PMS12=PE12**2-PZ12**2
18262         SQL12=SQRT(MAX(0D0,(PMS12-PMS1-PMS2)**2-4D0*PMS1*PMS2))
18263         IF(SQL12.LT.1D-6*SHP) THEN
18264           MINT(51)=1
18265           RETURN
18266         ENDIF
18267         PMM1=PMS12+PMS1-PMS2
18268         PMM2=PMS12+PMS2-PMS1
18269         TFAC=-SHPR/(2D0*PMS12)
18270         T1P=TFAC*(PE12-PZ12)*(PMM1-SQL12)
18271         T1N=TFAC*(PE12-PZ12)*(PMM1+SQL12)
18272         T2P=TFAC*(PE12+PZ12)*(PMM2-SQL12)
18273         T2N=TFAC*(PE12+PZ12)*(PMM2+SQL12)
18274  
18275 C...Construct relative mirror weights and make choice.
18276         IF(MPTPK.EQ.1.OR.ISUB.EQ.351.OR.ISUB.EQ.352) THEN
18277           WTPU=1D0
18278           WTNU=1D0
18279         ELSE
18280           WTPU=1D0/((T1P-PMRS1)*(T2P-PMRS2))**2
18281           WTNU=1D0/((T1N-PMRS1)*(T2N-PMRS2))**2
18282         ENDIF
18283         WTP=WTPU/(WTPU+WTNU)
18284         WTN=WTNU/(WTPU+WTNU)
18285         EPS=1D0
18286         IF(WTN.GT.PYR(0)) EPS=-1D0
18287  
18288 C...Store result of variable choice and associated weights.
18289         VINT(202)=PTS1
18290         VINT(207)=PTS2
18291         VINT(203)=PHI1
18292         VINT(208)=PHI2
18293         VINT(205)=WTPTS1
18294         VINT(210)=WTPTS2
18295         VINT(211)=Y3
18296         VINT(212)=Y3MAX
18297         VINT(213)=EPS
18298         IF(EPS.GT.0D0) THEN
18299           VINT(214)=1D0/WTP
18300           VINT(215)=T1P
18301           VINT(216)=T2P
18302         ELSE
18303           VINT(214)=1D0/WTN
18304           VINT(215)=T1N
18305           VINT(216)=T2N
18306         ENDIF
18307         VINT(217)=-0.5D0*TFAC*(PE12-PZ12)*(PMM2+EPS*SQL12)
18308         VINT(218)=-0.5D0*TFAC*(PE12+PZ12)*(PMM1+EPS*SQL12)
18309         VINT(219)=0.5D0*(PMS12-PTS3)
18310         VINT(220)=SQL12
18311       ENDIF
18312  
18313       RETURN
18314       END
18315  
18316 C***********************************************************************
18317  
18318 C...PYSIGH
18319 C...Differential matrix elements for all included subprocesses
18320 C...Note that what is coded is (disregarding the COMFAC factor)
18321 C...1) for 2 -> 1 processes: s-hat/pi*d(sigma-hat), where,
18322 C...when d(sigma-hat) is given in the zero-width limit, the delta
18323 C...function in tau is replaced by a (modified) Breit-Wigner:
18324 C...1/pi*s*H_res/((s*tau-m_res^2)^2+H_res^2),
18325 C...where H_res = s-hat/m_res*Gamma_res(s-hat);
18326 C...2) for 2 -> 2 processes: (s-hat)**2/pi*d(sigma-hat)/d(t-hat);
18327 C...i.e., dimensionless quantities
18328 C...3) for 2 -> 3 processes: abs(M)^2, where the total cross-section is
18329 C...Integral abs(M)^2/(2shat') * (prod_(i=1)^3 d^3p_i/((2pi)^3*2E_i)) *
18330 C...(2pi)^4 delta^4(P - sum p_i)
18331 C...COMFAC contains the factor pi/s (or equivalent) and
18332 C...the conversion factor from GeV^-2 to mb
18333  
18334       SUBROUTINE PYSIGH(NCHN,SIGS)
18335  
18336 C...Double precision and integer declarations
18337       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
18338       IMPLICIT INTEGER(I-N)
18339       INTEGER PYK,PYCHGE,PYCOMP
18340 C...Parameter statement to help give large particle numbers.
18341       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
18342 C...Commonblocks
18343       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
18344       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
18345       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
18346       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
18347       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
18348       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
18349       COMMON/PYINT1/MINT(400),VINT(400)
18350       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
18351       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
18352       COMMON/PYINT4/MWID(500),WIDS(500,5)
18353       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
18354       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
18355       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
18356      &SFMIX(16,4)
18357       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,
18358      &/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,/PYINT7/,
18359      &/PYSSMT/
18360 C...Local arrays and complex variables
18361       DIMENSION X(2),XPQ(-25:25),KFAC(2,-40:40),WDTP(0:200),
18362      &WDTE(0:200,0:5),HGZ(6,3),HL3(3),HR3(3),HL4(3),HR4(3)
18363       COMPLEX A004,A204,A114,A00U,A20U,A11U
18364       COMPLEX CIGTOT,CIZTOT,F0ALP,F1ALP,F2ALP,F0BET,F1BET,F2BET,FIF,
18365      &COULCK,COULCP,COULCD,COULCR,COULCS
18366       REAL A00L,A11L,A20L,COULXX
18367       COMPLEX*16 SSMZ,SSMR,SSMO,DETD,F2L,F2R,DARHO,DZRHO,DAOME,DZOME
18368       COMPLEX*16 DAA,DZZ,DAZ
18369  
18370 C...Reset number of channels and cross-section
18371       NCHN=0
18372       SIGS=0D0
18373  
18374 C...Convert H or A process into equivalent h one
18375       ISUB=MINT(1)
18376       ISUBSV=ISUB
18377       IHIGG=1
18378       KFHIGG=25
18379       IF((ISUB.GE.151.AND.ISUB.LE.160).OR.(ISUB.GE.171.AND.
18380      &ISUB.LE.190)) THEN
18381         IHIGG=2
18382         IF(MOD(ISUB-1,10).GE.5) IHIGG=3
18383         KFHIGG=33+IHIGG
18384         IF(ISUB.EQ.151.OR.ISUB.EQ.156) ISUB=3
18385         IF(ISUB.EQ.152.OR.ISUB.EQ.157) ISUB=102
18386         IF(ISUB.EQ.153.OR.ISUB.EQ.158) ISUB=103
18387         IF(ISUB.EQ.171.OR.ISUB.EQ.176) ISUB=24
18388         IF(ISUB.EQ.172.OR.ISUB.EQ.177) ISUB=26
18389         IF(ISUB.EQ.173.OR.ISUB.EQ.178) ISUB=123
18390         IF(ISUB.EQ.174.OR.ISUB.EQ.179) ISUB=124
18391         IF(ISUB.EQ.181.OR.ISUB.EQ.186) ISUB=121
18392         IF(ISUB.EQ.182.OR.ISUB.EQ.187) ISUB=122
18393       ENDIF
18394
18395 CMRENNA++
18396 C...Convert almost equivalent SUSY processes into each other
18397 C...Extract differences in flavours and couplings
18398       IF(ISUB.GE.200.AND.ISUB.LE.301) THEN
18399  
18400 C...Sleptons and sneutrinos
18401         IF(ISUB.EQ.201.OR.ISUB.EQ.204.OR.ISUB.EQ.207) THEN
18402           KFID=MOD(KFPR(ISUB,1),KSUSY1)
18403           ISUB=201
18404           ILR=0
18405         ELSEIF(ISUB.EQ.202.OR.ISUB.EQ.205.OR.ISUB.EQ.208) THEN
18406           KFID=MOD(KFPR(ISUB,1),KSUSY1)
18407           ISUB=201
18408           ILR=1
18409         ELSEIF(ISUB.EQ.203.OR.ISUB.EQ.206.OR.ISUB.EQ.209) THEN
18410           KFID=MOD(KFPR(ISUB,1),KSUSY1)
18411           ISUB=203
18412         ELSEIF(ISUB.GE.210.AND.ISUB.LE.212) THEN
18413           IF(ISUB.EQ.210) THEN
18414             RKF=2.0D0
18415           ELSEIF(ISUB.EQ.211) THEN
18416             RKF=SFMIX(15,1)**2
18417           ELSEIF(ISUB.EQ.212) THEN
18418             RKF=SFMIX(15,2)**2
18419           ENDIF
18420           ISUB=210
18421         ELSEIF(ISUB.EQ.213.OR.ISUB.EQ.214) THEN
18422           IF(ISUB.EQ.213) THEN
18423             KFID=MOD(KFPR(ISUB,1),KSUSY1)
18424             RKF=2.0D0
18425           ELSEIF(ISUB.EQ.214) THEN
18426             KFID=16
18427             RKF=1.0D0
18428           ENDIF
18429           ISUB=213
18430  
18431 C...Neutralinos
18432         ELSEIF(ISUB.GE.216.AND.ISUB.LE.225) THEN
18433           IF(ISUB.EQ.216) THEN
18434             IZID1=1
18435             IZID2=1
18436           ELSEIF(ISUB.EQ.217) THEN
18437             IZID1=2
18438             IZID2=2
18439           ELSEIF(ISUB.EQ.218) THEN
18440             IZID1=3
18441             IZID2=3
18442           ELSEIF(ISUB.EQ.219) THEN
18443             IZID1=4
18444             IZID2=4
18445           ELSEIF(ISUB.EQ.220) THEN
18446             IZID1=1
18447             IZID2=2
18448           ELSEIF(ISUB.EQ.221) THEN
18449             IZID1=1
18450             IZID2=3
18451           ELSEIF(ISUB.EQ.222) THEN
18452             IZID1=1
18453             IZID2=4
18454           ELSEIF(ISUB.EQ.223) THEN
18455             IZID1=2
18456             IZID2=3
18457           ELSEIF(ISUB.EQ.224) THEN
18458             IZID1=2
18459             IZID2=4
18460           ELSEIF(ISUB.EQ.225) THEN
18461             IZID1=3
18462             IZID2=4
18463           ENDIF
18464           ISUB=216
18465  
18466 C...Charginos
18467         ELSEIF(ISUB.GE.226.AND.ISUB.LE.228) THEN
18468           IF(ISUB.EQ.226) THEN
18469             IZID1=1
18470             IZID2=1
18471           ELSEIF(ISUB.EQ.227) THEN
18472             IZID1=2
18473             IZID2=2
18474           ELSEIF(ISUB.EQ.228) THEN
18475             IZID1=1
18476             IZID2=2
18477           ENDIF
18478           ISUB=226
18479  
18480 C...Neutralino + chargino
18481         ELSEIF(ISUB.GE.229.AND.ISUB.LE.236) THEN
18482           IF(ISUB.EQ.229) THEN
18483             IZID1=1
18484             IZID2=1
18485           ELSEIF(ISUB.EQ.230) THEN
18486             IZID1=1
18487             IZID2=2
18488           ELSEIF(ISUB.EQ.231) THEN
18489             IZID1=1
18490             IZID2=3
18491           ELSEIF(ISUB.EQ.232) THEN
18492             IZID1=1
18493             IZID2=4
18494           ELSEIF(ISUB.EQ.233) THEN
18495             IZID1=2
18496             IZID2=1
18497           ELSEIF(ISUB.EQ.234) THEN
18498             IZID1=2
18499             IZID2=2
18500           ELSEIF(ISUB.EQ.235) THEN
18501             IZID1=2
18502             IZID2=3
18503           ELSEIF(ISUB.EQ.236) THEN
18504             IZID1=2
18505             IZID2=4
18506           ENDIF
18507           ISUB=229
18508  
18509 C...Gluino + neutralino
18510         ELSEIF(ISUB.GE.237.AND.ISUB.LE.240) THEN
18511           IF(ISUB.EQ.237) THEN
18512             IZID=1
18513           ELSEIF(ISUB.EQ.238) THEN
18514             IZID=2
18515           ELSEIF(ISUB.EQ.239) THEN
18516             IZID=3
18517           ELSEIF(ISUB.EQ.240) THEN
18518             IZID=4
18519           ENDIF
18520           ISUB=237
18521  
18522 C...Gluino + chargino
18523         ELSEIF(ISUB.GE.241.AND.ISUB.LE.242) THEN
18524           IF(ISUB.EQ.241) THEN
18525             IZID=1
18526           ELSEIF(ISUB.EQ.242) THEN
18527             IZID=2
18528           ENDIF
18529           ISUB=241
18530  
18531 C...Squark + neutralino
18532         ELSEIF(ISUB.GE.246.AND.ISUB.LE.253) THEN
18533           ILR=0
18534           IF(MOD(ISUB,2).NE.0) ILR=1
18535           IF(ISUB.LE.247) THEN
18536             IZID=1
18537           ELSEIF(ISUB.LE.249) THEN
18538             IZID=2
18539           ELSEIF(ISUB.LE.251) THEN
18540             IZID=3
18541           ELSEIF(ISUB.LE.253) THEN
18542             IZID=4
18543           ENDIF
18544           ISUB=246
18545           RKF=5D0
18546  
18547 C...Squark + chargino
18548         ELSEIF(ISUB.GE.254.AND.ISUB.LE.257) THEN
18549           IF(ISUB.LE.255) THEN
18550             IZID=1
18551           ELSEIF(ISUB.LE.257) THEN
18552             IZID=2
18553           ENDIF
18554           IF(MOD(ISUB,2).EQ.0) THEN
18555             ILR=0
18556           ELSE
18557             ILR=1
18558           ENDIF
18559           ISUB=254
18560           RKF=5D0
18561  
18562 C...Squark + gluino
18563         ELSEIF(ISUB.EQ.258.OR.ISUB.EQ.259) THEN
18564           ISUB=258
18565           RKF=4D0
18566  
18567 C...Stops
18568         ELSEIF(ISUB.EQ.261.OR.ISUB.EQ.262) THEN
18569           ILR=0
18570           IF(ISUB.EQ.262) ILR=1
18571           ISUB=261
18572         ELSEIF(ISUB.EQ.265) THEN
18573           ISUB=264
18574  
18575 C...Squarks
18576         ELSEIF(ISUB.GE.271.AND.ISUB.LE.280) THEN
18577           ILR=0
18578           IF(ISUB.LE.273) THEN
18579             IF(ISUB.EQ.273) ILR=1
18580             ISUB=271
18581             RKF=16D0
18582           ELSEIF(ISUB.LE.276) THEN
18583             IF(ISUB.EQ.276) ILR=1
18584             ISUB=274
18585             RKF=16D0
18586           ELSEIF(ISUB.LE.278) THEN
18587             IF(ISUB.EQ.278) ILR=1
18588             ISUB=277
18589             RKF=4D0
18590           ELSE
18591             IF(ISUB.EQ.280) ILR=1
18592             ISUB=279
18593             RKF=4D0
18594           ENDIF
18595 C...Sbottoms
18596         ELSEIF(ISUB.GE.281.AND.ISUB.LE.296) THEN
18597           ILR=0
18598           IF(ISUB.LE.283) THEN
18599             IF(ISUB.EQ.283) ILR=1
18600             ISUB=271
18601             RKF=4D0
18602           ELSEIF(ISUB.LE.286) THEN
18603             IF(ISUB.EQ.286) ILR=1
18604             ISUB=274
18605             RKF=4D0
18606           ELSEIF(ISUB.LE.288) THEN
18607             IF(ISUB.EQ.288) ILR=1
18608             ISUB=277
18609             RKF=1D0
18610           ELSEIF(ISUB.LE.290) THEN
18611             IF(ISUB.EQ.290) ILR=1
18612             ISUB=279
18613             RKF=1D0
18614           ELSEIF(ISUB.LE.293) THEN
18615             IF(ISUB.EQ.293) ILR=1
18616             ISUB=271
18617             RKF=1D0
18618           ELSEIF(ISUB.EQ.296) THEN
18619             ILR=1
18620             ISUB=274
18621             RKF=1D0
18622 C...Squark + gluino
18623           ELSEIF(ISUB.EQ.294.OR.ISUB.EQ.295) THEN
18624             ISUB=258
18625             RKF=1D0
18626           ENDIF
18627 C...H+/- + H0
18628         ELSEIF(ISUB.EQ.297.OR.ISUB.EQ.298) THEN
18629           IF(ISUB.EQ.297) THEN
18630             RKF=.5D0*PARU(195)**2
18631           ELSEIF(ISUB.EQ.298) THEN
18632             RKF=.5D0*(1D0-PARU(195)**2)
18633           ENDIF
18634           ISUB=210
18635 C...A0 + H0
18636         ELSEIF(ISUB.EQ.299.OR.ISUB.EQ.300) THEN
18637           IF(ISUB.EQ.299) THEN
18638             RKF=PARU(186)**2
18639           ELSEIF(ISUB.EQ.300) THEN
18640             RKF=PARU(187)**2
18641           ENDIF
18642           ISUB=213
18643 C...H+ + H-
18644         ELSEIF(ISUB.EQ.301) THEN
18645           KFID=37
18646           RKF=1D0
18647           ISUB=201
18648         ENDIF
18649       ELSEIF(ISUB.GE.361.AND.ISUB.LE.379) THEN
18650         SQTV=PARJ(172)**2
18651         SQTA=PARJ(173)**2
18652         TANW=SQRT(PARU(102)/(1D0-PARU(102)))
18653         CT2W=(1D0-2D0*PARU(102))/(2D0*PARU(102)/TANW)
18654         CSXI=COS(ASIN(PARP(141)))
18655         CSXIP=COS(ASIN(PARJ(174)))
18656         QUPD=2D0*PARP(143)-1D0
18657 C... rho_tech0 -> W_L W_L
18658         IF(ISUB.EQ.361) THEN
18659            KFA=24
18660            KFB=24
18661            CAB2=PARP(141)**4
18662 C... rho_tech0 -> W_L pi_tech-
18663         ELSEIF(ISUB.EQ.362) THEN
18664            KFA=24
18665            KFB=52
18666            ISUB=361
18667            CAB2=PARP(141)**2*(1D0-PARP(141)**2)
18668 C... pi_tech pi_tech
18669         ELSEIF(ISUB.EQ.363) THEN
18670            KFA=52
18671            KFB=52
18672            ISUB=361
18673            CAB2=(1D0-PARP(141)**2)**2
18674 C... rho_tech0/omega_tech -> gamma pi_tech
18675         ELSEIF(ISUB.EQ.364) THEN
18676            KFA=22
18677            KFB=51
18678            VOGP=CSXI
18679            VRGP=VOGP*QUPD
18680            AOGP=0D0
18681            ARGP=0D0
18682 C... gamma pi_tech'
18683         ELSEIF(ISUB.EQ.365) THEN
18684            KFA=22
18685            KFB=53
18686            ISUB=364
18687            VRGP=CSXIP
18688            VOGP=VRGP*QUPD
18689            AOGP=0D0
18690            ARGP=0D0
18691 C... Z pi_tech
18692         ELSEIF(ISUB.EQ.366) THEN
18693            KFA=23
18694            KFB=51
18695            ISUB=364
18696            VOGP=CSXI*CT2W
18697            VRGP=-QUPD*CSXI*TANW
18698            AOGP=0D0
18699            ARGP=0D0
18700 C... Z pi_tech'
18701         ELSEIF(ISUB.EQ.367) THEN
18702            KFA=23
18703            KFB=53
18704            ISUB=364
18705            VRGP=CSXIP*CT2W
18706            VOGP=-QUPD*CSXIP*TANW
18707            AOGP=0D0
18708            ARGP=0D0
18709 C... W_T pi_tech
18710         ELSEIF(ISUB.EQ.368) THEN
18711            KFA=24
18712            KFB=52
18713            ISUB=364
18714            VOGP=CSXI/(2D0*SQRT(PARU(102)))
18715            VRGP=0D0
18716            AOGP=0D0
18717            ARGP=-VOGP
18718 C... rho_tech+ -> W_L Z_L
18719         ELSEIF(ISUB.EQ.370) THEN
18720            KFA=24
18721            KFB=23
18722            CAB2=PARP(141)**4
18723 C... W_L pi_tech0
18724         ELSEIF(ISUB.EQ.371) THEN
18725            KFA=24
18726            KFB=51
18727            ISUB=370
18728            CAB2=PARP(141)**2*(1D0-PARP(141)**2)
18729 C... Z_L pi_tech+
18730         ELSEIF(ISUB.EQ.372) THEN
18731            KFA=52
18732            KFB=23
18733            ISUB=370
18734            CAB2=PARP(141)**2*(1D0-PARP(141)**2)
18735 C... pi_tech+ pi_tech0
18736         ELSEIF(ISUB.EQ.373) THEN
18737            KFA=52
18738            KFB=51
18739            ISUB=370
18740            CAB2=(1D0-PARP(141)**2)**2
18741 C... gamma pi_tech+
18742         ELSEIF(ISUB.EQ.374) THEN
18743            KFA=52
18744            KFB=22
18745            VRGP=QUPD*CSXI
18746            ARGP=0D0
18747 C... Z_T pi_tech+
18748         ELSEIF(ISUB.EQ.375) THEN
18749            KFA=52
18750            KFB=23
18751            ISUB=374
18752            VRGP=-QUPD*CSXI*TANW
18753            ARGP=CSXI/(2D0*SQRT(PARU(102)*(1D0-PARU(102))))
18754 C... W_T pi_tech0
18755         ELSEIF(ISUB.EQ.376) THEN
18756            KFA=24
18757            KFB=51
18758            ISUB=374
18759            VRGP=0D0
18760            ARGP=-CSXI/(2D0*SQRT(PARU(102)))
18761 C... W_T pi_tech0'
18762         ELSEIF(ISUB.EQ.377) THEN
18763            KFA=24
18764            KFB=53
18765            ISUB=374
18766            ARGP=0D0
18767            VRGP=CSXIP/(2D0*SQRT(PARU(102)))
18768         ENDIF
18769       ENDIF
18770 CMRENNA--
18771  
18772 C...Read kinematical variables and limits
18773       ISTSB=ISET(ISUBSV)
18774       TAUMIN=VINT(11)
18775       YSTMIN=VINT(12)
18776       CTNMIN=VINT(13)
18777       CTPMIN=VINT(14)
18778       TAUPMN=VINT(16)
18779       TAU=VINT(21)
18780       YST=VINT(22)
18781       CTH=VINT(23)
18782       XT2=VINT(25)
18783       TAUP=VINT(26)
18784       TAUMAX=VINT(31)
18785       YSTMAX=VINT(32)
18786       CTNMAX=VINT(33)
18787       CTPMAX=VINT(34)
18788       TAUPMX=VINT(36)
18789  
18790 C...Derive kinematical quantities
18791       TAUE=TAU
18792       IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=TAUP
18793       X(1)=SQRT(TAUE)*EXP(YST)
18794       X(2)=SQRT(TAUE)*EXP(-YST)
18795       IF(MINT(45).EQ.2.AND.ISTSB.GE.1) THEN
18796         IF(X(1).GT.1D0-1D-7) RETURN
18797       ELSEIF(MINT(45).EQ.3) THEN
18798         X(1)=MIN(1D0-1.1D-10,X(1))
18799       ENDIF
18800       IF(MINT(46).EQ.2.AND.ISTSB.GE.1) THEN
18801         IF(X(2).GT.1D0-1D-7) RETURN
18802       ELSEIF(MINT(46).EQ.3) THEN
18803         X(2)=MIN(1D0-1.1D-10,X(2))
18804       ENDIF
18805       SH=MAX(1D0,TAU*VINT(2))
18806       SQM3=VINT(63)
18807       SQM4=VINT(64)
18808       RM3=SQM3/SH
18809       RM4=SQM4/SH
18810       BE34=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4))
18811       RPTS=4D0*VINT(71)**2/SH
18812       BE34L=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4-RPTS))
18813       RM34=MAX(1D-20,2D0*RM3*RM4)
18814       RSQM=1D0+RM34
18815       IF(2D0*VINT(71)**2/MAX(1D0,VINT(21)*VINT(2)).LT.0.0001D0) 
18816      &RM34=MAX(RM34,2D0*VINT(71)**2/MAX(1D0,VINT(21)*VINT(2)))
18817       RTHM=(4D0*RM3*RM4+RPTS)/(1D0-RM3-RM4+BE34L)
18818       IF(ISTSB.EQ.0) THEN
18819         TH=VINT(45)
18820         UH=-0.5D0*SH*MAX(RTHM,1D0-RM3-RM4+BE34*CTH)
18821         SQPTH=MAX(VINT(71)**2,0.25D0*SH*BE34**2*VINT(59)**2)
18822       ELSE
18823 C...Kinematics with incoming masses tricky: now depends on how
18824 C...subprocess has been set up w.r.t. order of incoming partons. 
18825         RM1=0D0
18826         IF(MINT(15).EQ.22.AND.VINT(3).LT.0D0) RM1=-VINT(3)**2/SH
18827         RM2=0D0
18828         IF(MINT(16).EQ.22.AND.VINT(4).LT.0D0) RM2=-VINT(4)**2/SH
18829         IF(ISUB.EQ.35) THEN
18830           RM2=MIN(RM1,RM2)
18831           RM1=0D0
18832         ENDIF 
18833         BE12=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
18834         TUCOM=(1D0-RM1-RM2)*(1D0-RM3-RM4)
18835         TH=-0.5D0*SH*MAX(RTHM,TUCOM-2D0*RM1*RM4-2D0*RM2*RM3-
18836      &  BE12*BE34*CTH)
18837         UH=-0.5D0*SH*MAX(RTHM,TUCOM-2D0*RM1*RM3-2D0*RM2*RM4+
18838      &  BE12*BE34*CTH)
18839         SQPTH=MAX(VINT(71)**2,0.25D0*SH*BE34**2*(1D0-CTH**2))
18840       ENDIF
18841       SHR=SQRT(SH)
18842       SH2=SH**2
18843       TH2=TH**2
18844       UH2=UH**2
18845  
18846 C...Choice of Q2 scale: hard, parton distributions, parton showers
18847       IF(ISTSB.EQ.1.OR.ISTSB.EQ.3.OR.ISTSB.EQ.5) THEN
18848         Q2=SH
18849       ELSEIF(ISTSB.EQ.8) THEN
18850         IF(MINT(107).EQ.4) Q2=VINT(307) 
18851         IF(MINT(108).EQ.4) Q2=VINT(308) 
18852       ELSEIF(MOD(ISTSB,2).EQ.0.OR.ISTSB.EQ.9) THEN
18853         Q2IN1=0D0
18854         IF(MINT(11).EQ.22.AND.VINT(3).LT.0D0) Q2IN1=VINT(3)**2
18855         Q2IN2=0D0
18856         IF(MINT(12).EQ.22.AND.VINT(4).LT.0D0) Q2IN2=VINT(4)**2          
18857         IF(MSTP(32).EQ.1) THEN
18858           Q2=2D0*SH*TH*UH/(SH**2+TH**2+UH**2)
18859         ELSEIF(MSTP(32).EQ.2) THEN
18860           Q2=SQPTH+0.5D0*(SQM3+SQM4)
18861         ELSEIF(MSTP(32).EQ.3) THEN
18862           Q2=MIN(-TH,-UH)
18863         ELSEIF(MSTP(32).EQ.4) THEN
18864           Q2=SH
18865         ELSEIF(MSTP(32).EQ.5) THEN
18866           Q2=-TH
18867         ELSEIF(MSTP(32).EQ.6) THEN
18868           XSF1=X(1)
18869           IF(ISTSB.EQ.9) XSF1=X(1)/VINT(143)
18870           XSF2=X(2)
18871           IF(ISTSB.EQ.9) XSF2=X(2)/VINT(144)
18872           Q2=(1D0+XSF1*Q2IN1/SH+XSF2*Q2IN2/SH)*
18873      &    (SQPTH+0.5D0*(SQM3+SQM4))
18874         ELSEIF(MSTP(32).EQ.7) THEN
18875           Q2=(1D0+Q2IN1/SH+Q2IN2/SH)*(SQPTH+0.5D0*(SQM3+SQM4))
18876         ELSEIF(MSTP(32).EQ.8) THEN
18877           Q2=SQPTH+0.5D0*(Q2IN1+Q2IN2+SQM3+SQM4)
18878         ELSEIF(MSTP(32).EQ.9) THEN
18879           Q2=SQPTH+Q2IN1+Q2IN2+SQM3+SQM4
18880         ELSEIF(MSTP(32).EQ.10) THEN
18881           Q2=VINT(2)
18882         ENDIF
18883         IF(ISTSB.EQ.9) Q2=SQPTH
18884         IF(ISTSB.EQ.9.AND.MSTP(82).GE.2) Q2=Q2+
18885      &  (PARP(82)*(VINT(1)/PARP(89))**PARP(90))**2
18886       ENDIF
18887       Q2SF=Q2
18888       IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
18889         Q2SF=PMAS(23,1)**2
18890         IF(ISUB.EQ.8.OR.ISUB.EQ.76.OR.ISUB.EQ.77.OR.ISUB.EQ.124.OR.
18891      &  ISUB.EQ.351) Q2SF=PMAS(24,1)**2
18892         IF(ISUB.EQ.352) Q2SF=PMAS(63,1)**2 
18893         IF(ISUB.EQ.121.OR.ISUB.EQ.122) THEN
18894           Q2SF=PMAS(PYCOMP(KFPR(ISUBSV,2)),1)**2
18895           IF(MSTP(39).EQ.2) Q2SF=Q2SF+MAX(VINT(202),VINT(207))
18896           IF(MSTP(39).EQ.3) Q2SF=SH
18897           IF(MSTP(39).EQ.4) Q2SF=VINT(26)*VINT(2)
18898           IF(MSTP(39).EQ.5) Q2SF=PMAS(KFHIGG,1)**2
18899         ENDIF
18900       ENDIF
18901       Q2PS=Q2SF
18902       Q2SF=Q2SF*PARP(34)
18903       IF(MSTP(69).GE.1.AND.MINT(47).EQ.5) Q2SF=VINT(2)
18904       IF(MSTP(69).GE.2) Q2SF=VINT(2)
18905       IF(MSTP(22).GE.1.AND.(ISUB.EQ.10.OR.ISUB.EQ.83).AND.
18906      &(MINT(43).EQ.2.OR.MINT(43).EQ.3)) THEN
18907         XBJ=X(2)
18908         IF(MINT(43).EQ.3) XBJ=X(1)
18909         IF(MSTP(22).EQ.1) THEN
18910           Q2PS=-TH
18911         ELSEIF(MSTP(22).EQ.2) THEN
18912           Q2PS=((1D0-XBJ)/XBJ)*(-TH)
18913         ELSEIF(MSTP(22).EQ.3) THEN
18914           Q2PS=SQRT((1D0-XBJ)/XBJ)*(-TH)
18915         ELSE
18916           Q2PS=(1D0-XBJ)*MAX(1D0,-LOG(XBJ))*(-TH)
18917         ENDIF
18918       ENDIF
18919       IF(MSTP(68).EQ.1.AND.(ISUBSV.EQ.1.OR.ISUBSV.EQ.2.OR.
18920      &ISUBSV.EQ.141.OR.ISUBSV.EQ.142.OR.ISUBSV.EQ.144)) THEN 
18921         Q2PS=VINT(2)
18922       ELSEIF(MSTP(68).GE.2.AND.(ISUBSV.NE.11.AND.ISUBSV.NE.12.AND.
18923      &ISUBSV.NE.13.AND.ISUBSV.NE.28.AND.ISUBSV.NE.53.AND.
18924      &ISUBSV.NE.68)) THEN
18925         Q2PS=VINT(2)
18926       ENDIF
18927  
18928 C...Store derived kinematical quantities
18929       VINT(41)=X(1)
18930       VINT(42)=X(2)
18931       VINT(44)=SH
18932       VINT(43)=SQRT(SH)
18933       VINT(45)=TH
18934       VINT(46)=UH
18935       IF(ISTSB.NE.8) VINT(48)=SQPTH
18936       IF(ISTSB.NE.8) VINT(47)=SQRT(SQPTH)
18937       VINT(50)=TAUP*VINT(2)
18938       VINT(49)=SQRT(MAX(0D0,VINT(50)))
18939       VINT(52)=Q2
18940       VINT(51)=SQRT(Q2)
18941       VINT(54)=Q2SF
18942       VINT(53)=SQRT(Q2SF)
18943       VINT(56)=Q2PS
18944       VINT(55)=SQRT(Q2PS)
18945  
18946 C...Calculate parton distributions
18947       IF(ISTSB.LE.0) GOTO 152
18948       IF(MINT(47).GE.2) THEN
18949         DO 110 I=3-MIN(2,MINT(45)),MIN(2,MINT(46))
18950           XSF=X(I)
18951           IF(ISTSB.EQ.9) XSF=X(I)/VINT(142+I)
18952           IF(ISUB.EQ.99) THEN
18953             XSF=VINT(309-I)/(VINT(2)+VINT(307)+VINT(308))
18954             Q2SF=VINT(309-I) 
18955           ENDIF
18956           MINT(105)=MINT(102+I)
18957           MINT(109)=MINT(106+I)
18958           VINT(120)=VINT(2+I)
18959 C.... ALICE
18960 C.... Store side in MINT(124)
18961           MINT(124)=I
18962 C....
18963           IF(MSTP(57).LE.1) THEN
18964             CALL PYPDFU(MINT(10+I),XSF,Q2SF,XPQ)
18965           ELSE
18966             CALL PYPDFL(MINT(10+I),XSF,Q2SF,XPQ)
18967           ENDIF
18968           DO 100 KFL=-25,25
18969             XSFX(I,KFL)=XPQ(KFL)
18970   100     CONTINUE
18971   110   CONTINUE
18972       ENDIF
18973  
18974 C...Calculate alpha_em, alpha_strong and K-factor
18975       XW=PARU(102)
18976       XWV=XW
18977       IF(MSTP(8).GE.2.OR.(ISUB.GE.71.AND.ISUB.LE.77)) XW=
18978      &1D0-(PMAS(24,1)/PMAS(23,1))**2
18979       XW1=1D0-XW
18980       XWC=1D0/(16D0*XW*XW1)
18981       AEM=PYALEM(Q2)
18982       IF(MSTP(8).GE.1) AEM=SQRT(2D0)*PARU(105)*PMAS(24,1)**2*XW/PARU(1)
18983       IF(MSTP(33).NE.3) AS=PYALPS(PARP(34)*Q2)
18984       FACK=1D0
18985       FACA=1D0
18986       IF(MSTP(33).EQ.1) THEN
18987         FACK=PARP(31)
18988       ELSEIF(MSTP(33).EQ.2) THEN
18989         FACK=PARP(31)
18990         FACA=PARP(32)/PARP(31)
18991       ELSEIF(MSTP(33).EQ.3) THEN
18992         Q2AS=PARP(33)*Q2
18993         IF(ISTSB.EQ.9.AND.MSTP(82).GE.2) Q2AS=Q2AS+
18994      &  PARU(112)*PARP(82)*(VINT(1)/PARP(89))**PARP(90)
18995         AS=PYALPS(Q2AS)
18996       ENDIF
18997       VINT(138)=1D0
18998       VINT(57)=AEM
18999       VINT(58)=AS
19000  
19001 C...Set flags for allowed reacting partons/leptons
19002       DO 140 I=1,2
19003         DO 120 J=-25,25
19004           KFAC(I,J)=0
19005   120   CONTINUE
19006         IF(MINT(44+I).EQ.1) THEN
19007           KFAC(I,MINT(10+I))=1
19008         ELSEIF(MINT(40+I).EQ.1.AND.MSTP(12).EQ.0) THEN
19009           KFAC(I,MINT(10+I))=1
19010           KFAC(I,22)=1
19011           KFAC(I,24)=1
19012           KFAC(I,-24)=1
19013         ELSE
19014           DO 130 J=-25,25
19015             KFAC(I,J)=KFIN(I,J)
19016             IF(IABS(J).GT.MSTP(58).AND.IABS(J).LE.10) KFAC(I,J)=0
19017             IF(XSFX(I,J).LT.1D-10) KFAC(I,J)=0
19018   130     CONTINUE
19019         ENDIF
19020   140 CONTINUE
19021  
19022 C...Lower and upper limit for fermion flavour loops
19023       MMIN1=0
19024       MMAX1=0
19025       MMIN2=0
19026       MMAX2=0
19027       DO 150 J=-20,20
19028         IF(KFAC(1,-J).EQ.1) MMIN1=-J
19029         IF(KFAC(1,J).EQ.1) MMAX1=J
19030         IF(KFAC(2,-J).EQ.1) MMIN2=-J
19031         IF(KFAC(2,J).EQ.1) MMAX2=J
19032   150 CONTINUE
19033       MMINA=MIN(MMIN1,MMIN2)
19034       MMAXA=MAX(MMAX1,MMAX2)
19035  
19036 C...Common resonance mass and width combinations
19037       SQMZ=PMAS(23,1)**2
19038       SQMW=PMAS(24,1)**2
19039       SQMH=PMAS(KFHIGG,1)**2
19040       GMMZ=PMAS(23,1)*PMAS(23,2)
19041       GMMW=PMAS(24,1)*PMAS(24,2)
19042       GMMH=PMAS(KFHIGG,1)*PMAS(KFHIGG,2)
19043 C...MRENNA+++
19044       ZWID=PMAS(23,2)
19045       WWID=PMAS(24,2)
19046       TANW=SQRT(XW/XW1)
19047       CT2W=(1D0-2D0*XW)/(2D0*XW/TANW)
19048 C...MRENNA---
19049  
19050 C...Phase space integral in tau
19051       COMFAC=PARU(1)*PARU(5)/VINT(2)
19052       IF(MINT(41).EQ.2.AND.MINT(42).EQ.2) COMFAC=COMFAC*FACK
19053       IF((MINT(47).GE.2.OR.(ISTSB.GE.3.AND.ISTSB.LE.5)).AND.
19054      &ISTSB.NE.8.AND.ISTSB.NE.9) THEN
19055         ATAU1=LOG(TAUMAX/TAUMIN)
19056         ATAU2=(TAUMAX-TAUMIN)/(TAUMAX*TAUMIN)
19057         H1=COEF(ISUBSV,1)+(ATAU1/ATAU2)*COEF(ISUBSV,2)/TAU
19058         IF(MINT(72).GE.1) THEN
19059           TAUR1=VINT(73)
19060           GAMR1=VINT(74)
19061           ATAUD=LOG(TAUMAX/TAUMIN*(TAUMIN+TAUR1)/(TAUMAX+TAUR1))
19062           ATAU3=ATAUD/TAUR1
19063           IF(ATAUD.GT.1D-10) H1=H1+
19064      &    (ATAU1/ATAU3)*COEF(ISUBSV,3)/(TAU+TAUR1)
19065           ATAUD=ATAN((TAUMAX-TAUR1)/GAMR1)-ATAN((TAUMIN-TAUR1)/GAMR1)
19066           ATAU4=ATAUD/GAMR1
19067           IF(ATAUD.GT.1D-10) H1=H1+
19068      &    (ATAU1/ATAU4)*COEF(ISUBSV,4)*TAU/((TAU-TAUR1)**2+GAMR1**2)
19069         ENDIF
19070         IF(MINT(72).EQ.2) THEN
19071           TAUR2=VINT(75)
19072           GAMR2=VINT(76)
19073           ATAUD=LOG(TAUMAX/TAUMIN*(TAUMIN+TAUR2)/(TAUMAX+TAUR2))
19074           ATAU5=ATAUD/TAUR2
19075           IF(ATAUD.GT.1D-10) H1=H1+
19076      &    (ATAU1/ATAU5)*COEF(ISUBSV,5)/(TAU+TAUR2)
19077           ATAUD=ATAN((TAUMAX-TAUR2)/GAMR2)-ATAN((TAUMIN-TAUR2)/GAMR2)
19078           ATAU6=ATAUD/GAMR2
19079           IF(ATAUD.GT.1D-10) H1=H1+
19080      &    (ATAU1/ATAU6)*COEF(ISUBSV,6)*TAU/((TAU-TAUR2)**2+GAMR2**2)
19081         ENDIF
19082         IF(MINT(47).EQ.5.AND.(ISTSB.LE.2.OR.ISTSB.GE.5)) THEN
19083           ATAU7=LOG(MAX(2D-10,1D0-TAUMIN)/MAX(2D-10,1D0-TAUMAX))
19084           IF(ATAU7.GT.1D-10) H1=H1+(ATAU1/ATAU7)*COEF(ISUBSV,7)*TAU/
19085      &    MAX(2D-10,1D0-TAU)
19086         ELSEIF(MINT(47).GE.6.AND.(ISTSB.LE.2.OR.ISTSB.GE.5)) THEN
19087           ATAU7=LOG(MAX(1D-10,1D0-TAUMIN)/MAX(1D-10,1D0-TAUMAX))
19088           IF(ATAU7.GT.1D-10) H1=H1+(ATAU1/ATAU7)*COEF(ISUBSV,7)*TAU/
19089      &    MAX(1D-10,1D0-TAU)
19090         ENDIF
19091         COMFAC=COMFAC*ATAU1/(TAU*H1)
19092       ENDIF
19093  
19094 C...Phase space integral in y*
19095       IF((MINT(47).EQ.4.OR.MINT(47).EQ.5).AND.ISTSB.NE.8.AND.ISTSB.NE.9) 
19096      &THEN
19097         AYST0=YSTMAX-YSTMIN
19098         IF(AYST0.LT.1D-10) THEN
19099           COMFAC=0D0
19100         ELSE
19101           AYST1=0.5D0*(YSTMAX-YSTMIN)**2
19102           AYST2=AYST1
19103           AYST3=2D0*(ATAN(EXP(YSTMAX))-ATAN(EXP(YSTMIN)))
19104           H2=(AYST0/AYST1)*COEF(ISUBSV,8)*(YST-YSTMIN)+
19105      &    (AYST0/AYST2)*COEF(ISUBSV,9)*(YSTMAX-YST)+
19106      &    (AYST0/AYST3)*COEF(ISUBSV,10)/COSH(YST)
19107           IF(MINT(45).EQ.3) THEN
19108             YST0=-0.5D0*LOG(TAUE)
19109             AYST4=LOG(MAX(1D-10,EXP(YST0-YSTMIN)-1D0)/
19110      &      MAX(1D-10,EXP(YST0-YSTMAX)-1D0))
19111             IF(AYST4.GT.1D-10) H2=H2+(AYST0/AYST4)*COEF(ISUBSV,11)/
19112      &      MAX(1D-10,1D0-EXP(YST-YST0))
19113           ENDIF
19114           IF(MINT(46).EQ.3) THEN
19115             YST0=-0.5D0*LOG(TAUE)
19116             AYST5=LOG(MAX(1D-10,EXP(YST0+YSTMAX)-1D0)/
19117      &      MAX(1D-10,EXP(YST0+YSTMIN)-1D0))
19118             IF(AYST5.GT.1D-10) H2=H2+(AYST0/AYST5)*COEF(ISUBSV,12)/
19119      &      MAX(1D-10,1D0-EXP(-YST-YST0))
19120           ENDIF
19121           COMFAC=COMFAC*AYST0/H2
19122         ENDIF
19123       ENDIF
19124  
19125 C...2 -> 1 processes: reduction in angular part of phase space integral
19126 C...for case of decaying resonance
19127       ACTH0=CTNMAX-CTNMIN+CTPMAX-CTPMIN
19128       IF((ISTSB.EQ.1.OR.ISTSB.EQ.3.OR.ISTSB.EQ.5)) THEN
19129         IF(MDCY(PYCOMP(KFPR(ISUBSV,1)),1).EQ.1) THEN
19130           IF(KFPR(ISUB,1).EQ.25.OR.KFPR(ISUB,1).EQ.37.OR.
19131      &    KFPR(ISUB,1).EQ.39) THEN
19132             COMFAC=COMFAC*0.5D0*ACTH0
19133           ELSE
19134             COMFAC=COMFAC*0.125D0*(3D0*ACTH0+CTNMAX**3-CTNMIN**3+
19135      &      CTPMAX**3-CTPMIN**3)
19136           ENDIF
19137         ENDIF
19138  
19139 C...2 -> 2 processes: angular part of phase space integral
19140       ELSEIF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
19141         ACTH1=LOG((MAX(RM34,RSQM-CTNMIN)*MAX(RM34,RSQM-CTPMIN))/
19142      &  (MAX(RM34,RSQM-CTNMAX)*MAX(RM34,RSQM-CTPMAX)))
19143         ACTH2=LOG((MAX(RM34,RSQM+CTNMAX)*MAX(RM34,RSQM+CTPMAX))/
19144      &  (MAX(RM34,RSQM+CTNMIN)*MAX(RM34,RSQM+CTPMIN)))
19145         ACTH3=1D0/MAX(RM34,RSQM-CTNMAX)-1D0/MAX(RM34,RSQM-CTNMIN)+
19146      &  1D0/MAX(RM34,RSQM-CTPMAX)-1D0/MAX(RM34,RSQM-CTPMIN)
19147         ACTH4=1D0/MAX(RM34,RSQM+CTNMIN)-1D0/MAX(RM34,RSQM+CTNMAX)+
19148      &  1D0/MAX(RM34,RSQM+CTPMIN)-1D0/MAX(RM34,RSQM+CTPMAX)
19149         H3=COEF(ISUBSV,13)+
19150      &  (ACTH0/ACTH1)*COEF(ISUBSV,14)/MAX(RM34,RSQM-CTH)+
19151      &  (ACTH0/ACTH2)*COEF(ISUBSV,15)/MAX(RM34,RSQM+CTH)+
19152      &  (ACTH0/ACTH3)*COEF(ISUBSV,16)/MAX(RM34,RSQM-CTH)**2+
19153      &  (ACTH0/ACTH4)*COEF(ISUBSV,17)/MAX(RM34,RSQM+CTH)**2
19154         COMFAC=COMFAC*ACTH0*0.5D0*BE34/H3
19155  
19156 C...2 -> 2 processes: take into account final state Breit-Wigners
19157         COMFAC=COMFAC*VINT(80)
19158       ENDIF
19159  
19160 C...2 -> 3, 4 processes: phace space integral in tau'
19161       IF(MINT(47).GE.2.AND.ISTSB.GE.3.AND.ISTSB.LE.5) THEN
19162         ATAUP1=LOG(TAUPMX/TAUPMN)
19163         ATAUP2=((1D0-TAU/TAUPMX)**4-(1D0-TAU/TAUPMN)**4)/(4D0*TAU)
19164         H4=COEF(ISUBSV,18)+
19165      &  (ATAUP1/ATAUP2)*COEF(ISUBSV,19)*(1D0-TAU/TAUP)**3/TAUP
19166         IF(MINT(47).EQ.5) THEN
19167           ATAUP3=LOG(MAX(2D-10,1D0-TAUPMN)/MAX(2D-10,1D0-TAUPMX))
19168           H4=H4+(ATAUP1/ATAUP3)*COEF(ISUBSV,20)*TAUP/MAX(2D-10,1D0-TAUP)
19169         ELSEIF(MINT(47).GE.6) THEN
19170           ATAUP3=LOG(MAX(1D-10,1D0-TAUPMN)/MAX(1D-10,1D0-TAUPMX))
19171           H4=H4+(ATAUP1/ATAUP3)*COEF(ISUBSV,20)*TAUP/MAX(1D-10,1D0-TAUP)
19172         ENDIF
19173         COMFAC=COMFAC*ATAUP1/H4
19174       ENDIF
19175  
19176 C...2 -> 3, 4 processes: effective W/Z parton distributions
19177       IF(ISTSB.EQ.3.OR.ISTSB.EQ.4) THEN
19178         IF(1D0-TAU/TAUP.GT.1D-4) THEN
19179           FZW=(1D0+TAU/TAUP)*LOG(TAUP/TAU)-2D0*(1D0-TAU/TAUP)
19180         ELSE
19181           FZW=1D0/6D0*(1D0-TAU/TAUP)**3*TAU/TAUP
19182         ENDIF
19183         COMFAC=COMFAC*FZW
19184       ENDIF
19185  
19186 C...2 -> 3 processes: phase space integrals for pT1, pT2, y3, mirror
19187       IF(ISTSB.EQ.5) THEN
19188         COMFAC=COMFAC*VINT(205)*VINT(210)*VINT(212)*VINT(214)/
19189      &  (128D0*PARU(1)**4*VINT(220))*(TAU**2/TAUP)
19190       ENDIF
19191  
19192 C...Phase space integral for low-pT and multiple interactions
19193       IF(ISTSB.EQ.9) THEN
19194         COMFAC=PARU(1)*PARU(5)*FACK*0.5D0*VINT(2)/SH2
19195         ATAU1=LOG(2D0*(1D0+SQRT(1D0-XT2))/XT2-1D0)
19196         ATAU2=2D0*ATAN(1D0/XT2-1D0)/SQRT(XT2)
19197         H1=COEF(ISUBSV,1)+(ATAU1/ATAU2)*COEF(ISUBSV,2)/SQRT(TAU)
19198         COMFAC=COMFAC*ATAU1/H1
19199         AYST0=YSTMAX-YSTMIN
19200         AYST1=0.5D0*(YSTMAX-YSTMIN)**2
19201         AYST3=2D0*(ATAN(EXP(YSTMAX))-ATAN(EXP(YSTMIN)))
19202         H2=(AYST0/AYST1)*COEF(ISUBSV,8)*(YST-YSTMIN)+
19203      &  (AYST0/AYST1)*COEF(ISUBSV,9)*(YSTMAX-YST)+
19204      &  (AYST0/AYST3)*COEF(ISUBSV,10)/COSH(YST)
19205         COMFAC=COMFAC*AYST0/H2
19206         IF(MSTP(82).LE.1) COMFAC=COMFAC*XT2**2*(1D0/VINT(149)-1D0)
19207 C...For MSTP(82)>=2 an additional factor (xT2/(xT2+VINT(149))**2 is
19208 C...introduced to make cross-section finite for xT2 -> 0
19209         IF(MSTP(82).GE.2) COMFAC=COMFAC*XT2**2/(VINT(149)*
19210      &  (1D0+VINT(149)))
19211       ENDIF
19212  
19213 C...Real gamma + gamma: include factor 2 when different nature
19214   152 IF(MINT(11).EQ.22.AND.MINT(12).EQ.22.AND.MINT(123).GE.4.AND.
19215      &MSTP(14).LE.10) COMFAC=2D0*COMFAC
19216
19217 C...Extra factors to include the effects of 
19218 C...longitudinal resolved photons. 
19219       DO 155 ISDE=1,2
19220         IF(MINT(10+ISDE).EQ.22.AND.MINT(106+ISDE).GE.1) THEN
19221           VINT(314+ISDE)=1D0
19222           XY=PARP(166+ISDE)
19223           IF(MSTP(16).EQ.0) THEN
19224             IF(VINT(304+ISDE).GT.0D0.AND.VINT(304+ISDE).LT.1D0)
19225      &      XY=VINT(304+ISDE)
19226           ELSE
19227             IF(VINT(308+ISDE).GT.0D0.AND.VINT(308+ISDE).LT.1D0)
19228      &      XY=VINT(308+ISDE)
19229           ENDIF
19230           Q2GA=VINT(306+ISDE)
19231           IF(MSTP(17).GT.0.AND.XY.GT.0D0.AND.XY.LT.1D0.AND.
19232      &    Q2GA.GT.0D0) THEN
19233             REDUCE=0D0
19234             IF(MSTP(17).EQ.1) THEN
19235               REDUCE=4D0*Q2*Q2GA/(Q2+Q2GA)**2
19236             ELSEIF(MSTP(17).EQ.2) THEN
19237               REDUCE=4D0*Q2GA/(Q2+Q2GA)
19238             ELSEIF(MSTP(17).EQ.3) THEN
19239               PMVIRT=PMAS(PYCOMP(113),1)
19240               REDUCE=4D0*Q2GA/(PMVIRT**2+Q2GA)
19241             ELSEIF(MSTP(17).EQ.4.AND.MINT(106+ISDE).EQ.1) THEN
19242               PMVIRT=PMAS(PYCOMP(113),1)
19243               REDUCE=4D0*PMVIRT**2*Q2GA/(PMVIRT**2+Q2GA)**2
19244             ELSEIF(MSTP(17).EQ.4.AND.MINT(106+ISDE).EQ.2) THEN
19245               PMVIRT=PMAS(PYCOMP(113),1)
19246               REDUCE=4D0*PMVIRT**2*Q2GA/(PMVIRT**2+Q2GA)**2
19247             ELSEIF(MSTP(17).EQ.4.AND.MINT(106+ISDE).EQ.3) THEN
19248               PMVSMN=4D0*PARP(15)**2
19249               PMVSMX=4D0*VINT(154)**2
19250               REDTRA=1D0/(PMVSMN+Q2GA)-1D0/(PMVSMX+Q2GA)
19251               REDLON=(3D0*PMVSMN+Q2GA)/(PMVSMN+Q2GA)**3-
19252      &        (3D0*PMVSMX+Q2GA)/(PMVSMX+Q2GA)**3  
19253               REDUCE=4D0*(Q2GA/6D0)*REDLON/REDTRA
19254             ELSEIF(MSTP(17).EQ.5.AND.MINT(106+ISDE).EQ.1) THEN
19255               PMVIRT=PMAS(PYCOMP(113),1)
19256               REDUCE=4D0*Q2GA/(PMVIRT**2+Q2GA)
19257             ELSEIF(MSTP(17).EQ.5.AND.MINT(106+ISDE).EQ.2) THEN
19258               PMVIRT=PMAS(PYCOMP(113),1)
19259               REDUCE=4D0*Q2GA/(PMVIRT**2+Q2GA)
19260             ELSEIF(MSTP(17).EQ.5.AND.MINT(106+ISDE).EQ.3) THEN
19261               PMVSMN=4D0*PARP(15)**2
19262               PMVSMX=4D0*VINT(154)**2
19263               REDTRA=1D0/(PMVSMN+Q2GA)-1D0/(PMVSMX+Q2GA)
19264               REDLON=1D0/(PMVSMN+Q2GA)**2-1D0/(PMVSMX+Q2GA)**2
19265               REDUCE=4D0*(Q2GA/2D0)*REDLON/REDTRA
19266             ENDIF
19267             BEAMAS=PYMASS(11) 
19268             IF(VINT(302+ISDE).GT.0D0) BEAMAS=VINT(302+ISDE)
19269             FRACLT=1D0/(1D0+XY**2/2D0/(1D0-XY)*
19270      &      (1D0-2D0*BEAMAS**2/Q2GA))
19271             VINT(314+ISDE)=1D0+PARP(165)*REDUCE*FRACLT
19272           ENDIF
19273         ELSE
19274           VINT(314+ISDE)=1D0
19275         ENDIF
19276         COMFAC=COMFAC*VINT(314+ISDE)
19277   155 CONTINUE
19278  
19279 C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
19280       IF((MSTP(46).GE.3.AND.MSTP(46).LE.6).AND.(ISUB.EQ.71.OR.ISUB.EQ.
19281      &72.OR.ISUB.EQ.73.OR.ISUB.EQ.76.OR.ISUB.EQ.77)) THEN
19282 C...Calculate M_R and N_R functions for Higgs-like and QCD-like models
19283         IF(MSTP(46).LE.4) THEN
19284           HDTLH=LOG(PMAS(25,1)/PARP(44))
19285           HDTMR=(4.5D0*PARU(1)/SQRT(3D0)-74D0/9D0)/8D0+HDTLH/12D0
19286           HDTNR=-1D0/18D0+HDTLH/6D0
19287         ELSE
19288           HDTNM=0.125D0*(1D0/(288D0*PARU(1)**2)+(PARP(47)/PARP(45))**2)
19289           HDTLQ=LOG(PARP(45)/PARP(44))
19290           HDTMR=-(4D0*PARU(1))**2*0.5D0*HDTNM+HDTLQ/12D0
19291           HDTNR=(4D0*PARU(1))**2*HDTNM+HDTLQ/6D0
19292         ENDIF
19293  
19294 C...Calculate lowest and next-to-lowest order partial wave amplitudes
19295         HDTV=1D0/(16D0*PARU(1)*PARP(47)**2)
19296         A00L=SNGL(HDTV*SH)
19297         A20L=-0.5*A00L
19298         A11L=A00L/6.
19299         HDTLS=LOG(SH/PARP(44)**2)
19300         A004=SNGL((HDTV*SH)**2/(4D0*PARU(1)))*
19301      &  CMPLX(SNGL((176D0*HDTMR+112D0*HDTNR)/3D0+11D0/27D0-
19302      &  (50D0/9D0)*HDTLS),SNGL(4D0*PARU(1)))
19303         A204=SNGL((HDTV*SH)**2/(4D0*PARU(1)))*
19304      &  CMPLX(SNGL(32D0*(HDTMR+2D0*HDTNR)/3D0+25D0/54D0-
19305      &  (20D0/9D0)*HDTLS),SNGL(PARU(1)))
19306         A114=SNGL((HDTV*SH)**2/(6D0*PARU(1)))*
19307      &  CMPLX(SNGL(4D0*(-2D0*HDTMR+HDTNR)-1D0/18D0),SNGL(PARU(1)/6D0))
19308  
19309 C...Unitarize partial wave amplitudes with Pade or K-matrix method
19310         IF(MSTP(46).EQ.3.OR.MSTP(46).EQ.5) THEN
19311           A00U=A00L/(1.-A004/A00L)
19312           A20U=A20L/(1.-A204/A20L)
19313           A11U=A11L/(1.-A114/A11L)
19314         ELSE
19315           A00U=(A00L+REAL(A004))/(1.-CMPLX(0.,A00L+REAL(A004)))
19316           A20U=(A20L+REAL(A204))/(1.-CMPLX(0.,A20L+REAL(A204)))
19317           A11U=(A11L+REAL(A114))/(1.-CMPLX(0.,A11L+REAL(A114)))
19318         ENDIF
19319       ENDIF
19320  
19321 C...Supersymmetric processes - all of type 2 -> 2 :
19322 C...correct final-state Breit-Wigners from fixed to running width.
19323       IF(ISUB.GE.200.AND.ISUB.LE.301.AND.MSTP(42).GT.0) THEN
19324         DO 160 I=1,2
19325         KFLW=KFPR(ISUBSV,I)
19326         KCW=PYCOMP(KFLW)
19327         IF(PMAS(KCW,2).LT.PARP(41)) GOTO 160
19328         IF(I.EQ.1) SQMI=SQM3
19329         IF(I.EQ.2) SQMI=SQM4
19330         SQMS=PMAS(KCW,1)**2
19331         GMMS=PMAS(KCW,1)*PMAS(KCW,2)
19332         HBWS=GMMS/((SQMI-SQMS)**2+GMMS**2)
19333         CALL PYWIDT(KFLW,SQMI,WDTP,WDTE)
19334         GMMI=SQRT(SQMI)*WDTP(0)
19335         HBWI=GMMI/((SQMI-SQMS)**2+GMMI**2)
19336         COMFAC=COMFAC*(HBWI/HBWS)
19337   160   CONTINUE
19338       ENDIF
19339  
19340 C...A: 2 -> 1, tree diagrams
19341  
19342       IF(ISUB.LE.10) THEN
19343         IF(ISUB.EQ.1) THEN
19344 C...f + fbar -> gamma*/Z0
19345           MINT(61)=2
19346           CALL PYWIDT(23,SH,WDTP,WDTE)
19347           HS=SHR*WDTP(0)
19348           FACZ=4D0*COMFAC*3D0
19349           HP0=AEM/3D0*SH
19350           HP1=AEM/3D0*XWC*SH
19351           DO 180 I=MMINA,MMAXA
19352             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 180
19353             EI=KCHG(IABS(I),1)/3D0
19354             AI=SIGN(1D0,EI)
19355             VI=AI-4D0*EI*XWV
19356             HI0=HP0
19357             IF(IABS(I).LE.10) HI0=HI0*FACA/3D0
19358             HI1=HP1
19359             IF(IABS(I).LE.10) HI1=HI1*FACA/3D0
19360             NCHN=NCHN+1
19361             ISIG(NCHN,1)=I
19362             ISIG(NCHN,2)=-I
19363             ISIG(NCHN,3)=1
19364             SIGH(NCHN)=FACZ*(EI**2/SH2*HI0*HP0*VINT(111)+
19365      &      EI*VI*(1D0-SQMZ/SH)/((SH-SQMZ)**2+HS**2)*
19366      &      (HI0*HP1+HI1*HP0)*VINT(112)+(VI**2+AI**2)/
19367      &      ((SH-SQMZ)**2+HS**2)*HI1*HP1*VINT(114))
19368   180     CONTINUE
19369  
19370         ELSEIF(ISUB.EQ.2) THEN
19371 C...f + fbar' -> W+/-
19372           CALL PYWIDT(24,SH,WDTP,WDTE)
19373           HS=SHR*WDTP(0)
19374           FACBW=4D0*COMFAC/((SH-SQMW)**2+HS**2)*3D0
19375           HP=AEM/(24D0*XW)*SH
19376           DO 200 I=MMIN1,MMAX1
19377             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 200
19378             IA=IABS(I)
19379             DO 190 J=MMIN2,MMAX2
19380               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 190
19381               JA=IABS(J)
19382               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 190
19383               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
19384      &        GOTO 190
19385               KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
19386               HI=HP*2D0
19387               IF(IA.LE.10) HI=HI*VCKM((IA+1)/2,(JA+1)/2)*FACA/3D0
19388               NCHN=NCHN+1
19389               ISIG(NCHN,1)=I
19390               ISIG(NCHN,2)=J
19391               ISIG(NCHN,3)=1
19392               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))
19393               SIGH(NCHN)=HI*FACBW*HF
19394   190       CONTINUE
19395   200     CONTINUE
19396  
19397         ELSEIF(ISUB.EQ.3) THEN
19398 C...f + fbar -> h0 (or H0, or A0)
19399           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
19400           HS=SHR*WDTP(0)
19401           FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
19402           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
19403      &    FACBW=0D0
19404           HP=AEM/(8D0*XW)*SH/SQMW*SH
19405           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
19406           DO 210 I=MMINA,MMAXA
19407             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 210
19408             IA=IABS(I)
19409             RMQ=PYMRUN(IA,SH)**2/SH
19410             HI=HP*RMQ
19411             IF(IA.LE.10) HI=HP*RMQ*FACA/3D0
19412             IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
19413               IKFI=1
19414               IF(IA.LE.10.AND.MOD(IA,2).EQ.0) IKFI=2
19415               IF(IA.GT.10) IKFI=3
19416               HI=HI*PARU(150+10*IHIGG+IKFI)**2
19417             ENDIF
19418             NCHN=NCHN+1
19419             ISIG(NCHN,1)=I
19420             ISIG(NCHN,2)=-I
19421             ISIG(NCHN,3)=1
19422             SIGH(NCHN)=HI*FACBW*HF
19423   210     CONTINUE
19424  
19425         ELSEIF(ISUB.EQ.4) THEN
19426 C...gamma + W+/- -> W+/-
19427  
19428         ELSEIF(ISUB.EQ.5) THEN
19429 C...Z0 + Z0 -> h0
19430           CALL PYWIDT(25,SH,WDTP,WDTE)
19431           HS=SHR*WDTP(0)
19432           FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
19433           IF(ABS(SHR-PMAS(25,1)).GT.PARP(48)*PMAS(25,2)) FACBW=0D0
19434           HP=AEM/(8D0*XW)*SH/SQMW*SH
19435           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
19436           HI=HP/4D0
19437           FACI=8D0/(PARU(1)**2*XW1)*(AEM*XWC)**2
19438           DO 230 I=MMIN1,MMAX1
19439             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 230
19440             DO 220 J=MMIN2,MMAX2
19441               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 220
19442               EI=KCHG(IABS(I),1)/3D0
19443               AI=SIGN(1D0,EI)
19444               VI=AI-4D0*EI*XWV
19445               EJ=KCHG(IABS(J),1)/3D0
19446               AJ=SIGN(1D0,EJ)
19447               VJ=AJ-4D0*EJ*XWV
19448               NCHN=NCHN+1
19449               ISIG(NCHN,1)=I
19450               ISIG(NCHN,2)=J
19451               ISIG(NCHN,3)=1
19452               SIGH(NCHN)=FACI*(VI**2+AI**2)*(VJ**2+AJ**2)*HI*FACBW*HF
19453   220       CONTINUE
19454   230     CONTINUE
19455  
19456         ELSEIF(ISUB.EQ.6) THEN
19457 C...Z0 + W+/- -> W+/-
19458  
19459         ELSEIF(ISUB.EQ.7) THEN
19460 C...W+ + W- -> Z0
19461  
19462         ELSEIF(ISUB.EQ.8) THEN
19463 C...W+ + W- -> h0
19464           CALL PYWIDT(25,SH,WDTP,WDTE)
19465           HS=SHR*WDTP(0)
19466           FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
19467           IF(ABS(SHR-PMAS(25,1)).GT.PARP(48)*PMAS(25,2)) FACBW=0D0
19468           HP=AEM/(8D0*XW)*SH/SQMW*SH
19469           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
19470           HI=HP/2D0
19471           FACI=1D0/(4D0*PARU(1)**2)*(AEM/XW)**2
19472           DO 250 I=MMIN1,MMAX1
19473             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 250
19474             EI=SIGN(1D0,DBLE(I))*KCHG(IABS(I),1)
19475             DO 240 J=MMIN2,MMAX2
19476               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 240
19477               EJ=SIGN(1D0,DBLE(J))*KCHG(IABS(J),1)
19478               IF(EI*EJ.GT.0D0) GOTO 240
19479               NCHN=NCHN+1
19480               ISIG(NCHN,1)=I
19481               ISIG(NCHN,2)=J
19482               ISIG(NCHN,3)=1
19483               SIGH(NCHN)=FACI*VINT(180+I)*VINT(180+J)*HI*FACBW*HF
19484   240       CONTINUE
19485   250     CONTINUE
19486  
19487 C...B: 2 -> 2, tree diagrams
19488  
19489         ELSEIF(ISUB.EQ.10) THEN
19490 C...f + f' -> f + f' (gamma/Z/W exchange)
19491           FACGGF=COMFAC*AEM**2*2D0*(SH2+UH2)/TH2
19492           FACGZF=COMFAC*AEM**2*XWC*4D0*SH2/(TH*(TH-SQMZ))
19493           FACZZF=COMFAC*(AEM*XWC)**2*2D0*SH2/(TH-SQMZ)**2
19494           FACWWF=COMFAC*(0.5D0*AEM/XW)**2*SH2/(TH-SQMW)**2
19495           DO 270 I=MMIN1,MMAX1
19496             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 270
19497             IA=IABS(I)
19498             DO 260 J=MMIN2,MMAX2
19499               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 260
19500               JA=IABS(J)
19501 C...Electroweak couplings
19502               EI=KCHG(IA,1)*ISIGN(1,I)/3D0
19503               AI=SIGN(1D0,KCHG(IA,1)+0.5D0)*ISIGN(1,I)
19504               VI=AI-4D0*EI*XWV
19505               EJ=KCHG(JA,1)*ISIGN(1,J)/3D0
19506               AJ=SIGN(1D0,KCHG(JA,1)+0.5D0)*ISIGN(1,J)
19507               VJ=AJ-4D0*EJ*XWV
19508               EPSIJ=ISIGN(1,I*J)
19509 C...gamma/Z exchange, only gamma exchange, or only Z exchange
19510               IF(MSTP(21).GE.1.AND.MSTP(21).LE.4) THEN
19511                 IF(MSTP(21).EQ.1.OR.MSTP(21).EQ.4) THEN
19512                   FACNCF=FACGGF*EI**2*EJ**2+FACGZF*EI*EJ*
19513      &            (VI*VJ*(1D0+UH2/SH2)+AI*AJ*EPSIJ*(1D0-UH2/SH2))+
19514      &            FACZZF*((VI**2+AI**2)*(VJ**2+AJ**2)*(1D0+UH2/SH2)+
19515      &            4D0*VI*VJ*AI*AJ*EPSIJ*(1D0-UH2/SH2))
19516                 ELSEIF(MSTP(21).EQ.2) THEN
19517                   FACNCF=FACGGF*EI**2*EJ**2
19518                 ELSE
19519                   FACNCF=FACZZF*((VI**2+AI**2)*(VJ**2+AJ**2)*
19520      &            (1D0+UH2/SH2)+4D0*VI*VJ*AI*AJ*EPSIJ*(1D0-UH2/SH2))
19521                 ENDIF
19522                 NCHN=NCHN+1
19523                 ISIG(NCHN,1)=I
19524                 ISIG(NCHN,2)=J
19525                 ISIG(NCHN,3)=1
19526                 SIGH(NCHN)=FACNCF
19527               ENDIF
19528 C...W exchange
19529               IF((MSTP(21).EQ.1.OR.MSTP(21).EQ.5).AND.AI*AJ.LT.0D0) THEN
19530                 FACCCF=FACWWF*VINT(180+I)*VINT(180+J)
19531                 IF(EPSIJ.LT.0D0) FACCCF=FACCCF*UH2/SH2
19532                 IF(IA.GT.10.AND.MOD(IA,2).EQ.0) FACCCF=2D0*FACCCF
19533                 IF(JA.GT.10.AND.MOD(JA,2).EQ.0) FACCCF=2D0*FACCCF
19534                 NCHN=NCHN+1
19535                 ISIG(NCHN,1)=I
19536                 ISIG(NCHN,2)=J
19537                 ISIG(NCHN,3)=2
19538                 SIGH(NCHN)=FACCCF
19539               ENDIF
19540   260       CONTINUE
19541   270     CONTINUE
19542         ENDIF
19543  
19544       ELSEIF(ISUB.LE.20) THEN
19545         IF(ISUB.EQ.11) THEN
19546 C...f + f' -> f + f' (g exchange)
19547           FACQQ1=COMFAC*AS**2*4D0/9D0*(SH2+UH2)/TH2
19548           FACQQB=COMFAC*AS**2*4D0/9D0*((SH2+UH2)/TH2*FACA-
19549      &    MSTP(34)*2D0/3D0*UH2/(SH*TH))
19550           FACQQ2=COMFAC*AS**2*4D0/9D0*(SH2+TH2)/UH2
19551           FACQQI=-COMFAC*AS**2*4D0/9D0*MSTP(34)*2D0/3D0*SH2/(TH*UH)
19552           RATQQI=(FACQQ1+FACQQ2+FACQQI)/(FACQQ1+FACQQ2)
19553           IF(MSTP(5).GE.1) THEN
19554 C...Modifications from contact interactions (compositeness)
19555             FACCI1=FACQQ1+COMFAC*(SH2/PARU(155)**4)
19556             FACCIB=FACQQB+COMFAC*(8D0/9D0)*(AS*PARU(156)/PARU(155)**2)*
19557      &      (UH2/TH+UH2/SH)+COMFAC*(5D0/3D0)*(UH2/PARU(155)**4)
19558             FACCI2=FACQQ2+COMFAC*(8D0/9D0)*(AS*PARU(156)/PARU(155)**2)*
19559      &      (SH2/TH+SH2/UH)+COMFAC*(5D0/3D0)*(SH2/PARU(155)**4)
19560             FACCI3=FACQQ1+COMFAC*(UH2/PARU(155)**4)
19561             RATCII=(FACCI1*FACCI2+FACQQI)/(FACCI1+FACCI2)
19562           ENDIF
19563           DO 290 I=MMIN1,MMAX1
19564             IA=IABS(I)
19565             IF(I.EQ.0.OR.IA.GT.MSTP(58).OR.KFAC(1,I).EQ.0) GOTO 290
19566             DO 280 J=MMIN2,MMAX2
19567               JA=IABS(J)
19568               IF(J.EQ.0.OR.JA.GT.MSTP(58).OR.KFAC(2,J).EQ.0) GOTO 280
19569               NCHN=NCHN+1
19570               ISIG(NCHN,1)=I
19571               ISIG(NCHN,2)=J
19572               ISIG(NCHN,3)=1
19573               IF(MSTP(5).LE.0.OR.(MSTP(5).EQ.1.AND.(IA.GE.3.OR.
19574      &        JA.GE.3))) THEN
19575                 SIGH(NCHN)=FACQQ1
19576                 IF(I.EQ.-J) SIGH(NCHN)=FACQQB
19577               ELSE
19578                 SIGH(NCHN)=FACCI1
19579                 IF(I*J.LT.0) SIGH(NCHN)=FACCI3
19580                 IF(I.EQ.-J) SIGH(NCHN)=FACCIB
19581               ENDIF
19582               IF(I.EQ.J) THEN
19583                 NCHN=NCHN+1
19584                 ISIG(NCHN,1)=I
19585                 ISIG(NCHN,2)=J
19586                 ISIG(NCHN,3)=2
19587                 IF(MSTP(5).LE.0.OR.(MSTP(5).EQ.1.AND.IA.GE.3)) THEN
19588                   SIGH(NCHN-1)=0.5D0*FACQQ1*RATQQI
19589                   SIGH(NCHN)=0.5D0*FACQQ2*RATQQI
19590                 ELSE
19591                   SIGH(NCHN-1)=0.5D0*FACCI1*RATCII
19592                   SIGH(NCHN)=0.5D0*FACCI2*RATCII
19593                 ENDIF
19594               ENDIF
19595   280       CONTINUE
19596   290     CONTINUE
19597  
19598         ELSEIF(ISUB.EQ.12) THEN
19599 C...f + fbar -> f' + fbar' (q + qbar -> q' + qbar' only)
19600           CALL PYWIDT(21,SH,WDTP,WDTE)
19601           FACQQB=COMFAC*AS**2*4D0/9D0*(TH2+UH2)/SH2*
19602      &    (WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
19603           IF(MSTP(5).EQ.1) THEN
19604 C...Modifications from contact interactions (compositeness)
19605             FACCIB=FACQQB
19606             DO 300 I=1,2
19607               FACCIB=FACCIB+COMFAC*(UH2/PARU(155)**4)*(WDTE(I,1)+
19608      &        WDTE(I,2)+WDTE(I,4))
19609   300       CONTINUE
19610           ELSEIF(MSTP(5).GE.2) THEN
19611             FACCIB=FACQQB+COMFAC*(UH2/PARU(155)**4)*
19612      &      (WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
19613           ENDIF
19614           DO 310 I=MMINA,MMAXA
19615             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
19616      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 310
19617             NCHN=NCHN+1
19618             ISIG(NCHN,1)=I
19619             ISIG(NCHN,2)=-I
19620             ISIG(NCHN,3)=1
19621             IF(MSTP(5).LE.0.OR.(MSTP(5).EQ.1.AND.IABS(I).GE.3)) THEN
19622               SIGH(NCHN)=FACQQB
19623             ELSE
19624               SIGH(NCHN)=FACCIB
19625             ENDIF
19626   310     CONTINUE
19627  
19628         ELSEIF(ISUB.EQ.13) THEN
19629 C...f + fbar -> g + g (q + qbar -> g + g only)
19630           FACGG1=COMFAC*AS**2*32D0/27D0*(UH/TH-(2D0+MSTP(34)*1D0/4D0)*
19631      &    UH2/SH2)
19632           FACGG2=COMFAC*AS**2*32D0/27D0*(TH/UH-(2D0+MSTP(34)*1D0/4D0)*
19633      &    TH2/SH2)
19634           DO 320 I=MMINA,MMAXA
19635             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
19636      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 320
19637             NCHN=NCHN+1
19638             ISIG(NCHN,1)=I
19639             ISIG(NCHN,2)=-I
19640             ISIG(NCHN,3)=1
19641             SIGH(NCHN)=0.5D0*FACGG1
19642             NCHN=NCHN+1
19643             ISIG(NCHN,1)=I
19644             ISIG(NCHN,2)=-I
19645             ISIG(NCHN,3)=2
19646             SIGH(NCHN)=0.5D0*FACGG2
19647   320     CONTINUE
19648  
19649         ELSEIF(ISUB.EQ.14) THEN
19650 C...f + fbar -> g + gamma (q + qbar -> g + gamma only)
19651           FACGG=COMFAC*AS*AEM*8D0/9D0*(TH2+UH2)/(TH*UH)
19652           DO 330 I=MMINA,MMAXA
19653             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
19654      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 330
19655             EI=KCHG(IABS(I),1)/3D0
19656             NCHN=NCHN+1
19657             ISIG(NCHN,1)=I
19658             ISIG(NCHN,2)=-I
19659             ISIG(NCHN,3)=1
19660             SIGH(NCHN)=FACGG*EI**2
19661   330     CONTINUE
19662  
19663         ELSEIF(ISUB.EQ.15) THEN
19664 C...f + fbar -> g + (gamma*/Z0) (q + qbar -> g + (gamma*/Z0) only)
19665           FACZG=COMFAC*AS*AEM*(8D0/9D0)*(TH2+UH2+2D0*SQM4*SH)/(TH*UH)
19666 C...gamma, gamma/Z interference and Z couplings to final fermion pairs
19667           HFGG=0D0
19668           HFGZ=0D0
19669           HFZZ=0D0
19670           RADC4=1D0+PYALPS(SQM4)/PARU(1)
19671           DO 340 I=1,MIN(16,MDCY(23,3))
19672             IDC=I+MDCY(23,2)-1
19673             IF(MDME(IDC,1).LT.0) GOTO 340
19674             IMDM=0
19675             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2.OR.MDME(IDC,1).EQ.4)
19676      &      IMDM=1
19677             IF(I.LE.8) THEN
19678               EF=KCHG(I,1)/3D0
19679               AF=SIGN(1D0,EF+0.1D0)
19680               VF=AF-4D0*EF*XWV
19681             ELSEIF(I.LE.16) THEN
19682               EF=KCHG(I+2,1)/3D0
19683               AF=SIGN(1D0,EF+0.1D0)
19684               VF=AF-4D0*EF*XWV
19685             ENDIF
19686             RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
19687             IF(4D0*RM1.LT.1D0) THEN
19688               FCOF=1D0
19689               IF(I.LE.8) FCOF=3D0*RADC4
19690               BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
19691               IF(IMDM.EQ.1) THEN
19692                 HFGG=HFGG+FCOF*EF**2*(1D0+2D0*RM1)*BE34
19693                 HFGZ=HFGZ+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
19694                 HFZZ=HFZZ+FCOF*(VF**2*(1D0+2D0*RM1)+
19695      &          AF**2*(1D0-4D0*RM1))*BE34
19696               ENDIF
19697             ENDIF
19698   340     CONTINUE
19699 C...Propagators: as simulated in PYOFSH and as desired
19700           HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
19701           MINT15=MINT(15)
19702           MINT(15)=1
19703           MINT(61)=1
19704           CALL PYWIDT(23,SQM4,WDTP,WDTE)
19705           MINT(15)=MINT15 
19706           HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
19707           HFGG=HFGG*HFAEM*VINT(111)/SQM4
19708           HFGZ=HFGZ*HFAEM*VINT(112)/SQM4
19709           HFZZ=HFZZ*HFAEM*VINT(114)/SQM4
19710 C...Loop over flavours; consider full gamma/Z structure
19711           DO 350 I=MMINA,MMAXA
19712             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
19713      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 350
19714             EI=KCHG(IABS(I),1)/3D0
19715             AI=SIGN(1D0,EI)
19716             VI=AI-4D0*EI*XWV
19717             NCHN=NCHN+1
19718             ISIG(NCHN,1)=I
19719             ISIG(NCHN,2)=-I
19720             ISIG(NCHN,3)=1
19721             SIGH(NCHN)=FACZG*(EI**2*HFGG+EI*VI*HFGZ+
19722      &      (VI**2+AI**2)*HFZZ)/HBW4
19723   350     CONTINUE
19724  
19725         ELSEIF(ISUB.EQ.16) THEN
19726 C...f + fbar' -> g + W+/- (q + qbar' -> g + W+/- only)
19727           FACWG=COMFAC*AS*AEM/XW*2D0/9D0*(TH2+UH2+2D0*SQM4*SH)/(TH*UH)
19728 C...Propagators: as simulated in PYOFSH and as desired
19729           HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
19730           CALL PYWIDT(24,SQM4,WDTP,WDTE)
19731           GMMWC=SQRT(SQM4)*WDTP(0)
19732           HBW4C=GMMWC/((SQM4-SQMW)**2+GMMWC**2)
19733           FACWG=FACWG*HBW4C/HBW4
19734           DO 370 I=MMIN1,MMAX1
19735             IA=IABS(I)
19736             IF(I.EQ.0.OR.IA.GT.10.OR.KFAC(1,I).EQ.0) GOTO 370
19737             DO 360 J=MMIN2,MMAX2
19738               JA=IABS(J)
19739               IF(J.EQ.0.OR.JA.GT.10.OR.KFAC(2,J).EQ.0) GOTO 360
19740               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 360
19741               KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
19742               WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))/WDTP(0)
19743               FCKM=VCKM((IA+1)/2,(JA+1)/2)
19744               NCHN=NCHN+1
19745               ISIG(NCHN,1)=I
19746               ISIG(NCHN,2)=J
19747               ISIG(NCHN,3)=1
19748               SIGH(NCHN)=FACWG*FCKM*WIDSC
19749   360       CONTINUE
19750   370     CONTINUE
19751  
19752         ELSEIF(ISUB.EQ.17) THEN
19753 C...f + fbar -> g + h0 (q + qbar -> g + h0 only)
19754  
19755         ELSEIF(ISUB.EQ.18) THEN
19756 C...f + fbar -> gamma + gamma
19757           FACGG=COMFAC*AEM**2*2D0*(TH2+UH2)/(TH*UH)
19758           DO 380 I=MMINA,MMAXA
19759             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 380
19760             EI=KCHG(IABS(I),1)/3D0
19761             FCOI=1D0
19762             IF(IABS(I).LE.10) FCOI=FACA/3D0
19763             NCHN=NCHN+1
19764             ISIG(NCHN,1)=I
19765             ISIG(NCHN,2)=-I
19766             ISIG(NCHN,3)=1
19767             SIGH(NCHN)=0.5D0*FACGG*FCOI*EI**4
19768   380     CONTINUE
19769  
19770         ELSEIF(ISUB.EQ.19) THEN
19771 C...f + fbar -> gamma + (gamma*/Z0)
19772           FACGZ=COMFAC*2D0*AEM**2*(TH2+UH2+2D0*SQM4*SH)/(TH*UH)
19773 C...gamma, gamma/Z interference and Z couplings to final fermion pairs
19774           HFGG=0D0
19775           HFGZ=0D0
19776           HFZZ=0D0
19777           RADC4=1D0+PYALPS(SQM4)/PARU(1)
19778           DO 390 I=1,MIN(16,MDCY(23,3))
19779             IDC=I+MDCY(23,2)-1
19780             IF(MDME(IDC,1).LT.0) GOTO 390
19781             IMDM=0
19782             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2.OR.MDME(IDC,1).EQ.4)
19783      &      IMDM=1
19784             IF(I.LE.8) THEN
19785               EF=KCHG(I,1)/3D0
19786               AF=SIGN(1D0,EF+0.1D0)
19787               VF=AF-4D0*EF*XWV
19788             ELSEIF(I.LE.16) THEN
19789               EF=KCHG(I+2,1)/3D0
19790               AF=SIGN(1D0,EF+0.1D0)
19791               VF=AF-4D0*EF*XWV
19792             ENDIF
19793             RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
19794             IF(4D0*RM1.LT.1D0) THEN
19795               FCOF=1D0
19796               IF(I.LE.8) FCOF=3D0*RADC4
19797               BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
19798               IF(IMDM.EQ.1) THEN
19799                 HFGG=HFGG+FCOF*EF**2*(1D0+2D0*RM1)*BE34
19800                 HFGZ=HFGZ+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
19801                 HFZZ=HFZZ+FCOF*(VF**2*(1D0+2D0*RM1)+
19802      &          AF**2*(1D0-4D0*RM1))*BE34
19803               ENDIF
19804             ENDIF
19805   390     CONTINUE
19806 C...Propagators: as simulated in PYOFSH and as desired
19807           HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
19808           MINT15=MINT(15)
19809           MINT(15)=1
19810           MINT(61)=1
19811           CALL PYWIDT(23,SQM4,WDTP,WDTE)
19812           MINT(15)=MINT15 
19813           HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
19814           HFGG=HFGG*HFAEM*VINT(111)/SQM4
19815           HFGZ=HFGZ*HFAEM*VINT(112)/SQM4
19816           HFZZ=HFZZ*HFAEM*VINT(114)/SQM4
19817 C...Loop over flavours; consider full gamma/Z structure
19818           DO 400 I=MMINA,MMAXA
19819             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 400
19820             EI=KCHG(IABS(I),1)/3D0
19821             AI=SIGN(1D0,EI)
19822             VI=AI-4D0*EI*XWV
19823             FCOI=1D0
19824             IF(IABS(I).LE.10) FCOI=FACA/3D0
19825             NCHN=NCHN+1
19826             ISIG(NCHN,1)=I
19827             ISIG(NCHN,2)=-I
19828             ISIG(NCHN,3)=1
19829             SIGH(NCHN)=FACGZ*FCOI*EI**2*(EI**2*HFGG+EI*VI*HFGZ+
19830      &      (VI**2+AI**2)*HFZZ)/HBW4
19831   400     CONTINUE
19832  
19833         ELSEIF(ISUB.EQ.20) THEN
19834 C...f + fbar' -> gamma + W+/-
19835           FACGW=COMFAC*0.5D0*AEM**2/XW
19836 C...Propagators: as simulated in PYOFSH and as desired
19837           HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
19838           CALL PYWIDT(24,SQM4,WDTP,WDTE)
19839           GMMWC=SQRT(SQM4)*WDTP(0)
19840           HBW4C=GMMWC/((SQM4-SQMW)**2+GMMWC**2)
19841           FACGW=FACGW*HBW4C/HBW4
19842 C...Anomalous couplings
19843           TERM1=(TH2+UH2+2D0*SQM4*SH)/(TH*UH)
19844           TERM2=0D0
19845           TERM3=0D0
19846           IF(MSTP(5).GE.1) THEN
19847             TERM2=PARU(153)*(TH-UH)/(TH+UH)
19848             TERM3=0.5D0*PARU(153)**2*(TH*UH+(TH2+UH2)*SH/
19849      &      (4D0*SQMW))/(TH+UH)**2
19850           ENDIF
19851           DO 420 I=MMIN1,MMAX1
19852             IA=IABS(I)
19853             IF(I.EQ.0.OR.IA.GT.20.OR.KFAC(1,I).EQ.0) GOTO 420
19854             DO 410 J=MMIN2,MMAX2
19855               JA=IABS(J)
19856               IF(J.EQ.0.OR.JA.GT.20.OR.KFAC(2,J).EQ.0) GOTO 410
19857               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 410
19858               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
19859      &        GOTO 410
19860               KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
19861               WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))/WDTP(0)
19862               IF(IA.LE.10) THEN
19863                 FACWR=UH/(TH+UH)-1D0/3D0
19864                 FCKM=VCKM((IA+1)/2,(JA+1)/2)
19865                 FCOI=FACA/3D0
19866               ELSE
19867                 FACWR=-TH/(TH+UH)
19868                 FCKM=1D0
19869                 FCOI=1D0
19870               ENDIF
19871               FACWK=TERM1*FACWR**2+TERM2*FACWR+TERM3
19872               NCHN=NCHN+1
19873               ISIG(NCHN,1)=I
19874               ISIG(NCHN,2)=J
19875               ISIG(NCHN,3)=1
19876               SIGH(NCHN)=FACGW*FACWK*FCOI*FCKM*WIDSC
19877   410       CONTINUE
19878   420     CONTINUE
19879         ENDIF
19880  
19881       ELSEIF(ISUB.LE.30) THEN
19882         IF(ISUB.EQ.21) THEN
19883 C...f + fbar -> gamma + h0
19884  
19885         ELSEIF(ISUB.EQ.22) THEN
19886 C...f + fbar -> (gamma*/Z0) + (gamma*/Z0)
19887 C...Kinematics dependence
19888           FACZZ=COMFAC*AEM**2*((TH2+UH2+2D0*(SQM3+SQM4)*SH)/(TH*UH)-
19889      &    SQM3*SQM4*(1D0/TH2+1D0/UH2))
19890 C...gamma, gamma/Z interference and Z couplings to final fermion pairs
19891           DO 440 I=1,6
19892             DO 430 J=1,3
19893               HGZ(I,J)=0D0
19894   430       CONTINUE
19895   440     CONTINUE
19896           RADC3=1D0+PYALPS(SQM3)/PARU(1)
19897           RADC4=1D0+PYALPS(SQM4)/PARU(1)
19898           DO 450 I=1,MIN(16,MDCY(23,3))
19899             IDC=I+MDCY(23,2)-1
19900             IF(MDME(IDC,1).LT.0) GOTO 450
19901             IMDM=0
19902             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2) IMDM=1
19903             IF(MDME(IDC,1).EQ.4.OR.MDME(IDC,1).EQ.5) IMDM=MDME(IDC,1)-2
19904             IF(I.LE.8) THEN
19905               EF=KCHG(I,1)/3D0
19906               AF=SIGN(1D0,EF+0.1D0)
19907               VF=AF-4D0*EF*XWV
19908             ELSEIF(I.LE.16) THEN
19909               EF=KCHG(I+2,1)/3D0
19910               AF=SIGN(1D0,EF+0.1D0)
19911               VF=AF-4D0*EF*XWV
19912             ENDIF
19913             RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM3
19914             IF(4D0*RM1.LT.1D0) THEN
19915               FCOF=1D0
19916               IF(I.LE.8) FCOF=3D0*RADC3
19917               BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
19918               IF(IMDM.GE.1) THEN
19919                 HGZ(1,IMDM)=HGZ(1,IMDM)+FCOF*EF**2*(1D0+2D0*RM1)*BE34
19920                 HGZ(2,IMDM)=HGZ(2,IMDM)+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
19921                 HGZ(3,IMDM)=HGZ(3,IMDM)+FCOF*(VF**2*(1D0+2D0*RM1)+
19922      &          AF**2*(1D0-4D0*RM1))*BE34
19923               ENDIF
19924             ENDIF
19925             RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
19926             IF(4D0*RM1.LT.1D0) THEN
19927               FCOF=1D0
19928               IF(I.LE.8) FCOF=3D0*RADC4
19929               BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
19930               IF(IMDM.GE.1) THEN
19931                 HGZ(4,IMDM)=HGZ(4,IMDM)+FCOF*EF**2*(1D0+2D0*RM1)*BE34
19932                 HGZ(5,IMDM)=HGZ(5,IMDM)+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
19933                 HGZ(6,IMDM)=HGZ(6,IMDM)+FCOF*(VF**2*(1D0+2D0*RM1)+
19934      &          AF**2*(1D0-4D0*RM1))*BE34
19935               ENDIF
19936             ENDIF
19937   450     CONTINUE
19938 C...Propagators: as simulated in PYOFSH and as desired
19939           HBW3=(1D0/PARU(1))*GMMZ/((SQM3-SQMZ)**2+GMMZ**2)
19940           HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
19941           MINT15=MINT(15)
19942           MINT(15)=1
19943           MINT(61)=1
19944           CALL PYWIDT(23,SQM3,WDTP,WDTE)
19945           MINT(15)=MINT15 
19946           HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
19947           DO 460 J=1,3
19948             HGZ(1,J)=HGZ(1,J)*HFAEM*VINT(111)/SQM3
19949             HGZ(2,J)=HGZ(2,J)*HFAEM*VINT(112)/SQM3
19950             HGZ(3,J)=HGZ(3,J)*HFAEM*VINT(114)/SQM3
19951   460     CONTINUE
19952           MINT15=MINT(15)
19953           MINT(15)=1
19954           MINT(61)=1
19955           CALL PYWIDT(23,SQM4,WDTP,WDTE)
19956           MINT(15)=MINT15 
19957           HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
19958           DO 470 J=1,3
19959             HGZ(4,J)=HGZ(4,J)*HFAEM*VINT(111)/SQM4
19960             HGZ(5,J)=HGZ(5,J)*HFAEM*VINT(112)/SQM4
19961             HGZ(6,J)=HGZ(6,J)*HFAEM*VINT(114)/SQM4
19962   470     CONTINUE
19963 C...Loop over flavours; separate left- and right-handed couplings
19964           DO 490 I=MMINA,MMAXA
19965             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 490
19966             EI=KCHG(IABS(I),1)/3D0
19967             AI=SIGN(1D0,EI)
19968             VI=AI-4D0*EI*XWV
19969             VALI=VI-AI
19970             VARI=VI+AI
19971             FCOI=1D0
19972             IF(IABS(I).LE.10) FCOI=FACA/3D0
19973             DO 480 J=1,3
19974               HL3(J)=EI**2*HGZ(1,J)+EI*VALI*HGZ(2,J)+VALI**2*HGZ(3,J)
19975               HR3(J)=EI**2*HGZ(1,J)+EI*VARI*HGZ(2,J)+VARI**2*HGZ(3,J)
19976               HL4(J)=EI**2*HGZ(4,J)+EI*VALI*HGZ(5,J)+VALI**2*HGZ(6,J)
19977               HR4(J)=EI**2*HGZ(4,J)+EI*VARI*HGZ(5,J)+VARI**2*HGZ(6,J)
19978   480       CONTINUE
19979             FACLR=HL3(1)*HL4(1)+HL3(1)*(HL4(2)+HL4(3))+
19980      &      HL4(1)*(HL3(2)+HL3(3))+HL3(2)*HL4(3)+HL4(2)*HL3(3)+
19981      &      HR3(1)*HR4(1)+HR3(1)*(HR4(2)+HR4(3))+
19982      &      HR4(1)*(HR3(2)+HR3(3))+HR3(2)*HR4(3)+HR4(2)*HR3(3)
19983             NCHN=NCHN+1
19984             ISIG(NCHN,1)=I
19985             ISIG(NCHN,2)=-I
19986             ISIG(NCHN,3)=1
19987             SIGH(NCHN)=0.5D0*FACZZ*FCOI*FACLR/(HBW3*HBW4)
19988   490     CONTINUE
19989  
19990         ELSEIF(ISUB.EQ.23) THEN
19991 C...f + fbar' -> Z0 + W+/- (Z0 only, i.e. no gamma* admixture.)
19992           FACZW=COMFAC*0.5D0*(AEM/XW)**2
19993           FACZW=FACZW*WIDS(23,2)
19994           THUH=MAX(TH*UH-SQM3*SQM4,SH*CKIN(3)**2)
19995           FACBW=1D0/((SH-SQMW)**2+GMMW**2)
19996           DO 510 I=MMIN1,MMAX1
19997             IA=IABS(I)
19998             IF(I.EQ.0.OR.IA.GT.20.OR.KFAC(1,I).EQ.0) GOTO 510
19999             DO 500 J=MMIN2,MMAX2
20000               JA=IABS(J)
20001               IF(J.EQ.0.OR.JA.GT.20.OR.KFAC(2,J).EQ.0) GOTO 500
20002               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 500
20003               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
20004      &        GOTO 500
20005               KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
20006               EI=KCHG(IA,1)/3D0
20007               AI=SIGN(1D0,EI+0.1D0)
20008               VI=AI-4D0*EI*XWV
20009               EJ=KCHG(JA,1)/3D0
20010               AJ=SIGN(1D0,EJ+0.1D0)
20011               VJ=AJ-4D0*EJ*XWV
20012               IF(VI+AI.GT.0) THEN
20013                 VISAV=VI
20014                 AISAV=AI
20015                 VI=VJ
20016                 AI=AJ
20017                 VJ=VISAV
20018                 AJ=AISAV
20019               ENDIF
20020               FCKM=1D0
20021               IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
20022               FCOI=1D0
20023               IF(IA.LE.10) FCOI=FACA/3D0
20024               NCHN=NCHN+1
20025               ISIG(NCHN,1)=I
20026               ISIG(NCHN,2)=J
20027               ISIG(NCHN,3)=1
20028               SIGH(NCHN)=FACZW*FCOI*FCKM*(FACBW*((9D0-8D0*XW)/4D0*THUH+
20029      &        (8D0*XW-6D0)/4D0*SH*(SQM3+SQM4))+(THUH-SH*(SQM3+SQM4))*
20030      &        (SH-SQMW)*FACBW*0.5D0*((VJ+AJ)/TH-(VI+AI)/UH)+
20031      &        THUH/(16D0*XW1)*((VJ+AJ)**2/TH2+(VI+AI)**2/UH2)+
20032      &        SH*(SQM3+SQM4)/(8D0*XW1)*(VI+AI)*(VJ+AJ)/(TH*UH))*
20033      &        WIDS(24,(5-KCHW)/2)
20034 C***Protect against slightly negative cross sections. (Reason yet to be 
20035 C***sorted out. One possibility: addition of width to the W propagator.)
20036               SIGH(NCHN)=MAX(0D0,SIGH(NCHN))
20037   500       CONTINUE
20038   510     CONTINUE
20039  
20040         ELSEIF(ISUB.EQ.24) THEN
20041 C...f + fbar -> Z0 + h0 (or H0, or A0)
20042           THUH=MAX(TH*UH-SQM3*SQM4,SH*CKIN(3)**2)
20043           FACHZ=COMFAC*8D0*(AEM*XWC)**2*
20044      &    (THUH+2D0*SH*SQM3)/((SH-SQMZ)**2+GMMZ**2)
20045           FACHZ=FACHZ*WIDS(23,2)*WIDS(KFHIGG,2)
20046           IF(MSTP(4).GE.1.OR.IHIGG.GE.2) FACHZ=FACHZ*
20047      &    PARU(154+10*IHIGG)**2
20048           DO 520 I=MMINA,MMAXA
20049             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 520
20050             EI=KCHG(IABS(I),1)/3D0
20051             AI=SIGN(1D0,EI)
20052             VI=AI-4D0*EI*XWV
20053             FCOI=1D0
20054             IF(IABS(I).LE.10) FCOI=FACA/3D0
20055             NCHN=NCHN+1
20056             ISIG(NCHN,1)=I
20057             ISIG(NCHN,2)=-I
20058             ISIG(NCHN,3)=1
20059             SIGH(NCHN)=FACHZ*FCOI*(VI**2+AI**2)
20060   520     CONTINUE
20061  
20062         ELSEIF(ISUB.EQ.25) THEN
20063 C...f + fbar -> W+ + W-
20064 C...Propagators: Z0, W+- as simulated in PYOFSH and as desired
20065           GMMZC=GMMZ
20066           HBWZC=SH**2/((SH-SQMZ)**2+GMMZC**2)
20067           HBW3=GMMW/((SQM3-SQMW)**2+GMMW**2)
20068           CALL PYWIDT(24,SQM3,WDTP,WDTE)
20069           GMMW3=SQRT(SQM3)*WDTP(0)
20070           HBW3C=GMMW3/((SQM3-SQMW)**2+GMMW3**2)
20071           HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
20072           CALL PYWIDT(24,SQM4,WDTP,WDTE)
20073           GMMW4=SQRT(SQM4)*WDTP(0)
20074           HBW4C=GMMW4/((SQM4-SQMW)**2+GMMW4**2)
20075 C...Kinematical functions
20076           THUH=MAX(TH*UH-SQM3*SQM4,SH*CKIN(3)**2)
20077           THUH34=(2D0*SH*(SQM3+SQM4)+THUH)/(SQM3*SQM4)
20078           GS=(((SH-SQM3-SQM4)**2-4D0*SQM3*SQM4)*THUH34+12D0*THUH)/SH2
20079           GT=THUH34+4D0*THUH/TH2
20080           GST=((SH-SQM3-SQM4)*THUH34+4D0*(SH*(SQM3+SQM4)-THUH)/TH)/SH
20081           GU=THUH34+4D0*THUH/UH2
20082           GSU=((SH-SQM3-SQM4)*THUH34+4D0*(SH*(SQM3+SQM4)-THUH)/UH)/SH
20083 C...Common factors and couplings
20084           FACWW=COMFAC*(HBW3C/HBW3)*(HBW4C/HBW4)
20085           FACWW=FACWW*WIDS(24,1)
20086           CGG=AEM**2/2D0
20087           CGZ=AEM**2/(4D0*XW)*HBWZC*(1D0-SQMZ/SH)
20088           CZZ=AEM**2/(32D0*XW**2)*HBWZC
20089           CNG=AEM**2/(4D0*XW)
20090           CNZ=AEM**2/(16D0*XW**2)*HBWZC*(1D0-SQMZ/SH)
20091           CNN=AEM**2/(16D0*XW**2)
20092 C...Coulomb factor for W+W- pair
20093           IF(MSTP(40).GE.1.AND.MSTP(40).LE.3) THEN
20094             COULE=(SH-4D0*SQMW)/(4D0*PMAS(24,1))
20095             COULP=MAX(1D-10,0.5D0*BE34*SQRT(SH))
20096             IF(COULE.LT.100D0*PMAS(24,2)) THEN
20097               COULP1=SQRT(0.5D0*PMAS(24,1)*(SQRT(COULE**2+
20098      &        PMAS(24,2)**2)-COULE))
20099             ELSE
20100               COULP1=SQRT(0.5D0*PMAS(24,1)*(0.5D0*PMAS(24,2)**2/COULE))
20101             ENDIF
20102             IF(COULE.GT.-100D0*PMAS(24,2)) THEN
20103               COULP2=SQRT(0.5D0*PMAS(24,1)*(SQRT(COULE**2+
20104      &        PMAS(24,2)**2)+COULE))
20105             ELSE
20106               COULP2=SQRT(0.5D0*PMAS(24,1)*(0.5D0*PMAS(24,2)**2/
20107      &        ABS(COULE)))
20108             ENDIF
20109             IF(MSTP(40).EQ.1) THEN
20110               COULDC=PARU(1)-2D0*ATAN((COULP1**2+COULP2**2-COULP**2)/
20111      &        MAX(1D-10,2D0*COULP*COULP1))
20112               FACCOU=1D0+0.5D0*PARU(101)*COULDC/MAX(1D-5,BE34)
20113             ELSEIF(MSTP(40).EQ.2) THEN
20114               COULCK=CMPLX(SNGL(COULP1),SNGL(COULP2))
20115               COULCP=CMPLX(0.,SNGL(COULP))
20116               COULCD=(COULCK+COULCP)/(COULCK-COULCP)
20117               COULCR=1.+SNGL(PARU(101)*SQRT(SH))/(4.*COULCP)*LOG(COULCD)
20118               COULCS=CMPLX(0.,0.)
20119               NSTP=100
20120               DO 530 ISTP=1,NSTP
20121                 COULXX=(ISTP-0.5)/NSTP
20122                 COULCS=COULCS+(1./COULXX)*LOG((1.+COULXX*COULCD)/
20123      &          (1.+COULXX/COULCD))
20124   530         CONTINUE
20125               COULCR=COULCR+SNGL(PARU(101)**2*SH)/(16.*COULCP*COULCK)*
20126      &        (COULCS/NSTP)
20127               FACCOU=ABS(COULCR)**2
20128             ELSEIF(MSTP(40).EQ.3) THEN
20129               COULDC=PARU(1)-2D0*(1D0-BE34)**2*ATAN((COULP1**2+
20130      &        COULP2**2-COULP**2)/MAX(1D-10,2D0*COULP*COULP1))
20131               FACCOU=1D0+0.5D0*PARU(101)*COULDC/MAX(1D-5,BE34)
20132             ENDIF
20133           ELSEIF(MSTP(40).EQ.4) THEN
20134             FACCOU=1D0+0.5D0*PARU(101)*PARU(1)/MAX(1D-5,BE34)
20135           ELSE
20136             FACCOU=1D0
20137           ENDIF
20138           VINT(95)=FACCOU
20139           FACWW=FACWW*FACCOU
20140 C...Loop over allowed flavours
20141           DO 540 I=MMINA,MMAXA
20142             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 540
20143             EI=KCHG(IABS(I),1)/3D0
20144             AI=SIGN(1D0,EI+0.1D0)
20145             VI=AI-4D0*EI*XWV
20146             FCOI=1D0
20147             IF(IABS(I).LE.10) FCOI=FACA/3D0
20148             IF(AI.LT.0D0) THEN
20149               DSIGWW=(CGG*EI**2+CGZ*VI*EI+CZZ*(VI**2+AI**2))*GS+
20150      &        (CNG*EI+CNZ*(VI+AI))*GST+CNN*GT
20151             ELSE
20152               DSIGWW=(CGG*EI**2+CGZ*VI*EI+CZZ*(VI**2+AI**2))*GS-
20153      &        (CNG*EI+CNZ*(VI+AI))*GSU+CNN*GU
20154             ENDIF
20155             NCHN=NCHN+1
20156             ISIG(NCHN,1)=I
20157             ISIG(NCHN,2)=-I
20158             ISIG(NCHN,3)=1
20159             SIGH(NCHN)=FACWW*FCOI*DSIGWW
20160   540     CONTINUE
20161  
20162         ELSEIF(ISUB.EQ.26) THEN
20163 C...f + fbar' -> W+/- + h0 (or H0, or A0)
20164           THUH=MAX(TH*UH-SQM3*SQM4,SH*CKIN(3)**2)
20165           FACHW=COMFAC*0.125D0*(AEM/XW)**2*(THUH+2D0*SH*SQM3)/
20166      &    ((SH-SQMW)**2+GMMW**2)
20167           FACHW=FACHW*WIDS(KFHIGG,2)
20168           IF(MSTP(4).GE.1.OR.IHIGG.GE.2) FACHW=FACHW*
20169      &    PARU(155+10*IHIGG)**2
20170           DO 560 I=MMIN1,MMAX1
20171             IA=IABS(I)
20172             IF(I.EQ.0.OR.IA.GT.20.OR.KFAC(1,I).EQ.0) GOTO 560
20173             DO 550 J=MMIN2,MMAX2
20174               JA=IABS(J)
20175               IF(J.EQ.0.OR.JA.GT.20.OR.KFAC(1,J).EQ.0) GOTO 550
20176               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 550
20177               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
20178      &        GOTO 550
20179               KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
20180               FCKM=1D0
20181               IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
20182               FCOI=1D0
20183               IF(IA.LE.10) FCOI=FACA/3D0
20184               NCHN=NCHN+1
20185               ISIG(NCHN,1)=I
20186               ISIG(NCHN,2)=J
20187               ISIG(NCHN,3)=1
20188               SIGH(NCHN)=FACHW*FCOI*FCKM*WIDS(24,(5-KCHW)/2)
20189   550       CONTINUE
20190   560     CONTINUE
20191  
20192         ELSEIF(ISUB.EQ.27) THEN
20193 C...f + fbar -> h0 + h0
20194  
20195         ELSEIF(ISUB.EQ.28) THEN
20196 C...f + g -> f + g (q + g -> q + g only)
20197           FACQG1=COMFAC*AS**2*4D0/9D0*((2D0+MSTP(34)*1D0/4D0)*UH2/TH2-
20198      &    UH/SH)*FACA
20199           FACQG2=COMFAC*AS**2*4D0/9D0*((2D0+MSTP(34)*1D0/4D0)*SH2/TH2-
20200      &    SH/UH)
20201           DO 580 I=MMINA,MMAXA
20202             IF(I.EQ.0.OR.IABS(I).GT.10) GOTO 580
20203             DO 570 ISDE=1,2
20204               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 570
20205               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 570
20206               NCHN=NCHN+1
20207               ISIG(NCHN,ISDE)=I
20208               ISIG(NCHN,3-ISDE)=21
20209               ISIG(NCHN,3)=1
20210               SIGH(NCHN)=FACQG1
20211               NCHN=NCHN+1
20212               ISIG(NCHN,ISDE)=I
20213               ISIG(NCHN,3-ISDE)=21
20214               ISIG(NCHN,3)=2
20215               SIGH(NCHN)=FACQG2
20216   570       CONTINUE
20217   580     CONTINUE
20218  
20219         ELSEIF(ISUB.EQ.29) THEN
20220 C...f + g -> f + gamma (q + g -> q + gamma only)
20221           FGQ=COMFAC*FACA*AS*AEM*1D0/3D0*(SH2+UH2)/(-SH*UH)
20222           DO 600 I=MMINA,MMAXA
20223             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 600
20224             EI=KCHG(IABS(I),1)/3D0
20225             FACGQ=FGQ*EI**2
20226             DO 590 ISDE=1,2
20227               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 590
20228               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 590
20229               NCHN=NCHN+1
20230               ISIG(NCHN,ISDE)=I
20231               ISIG(NCHN,3-ISDE)=21
20232               ISIG(NCHN,3)=1
20233               SIGH(NCHN)=FACGQ
20234   590       CONTINUE
20235   600     CONTINUE
20236  
20237         ELSEIF(ISUB.EQ.30) THEN
20238 C...f + g -> f + (gamma*/Z0) (q + g -> q + (gamma*/Z0) only)
20239           FZQ=COMFAC*FACA*AS*AEM*(1D0/3D0)*(SH2+UH2+2D0*SQM4*TH)/
20240      &    (-SH*UH)
20241 C...gamma, gamma/Z interference and Z couplings to final fermion pairs
20242           HFGG=0D0
20243           HFGZ=0D0
20244           HFZZ=0D0
20245           RADC4=1D0+PYALPS(SQM4)/PARU(1)
20246           DO 610 I=1,MIN(16,MDCY(23,3))
20247             IDC=I+MDCY(23,2)-1
20248             IF(MDME(IDC,1).LT.0) GOTO 610
20249             IMDM=0
20250             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2.OR.MDME(IDC,1).EQ.4)
20251      &      IMDM=1
20252             IF(I.LE.8) THEN
20253               EF=KCHG(I,1)/3D0
20254               AF=SIGN(1D0,EF+0.1D0)
20255               VF=AF-4D0*EF*XWV
20256             ELSEIF(I.LE.16) THEN
20257               EF=KCHG(I+2,1)/3D0
20258               AF=SIGN(1D0,EF+0.1D0)
20259               VF=AF-4D0*EF*XWV
20260             ENDIF
20261             RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
20262             IF(4D0*RM1.LT.1D0) THEN
20263               FCOF=1D0
20264               IF(I.LE.8) FCOF=3D0*RADC4
20265               BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
20266               IF(IMDM.EQ.1) THEN
20267                 HFGG=HFGG+FCOF*EF**2*(1D0+2D0*RM1)*BE34
20268                 HFGZ=HFGZ+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
20269                 HFZZ=HFZZ+FCOF*(VF**2*(1D0+2D0*RM1)+
20270      &          AF**2*(1D0-4D0*RM1))*BE34
20271               ENDIF
20272             ENDIF
20273   610     CONTINUE
20274 C...Propagators: as simulated in PYOFSH and as desired
20275           HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
20276           MINT15=MINT(15)
20277           MINT(15)=1
20278           MINT(61)=1
20279           CALL PYWIDT(23,SQM4,WDTP,WDTE)
20280           MINT(15)=MINT15 
20281           HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
20282           HFGG=HFGG*HFAEM*VINT(111)/SQM4
20283           HFGZ=HFGZ*HFAEM*VINT(112)/SQM4
20284           HFZZ=HFZZ*HFAEM*VINT(114)/SQM4
20285 C...Loop over flavours; consider full gamma/Z structure
20286           DO 630 I=MMINA,MMAXA
20287             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 630
20288             EI=KCHG(IABS(I),1)/3D0
20289             AI=SIGN(1D0,EI)
20290             VI=AI-4D0*EI*XWV
20291             FACZQ=FZQ*(EI**2*HFGG+EI*VI*HFGZ+
20292      &      (VI**2+AI**2)*HFZZ)/HBW4
20293             DO 620 ISDE=1,2
20294               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 620
20295               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 620
20296               NCHN=NCHN+1
20297               ISIG(NCHN,ISDE)=I
20298               ISIG(NCHN,3-ISDE)=21
20299               ISIG(NCHN,3)=1
20300               SIGH(NCHN)=FACZQ
20301   620       CONTINUE
20302   630     CONTINUE
20303         ENDIF
20304  
20305       ELSEIF(ISUB.LE.40) THEN
20306         IF(ISUB.EQ.31) THEN
20307 C...f + g -> f' + W+/- (q + g -> q' + W+/- only)
20308           FACWQ=COMFAC*FACA*AS*AEM/XW*1D0/12D0*
20309      &    (SH2+UH2+2D0*SQM4*TH)/(-SH*UH)
20310 C...Propagators: as simulated in PYOFSH and as desired
20311           HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
20312           CALL PYWIDT(24,SQM4,WDTP,WDTE)
20313           GMMWC=SQRT(SQM4)*WDTP(0)
20314           HBW4C=GMMWC/((SQM4-SQMW)**2+GMMWC**2)
20315           FACWQ=FACWQ*HBW4C/HBW4
20316           DO 650 I=MMINA,MMAXA
20317             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 650
20318             IA=IABS(I)
20319             KCHW=ISIGN(1,KCHG(IA,1)*ISIGN(1,I))
20320             WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))/WDTP(0)
20321             DO 640 ISDE=1,2
20322               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 640
20323               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 640
20324               NCHN=NCHN+1
20325               ISIG(NCHN,ISDE)=I
20326               ISIG(NCHN,3-ISDE)=21
20327               ISIG(NCHN,3)=1
20328               SIGH(NCHN)=FACWQ*VINT(180+I)*WIDSC
20329   640       CONTINUE
20330   650     CONTINUE
20331  
20332         ELSEIF(ISUB.EQ.32) THEN
20333 C...f + g -> f + h0 (q + g -> q + h0 only)
20334           SQMHC=PMAS(25,1)**2
20335           FHCQ=COMFAC*FACA*AS*AEM/XW*1D0/24D0
20336           DO 651 I=MMINA,MMAXA
20337             IA=IABS(I)
20338             IF(IA.NE.5) GOTO 651
20339             SQML=PMAS(IA,1)**2
20340             IF(IA.LE.10.AND.MSTP(37).EQ.1.AND.MSTP(2).GE.1) SQML=SQML*
20341      &      (LOG(MAX(4D0,PARP(37)**2*SQML/PARU(117)**2))/
20342      &      LOG(MAX(4D0,SH/PARU(117)**2)))**(24D0/(33D0-2D0*MSTU(118)))
20343             IUA=IA+MOD(IA,2)
20344             SQMQ=SQML
20345             FACHCQ=FHCQ*SQML/SQMW*
20346      &      (SH/(SQMQ-UH)+2D0*SQMQ*(SQMHC-UH)/(SQMQ-UH)**2+(SQMQ-UH)/SH+
20347      &      2D0*SQMQ/(SQMQ-UH)+2D0*(SQMHC-UH)/(SQMQ-UH)*
20348      &      (SQMHC-SQMQ-SH)/SH)
20349             KCHHC=ISIGN(1,KCHG(IA,1)*ISIGN(1,I))
20350             DO 641 ISDE=1,2
20351               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 641
20352               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,1).EQ.0) GOTO 641
20353               NCHN=NCHN+1
20354               ISIG(NCHN,ISDE)=I
20355               ISIG(NCHN,3-ISDE)=21
20356               ISIG(NCHN,3)=1
20357               SIGH(NCHN)=FACHCQ*WIDS(37,(5-KCHHC)/2)
20358  641        CONTINUE
20359  651      CONTINUE
20360  
20361         ELSEIF(ISUB.EQ.33) THEN
20362 C...f + gamma -> f + g (q + gamma -> q + g only)
20363           FGQ=COMFAC*AS*AEM*8D0/3D0*(SH2+UH2)/(-SH*UH)
20364           DO 670 I=MMINA,MMAXA
20365             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 670
20366             EI=KCHG(IABS(I),1)/3D0
20367             FACGQ=FGQ*EI**2
20368             DO 660 ISDE=1,2
20369               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 660
20370               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 660
20371               NCHN=NCHN+1
20372               ISIG(NCHN,ISDE)=I
20373               ISIG(NCHN,3-ISDE)=22
20374               ISIG(NCHN,3)=1
20375               SIGH(NCHN)=FACGQ
20376   660       CONTINUE
20377   670     CONTINUE
20378  
20379         ELSEIF(ISUB.EQ.34) THEN
20380 C...f + gamma -> f + gamma
20381           FGQ=COMFAC*AEM**2*2D0*(SH2+UH2)/(-SH*UH)
20382          DO 690 I=MMINA,MMAXA
20383             IF(I.EQ.0) GOTO 690
20384             EI=KCHG(IABS(I),1)/3D0
20385             FACGQ=FGQ*EI**4
20386             DO 680 ISDE=1,2
20387               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 680
20388               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 680
20389               NCHN=NCHN+1
20390               ISIG(NCHN,ISDE)=I
20391               ISIG(NCHN,3-ISDE)=22
20392               ISIG(NCHN,3)=1
20393               SIGH(NCHN)=FACGQ
20394   680       CONTINUE
20395   690     CONTINUE
20396  
20397         ELSEIF(ISUB.EQ.35) THEN
20398 C...f + gamma -> f + (gamma*/Z0)
20399           IF(MINT(15).EQ.22.AND.VINT(3).LT.0D0) THEN
20400             FZQN=SH2+UH2+2D0*(SQM4-VINT(3)**2)*TH
20401             FZQDTM=VINT(3)**2*SQM4-SH*(UH-VINT(4)**2) 
20402           ELSEIF(MINT(16).EQ.22.AND.VINT(4).LT.0D0) THEN
20403             FZQN=SH2+UH2+2D0*(SQM4-VINT(4)**2)*TH
20404             FZQDTM=VINT(4)**2*SQM4-SH*(UH-VINT(3)**2)
20405           ELSE 
20406             FZQN=SH2+UH2+2D0*SQM4*TH
20407             FZQDTM=-SH*UH
20408           ENDIF       
20409           FZQN=COMFAC*2D0*AEM**2*MAX(0D0,FZQN)
20410 C...gamma, gamma/Z interference and Z couplings to final fermion pairs
20411           HFGG=0D0
20412           HFGZ=0D0
20413           HFZZ=0D0
20414           RADC4=1D0+PYALPS(SQM4)/PARU(1)
20415           DO 700 I=1,MIN(16,MDCY(23,3))
20416             IDC=I+MDCY(23,2)-1
20417             IF(MDME(IDC,1).LT.0) GOTO 700
20418             IMDM=0
20419             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2.OR.MDME(IDC,1).EQ.4)
20420      &      IMDM=1
20421             IF(I.LE.8) THEN
20422               EF=KCHG(I,1)/3D0
20423               AF=SIGN(1D0,EF+0.1D0)
20424               VF=AF-4D0*EF*XWV
20425             ELSEIF(I.LE.16) THEN
20426               EF=KCHG(I+2,1)/3D0
20427               AF=SIGN(1D0,EF+0.1D0)
20428               VF=AF-4D0*EF*XWV
20429             ENDIF
20430             RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
20431             IF(4D0*RM1.LT.1D0) THEN
20432               FCOF=1D0
20433               IF(I.LE.8) FCOF=3D0*RADC4
20434               BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
20435               IF(IMDM.EQ.1) THEN
20436                 HFGG=HFGG+FCOF*EF**2*(1D0+2D0*RM1)*BE34
20437                 HFGZ=HFGZ+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
20438                 HFZZ=HFZZ+FCOF*(VF**2*(1D0+2D0*RM1)+
20439      &          AF**2*(1D0-4D0*RM1))*BE34
20440               ENDIF
20441             ENDIF
20442   700     CONTINUE
20443 C...Propagators: as simulated in PYOFSH and as desired
20444           HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
20445           MINT15=MINT(15)
20446           MINT(15)=1
20447           MINT(61)=1
20448           CALL PYWIDT(23,SQM4,WDTP,WDTE)
20449           MINT(15)=MINT15 
20450           HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
20451           HFGG=HFGG*HFAEM*VINT(111)/SQM4
20452           HFGZ=HFGZ*HFAEM*VINT(112)/SQM4
20453           HFZZ=HFZZ*HFAEM*VINT(114)/SQM4
20454 C...Loop over flavours; consider full gamma/Z structure
20455           DO 720 I=MMINA,MMAXA
20456             IF(I.EQ.0) GOTO 720
20457             EI=KCHG(IABS(I),1)/3D0
20458             AI=SIGN(1D0,EI)
20459             VI=AI-4D0*EI*XWV
20460             FACZQ=EI**2*(EI**2*HFGG+EI*VI*HFGZ+
20461      &      (VI**2+AI**2)*HFZZ)/HBW4
20462             FZQD=MAX(PMAS(IABS(I),1)**2*SQM4,FZQDTM)  
20463             DO 710 ISDE=1,2
20464               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 710
20465               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 710
20466               NCHN=NCHN+1
20467               ISIG(NCHN,ISDE)=I
20468               ISIG(NCHN,3-ISDE)=22
20469               ISIG(NCHN,3)=1
20470               SIGH(NCHN)=FACZQ*FZQN/FZQD
20471   710       CONTINUE
20472   720     CONTINUE
20473  
20474         ELSEIF(ISUB.EQ.36) THEN
20475 C...f + gamma -> f' + W+/-
20476           FWQ=COMFAC*AEM**2/(2D0*XW)*
20477      &    (SH2+UH2+2D0*SQM4*TH)/(SQPTH*SQM4-SH*UH)
20478 C...Propagators: as simulated in PYOFSH and as desired
20479           HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
20480           CALL PYWIDT(24,SQM4,WDTP,WDTE)
20481           GMMWC=SQRT(SQM4)*WDTP(0)
20482           HBW4C=GMMWC/((SQM4-SQMW)**2+GMMWC**2)
20483           FWQ=FWQ*HBW4C/HBW4
20484           DO 740 I=MMINA,MMAXA
20485             IF(I.EQ.0) GOTO 740
20486             IA=IABS(I)
20487             EIA=ABS(KCHG(IABS(I),1)/3D0)
20488             FACWQ=FWQ*(EIA-SH/(SH+UH))**2
20489             KCHW=ISIGN(1,KCHG(IA,1)*ISIGN(1,I))
20490             WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))/WDTP(0)
20491             DO 730 ISDE=1,2
20492               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 730
20493               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 730
20494               NCHN=NCHN+1
20495               ISIG(NCHN,ISDE)=I
20496               ISIG(NCHN,3-ISDE)=22
20497               ISIG(NCHN,3)=1
20498               SIGH(NCHN)=FACWQ*VINT(180+I)*WIDSC
20499   730       CONTINUE
20500   740     CONTINUE
20501  
20502         ELSEIF(ISUB.EQ.37) THEN
20503 C...f + gamma -> f + h0
20504  
20505         ELSEIF(ISUB.EQ.38) THEN
20506 C...f + Z0 -> f + g (q + Z0 -> q + g only)
20507  
20508         ELSEIF(ISUB.EQ.39) THEN
20509 C...f + Z0 -> f + gamma
20510  
20511         ELSEIF(ISUB.EQ.40) THEN
20512 C...f + Z0 -> f + Z0
20513         ENDIF
20514  
20515       ELSEIF(ISUB.LE.50) THEN
20516         IF(ISUB.EQ.41) THEN
20517 C...f + Z0 -> f' + W+/-
20518  
20519         ELSEIF(ISUB.EQ.42) THEN
20520 C...f + Z0 -> f + h0
20521  
20522         ELSEIF(ISUB.EQ.43) THEN
20523 C...f + W+/- -> f' + g (q + W+/- -> q' + g only)
20524  
20525         ELSEIF(ISUB.EQ.44) THEN
20526 C...f + W+/- -> f' + gamma
20527  
20528         ELSEIF(ISUB.EQ.45) THEN
20529 C...f + W+/- -> f' + Z0
20530  
20531         ELSEIF(ISUB.EQ.46) THEN
20532 C...f + W+/- -> f' + W+/-
20533  
20534         ELSEIF(ISUB.EQ.47) THEN
20535 C...f + W+/- -> f' + h0
20536  
20537         ELSEIF(ISUB.EQ.48) THEN
20538 C...f + h0 -> f + g (q + h0 -> q + g only)
20539  
20540         ELSEIF(ISUB.EQ.49) THEN
20541 C...f + h0 -> f + gamma
20542  
20543         ELSEIF(ISUB.EQ.50) THEN
20544 C...f + h0 -> f + Z0
20545         ENDIF
20546  
20547       ELSEIF(ISUB.LE.60) THEN
20548         IF(ISUB.EQ.51) THEN
20549 C...f + h0 -> f' + W+/-
20550  
20551         ELSEIF(ISUB.EQ.52) THEN
20552 C...f + h0 -> f + h0
20553  
20554         ELSEIF(ISUB.EQ.53) THEN
20555 C...g + g -> f + fbar (g + g -> q + qbar only)
20556           CALL PYWIDT(21,SH,WDTP,WDTE)
20557           FACQQ1=COMFAC*AS**2*1D0/6D0*(UH/TH-(2D0+MSTP(34)*1D0/4D0)*
20558      &    UH2/SH2)*(WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))*FACA
20559           FACQQ2=COMFAC*AS**2*1D0/6D0*(TH/UH-(2D0+MSTP(34)*1D0/4D0)*
20560      &    TH2/SH2)*(WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))*FACA
20561           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 750
20562           NCHN=NCHN+1
20563           ISIG(NCHN,1)=21
20564           ISIG(NCHN,2)=21
20565           ISIG(NCHN,3)=1
20566           SIGH(NCHN)=FACQQ1
20567           NCHN=NCHN+1
20568           ISIG(NCHN,1)=21
20569           ISIG(NCHN,2)=21
20570           ISIG(NCHN,3)=2
20571           SIGH(NCHN)=FACQQ2
20572   750     CONTINUE
20573  
20574         ELSEIF(ISUB.EQ.54) THEN
20575 C...g + gamma -> f + fbar (g + gamma -> q + qbar only)
20576           CALL PYWIDT(21,SH,WDTP,WDTE)
20577           WDTESU=0D0
20578           DO 760 I=1,MIN(8,MDCY(21,3))
20579             EF=KCHG(I,1)/3D0
20580             WDTESU=WDTESU+EF**2*(WDTE(I,1)+WDTE(I,2)+WDTE(I,3)+
20581      &      WDTE(I,4))
20582   760     CONTINUE
20583           FACQQ=COMFAC*AEM*AS*WDTESU*(TH2+UH2)/(TH*UH)
20584           IF(KFAC(1,21)*KFAC(2,22).NE.0) THEN
20585             NCHN=NCHN+1
20586             ISIG(NCHN,1)=21
20587             ISIG(NCHN,2)=22
20588             ISIG(NCHN,3)=1
20589             SIGH(NCHN)=FACQQ
20590           ENDIF
20591           IF(KFAC(1,22)*KFAC(2,21).NE.0) THEN
20592             NCHN=NCHN+1
20593             ISIG(NCHN,1)=22
20594             ISIG(NCHN,2)=21
20595             ISIG(NCHN,3)=1
20596             SIGH(NCHN)=FACQQ
20597           ENDIF
20598  
20599         ELSEIF(ISUB.EQ.55) THEN
20600 C...g + Z -> f + fbar (g + Z -> q + qbar only)
20601  
20602         ELSEIF(ISUB.EQ.56) THEN
20603 C...g + W -> f + f'bar (g + W -> q + q'bar only)
20604  
20605         ELSEIF(ISUB.EQ.57) THEN
20606 C...g + h0 -> f + fbar (g + h0 -> q + qbar only)
20607  
20608         ELSEIF(ISUB.EQ.58) THEN
20609 C...gamma + gamma -> f + fbar
20610           CALL PYWIDT(22,SH,WDTP,WDTE)
20611           WDTESU=0D0
20612           DO 770 I=1,MIN(12,MDCY(22,3))
20613             IF(I.LE.8) EF= KCHG(I,1)/3D0
20614             IF(I.GE.9) EF= KCHG(9+2*(I-8),1)/3D0
20615             WDTESU=WDTESU+EF**2*(WDTE(I,1)+WDTE(I,2)+WDTE(I,3)+
20616      &      WDTE(I,4))
20617   770     CONTINUE
20618           FACFF=COMFAC*AEM**2*WDTESU*2D0*(TH2+UH2)/(TH*UH)
20619           IF(KFAC(1,22)*KFAC(2,22).NE.0) THEN
20620             NCHN=NCHN+1
20621             ISIG(NCHN,1)=22
20622             ISIG(NCHN,2)=22
20623             ISIG(NCHN,3)=1
20624             SIGH(NCHN)=FACFF
20625           ENDIF
20626  
20627         ELSEIF(ISUB.EQ.59) THEN
20628 C...gamma + Z0 -> f + fbar
20629  
20630         ELSEIF(ISUB.EQ.60) THEN
20631 C...gamma + W+/- -> f + fbar'
20632         ENDIF
20633  
20634       ELSEIF(ISUB.LE.70) THEN
20635         IF(ISUB.EQ.61) THEN
20636 C...gamma + h0 -> f + fbar
20637  
20638         ELSEIF(ISUB.EQ.62) THEN
20639 C...Z0 + Z0 -> f + fbar
20640  
20641         ELSEIF(ISUB.EQ.63) THEN
20642 C...Z0 + W+/- -> f + fbar'
20643  
20644         ELSEIF(ISUB.EQ.64) THEN
20645 C...Z0 + h0 -> f + fbar
20646  
20647         ELSEIF(ISUB.EQ.65) THEN
20648 C...W+ + W- -> f + fbar
20649  
20650         ELSEIF(ISUB.EQ.66) THEN
20651 C...W+/- + h0 -> f + fbar'
20652  
20653         ELSEIF(ISUB.EQ.67) THEN
20654 C...h0 + h0 -> f + fbar
20655  
20656         ELSEIF(ISUB.EQ.68) THEN
20657 C...g + g -> g + g
20658           FACGG1=COMFAC*AS**2*9D0/4D0*(SH2/TH2+2D0*SH/TH+3D0+2D0*TH/SH+
20659      &    TH2/SH2)*FACA
20660           FACGG2=COMFAC*AS**2*9D0/4D0*(UH2/SH2+2D0*UH/SH+3D0+2D0*SH/UH+
20661      &    SH2/UH2)*FACA
20662           FACGG3=COMFAC*AS**2*9D0/4D0*(TH2/UH2+2D0*TH/UH+3D0+2D0*UH/TH+
20663      &    UH2/TH2)
20664           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 780
20665           NCHN=NCHN+1
20666           ISIG(NCHN,1)=21
20667           ISIG(NCHN,2)=21
20668           ISIG(NCHN,3)=1
20669           SIGH(NCHN)=0.5D0*FACGG1
20670           NCHN=NCHN+1
20671           ISIG(NCHN,1)=21
20672           ISIG(NCHN,2)=21
20673           ISIG(NCHN,3)=2
20674           SIGH(NCHN)=0.5D0*FACGG2
20675           NCHN=NCHN+1
20676           ISIG(NCHN,1)=21
20677           ISIG(NCHN,2)=21
20678           ISIG(NCHN,3)=3
20679           SIGH(NCHN)=0.5D0*FACGG3
20680   780     CONTINUE
20681  
20682         ELSEIF(ISUB.EQ.69) THEN
20683 C...gamma + gamma -> W+ + W-
20684           SQMWE=MAX(0.5D0*SQMW,SQRT(SQM3*SQM4))
20685           FPROP=SH2/((SQMWE-TH)*(SQMWE-UH))
20686           FACWW=COMFAC*6D0*AEM**2*(1D0-FPROP*(4D0/3D0+2D0*SQMWE/SH)+
20687      &    FPROP**2*(2D0/3D0+2D0*(SQMWE/SH)**2))*WIDS(24,1)
20688           IF(KFAC(1,22)*KFAC(2,22).EQ.0) GOTO 790
20689           NCHN=NCHN+1
20690           ISIG(NCHN,1)=22
20691           ISIG(NCHN,2)=22
20692           ISIG(NCHN,3)=1
20693           SIGH(NCHN)=FACWW
20694   790     CONTINUE
20695  
20696         ELSEIF(ISUB.EQ.70) THEN
20697 C...gamma + W+/- -> Z0 + W+/-
20698           SQMWE=MAX(0.5D0*SQMW,SQRT(SQM3*SQM4))
20699           FPROP=(TH-SQMWE)**2/(-SH*(SQMWE-UH))
20700           FACZW=COMFAC*6D0*AEM**2*(XW1/XW)*
20701      &    (1D0-FPROP*(4D0/3D0+2D0*SQMWE/(TH-SQMWE))+
20702      &    FPROP**2*(2D0/3D0+2D0*(SQMWE/(TH-SQMWE))**2))*WIDS(23,2)
20703           DO 810 KCHW=1,-1,-2
20704             DO 800 ISDE=1,2
20705               IF(KFAC(ISDE,22)*KFAC(3-ISDE,24*KCHW).EQ.0) GOTO 800
20706               NCHN=NCHN+1
20707               ISIG(NCHN,ISDE)=22
20708               ISIG(NCHN,3-ISDE)=24*KCHW
20709               ISIG(NCHN,3)=1
20710               SIGH(NCHN)=FACZW*WIDS(24,(5-KCHW)/2)
20711   800       CONTINUE
20712   810     CONTINUE
20713         ENDIF
20714  
20715       ELSEIF(ISUB.LE.80) THEN
20716         IF(ISUB.EQ.71) THEN
20717 C...Z0 + Z0 -> Z0 + Z0
20718           IF(SH.LE.4.01D0*SQMZ) GOTO 840
20719  
20720           IF(MSTP(46).LE.2) THEN
20721 C...Exact scattering ME:s for on-mass-shell gauge bosons
20722             BE2=1D0-4D0*SQMZ/SH
20723             TH=-0.5D0*SH*BE2*(1D0-CTH)
20724             UH=-0.5D0*SH*BE2*(1D0+CTH)
20725             IF(MAX(TH,UH).GT.-1D0) GOTO 840
20726             SHANG=1D0/XW1*SQMW/SQMZ*(1D0+BE2)**2
20727             ASHRE=(SH-SQMH)/((SH-SQMH)**2+GMMH**2)*SHANG
20728             ASHIM=-GMMH/((SH-SQMH)**2+GMMH**2)*SHANG
20729             THANG=1D0/XW1*SQMW/SQMZ*(BE2-CTH)**2
20730             ATHRE=(TH-SQMH)/((TH-SQMH)**2+GMMH**2)*THANG
20731             ATHIM=-GMMH/((TH-SQMH)**2+GMMH**2)*THANG
20732             UHANG=1D0/XW1*SQMW/SQMZ*(BE2+CTH)**2
20733             AUHRE=(UH-SQMH)/((UH-SQMH)**2+GMMH**2)*UHANG
20734             AUHIM=-GMMH/((UH-SQMH)**2+GMMH**2)*UHANG
20735             FACZZ=COMFAC*1D0/(4096D0*PARU(1)**2*16D0*XW1**2)*
20736      &      (AEM/XW)**4*(SH/SQMW)**2*(SQMZ/SQMW)*SH2
20737             IF(MSTP(46).LE.0) FACZZ=FACZZ*(ASHRE**2+ASHIM**2)
20738             IF(MSTP(46).EQ.1) FACZZ=FACZZ*((ASHRE+ATHRE+AUHRE)**2+
20739      &      (ASHIM+ATHIM+AUHIM)**2)
20740             IF(MSTP(46).EQ.2) FACZZ=0D0
20741  
20742           ELSE
20743 C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
20744             FACZZ=COMFAC*(AEM/(16D0*PARU(1)*XW*XW1))**2*(64D0/9D0)*
20745      &      ABS(A00U+2.*A20U)**2
20746           ENDIF
20747           FACZZ=FACZZ*WIDS(23,1)
20748  
20749           DO 830 I=MMIN1,MMAX1
20750             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 830
20751             EI=KCHG(IABS(I),1)/3D0
20752             AI=SIGN(1D0,EI)
20753             VI=AI-4D0*EI*XWV
20754             AVI=AI**2+VI**2
20755             DO 820 J=MMIN2,MMAX2
20756               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 820
20757               EJ=KCHG(IABS(J),1)/3D0
20758               AJ=SIGN(1D0,EJ)
20759               VJ=AJ-4D0*EJ*XWV
20760               AVJ=AJ**2+VJ**2
20761               NCHN=NCHN+1
20762               ISIG(NCHN,1)=I
20763               ISIG(NCHN,2)=J
20764               ISIG(NCHN,3)=1
20765               SIGH(NCHN)=0.5D0*FACZZ*AVI*AVJ
20766   820       CONTINUE
20767   830     CONTINUE
20768   840     CONTINUE
20769  
20770         ELSEIF(ISUB.EQ.72) THEN
20771 C...Z0 + Z0 -> W+ + W-
20772           IF(SH.LE.4.01D0*SQMZ) GOTO 870
20773  
20774           IF(MSTP(46).LE.2) THEN
20775 C...Exact scattering ME:s for on-mass-shell gauge bosons
20776             BE2=SQRT((1D0-4D0*SQMW/SH)*(1D0-4D0*SQMZ/SH))
20777             CTH2=CTH**2
20778             TH=-0.5D0*SH*(1D0-2D0*(SQMW+SQMZ)/SH-BE2*CTH)
20779             UH=-0.5D0*SH*(1D0-2D0*(SQMW+SQMZ)/SH+BE2*CTH)
20780             IF(MAX(TH,UH).GT.-1D0) GOTO 870
20781             SHANG=4D0*SQRT(SQMW/(SQMZ*XW1))*(1D0-2D0*SQMW/SH)*
20782      &      (1D0-2D0*SQMZ/SH)
20783             ASHRE=(SH-SQMH)/((SH-SQMH)**2+GMMH**2)*SHANG
20784             ASHIM=-GMMH/((SH-SQMH)**2+GMMH**2)*SHANG
20785             ATWRE=XW1/SQMZ*SH/(TH-SQMW)*((CTH-BE2)**2*(3D0/2D0+BE2/2D0*
20786      &      CTH-(SQMW+SQMZ)/SH+(SQMW-SQMZ)**2/(SH*SQMW))+4D0*
20787      &      ((SQMW+SQMZ)/SH*(1D0-3D0*CTH2)+8D0*SQMW*SQMZ/SH2*
20788      &      (2D0*CTH2-1D0)+4D0*(SQMW**2+SQMZ**2)/SH2*CTH2+
20789      &      2D0*(SQMW+SQMZ)/SH*BE2*CTH))
20790             ATWIM=0D0
20791             AUWRE=XW1/SQMZ*SH/(UH-SQMW)*((CTH+BE2)**2*(3D0/2D0-BE2/2D0*
20792      &      CTH-(SQMW+SQMZ)/SH+(SQMW-SQMZ)**2/(SH*SQMW))+4D0*
20793      &      ((SQMW+SQMZ)/SH*(1D0-3D0*CTH2)+8D0*SQMW*SQMZ/SH2*
20794      &      (2D0*CTH2-1D0)+4D0*(SQMW**2+SQMZ**2)/SH2*CTH2-
20795      &      2D0*(SQMW+SQMZ)/SH*BE2*CTH))
20796             AUWIM=0D0
20797             A4RE=2D0*XW1/SQMZ*(3D0-CTH2-4D0*(SQMW+SQMZ)/SH)
20798             A4IM=0D0
20799             FACWW=COMFAC*1D0/(4096D0*PARU(1)**2*16D0*XW1**2)*
20800      &      (AEM/XW)**4*(SH/SQMW)**2*(SQMZ/SQMW)*SH2
20801             IF(MSTP(46).LE.0) FACWW=FACWW*(ASHRE**2+ASHIM**2)
20802             IF(MSTP(46).EQ.1) FACWW=FACWW*((ASHRE+ATWRE+AUWRE+A4RE)**2+
20803      &      (ASHIM+ATWIM+AUWIM+A4IM)**2)
20804             IF(MSTP(46).EQ.2) FACWW=FACWW*((ATWRE+AUWRE+A4RE)**2+
20805      &      (ATWIM+AUWIM+A4IM)**2)
20806  
20807           ELSE
20808 C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
20809             FACWW=COMFAC*(AEM/(16D0*PARU(1)*XW*XW1))**2*(64D0/9D0)*
20810      &      ABS(A00U-A20U)**2
20811           ENDIF
20812           FACWW=FACWW*WIDS(24,1)
20813  
20814           DO 860 I=MMIN1,MMAX1
20815             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 860
20816             EI=KCHG(IABS(I),1)/3D0
20817             AI=SIGN(1D0,EI)
20818             VI=AI-4D0*EI*XWV
20819             AVI=AI**2+VI**2
20820             DO 850 J=MMIN2,MMAX2
20821               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 850
20822               EJ=KCHG(IABS(J),1)/3D0
20823               AJ=SIGN(1D0,EJ)
20824               VJ=AJ-4D0*EJ*XWV
20825               AVJ=AJ**2+VJ**2
20826               NCHN=NCHN+1
20827               ISIG(NCHN,1)=I
20828               ISIG(NCHN,2)=J
20829               ISIG(NCHN,3)=1
20830               SIGH(NCHN)=FACWW*AVI*AVJ
20831   850       CONTINUE
20832   860     CONTINUE
20833   870     CONTINUE
20834  
20835         ELSEIF(ISUB.EQ.73) THEN
20836 C...Z0 + W+/- -> Z0 + W+/-
20837           IF(SH.LE.2D0*SQMZ+2D0*SQMW) GOTO 900
20838  
20839           IF(MSTP(46).LE.2) THEN
20840 C...Exact scattering ME:s for on-mass-shell gauge bosons
20841             BE2=1D0-2D0*(SQMZ+SQMW)/SH+((SQMZ-SQMW)/SH)**2
20842             EP1=1D0-(SQMZ-SQMW)/SH
20843             EP2=1D0+(SQMZ-SQMW)/SH
20844             TH=-0.5D0*SH*BE2*(1D0-CTH)
20845             UH=(SQMZ-SQMW)**2/SH-0.5D0*SH*BE2*(1D0+CTH)
20846             IF(MAX(TH,UH).GT.-1D0) GOTO 900
20847             THANG=(BE2-EP1*CTH)*(BE2-EP2*CTH)
20848             ATHRE=(TH-SQMH)/((TH-SQMH)**2+GMMH**2)*THANG
20849             ATHIM=-GMMH/((TH-SQMH)**2+GMMH**2)*THANG
20850             ASWRE=-XW1/SQMZ*SH/(SH-SQMW)*(-BE2*(EP1+EP2)**4*CTH+
20851      &      1D0/4D0*(BE2+EP1*EP2)**2*((EP1-EP2)**2-4D0*BE2*CTH)+
20852      &      2D0*BE2*(BE2+EP1*EP2)*(EP1+EP2)**2*CTH-
20853      &      1D0/16D0*SH/SQMW*(EP1**2-EP2**2)**2*(BE2+EP1*EP2)**2)
20854             ASWIM=0D0
20855             AUWRE=XW1/SQMZ*SH/(UH-SQMW)*(-BE2*(EP2+EP1*CTH)*
20856      &      (EP1+EP2*CTH)*(BE2+EP1*EP2)+BE2*(EP2+EP1*CTH)*
20857      &      (BE2+EP1*EP2*CTH)*(2D0*EP2-EP2*CTH+EP1)-
20858      &      BE2*(EP2+EP1*CTH)**2*(BE2-EP2**2*CTH)-1D0/8D0*
20859      &      (BE2+EP1*EP2*CTH)**2*((EP1+EP2)**2+2D0*BE2*(1D0-CTH))+
20860      &      1D0/32D0*SH/SQMW*(BE2+EP1*EP2*CTH)**2*
20861      &      (EP1**2-EP2**2)**2-BE2*(EP1+EP2*CTH)*(EP2+EP1*CTH)*
20862      &      (BE2+EP1*EP2)+BE2*(EP1+EP2*CTH)*(BE2+EP1*EP2*CTH)*
20863      &      (2D0*EP1-EP1*CTH+EP2)-BE2*(EP1+EP2*CTH)**2*
20864      &      (BE2-EP1**2*CTH)-1D0/8D0*(BE2+EP1*EP2*CTH)**2*
20865      &      ((EP1+EP2)**2+2D0*BE2*(1D0-CTH))+1D0/32D0*SH/SQMW*
20866      &      (BE2+EP1*EP2*CTH)**2*(EP1**2-EP2**2)**2)
20867             AUWIM=0D0
20868             A4RE=XW1/SQMZ*(EP1**2*EP2**2*(CTH**2-1D0)-
20869      &      2D0*BE2*(EP1**2+EP2**2+EP1*EP2)*CTH-2D0*BE2*EP1*EP2)
20870             A4IM=0D0
20871             FACZW=COMFAC*1D0/(4096D0*PARU(1)**2*4D0*XW1)*(AEM/XW)**4*
20872      &      (SH/SQMW)**2*SQRT(SQMZ/SQMW)*SH2
20873             IF(MSTP(46).LE.0) FACZW=0D0
20874             IF(MSTP(46).EQ.1) FACZW=FACZW*((ATHRE+ASWRE+AUWRE+A4RE)**2+
20875      &      (ATHIM+ASWIM+AUWIM+A4IM)**2)
20876             IF(MSTP(46).EQ.2) FACZW=FACZW*((ASWRE+AUWRE+A4RE)**2+
20877      &      (ASWIM+AUWIM+A4IM)**2)
20878  
20879           ELSE
20880 C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
20881             FACZW=COMFAC*AEM**2/(64D0*PARU(1)**2*XW**2*XW1)*16D0*
20882      &      ABS(A20U+3.*A11U*SNGL(CTH))**2
20883           ENDIF
20884           FACZW=FACZW*WIDS(23,2)
20885  
20886           DO 890 I=MMIN1,MMAX1
20887             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 890
20888             EI=KCHG(IABS(I),1)/3D0
20889             AI=SIGN(1D0,EI)
20890             VI=AI-4D0*EI*XWV
20891             AVI=AI**2+VI**2
20892             KCHWI=ISIGN(1,KCHG(IABS(I),1)*ISIGN(1,I))
20893             DO 880 J=MMIN2,MMAX2
20894               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 880
20895               EJ=KCHG(IABS(J),1)/3D0
20896               AJ=SIGN(1D0,EJ)
20897               VJ=AI-4D0*EJ*XWV
20898               AVJ=AJ**2+VJ**2
20899               KCHWJ=ISIGN(1,KCHG(IABS(J),1)*ISIGN(1,J))
20900               NCHN=NCHN+1
20901               ISIG(NCHN,1)=I
20902               ISIG(NCHN,2)=J
20903               ISIG(NCHN,3)=1
20904               SIGH(NCHN)=FACZW*AVI*VINT(180+J)*WIDS(24,(5-KCHWJ)/2)
20905               NCHN=NCHN+1
20906               ISIG(NCHN,1)=I
20907               ISIG(NCHN,2)=J
20908               ISIG(NCHN,3)=2
20909               SIGH(NCHN)=FACZW*VINT(180+I)*WIDS(24,(5-KCHWI)/2)*AVJ
20910   880       CONTINUE
20911   890     CONTINUE
20912   900     CONTINUE
20913  
20914         ELSEIF(ISUB.EQ.75) THEN
20915 C...W+ + W- -> gamma + gamma
20916  
20917         ELSEIF(ISUB.EQ.76) THEN
20918 C...W+ + W- -> Z0 + Z0
20919           IF(SH.LE.4.01D0*SQMZ) GOTO 930
20920  
20921           IF(MSTP(46).LE.2) THEN
20922 C...Exact scattering ME:s for on-mass-shell gauge bosons
20923             BE2=SQRT((1D0-4D0*SQMW/SH)*(1D0-4D0*SQMZ/SH))
20924             CTH2=CTH**2
20925             TH=-0.5D0*SH*(1D0-2D0*(SQMW+SQMZ)/SH-BE2*CTH)
20926             UH=-0.5D0*SH*(1D0-2D0*(SQMW+SQMZ)/SH+BE2*CTH)
20927             IF(MAX(TH,UH).GT.-1D0) GOTO 930
20928             SHANG=4D0*SQRT(SQMW/(SQMZ*XW1))*(1D0-2D0*SQMW/SH)*
20929      &      (1D0-2D0*SQMZ/SH)
20930             ASHRE=(SH-SQMH)/((SH-SQMH)**2+GMMH**2)*SHANG
20931             ASHIM=-GMMH/((SH-SQMH)**2+GMMH**2)*SHANG
20932             ATWRE=XW1/SQMZ*SH/(TH-SQMW)*((CTH-BE2)**2*(3D0/2D0+BE2/2D0*
20933      &      CTH-(SQMW+SQMZ)/SH+(SQMW-SQMZ)**2/(SH*SQMW))+4D0*
20934      &      ((SQMW+SQMZ)/SH*(1D0-3D0*CTH2)+8D0*SQMW*SQMZ/SH2*
20935      &      (2D0*CTH2-1D0)+4D0*(SQMW**2+SQMZ**2)/SH2*CTH2+
20936      &      2D0*(SQMW+SQMZ)/SH*BE2*CTH))
20937             ATWIM=0D0
20938             AUWRE=XW1/SQMZ*SH/(UH-SQMW)*((CTH+BE2)**2*(3D0/2D0-BE2/2D0*
20939      &      CTH-(SQMW+SQMZ)/SH+(SQMW-SQMZ)**2/(SH*SQMW))+4D0*
20940      &      ((SQMW+SQMZ)/SH*(1D0-3D0*CTH2)+8D0*SQMW*SQMZ/SH2*
20941      &      (2D0*CTH2-1D0)+4D0*(SQMW**2+SQMZ**2)/SH2*CTH2-
20942      &      2D0*(SQMW+SQMZ)/SH*BE2*CTH))
20943             AUWIM=0D0
20944             A4RE=2D0*XW1/SQMZ*(3D0-CTH2-4D0*(SQMW+SQMZ)/SH)
20945             A4IM=0D0
20946             FACZZ=COMFAC*1D0/(4096D0*PARU(1)**2)*(AEM/XW)**4*
20947      &      (SH/SQMW)**2*SH2
20948             IF(MSTP(46).LE.0) FACZZ=FACZZ*(ASHRE**2+ASHIM**2)
20949             IF(MSTP(46).EQ.1) FACZZ=FACZZ*((ASHRE+ATWRE+AUWRE+A4RE)**2+
20950      &      (ASHIM+ATWIM+AUWIM+A4IM)**2)
20951             IF(MSTP(46).EQ.2) FACZZ=FACZZ*((ATWRE+AUWRE+A4RE)**2+
20952      &      (ATWIM+AUWIM+A4IM)**2)
20953  
20954           ELSE
20955 C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
20956             FACZZ=COMFAC*(AEM/(4D0*PARU(1)*XW))**2*(64D0/9D0)*
20957      &      ABS(A00U-A20U)**2
20958           ENDIF
20959           FACZZ=FACZZ*WIDS(23,1)
20960  
20961           DO 920 I=MMIN1,MMAX1
20962             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 920
20963             EI=SIGN(1D0,DBLE(I))*KCHG(IABS(I),1)
20964             DO 910 J=MMIN2,MMAX2
20965               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 910
20966               EJ=SIGN(1D0,DBLE(J))*KCHG(IABS(J),1)
20967               IF(EI*EJ.GT.0D0) GOTO 910
20968               NCHN=NCHN+1
20969               ISIG(NCHN,1)=I
20970               ISIG(NCHN,2)=J
20971               ISIG(NCHN,3)=1
20972               SIGH(NCHN)=0.5D0*FACZZ*VINT(180+I)*VINT(180+J)
20973   910       CONTINUE
20974   920     CONTINUE
20975   930     CONTINUE
20976  
20977         ELSEIF(ISUB.EQ.77) THEN
20978 C...W+/- + W+/- -> W+/- + W+/-
20979           IF(SH.LE.4.01D0*SQMW) GOTO 960
20980  
20981           IF(MSTP(46).LE.2) THEN
20982 C...Exact scattering ME:s for on-mass-shell gauge bosons
20983             BE2=1D0-4D0*SQMW/SH
20984             BE4=BE2**2
20985             CTH2=CTH**2
20986             CTH3=CTH**3
20987             TH=-0.5D0*SH*BE2*(1D0-CTH)
20988             UH=-0.5D0*SH*BE2*(1D0+CTH)
20989             IF(MAX(TH,UH).GT.-1D0) GOTO 960
20990             SHANG=(1D0+BE2)**2
20991             ASHRE=(SH-SQMH)/((SH-SQMH)**2+GMMH**2)*SHANG
20992             ASHIM=-GMMH/((SH-SQMH)**2+GMMH**2)*SHANG
20993             THANG=(BE2-CTH)**2
20994             ATHRE=(TH-SQMH)/((TH-SQMH)**2+GMMH**2)*THANG
20995             ATHIM=-GMMH/((TH-SQMH)**2+GMMH**2)*THANG
20996             UHANG=(BE2+CTH)**2
20997             AUHRE=(UH-SQMH)/((UH-SQMH)**2+GMMH**2)*UHANG
20998             AUHIM=-GMMH/((UH-SQMH)**2+GMMH**2)*UHANG
20999             SGZANG=1D0/SQMW*BE2*(3D0-BE2)**2*CTH
21000             ASGRE=XW*SGZANG
21001             ASGIM=0D0
21002             ASZRE=XW1*SH/(SH-SQMZ)*SGZANG
21003             ASZIM=0D0
21004             TGZANG=1D0/SQMW*(BE2*(4D0-2D0*BE2+BE4)+BE2*(4D0-10D0*BE2+
21005      &      BE4)*CTH+(2D0-11D0*BE2+10D0*BE4)*CTH2+BE2*CTH3)
21006             ATGRE=0.5D0*XW*SH/TH*TGZANG
21007             ATGIM=0D0
21008             ATZRE=0.5D0*XW1*SH/(TH-SQMZ)*TGZANG
21009             ATZIM=0D0
21010             UGZANG=1D0/SQMW*(BE2*(4D0-2D0*BE2+BE4)-BE2*(4D0-10D0*BE2+
21011      &      BE4)*CTH+(2D0-11D0*BE2+10D0*BE4)*CTH2-BE2*CTH3)
21012             AUGRE=0.5D0*XW*SH/UH*UGZANG
21013             AUGIM=0D0
21014             AUZRE=0.5D0*XW1*SH/(UH-SQMZ)*UGZANG
21015             AUZIM=0D0
21016             A4ARE=1D0/SQMW*(1D0+2D0*BE2-6D0*BE2*CTH-CTH2)
21017             A4AIM=0D0
21018             A4SRE=2D0/SQMW*(1D0+2D0*BE2-CTH2)
21019             A4SIM=0D0
21020             FWW=COMFAC*1D0/(4096D0*PARU(1)**2)*(AEM/XW)**4*
21021      &      (SH/SQMW)**2*SH2
21022             IF(MSTP(46).LE.0) THEN
21023               AWWARE=ASHRE
21024               AWWAIM=ASHIM
21025               AWWSRE=0D0
21026               AWWSIM=0D0
21027             ELSEIF(MSTP(46).EQ.1) THEN
21028               AWWARE=ASHRE+ATHRE+ASGRE+ASZRE+ATGRE+ATZRE+A4ARE
21029               AWWAIM=ASHIM+ATHIM+ASGIM+ASZIM+ATGIM+ATZIM+A4AIM
21030               AWWSRE=-ATHRE-AUHRE+ATGRE+ATZRE+AUGRE+AUZRE+A4SRE
21031               AWWSIM=-ATHIM-AUHIM+ATGIM+ATZIM+AUGIM+AUZIM+A4SIM
21032             ELSE
21033               AWWARE=ASGRE+ASZRE+ATGRE+ATZRE+A4ARE
21034               AWWAIM=ASGIM+ASZIM+ATGIM+ATZIM+A4AIM
21035               AWWSRE=ATGRE+ATZRE+AUGRE+AUZRE+A4SRE
21036               AWWSIM=ATGIM+ATZIM+AUGIM+AUZIM+A4SIM
21037             ENDIF
21038             AWWA2=AWWARE**2+AWWAIM**2
21039             AWWS2=AWWSRE**2+AWWSIM**2
21040  
21041           ELSE
21042 C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
21043             FWWA=COMFAC*(AEM/(4D0*PARU(1)*XW))**2*(64D0/9D0)*
21044      &      ABS(A00U+0.5*A20U+4.5*A11U*SNGL(CTH))**2
21045             FWWS=COMFAC*(AEM/(4D0*PARU(1)*XW))**2*64D0*ABS(A20U)**2
21046           ENDIF
21047  
21048           DO 950 I=MMIN1,MMAX1
21049             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 950
21050             EI=SIGN(1D0,DBLE(I))*KCHG(IABS(I),1)
21051             DO 940 J=MMIN2,MMAX2
21052               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 940
21053               EJ=SIGN(1D0,DBLE(J))*KCHG(IABS(J),1)
21054               IF(EI*EJ.LT.0D0) THEN
21055 C...W+W-
21056                 IF(MSTP(45).EQ.1) GOTO 940
21057                 IF(MSTP(46).LE.2) FACWW=FWW*AWWA2*WIDS(24,1)
21058                 IF(MSTP(46).GE.3) FACWW=FWWA*WIDS(24,1)
21059               ELSE
21060 C...W+W+/W-W-
21061                 IF(MSTP(45).EQ.2) GOTO 940
21062                 IF(MSTP(46).LE.2) FACWW=FWW*AWWS2
21063                 IF(MSTP(46).GE.3) FACWW=FWWS
21064                 IF(EI.GT.0D0) FACWW=FACWW*WIDS(24,4)
21065                 IF(EI.LT.0D0) FACWW=FACWW*WIDS(24,5)
21066               ENDIF
21067               NCHN=NCHN+1
21068               ISIG(NCHN,1)=I
21069               ISIG(NCHN,2)=J
21070               ISIG(NCHN,3)=1
21071               SIGH(NCHN)=FACWW*VINT(180+I)*VINT(180+J)
21072               IF(EI*EJ.GT.0D0) SIGH(NCHN)=0.5D0*SIGH(NCHN)
21073   940       CONTINUE
21074   950     CONTINUE
21075   960     CONTINUE
21076  
21077         ELSEIF(ISUB.EQ.78) THEN
21078 C...W+/- + h0 -> W+/- + h0
21079  
21080         ELSEIF(ISUB.EQ.79) THEN
21081 C...h0 + h0 -> h0 + h0
21082  
21083         ELSEIF(ISUB.EQ.80) THEN
21084 C...q + gamma -> q' + pi+/-
21085           FQPI=COMFAC*(2D0*AEM/9D0)*(-SH/TH)*(1D0/SH2+1D0/TH2)
21086           ASSH=PYALPS(MAX(0.5D0,0.5D0*SH))
21087           Q2FPSH=0.55D0/LOG(MAX(2D0,2D0*SH))
21088           DELSH=UH*SQRT(ASSH*Q2FPSH)
21089           ASUH=PYALPS(MAX(0.5D0,-0.5D0*UH))
21090           Q2FPUH=0.55D0/LOG(MAX(2D0,-2D0*UH))
21091           DELUH=SH*SQRT(ASUH*Q2FPUH)
21092           DO 980 I=MAX(-2,MMINA),MIN(2,MMAXA)
21093             IF(I.EQ.0) GOTO 980
21094             EI=KCHG(IABS(I),1)/3D0
21095             EJ=SIGN(1D0-ABS(EI),EI)
21096             DO 970 ISDE=1,2
21097               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 970
21098               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 970
21099               NCHN=NCHN+1
21100               ISIG(NCHN,ISDE)=I
21101               ISIG(NCHN,3-ISDE)=22
21102               ISIG(NCHN,3)=1
21103               SIGH(NCHN)=FQPI*(EI*DELSH+EJ*DELUH)**2
21104   970       CONTINUE
21105   980     CONTINUE
21106  
21107         ENDIF
21108  
21109 C...C: 2 -> 2, tree diagrams with masses
21110  
21111       ELSEIF(ISUB.LE.90) THEN
21112         IF(ISUB.EQ.81) THEN
21113 C...q + qbar -> Q + Qbar
21114           SQMA=0.5D0*(SQM3+SQM4)-0.25D0*(SQM3-SQM4)**2/SH
21115           FACQQB=COMFAC*AS**2*4D0/9D0*(((TH-SQMA)**2+
21116      &    (UH-SQMA)**2)/SH2+2D0*SQMA/SH)
21117           IF(MSTP(35).GE.1) FACQQB=FACQQB*PYHFTH(SH,SQMA,0D0)
21118           WID2=1D0
21119           IF(MINT(55).EQ.6) WID2=WIDS(6,1)
21120           IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=WIDS(MINT(55),1)
21121           FACQQB=FACQQB*WID2
21122           DO 990 I=MMINA,MMAXA
21123             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
21124      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 990
21125             NCHN=NCHN+1
21126             ISIG(NCHN,1)=I
21127             ISIG(NCHN,2)=-I
21128             ISIG(NCHN,3)=1
21129             SIGH(NCHN)=FACQQB
21130   990     CONTINUE
21131  
21132         ELSEIF(ISUB.EQ.82) THEN
21133 C...g + g -> Q + Qbar
21134           SQMA=0.5D0*(SQM3+SQM4)-0.25D0*(SQM3-SQM4)**2/SH
21135           IF(MSTP(34).EQ.0) THEN
21136             FACQQ1=COMFAC*FACA*AS**2*(1D0/6D0)*((UH-SQMA)/(TH-SQMA)-
21137      &      2D0*(UH-SQMA)**2/SH2+4D0*(SQMA/SH)*(TH*UH-SQMA**2)/
21138      &      (TH-SQMA)**2)
21139             FACQQ2=COMFAC*FACA*AS**2*(1D0/6D0)*((TH-SQMA)/(UH-SQMA)-
21140      &      2D0*(TH-SQMA)**2/SH2+4D0*(SQMA/SH)*(TH*UH-SQMA**2)/
21141      &      (UH-SQMA)**2)
21142           ELSE
21143             FACQQ1=COMFAC*FACA*AS**2*(1D0/6D0)*((UH-SQMA)/(TH-SQMA)-
21144      &      2.25D0*(UH-SQMA)**2/SH2+4.5D0*(SQMA/SH)*(TH*UH-SQMA**2)/
21145      &      (TH-SQMA)**2+0.5D0*SQMA*TH/(TH-SQMA)**2-SQMA**2/
21146      &      (SH*(TH-SQMA)))
21147             FACQQ2=COMFAC*FACA*AS**2*(1D0/6D0)*((TH-SQMA)/(UH-SQMA)-
21148      &      2.25D0*(TH-SQMA)**2/SH2+4.5D0*(SQMA/SH)*(TH*UH-SQMA**2)/
21149      &      (UH-SQMA)**2+0.5D0*SQMA*UH/(UH-SQMA)**2-SQMA**2/
21150      &      (SH*(UH-SQMA)))
21151           ENDIF
21152           IF(MSTP(35).GE.1) THEN
21153             FATRE=PYHFTH(SH,SQMA,2D0/7D0)
21154             FACQQ1=FACQQ1*FATRE
21155             FACQQ2=FACQQ2*FATRE
21156           ENDIF
21157           WID2=1D0
21158           IF(MINT(55).EQ.6) WID2=WIDS(6,1)
21159           IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=WIDS(MINT(55),1)
21160           FACQQ1=FACQQ1*WID2
21161           FACQQ2=FACQQ2*WID2
21162           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1000
21163           NCHN=NCHN+1
21164           ISIG(NCHN,1)=21
21165           ISIG(NCHN,2)=21
21166           ISIG(NCHN,3)=1
21167           SIGH(NCHN)=FACQQ1
21168           NCHN=NCHN+1
21169           ISIG(NCHN,1)=21
21170           ISIG(NCHN,2)=21
21171           ISIG(NCHN,3)=2
21172           SIGH(NCHN)=FACQQ2
21173  1000     CONTINUE
21174  
21175         ELSEIF(ISUB.EQ.83) THEN
21176 C...f + q -> f' + Q
21177           FACQQS=COMFAC*(0.5D0*AEM/XW)**2*SH*(SH-SQM3)/(SQMW-TH)**2
21178           FACQQU=COMFAC*(0.5D0*AEM/XW)**2*UH*(UH-SQM3)/(SQMW-TH)**2
21179           DO 1020 I=MMIN1,MMAX1
21180             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1020
21181             DO 1010 J=MMIN2,MMAX2
21182               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1010
21183               IF(I*J.GT.0.AND.MOD(IABS(I+J),2).EQ.0) GOTO 1010
21184               IF(I*J.LT.0.AND.MOD(IABS(I+J),2).EQ.1) GOTO 1010
21185               IF(IABS(I).LT.MINT(55).AND.MOD(IABS(I+MINT(55)),2).EQ.1)
21186      &        THEN
21187                 NCHN=NCHN+1
21188                 ISIG(NCHN,1)=I
21189                 ISIG(NCHN,2)=J
21190                 ISIG(NCHN,3)=1
21191                 IF(MOD(MINT(55),2).EQ.0) FACCKM=VCKM(MINT(55)/2,
21192      &          (IABS(I)+1)/2)*VINT(180+J)
21193                 IF(MOD(MINT(55),2).EQ.1) FACCKM=VCKM(IABS(I)/2,
21194      &          (MINT(55)+1)/2)*VINT(180+J)
21195                 WID2=1D0
21196                 IF(I.GT.0) THEN
21197                   IF(MINT(55).EQ.6) WID2=WIDS(6,2)
21198                   IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=
21199      &            WIDS(MINT(55),2)
21200                 ELSE
21201                   IF(MINT(55).EQ.6) WID2=WIDS(6,3)
21202                   IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=
21203      &            WIDS(MINT(55),3)
21204                 ENDIF
21205                 IF(I*J.GT.0) SIGH(NCHN)=FACQQS*FACCKM*WID2
21206                 IF(I*J.LT.0) SIGH(NCHN)=FACQQU*FACCKM*WID2
21207               ENDIF
21208               IF(IABS(J).LT.MINT(55).AND.MOD(IABS(J+MINT(55)),2).EQ.1)
21209      &        THEN
21210                 NCHN=NCHN+1
21211                 ISIG(NCHN,1)=I
21212                 ISIG(NCHN,2)=J
21213                 ISIG(NCHN,3)=2
21214                 IF(MOD(MINT(55),2).EQ.0) FACCKM=VCKM(MINT(55)/2,
21215      &          (IABS(J)+1)/2)*VINT(180+I)
21216                 IF(MOD(MINT(55),2).EQ.1) FACCKM=VCKM(IABS(J)/2,
21217      &          (MINT(55)+1)/2)*VINT(180+I)
21218                 IF(J.GT.0) THEN
21219                   IF(MINT(55).EQ.6) WID2=WIDS(6,2)
21220                   IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=
21221      &            WIDS(MINT(55),2)
21222                 ELSE
21223                   IF(MINT(55).EQ.6) WID2=WIDS(6,3)
21224                   IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=
21225      &            WIDS(MINT(55),3)
21226                 ENDIF
21227                 IF(I*J.GT.0) SIGH(NCHN)=FACQQS*FACCKM*WID2
21228                 IF(I*J.LT.0) SIGH(NCHN)=FACQQU*FACCKM*WID2
21229               ENDIF
21230  1010       CONTINUE
21231  1020     CONTINUE
21232  
21233         ELSEIF(ISUB.EQ.84) THEN
21234 C...g + gamma -> Q + Qbar
21235           SQMA=0.5D0*(SQM3+SQM4)-0.25D0*(SQM3-SQM4)**2/SH
21236           FMTU=SQMA/(SQMA-TH)+SQMA/(SQMA-UH)
21237           FACQQ=COMFAC*AS*AEM*(KCHG(IABS(MINT(55)),1)/3D0)**2*
21238      &    ((SQMA-TH)/(SQMA-UH)+(SQMA-UH)/(SQMA-TH)+4D0*FMTU*(1D0-FMTU))
21239           IF(MSTP(35).GE.1) FACQQ=FACQQ*PYHFTH(SH,SQMA,0D0)
21240           WID2=1D0
21241           IF(MINT(55).EQ.6) WID2=WIDS(6,1)
21242           IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=WIDS(MINT(55),1)
21243           FACQQ=FACQQ*WID2
21244           IF(KFAC(1,21)*KFAC(2,22).NE.0) THEN
21245             NCHN=NCHN+1
21246             ISIG(NCHN,1)=21
21247             ISIG(NCHN,2)=22
21248             ISIG(NCHN,3)=1
21249             SIGH(NCHN)=FACQQ
21250           ENDIF
21251           IF(KFAC(1,22)*KFAC(2,21).NE.0) THEN
21252             NCHN=NCHN+1
21253             ISIG(NCHN,1)=22
21254             ISIG(NCHN,2)=21
21255             ISIG(NCHN,3)=1
21256             SIGH(NCHN)=FACQQ
21257           ENDIF
21258  
21259         ELSEIF(ISUB.EQ.85) THEN
21260 C...gamma + gamma -> F + Fbar (heavy fermion, quark or lepton)
21261           SQMA=0.5D0*(SQM3+SQM4)-0.25D0*(SQM3-SQM4)**2/SH
21262           FMTU=SQMA/(SQMA-TH)+SQMA/(SQMA-UH)
21263           FACFF=COMFAC*AEM**2*(KCHG(IABS(MINT(56)),1)/3D0)**4*2D0*
21264      &    ((SQMA-TH)/(SQMA-UH)+(SQMA-UH)/(SQMA-TH)+4D0*FMTU*(1D0-FMTU))
21265           IF(IABS(MINT(56)).LT.10) FACFF=3D0*FACFF
21266           IF(IABS(MINT(56)).LT.10.AND.MSTP(35).GE.1)
21267      &    FACFF=FACFF*PYHFTH(SH,SQMA,1D0)
21268           WID2=1D0
21269           IF(MINT(56).EQ.6) WID2=WIDS(6,1)
21270           IF(MINT(56).EQ.7.OR.MINT(56).EQ.8) WID2=WIDS(MINT(56),1)
21271           IF(MINT(56).EQ.17) WID2=WIDS(17,1)
21272           FACFF=FACFF*WID2
21273           IF(KFAC(1,22)*KFAC(2,22).NE.0) THEN
21274             NCHN=NCHN+1
21275             ISIG(NCHN,1)=22
21276             ISIG(NCHN,2)=22
21277             ISIG(NCHN,3)=1
21278             SIGH(NCHN)=FACFF
21279           ENDIF
21280  
21281         ELSEIF(ISUB.EQ.86) THEN
21282 C...g + g -> J/Psi + g
21283           FACQQG=COMFAC*AS**3*(5D0/9D0)*PARP(38)*SQRT(SQM3)*
21284      &    (((SH*(SH-SQM3))**2+(TH*(TH-SQM3))**2+(UH*(UH-SQM3))**2)/
21285      &    ((TH-SQM3)*(UH-SQM3))**2)/(SH-SQM3)**2
21286           IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21287             NCHN=NCHN+1
21288             ISIG(NCHN,1)=21
21289             ISIG(NCHN,2)=21
21290             ISIG(NCHN,3)=1
21291             SIGH(NCHN)=FACQQG
21292           ENDIF
21293  
21294         ELSEIF(ISUB.EQ.87) THEN
21295 C...g + g -> chi_0c + g
21296           PGTW=(SH*TH+TH*UH+UH*SH)/SH2
21297           QGTW=(SH*TH*UH)/SH**3
21298           RGTW=SQM3/SH
21299           FACQQG=COMFAC*AS**3*4D0*(PARP(39)/SQRT(SQM3))*(1D0/SH)*
21300      &    (9D0*RGTW**2*PGTW**4*(RGTW**4-2D0*RGTW**2*PGTW+PGTW**2)-
21301      &    6D0*RGTW*PGTW**3*QGTW*(2D0*RGTW**4-5D0*RGTW**2*PGTW+PGTW**2)-
21302      &    PGTW**2*QGTW**2*(RGTW**4+2D0*RGTW**2*PGTW-PGTW**2)+
21303      &    2D0*RGTW*PGTW*QGTW**3*(RGTW**2-PGTW)+6D0*RGTW**2*QGTW**4)/
21304      &    (QGTW*(QGTW-RGTW*PGTW)**4)
21305           IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21306             NCHN=NCHN+1
21307             ISIG(NCHN,1)=21
21308             ISIG(NCHN,2)=21
21309             ISIG(NCHN,3)=1
21310             SIGH(NCHN)=FACQQG
21311           ENDIF
21312  
21313         ELSEIF(ISUB.EQ.88) THEN
21314 C...g + g -> chi_1c + g
21315           PGTW=(SH*TH+TH*UH+UH*SH)/SH2
21316           QGTW=(SH*TH*UH)/SH**3
21317           RGTW=SQM3/SH
21318           FACQQG=COMFAC*AS**3*12D0*(PARP(39)/SQRT(SQM3))*(1D0/SH)*
21319      &    PGTW**2*(RGTW*PGTW**2*(RGTW**2-4D0*PGTW)+2D0*QGTW*(-RGTW**4+
21320      &    5D0*RGTW**2*PGTW+PGTW**2)-15D0*RGTW*QGTW**2)/
21321      &    (QGTW-RGTW*PGTW)**4
21322           IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21323             NCHN=NCHN+1
21324             ISIG(NCHN,1)=21
21325             ISIG(NCHN,2)=21
21326             ISIG(NCHN,3)=1
21327             SIGH(NCHN)=FACQQG
21328           ENDIF
21329  
21330         ELSEIF(ISUB.EQ.89) THEN
21331 C...g + g -> chi_2c + g
21332           PGTW=(SH*TH+TH*UH+UH*SH)/SH2
21333           QGTW=(SH*TH*UH)/SH**3
21334           RGTW=SQM3/SH
21335           FACQQG=COMFAC*AS**3*4D0*(PARP(39)/SQRT(SQM3))*(1D0/SH)*
21336      &    (12D0*RGTW**2*PGTW**4*(RGTW**4-2D0*RGTW**2*PGTW+PGTW**2)-
21337      &    3D0*RGTW*PGTW**3*QGTW*(8D0*RGTW**4-RGTW**2*PGTW+4D0*PGTW**2)+
21338      &    2D0*PGTW**2*QGTW**2*(-7D0*RGTW**4+43D0*RGTW**2*PGTW+PGTW**2)+
21339      &    RGTW*PGTW*QGTW**3*(16D0*RGTW**2-61D0*PGTW)+12D0*RGTW**2*
21340      &    QGTW**4)/(QGTW*(QGTW-RGTW*PGTW)**4)
21341           IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21342             NCHN=NCHN+1
21343             ISIG(NCHN,1)=21
21344             ISIG(NCHN,2)=21
21345             ISIG(NCHN,3)=1
21346             SIGH(NCHN)=FACQQG
21347           ENDIF
21348         ENDIF
21349  
21350 C...D: Mimimum bias processes
21351  
21352       ELSEIF(ISUB.LE.100) THEN
21353         IF(ISUB.EQ.91) THEN
21354 C...Elastic scattering
21355           SIGS=VINT(315)*VINT(316)*SIGT(0,0,1)
21356  
21357         ELSEIF(ISUB.EQ.92) THEN
21358 C...Single diffractive scattering (first side, i.e. XB)
21359           SIGS=VINT(315)*VINT(316)*SIGT(0,0,2)
21360  
21361         ELSEIF(ISUB.EQ.93) THEN
21362 C...Single diffractive scattering (second side, i.e. AX)
21363           SIGS=VINT(315)*VINT(316)*SIGT(0,0,3)
21364  
21365         ELSEIF(ISUB.EQ.94) THEN
21366 C...Double diffractive scattering
21367           SIGS=VINT(315)*VINT(316)*SIGT(0,0,4)
21368  
21369         ELSEIF(ISUB.EQ.95) THEN
21370 C...Low-pT scattering
21371           SIGS=VINT(315)*VINT(316)*SIGT(0,0,5)
21372  
21373         ELSEIF(ISUB.EQ.96) THEN
21374 C...Multiple interactions: sum of QCD processes
21375           CALL PYWIDT(21,SH,WDTP,WDTE)
21376  
21377 C...q + q' -> q + q'
21378           FACQQ1=COMFAC*AS**2*4D0/9D0*(SH2+UH2)/TH2
21379           FACQQB=COMFAC*AS**2*4D0/9D0*((SH2+UH2)/TH2*FACA-
21380      &    MSTP(34)*2D0/3D0*UH2/(SH*TH))
21381           FACQQ2=COMFAC*AS**2*4D0/9D0*(SH2+TH2)/UH2
21382           FACQQI=-COMFAC*AS**2*4D0/9D0*MSTP(34)*2D0/3D0*SH2/(TH*UH)
21383           RATQQI=(FACQQ1+FACQQ2+FACQQI)/(FACQQ1+FACQQ2)
21384           DO 1040 I=-5,5
21385             IF(I.EQ.0) GOTO 1040
21386             DO 1030 J=-5,5
21387               IF(J.EQ.0) GOTO 1030
21388               NCHN=NCHN+1
21389               ISIG(NCHN,1)=I
21390               ISIG(NCHN,2)=J
21391               ISIG(NCHN,3)=111
21392               SIGH(NCHN)=FACQQ1
21393               IF(I.EQ.-J) SIGH(NCHN)=FACQQB
21394               IF(I.EQ.J) THEN
21395                 SIGH(NCHN)=0.5D0*FACQQ1*RATQQI
21396                 NCHN=NCHN+1
21397                 ISIG(NCHN,1)=I
21398                 ISIG(NCHN,2)=J
21399                 ISIG(NCHN,3)=112
21400                 SIGH(NCHN)=0.5D0*FACQQ2*RATQQI
21401               ENDIF
21402  1030       CONTINUE
21403  1040     CONTINUE
21404  
21405 C...q + qbar -> q' + qbar' or g + g
21406           FACQQB=COMFAC*AS**2*4D0/9D0*(TH2+UH2)/SH2*
21407      &    (WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))
21408           FACGG1=COMFAC*AS**2*32D0/27D0*(UH/TH-(2D0+MSTP(34)*1D0/4D0)*
21409      &    UH2/SH2)
21410           FACGG2=COMFAC*AS**2*32D0/27D0*(TH/UH-(2D0+MSTP(34)*1D0/4D0)*
21411      &    TH2/SH2)
21412           DO 1050 I=-5,5
21413             IF(I.EQ.0) GOTO 1050
21414             NCHN=NCHN+1
21415             ISIG(NCHN,1)=I
21416             ISIG(NCHN,2)=-I
21417             ISIG(NCHN,3)=121
21418             SIGH(NCHN)=FACQQB
21419             NCHN=NCHN+1
21420             ISIG(NCHN,1)=I
21421             ISIG(NCHN,2)=-I
21422             ISIG(NCHN,3)=131
21423             SIGH(NCHN)=0.5D0*FACGG1
21424             NCHN=NCHN+1
21425             ISIG(NCHN,1)=I
21426             ISIG(NCHN,2)=-I
21427             ISIG(NCHN,3)=132
21428             SIGH(NCHN)=0.5D0*FACGG2
21429  1050     CONTINUE
21430  
21431 C...q + g -> q + g
21432           FACQG1=COMFAC*AS**2*4D0/9D0*((2D0+MSTP(34)*1D0/4D0)*UH2/TH2-
21433      &    UH/SH)*FACA
21434           FACQG2=COMFAC*AS**2*4D0/9D0*((2D0+MSTP(34)*1D0/4D0)*SH2/TH2-
21435      &    SH/UH)
21436           DO 1070 I=-5,5
21437             IF(I.EQ.0) GOTO 1070
21438             DO 1060 ISDE=1,2
21439               NCHN=NCHN+1
21440               ISIG(NCHN,ISDE)=I
21441               ISIG(NCHN,3-ISDE)=21
21442               ISIG(NCHN,3)=281
21443               SIGH(NCHN)=FACQG1
21444               NCHN=NCHN+1
21445               ISIG(NCHN,ISDE)=I
21446               ISIG(NCHN,3-ISDE)=21
21447               ISIG(NCHN,3)=282
21448               SIGH(NCHN)=FACQG2
21449  1060       CONTINUE
21450  1070     CONTINUE
21451  
21452 C...g + g -> q + qbar or g + g
21453           FACQQ1=COMFAC*AS**2*1D0/6D0*(UH/TH-(2D0+MSTP(34)*1D0/4D0)*
21454      &    UH2/SH2)*(WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))*FACA
21455           FACQQ2=COMFAC*AS**2*1D0/6D0*(TH/UH-(2D0+MSTP(34)*1D0/4D0)*
21456      &    TH2/SH2)*(WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))*FACA
21457           FACGG1=COMFAC*AS**2*9D0/4D0*(SH2/TH2+2D0*SH/TH+3D0+
21458      &    2D0*TH/SH+TH2/SH2)*FACA
21459           FACGG2=COMFAC*AS**2*9D0/4D0*(UH2/SH2+2D0*UH/SH+3D0+
21460      &    2D0*SH/UH+SH2/UH2)*FACA
21461           FACGG3=COMFAC*AS**2*9D0/4D0*(TH2/UH2+2D0*TH/UH+3+
21462      &    2D0*UH/TH+UH2/TH2)
21463           NCHN=NCHN+1
21464           ISIG(NCHN,1)=21
21465           ISIG(NCHN,2)=21
21466           ISIG(NCHN,3)=531
21467           SIGH(NCHN)=FACQQ1
21468           NCHN=NCHN+1
21469           ISIG(NCHN,1)=21
21470           ISIG(NCHN,2)=21
21471           ISIG(NCHN,3)=532
21472           SIGH(NCHN)=FACQQ2
21473           NCHN=NCHN+1
21474           ISIG(NCHN,1)=21
21475           ISIG(NCHN,2)=21
21476           ISIG(NCHN,3)=681
21477           SIGH(NCHN)=0.5D0*FACGG1
21478           NCHN=NCHN+1
21479           ISIG(NCHN,1)=21
21480           ISIG(NCHN,2)=21
21481           ISIG(NCHN,3)=682
21482           SIGH(NCHN)=0.5D0*FACGG2
21483           NCHN=NCHN+1
21484           ISIG(NCHN,1)=21
21485           ISIG(NCHN,2)=21
21486           ISIG(NCHN,3)=683
21487           SIGH(NCHN)=0.5D0*FACGG3
21488  
21489         ELSEIF(ISUB.EQ.99) THEN
21490 C...f + gamma* -> f.
21491           IF(MINT(107).EQ.4) THEN
21492             Q2GA=VINT(307)
21493             P2GA=VINT(308)
21494             ISDE=2
21495           ELSE
21496             Q2GA=VINT(308)
21497             P2GA=VINT(307)
21498             ISDE=1
21499           ENDIF
21500           COMFAC=PARU(5)*4D0*PARU(1)**2*PARU(101)
21501           PM2RHO=PMAS(PYCOMP(113),1)**2
21502           IF(MSTP(19).EQ.0) THEN
21503             COMFAC=COMFAC/Q2GA
21504           ELSEIF(MSTP(19).EQ.1) THEN  
21505             COMFAC=COMFAC/(Q2GA+PM2RHO)
21506           ELSEIF(MSTP(19).EQ.2) THEN  
21507             COMFAC=COMFAC*Q2GA/(Q2GA+PM2RHO)**2
21508           ELSE 
21509             COMFAC=COMFAC*Q2GA/(Q2GA+PM2RHO)**2
21510             W2GA=VINT(2)
21511             IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) THEN
21512               RDRDS=4.1D-3*W2GA**2.167D0/((Q2GA+0.15D0*W2GA)**2*
21513      &        Q2GA**0.75D0)*(1D0+0.11D0*Q2GA*P2GA/(1D0+0.02D0*P2GA**2))
21514               XGA=Q2GA/(W2GA+VINT(307)+VINT(308))
21515             ELSE
21516               RDRDS=1.5D-4*W2GA**2.167D0/((Q2GA+0.041D0*W2GA)**2*
21517      &        Q2GA**0.57D0)
21518               XGA=Q2GA/(W2GA+Q2GA-PMAS(PYCOMP(MINT(10+ISDE)),1)**2)
21519             ENDIF
21520             COMFAC=COMFAC*EXP(-MAX(1D-10,RDRDS))
21521             IF(MSTP(19).EQ.4) COMFAC=COMFAC/MAX(1D-2,1D0-XGA)
21522           ENDIF
21523           DO 1075 I=MMINA,MMAXA
21524             IF(I.EQ.0.OR.KFAC(ISDE,I).EQ.0) GOTO 1075
21525             IF(IABS(I).LT.10.AND.IABS(I).GT.MSTP(58)) GOTO 1075
21526             EI=KCHG(IABS(I),1)/3D0
21527             NCHN=NCHN+1
21528             ISIG(NCHN,ISDE)=I
21529             ISIG(NCHN,3-ISDE)=22
21530             ISIG(NCHN,3)=1
21531             SIGH(NCHN)=COMFAC*EI**2
21532  1075     CONTINUE
21533         ENDIF
21534  
21535 C...E: 2 -> 1, loop diagrams
21536  
21537       ELSEIF(ISUB.LE.110) THEN
21538         IF(ISUB.EQ.101) THEN
21539 C...g + g -> gamma*/Z0
21540  
21541         ELSEIF(ISUB.EQ.102) THEN
21542 C...g + g -> h0 (or H0, or A0)
21543           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
21544           HS=SHR*WDTP(0)
21545           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
21546           FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
21547           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
21548      &    FACBW=0D0
21549           HI=SHR*WDTP(13)/32D0
21550           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1080
21551           NCHN=NCHN+1
21552           ISIG(NCHN,1)=21
21553           ISIG(NCHN,2)=21
21554           ISIG(NCHN,3)=1
21555           SIGH(NCHN)=HI*FACBW*HF
21556  1080     CONTINUE
21557  
21558         ELSEIF(ISUB.EQ.103) THEN
21559 C...gamma + gamma -> h0 (or H0, or A0)
21560           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
21561           HS=SHR*WDTP(0)
21562           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
21563           FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
21564           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
21565      &    FACBW=0D0
21566           HI=SHR*WDTP(14)*2D0
21567           IF(KFAC(1,22)*KFAC(2,22).EQ.0) GOTO 1090
21568           NCHN=NCHN+1
21569           ISIG(NCHN,1)=22
21570           ISIG(NCHN,2)=22
21571           ISIG(NCHN,3)=1
21572           SIGH(NCHN)=HI*FACBW*HF
21573  1090     CONTINUE
21574  
21575       ELSEIF(ISUB.EQ.104) THEN
21576 C...g + g -> chi_c0.
21577         KC=PYCOMP(10441)
21578         FACBW=COMFAC*12D0*AS**2*PARP(39)*PMAS(KC,2)/
21579      &  ((SH-PMAS(KC,1)**2)**2+(PMAS(KC,1)*PMAS(KC,2))**2)
21580         IF(ABS(SQRT(SH)-PMAS(KC,1)).GT.50D0*PMAS(KC,2)) FACBW=0D0
21581         IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21582           NCHN=NCHN+1
21583           ISIG(NCHN,1)=21
21584           ISIG(NCHN,2)=21
21585           ISIG(NCHN,3)=1
21586           SIGH(NCHN)=FACBW
21587         ENDIF
21588  
21589       ELSEIF(ISUB.EQ.105) THEN
21590 C...g + g -> chi_c2.
21591         KC=PYCOMP(445)
21592         FACBW=COMFAC*16D0*AS**2*PARP(39)*PMAS(KC,2)/
21593      &  ((SH-PMAS(KC,1)**2)**2+(PMAS(KC,1)*PMAS(KC,2))**2)
21594         IF(ABS(SQRT(SH)-PMAS(KC,1)).GT.50D0*PMAS(KC,2)) FACBW=0D0
21595         IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21596           NCHN=NCHN+1
21597           ISIG(NCHN,1)=21
21598           ISIG(NCHN,2)=21
21599           ISIG(NCHN,3)=1
21600           SIGH(NCHN)=FACBW
21601         ENDIF
21602  
21603 C...Continuation C: 2 -> 2, tree diagrams with masses.
21604  
21605       ELSEIF(ISUB.EQ.106) THEN
21606 C...g + g -> J/Psi + gamma.
21607         EQ=2D0/3D0
21608         FACQQG=COMFAC*AEM*EQ**2*AS**2*(4D0/3D0)*PARP(38)*SQRT(SQM3)*
21609      &  (((SH*(SH-SQM3))**2+(TH*(TH-SQM3))**2+(UH*(UH-SQM3))**2)/
21610      &  ((TH-SQM3)*(UH-SQM3))**2)/(SH-SQM3)**2
21611         IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21612           NCHN=NCHN+1
21613           ISIG(NCHN,1)=21
21614           ISIG(NCHN,2)=21
21615           ISIG(NCHN,3)=1
21616           SIGH(NCHN)=FACQQG
21617         ENDIF
21618  
21619       ELSEIF(ISUB.EQ.107) THEN
21620 C...g + gamma -> J/Psi + g.
21621         EQ=2D0/3D0
21622         FACQQG=COMFAC*AEM*EQ**2*AS**2*(32D0/3D0)*PARP(38)*SQRT(SQM3)*
21623      &  (((SH*(SH-SQM3))**2+(TH*(TH-SQM3))**2+(UH*(UH-SQM3))**2)/
21624      &  ((TH-SQM3)*(UH-SQM3))**2)/(SH-SQM3)**2
21625         IF(KFAC(1,21)*KFAC(2,22).NE.0) THEN
21626           NCHN=NCHN+1
21627           ISIG(NCHN,1)=21
21628           ISIG(NCHN,2)=22
21629           ISIG(NCHN,3)=1
21630           SIGH(NCHN)=FACQQG
21631         ENDIF
21632         IF(KFAC(1,22)*KFAC(2,21).NE.0) THEN
21633           NCHN=NCHN+1
21634           ISIG(NCHN,1)=22
21635           ISIG(NCHN,2)=21
21636           ISIG(NCHN,3)=1
21637           SIGH(NCHN)=FACQQG
21638         ENDIF
21639  
21640       ELSEIF(ISUB.EQ.108) THEN
21641 C...gamma + gamma -> J/Psi + gamma.
21642         EQ=2D0/3D0
21643         FACQQG=COMFAC*AEM**3*EQ**6*384D0*PARP(38)*SQRT(SQM3)*
21644      &  (((SH*(SH-SQM3))**2+(TH*(TH-SQM3))**2+(UH*(UH-SQM3))**2)/
21645      &  ((TH-SQM3)*(UH-SQM3))**2)/(SH-SQM3)**2
21646         IF(KFAC(1,22)*KFAC(2,22).NE.0) THEN
21647           NCHN=NCHN+1
21648           ISIG(NCHN,1)=22
21649           ISIG(NCHN,2)=22
21650           ISIG(NCHN,3)=1
21651           SIGH(NCHN)=FACQQG
21652         ENDIF
21653  
21654 C...F: 2 -> 2, box diagrams
21655  
21656         ELSEIF(ISUB.EQ.110) THEN
21657 C...f + fbar -> gamma + h0
21658           THUH=MAX(TH*UH,SH*CKIN(3)**2)
21659           FACHG=COMFAC*(3D0*AEM**4)/(2D0*PARU(1)**2*XW*SQMW)*SH*THUH
21660           FACHG=FACHG*WIDS(KFHIGG,2)
21661 C...Calculate loop contributions for intermediate gamma* and Z0
21662           CIGTOT=CMPLX(0.,0.)
21663           CIZTOT=CMPLX(0.,0.)
21664           JMAX=3*MSTP(1)+1
21665           DO 1100 J=1,JMAX
21666             IF(J.LE.2*MSTP(1)) THEN
21667               FNC=1D0
21668               EJ=KCHG(J,1)/3D0
21669               AJ=SIGN(1D0,EJ+0.1D0)
21670               VJ=AJ-4D0*EJ*XWV
21671               BALP=SQM4/(2D0*PMAS(J,1))**2
21672               BBET=SH/(2D0*PMAS(J,1))**2
21673             ELSEIF(J.LE.3*MSTP(1)) THEN
21674               FNC=3D0
21675               JL=2*(J-2*MSTP(1))-1
21676               EJ=KCHG(10+JL,1)/3D0
21677               AJ=SIGN(1D0,EJ+0.1D0)
21678               VJ=AJ-4D0*EJ*XWV
21679               BALP=SQM4/(2D0*PMAS(10+JL,1))**2
21680               BBET=SH/(2D0*PMAS(10+JL,1))**2
21681             ELSE
21682               BALP=SQM4/(2D0*PMAS(24,1))**2
21683               BBET=SH/(2D0*PMAS(24,1))**2
21684             ENDIF
21685             BABI=1D0/(BALP-BBET)
21686             IF(BALP.LT.1D0) THEN
21687               F0ALP=CMPLX(SNGL(ASIN(SQRT(BALP))),0.)
21688               F1ALP=F0ALP**2
21689             ELSE
21690               F0ALP=CMPLX(SNGL(LOG(SQRT(BALP)+SQRT(BALP-1D0))),
21691      &        -SNGL(0.5D0*PARU(1)))
21692               F1ALP=-F0ALP**2
21693             ENDIF
21694             F2ALP=SNGL(SQRT(ABS(BALP-1D0)/BALP))*F0ALP
21695             IF(BBET.LT.1D0) THEN
21696               F0BET=CMPLX(SNGL(ASIN(SQRT(BBET))),0.)
21697               F1BET=F0BET**2
21698             ELSE
21699               F0BET=CMPLX(SNGL(LOG(SQRT(BBET)+SQRT(BBET-1D0))),
21700      &        -SNGL(0.5D0*PARU(1)))
21701               F1BET=-F0BET**2
21702             ENDIF
21703             F2BET=SNGL(SQRT(ABS(BBET-1D0)/BBET))*F0BET
21704             IF(J.LE.3*MSTP(1)) THEN
21705               FIF=SNGL(0.5D0*BABI)+SNGL(BABI**2)*(SNGL(0.5D0*(1D0-BALP+
21706      &        BBET))*(F1BET-F1ALP)+SNGL(BBET)*(F2BET-F2ALP))
21707               CIGTOT=CIGTOT+SNGL(FNC*EJ**2)*FIF
21708               CIZTOT=CIZTOT+SNGL(FNC*EJ*VJ)*FIF
21709             ELSE
21710               TXW=XW/XW1
21711               CIGTOT=CIGTOT-0.5*(SNGL(BABI*(1.5D0+BALP))+SNGL(BABI**2)*
21712      &        (SNGL(1.5D0-3D0*BALP+4D0*BBET)*(F1BET-F1ALP)+
21713      &        SNGL(BBET*(2D0*BALP+3D0))*(F2BET-F2ALP)))
21714               CIZTOT=CIZTOT-SNGL(0.5D0*BABI*XW1)*(SNGL(5D0-TXW+2D0*BALP*
21715      &        (1D0-TXW))*(1.+SNGL(2D0*BABI*BBET)*(F2BET-F2ALP))+
21716      &        SNGL(BABI*(4D0*BBET*(3D0-TXW)-(2D0*BALP-1D0)*(5D0-TXW)))*
21717      &        (F1BET-F1ALP))
21718             ENDIF
21719  1100     CONTINUE
21720           CIGTOT=CIGTOT/SNGL(SH)
21721           CIZTOT=CIZTOT*SNGL(XWC)/CMPLX(SNGL(SH-SQMZ),SNGL(GMMZ))
21722 C...Loop over initial flavours
21723           DO 1110 I=MMINA,MMAXA
21724             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1110
21725             EI=KCHG(IABS(I),1)/3D0
21726             AI=SIGN(1D0,EI)
21727             VI=AI-4D0*EI*XWV
21728             FCOI=1D0
21729             IF(IABS(I).LE.10) FCOI=FACA/3D0
21730             NCHN=NCHN+1
21731             ISIG(NCHN,1)=I
21732             ISIG(NCHN,2)=-I
21733             ISIG(NCHN,3)=1
21734             SIGH(NCHN)=FACHG*FCOI*(ABS(SNGL(EI)*CIGTOT+SNGL(VI)*
21735      &      CIZTOT)**2+AI**2*ABS(CIZTOT)**2)
21736  1110     CONTINUE
21737  
21738         ENDIF
21739  
21740       ELSEIF(ISUB.LE.120) THEN
21741         IF(ISUB.EQ.111) THEN
21742 C...f + fbar -> g + h0 (q + qbar -> g + h0 only)
21743           A5STUR=0D0
21744           A5STUI=0D0
21745           DO 1120 I=1,2*MSTP(1)
21746             SQMQ=PMAS(I,1)**2
21747             EPSS=4D0*SQMQ/SH
21748             EPSH=4D0*SQMQ/SQMH
21749             CALL PYWAUX(1,EPSS,W1SR,W1SI)
21750             CALL PYWAUX(1,EPSH,W1HR,W1HI)
21751             CALL PYWAUX(2,EPSS,W2SR,W2SI)
21752             CALL PYWAUX(2,EPSH,W2HR,W2HI)
21753             A5STUR=A5STUR+EPSH*(1D0+SH/(TH+UH)*(W1SR-W1HR)+
21754      &      (0.25D0-SQMQ/(TH+UH))*(W2SR-W2HR))
21755             A5STUI=A5STUI+EPSH*(SH/(TH+UH)*(W1SI-W1HI)+
21756      &      (0.25D0-SQMQ/(TH+UH))*(W2SI-W2HI))
21757  1120     CONTINUE
21758           FACGH=COMFAC*FACA/(144D0*PARU(1)**2)*AEM/XW*AS**3*SQMH/SQMW*
21759      &    SQMH/SH*(UH**2+TH**2)/(UH+TH)**2*(A5STUR**2+A5STUI**2)
21760           FACGH=FACGH*WIDS(25,2)
21761           DO 1130 I=MMINA,MMAXA
21762             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
21763      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1130
21764             NCHN=NCHN+1
21765             ISIG(NCHN,1)=I
21766             ISIG(NCHN,2)=-I
21767             ISIG(NCHN,3)=1
21768             SIGH(NCHN)=FACGH
21769  1130     CONTINUE
21770  
21771         ELSEIF(ISUB.EQ.112) THEN
21772 C...f + g -> f + h0 (q + g -> q + h0 only)
21773           A5TSUR=0D0
21774           A5TSUI=0D0
21775           DO 1140 I=1,2*MSTP(1)
21776             SQMQ=PMAS(I,1)**2
21777             EPST=4D0*SQMQ/TH
21778             EPSH=4D0*SQMQ/SQMH
21779             CALL PYWAUX(1,EPST,W1TR,W1TI)
21780             CALL PYWAUX(1,EPSH,W1HR,W1HI)
21781             CALL PYWAUX(2,EPST,W2TR,W2TI)
21782             CALL PYWAUX(2,EPSH,W2HR,W2HI)
21783             A5TSUR=A5TSUR+EPSH*(1D0+TH/(SH+UH)*(W1TR-W1HR)+
21784      &      (0.25D0-SQMQ/(SH+UH))*(W2TR-W2HR))
21785             A5TSUI=A5TSUI+EPSH*(TH/(SH+UH)*(W1TI-W1HI)+
21786      &      (0.25D0-SQMQ/(SH+UH))*(W2TI-W2HI))
21787  1140     CONTINUE
21788           FACQH=COMFAC*FACA/(384D0*PARU(1)**2)*AEM/XW*AS**3*SQMH/SQMW*
21789      &    SQMH/(-TH)*(UH**2+SH**2)/(UH+SH)**2*(A5TSUR**2+A5TSUI**2)
21790           FACQH=FACQH*WIDS(25,2)
21791           DO 1160 I=MMINA,MMAXA
21792             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1160
21793             DO 1150 ISDE=1,2
21794               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1150
21795               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1150
21796               NCHN=NCHN+1
21797               ISIG(NCHN,ISDE)=I
21798               ISIG(NCHN,3-ISDE)=21
21799               ISIG(NCHN,3)=1
21800               SIGH(NCHN)=FACQH
21801  1150       CONTINUE
21802  1160     CONTINUE
21803  
21804         ELSEIF(ISUB.EQ.113) THEN
21805 C...g + g -> g + h0
21806           A2STUR=0D0
21807           A2STUI=0D0
21808           A2USTR=0D0
21809           A2USTI=0D0
21810           A2TUSR=0D0
21811           A2TUSI=0D0
21812           A4STUR=0D0
21813           A4STUI=0D0
21814           DO 1170 I=1,2*MSTP(1)
21815             SQMQ=PMAS(I,1)**2
21816             EPSS=4D0*SQMQ/SH
21817             EPST=4D0*SQMQ/TH
21818             EPSU=4D0*SQMQ/UH
21819             EPSH=4D0*SQMQ/SQMH
21820             IF(EPSH.LT.1D-6) GOTO 1170
21821             CALL PYWAUX(1,EPSS,W1SR,W1SI)
21822             CALL PYWAUX(1,EPST,W1TR,W1TI)
21823             CALL PYWAUX(1,EPSU,W1UR,W1UI)
21824             CALL PYWAUX(1,EPSH,W1HR,W1HI)
21825             CALL PYWAUX(2,EPSS,W2SR,W2SI)
21826             CALL PYWAUX(2,EPST,W2TR,W2TI)
21827             CALL PYWAUX(2,EPSU,W2UR,W2UI)
21828             CALL PYWAUX(2,EPSH,W2HR,W2HI)
21829             CALL PYI3AU(EPSS,TH/UH,Y3STUR,Y3STUI)
21830             CALL PYI3AU(EPSS,UH/TH,Y3SUTR,Y3SUTI)
21831             CALL PYI3AU(EPST,SH/UH,Y3TSUR,Y3TSUI)
21832             CALL PYI3AU(EPST,UH/SH,Y3TUSR,Y3TUSI)
21833             CALL PYI3AU(EPSU,SH/TH,Y3USTR,Y3USTI)
21834             CALL PYI3AU(EPSU,TH/SH,Y3UTSR,Y3UTSI)
21835             CALL PYI3AU(EPSH,SQMH/SH*TH/UH,YHSTUR,YHSTUI)
21836             CALL PYI3AU(EPSH,SQMH/SH*UH/TH,YHSUTR,YHSUTI)
21837             CALL PYI3AU(EPSH,SQMH/TH*SH/UH,YHTSUR,YHTSUI)
21838             CALL PYI3AU(EPSH,SQMH/TH*UH/SH,YHTUSR,YHTUSI)
21839             CALL PYI3AU(EPSH,SQMH/UH*SH/TH,YHUSTR,YHUSTI)
21840             CALL PYI3AU(EPSH,SQMH/UH*TH/SH,YHUTSR,YHUTSI)
21841             W3STUR=YHSTUR-Y3STUR-Y3UTSR
21842             W3STUI=YHSTUI-Y3STUI-Y3UTSI
21843             W3SUTR=YHSUTR-Y3SUTR-Y3TUSR
21844             W3SUTI=YHSUTI-Y3SUTI-Y3TUSI
21845             W3TSUR=YHTSUR-Y3TSUR-Y3USTR
21846             W3TSUI=YHTSUI-Y3TSUI-Y3USTI
21847             W3TUSR=YHTUSR-Y3TUSR-Y3SUTR
21848             W3TUSI=YHTUSI-Y3TUSI-Y3SUTI
21849             W3USTR=YHUSTR-Y3USTR-Y3TSUR
21850             W3USTI=YHUSTI-Y3USTI-Y3TSUI
21851             W3UTSR=YHUTSR-Y3UTSR-Y3STUR
21852             W3UTSI=YHUTSI-Y3UTSI-Y3STUI
21853             B2STUR=SQMQ/SQMH**2*(SH*(UH-SH)/(SH+UH)+2D0*TH*UH*
21854      &      (UH+2D0*SH)/(SH+UH)**2*(W1TR-W1HR)+(SQMQ-SH/4D0)*
21855      &      (0.5D0*W2SR+0.5D0*W2HR-W2TR+W3STUR)+SH2*(2D0*SQMQ/
21856      &      (SH+UH)**2-0.5D0/(SH+UH))*(W2TR-W2HR)+0.5D0*TH*UH/SH*
21857      &      (W2HR-2D0*W2TR)+0.125D0*(SH-12D0*SQMQ-4D0*TH*UH/SH)*W3TSUR)
21858             B2STUI=SQMQ/SQMH**2*(2D0*TH*UH*(UH+2D0*SH)/(SH+UH)**2*
21859      &      (W1TI-W1HI)+(SQMQ-SH/4D0)*(0.5D0*W2SI+0.5D0*W2HI-W2TI+
21860      &      W3STUI)+SH2*(2D0*SQMQ/(SH+UH)**2-0.5D0/(SH+UH))*
21861      &      (W2TI-W2HI)+0.5D0*TH*UH/SH*(W2HI-2D0*W2TI)+0.125D0*
21862      &      (SH-12D0*SQMQ-4D0*TH*UH/SH)*W3TSUI)
21863             B2SUTR=SQMQ/SQMH**2*(SH*(TH-SH)/(SH+TH)+2D0*UH*TH*
21864      &      (TH+2D0*SH)/(SH+TH)**2*(W1UR-W1HR)+(SQMQ-SH/4D0)*
21865      &      (0.5D0*W2SR+0.5D0*W2HR-W2UR+W3SUTR)+SH2*(2D0*SQMQ/
21866      &      (SH+TH)**2-0.5D0/(SH+TH))*(W2UR-W2HR)+0.5D0*UH*TH/SH*
21867      &      (W2HR-2D0*W2UR)+0.125D0*(SH-12D0*SQMQ-4D0*UH*TH/SH)*W3USTR)
21868             B2SUTI=SQMQ/SQMH**2*(2D0*UH*TH*(TH+2D0*SH)/(SH+TH)**2*
21869      &      (W1UI-W1HI)+(SQMQ-SH/4D0)*(0.5D0*W2SI+0.5D0*W2HI-W2UI+
21870      &      W3SUTI)+SH2*(2D0*SQMQ/(SH+TH)**2-0.5D0/(SH+TH))*
21871      &      (W2UI-W2HI)+0.5D0*UH*TH/SH*(W2HI-2D0*W2UI)+0.125D0*
21872      &      (SH-12D0*SQMQ-4D0*UH*TH/SH)*W3USTI)
21873             B2TSUR=SQMQ/SQMH**2*(TH*(UH-TH)/(TH+UH)+2D0*SH*UH*
21874      &      (UH+2D0*TH)/(TH+UH)**2*(W1SR-W1HR)+(SQMQ-TH/4D0)*
21875      &      (0.5D0*W2TR+0.5D0*W2HR-W2SR+W3TSUR)+TH2*(2D0*SQMQ/
21876      &      (TH+UH)**2-0.5D0/(TH+UH))*(W2SR-W2HR)+0.5D0*SH*UH/TH*
21877      &      (W2HR-2D0*W2SR)+0.125D0*(TH-12D0*SQMQ-4D0*SH*UH/TH)*W3STUR)
21878             B2TSUI=SQMQ/SQMH**2*(2D0*SH*UH*(UH+2D0*TH)/(TH+UH)**2*
21879      &      (W1SI-W1HI)+(SQMQ-TH/4D0)*(0.5D0*W2TI+0.5D0*W2HI-W2SI+
21880      &      W3TSUI)+TH2*(2D0*SQMQ/(TH+UH)**2-0.5D0/(TH+UH))*
21881      &      (W2SI-W2HI)+0.5D0*SH*UH/TH*(W2HI-2D0*W2SI)+0.125D0*
21882      &      (TH-12D0*SQMQ-4D0*SH*UH/TH)*W3STUI)
21883             B2TUSR=SQMQ/SQMH**2*(TH*(SH-TH)/(TH+SH)+2D0*UH*SH*
21884      &      (SH+2D0*TH)/(TH+SH)**2*(W1UR-W1HR)+(SQMQ-TH/4D0)*
21885      &      (0.5D0*W2TR+0.5D0*W2HR-W2UR+W3TUSR)+TH2*(2D0*SQMQ/
21886      &      (TH+SH)**2-0.5D0/(TH+SH))*(W2UR-W2HR)+0.5D0*UH*SH/TH*
21887      &      (W2HR-2D0*W2UR)+0.125D0*(TH-12D0*SQMQ-4D0*UH*SH/TH)*W3UTSR)
21888             B2TUSI=SQMQ/SQMH**2*(2D0*UH*SH*(SH+2D0*TH)/(TH+SH)**2*
21889      &      (W1UI-W1HI)+(SQMQ-TH/4D0)*(0.5D0*W2TI+0.5D0*W2HI-W2UI+
21890      &      W3TUSI)+TH2*(2D0*SQMQ/(TH+SH)**2-0.5D0/(TH+SH))*
21891      &      (W2UI-W2HI)+0.5D0*UH*SH/TH*(W2HI-2D0*W2UI)+0.125D0*
21892      &      (TH-12D0*SQMQ-4D0*UH*SH/TH)*W3UTSI)
21893             B2USTR=SQMQ/SQMH**2*(UH*(TH-UH)/(UH+TH)+2D0*SH*TH*
21894      &      (TH+2D0*UH)/(UH+TH)**2*(W1SR-W1HR)+(SQMQ-UH/4D0)*
21895      &      (0.5D0*W2UR+0.5D0*W2HR-W2SR+W3USTR)+UH2*(2D0*SQMQ/
21896      &      (UH+TH)**2-0.5D0/(UH+TH))*(W2SR-W2HR)+0.5D0*SH*TH/UH*
21897      &      (W2HR-2D0*W2SR)+0.125D0*(UH-12D0*SQMQ-4D0*SH*TH/UH)*W3SUTR)
21898             B2USTI=SQMQ/SQMH**2*(2D0*SH*TH*(TH+2D0*UH)/(UH+TH)**2*
21899      &      (W1SI-W1HI)+(SQMQ-UH/4D0)*(0.5D0*W2UI+0.5D0*W2HI-W2SI+
21900      &      W3USTI)+UH2*(2D0*SQMQ/(UH+TH)**2-0.5D0/(UH+TH))*
21901      &      (W2SI-W2HI)+0.5D0*SH*TH/UH*(W2HI-2D0*W2SI)+0.125D0*
21902      &      (UH-12D0*SQMQ-4D0*SH*TH/UH)*W3SUTI)
21903             B2UTSR=SQMQ/SQMH**2*(UH*(SH-UH)/(UH+SH)+2D0*TH*SH*
21904      &      (SH+2D0*UH)/(UH+SH)**2*(W1TR-W1HR)+(SQMQ-UH/4D0)*
21905      &      (0.5D0*W2UR+0.5D0*W2HR-W2TR+W3UTSR)+UH2*(2D0*SQMQ/
21906      &      (UH+SH)**2-0.5D0/(UH+SH))*(W2TR-W2HR)+0.5D0*TH*SH/UH*
21907      &      (W2HR-2D0*W2TR)+0.125D0*(UH-12D0*SQMQ-4D0*TH*SH/UH)*W3TUSR)
21908             B2UTSI=SQMQ/SQMH**2*(2D0*TH*SH*(SH+2D0*UH)/(UH+SH)**2*
21909      &      (W1TI-W1HI)+(SQMQ-UH/4D0)*(0.5D0*W2UI+0.5D0*W2HI-W2TI+
21910      &      W3UTSI)+UH2*(2D0*SQMQ/(UH+SH)**2-0.5D0/(UH+SH))*
21911      &      (W2TI-W2HI)+0.5D0*TH*SH/UH*(W2HI-2D0*W2TI)+0.125D0*
21912      &      (UH-12D0*SQMQ-4D0*TH*SH/UH)*W3TUSI)
21913             B4STUR=0.25D0*EPSH*(-2D0/3D0+0.25D0*(EPSH-1D0)*
21914      &      (W2SR-W2HR+W3STUR))
21915             B4STUI=0.25D0*EPSH*0.25D0*(EPSH-1D0)*(W2SI-W2HI+W3STUI)
21916             B4TUSR=0.25D0*EPSH*(-2D0/3D0+0.25D0*(EPSH-1D0)*
21917      &      (W2TR-W2HR+W3TUSR))
21918             B4TUSI=0.25D0*EPSH*0.25D0*(EPSH-1D0)*(W2TI-W2HI+W3TUSI)
21919             B4USTR=0.25D0*EPSH*(-2D0/3D0+0.25D0*(EPSH-1D0)*
21920      &      (W2UR-W2HR+W3USTR))
21921             B4USTI=0.25D0*EPSH*0.25D0*(EPSH-1D0)*(W2UI-W2HI+W3USTI)
21922             A2STUR=A2STUR+B2STUR+B2SUTR
21923             A2STUI=A2STUI+B2STUI+B2SUTI
21924             A2USTR=A2USTR+B2USTR+B2UTSR
21925             A2USTI=A2USTI+B2USTI+B2UTSI
21926             A2TUSR=A2TUSR+B2TUSR+B2TSUR
21927             A2TUSI=A2TUSI+B2TUSI+B2TSUI
21928             A4STUR=A4STUR+B4STUR+B4USTR+B4TUSR
21929             A4STUI=A4STUI+B4STUI+B4USTI+B4TUSI
21930  1170     CONTINUE
21931           FACGH=COMFAC*FACA*3D0/(128D0*PARU(1)**2)*AEM/XW*AS**3*
21932      &    SQMH/SQMW*SQMH**3/(SH*TH*UH)*(A2STUR**2+A2STUI**2+A2USTR**2+
21933      &    A2USTI**2+A2TUSR**2+A2TUSI**2+A4STUR**2+A4STUI**2)
21934           FACGH=FACGH*WIDS(25,2)
21935           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1180
21936           NCHN=NCHN+1
21937           ISIG(NCHN,1)=21
21938           ISIG(NCHN,2)=21
21939           ISIG(NCHN,3)=1
21940           SIGH(NCHN)=FACGH
21941  1180     CONTINUE
21942  
21943         ELSEIF(ISUB.EQ.114.OR.ISUB.EQ.115) THEN
21944 C...g + g -> gamma + gamma or g + g -> g + gamma
21945           A0STUR=0D0
21946           A0STUI=0D0
21947           A0TSUR=0D0
21948           A0TSUI=0D0
21949           A0UTSR=0D0
21950           A0UTSI=0D0
21951           A1STUR=0D0
21952           A1STUI=0D0
21953           A2STUR=0D0
21954           A2STUI=0D0
21955           ALST=LOG(-SH/TH)
21956           ALSU=LOG(-SH/UH)
21957           ALTU=LOG(TH/UH)
21958           IMAX=2*MSTP(1)
21959           IF(MSTP(38).GE.1.AND.MSTP(38).LE.8) IMAX=MSTP(38)
21960           DO 1190 I=1,IMAX
21961             EI=KCHG(IABS(I),1)/3D0
21962             EIWT=EI**2
21963             IF(ISUB.EQ.115) EIWT=EI
21964             SQMQ=PMAS(I,1)**2
21965             EPSS=4D0*SQMQ/SH
21966             EPST=4D0*SQMQ/TH
21967             EPSU=4D0*SQMQ/UH
21968             IF((MSTP(38).GE.1.AND.MSTP(38).LE.8).OR.EPSS.LT.1D-4) THEN
21969               B0STUR=1D0+(TH-UH)/SH*ALTU+0.5D0*(TH2+UH2)/SH2*(ALTU**2+
21970      &        PARU(1)**2)
21971               B0STUI=0D0
21972               B0TSUR=1D0+(SH-UH)/TH*ALSU+0.5D0*(SH2+UH2)/TH2*ALSU**2
21973               B0TSUI=-PARU(1)*((SH-UH)/TH+(SH2+UH2)/TH2*ALSU)
21974               B0UTSR=1D0+(SH-TH)/UH*ALST+0.5D0*(SH2+TH2)/UH2*ALST**2
21975               B0UTSI=-PARU(1)*((SH-TH)/UH+(SH2+TH2)/UH2*ALST)
21976               B1STUR=-1D0
21977               B1STUI=0D0
21978               B2STUR=-1D0
21979               B2STUI=0D0
21980             ELSE
21981               CALL PYWAUX(1,EPSS,W1SR,W1SI)
21982               CALL PYWAUX(1,EPST,W1TR,W1TI)
21983               CALL PYWAUX(1,EPSU,W1UR,W1UI)
21984               CALL PYWAUX(2,EPSS,W2SR,W2SI)
21985               CALL PYWAUX(2,EPST,W2TR,W2TI)
21986               CALL PYWAUX(2,EPSU,W2UR,W2UI)
21987               CALL PYI3AU(EPSS,TH/UH,Y3STUR,Y3STUI)
21988               CALL PYI3AU(EPSS,UH/TH,Y3SUTR,Y3SUTI)
21989               CALL PYI3AU(EPST,SH/UH,Y3TSUR,Y3TSUI)
21990               CALL PYI3AU(EPST,UH/SH,Y3TUSR,Y3TUSI)
21991               CALL PYI3AU(EPSU,SH/TH,Y3USTR,Y3USTI)
21992               CALL PYI3AU(EPSU,TH/SH,Y3UTSR,Y3UTSI)
21993               B0STUR=1D0+(1D0+2D0*TH/SH)*W1TR+(1D0+2D0*UH/SH)*W1UR+
21994      &        0.5D0*((TH2+UH2)/SH2-EPSS)*(W2TR+W2UR)-
21995      &        0.25D0*EPST*(1D0-0.5D0*EPSS)*(Y3SUTR+Y3TUSR)-
21996      &        0.25D0*EPSU*(1D0-0.5D0*EPSS)*(Y3STUR+Y3UTSR)+
21997      &        0.25D0*(-2D0*(TH2+UH2)/SH2+4D0*EPSS+EPST+EPSU+
21998      &        0.5D0*EPST*EPSU)*(Y3TSUR+Y3USTR)
21999               B0STUI=(1D0+2D0*TH/SH)*W1TI+(1D0+2D0*UH/SH)*W1UI+
22000      &        0.5D0*((TH2+UH2)/SH2-EPSS)*(W2TI+W2UI)-
22001      &        0.25D0*EPST*(1D0-0.5D0*EPSS)*(Y3SUTI+Y3TUSI)-
22002      &        0.25D0*EPSU*(1D0-0.5D0*EPSS)*(Y3STUI+Y3UTSI)+
22003      &        0.25D0*(-2D0*(TH2+UH2)/SH2+4D0*EPSS+EPST+EPSU+
22004      &        0.5D0*EPST*EPSU)*(Y3TSUI+Y3USTI)
22005               B0TSUR=1D0+(1D0+2D0*SH/TH)*W1SR+(1D0+2D0*UH/TH)*W1UR+
22006      &        0.5D0*((SH2+UH2)/TH2-EPST)*(W2SR+W2UR)-
22007      &        0.25D0*EPSS*(1D0-0.5D0*EPST)*(Y3TUSR+Y3SUTR)-
22008      &        0.25D0*EPSU*(1D0-0.5D0*EPST)*(Y3TSUR+Y3USTR)+
22009      &        0.25D0*(-2D0*(SH2+UH2)/TH2+4D0*EPST+EPSS+EPSU+
22010      &        0.5D0*EPSS*EPSU)*(Y3STUR+Y3UTSR)
22011               B0TSUI=(1D0+2D0*SH/TH)*W1SI+(1D0+2D0*UH/TH)*W1UI+
22012      &        0.5D0*((SH2+UH2)/TH2-EPST)*(W2SI+W2UI)-
22013      &        0.25D0*EPSS*(1D0-0.5D0*EPST)*(Y3TUSI+Y3SUTI)-
22014      &        0.25D0*EPSU*(1D0-0.5D0*EPST)*(Y3TSUI+Y3USTI)+
22015      &        0.25D0*(-2D0*(SH2+UH2)/TH2+4D0*EPST+EPSS+EPSU+
22016      &        0.5D0*EPSS*EPSU)*(Y3STUI+Y3UTSI)
22017               B0UTSR=1D0+(1D0+2D0*TH/UH)*W1TR+(1D0+2D0*SH/UH)*W1SR+
22018      &        0.5D0*((TH2+SH2)/UH2-EPSU)*(W2TR+W2SR)-
22019      &        0.25D0*EPST*(1D0-0.5D0*EPSU)*(Y3USTR+Y3TSUR)-
22020      &        0.25D0*EPSS*(1D0-0.5D0*EPSU)*(Y3UTSR+Y3STUR)+
22021      &        0.25D0*(-2D0*(TH2+SH2)/UH2+4D0*EPSU+EPST+EPSS+
22022      &        0.5D0*EPST*EPSS)*(Y3TUSR+Y3SUTR)
22023               B0UTSI=(1D0+2D0*TH/UH)*W1TI+(1D0+2D0*SH/UH)*W1SI+
22024      &        0.5D0*((TH2+SH2)/UH2-EPSU)*(W2TI+W2SI)-
22025      &        0.25D0*EPST*(1D0-0.5D0*EPSU)*(Y3USTI+Y3TSUI)-
22026      &        0.25D0*EPSS*(1D0-0.5D0*EPSU)*(Y3UTSI+Y3STUI)+
22027      &        0.25D0*(-2D0*(TH2+SH2)/UH2+4D0*EPSU+EPST+EPSS+
22028      &        0.5D0*EPST*EPSS)*(Y3TUSI+Y3SUTI)
22029               B1STUR=-1D0-0.25D0*(EPSS+EPST+EPSU)*(W2SR+W2TR+W2UR)+
22030      &        0.25D0*(EPSU+0.5D0*EPSS*EPST)*(Y3SUTR+Y3TUSR)+
22031      &        0.25D0*(EPST+0.5D0*EPSS*EPSU)*(Y3STUR+Y3UTSR)+
22032      &        0.25D0*(EPSS+0.5D0*EPST*EPSU)*(Y3TSUR+Y3USTR)
22033               B1STUI=-0.25D0*(EPSS+EPST+EPSU)*(W2SI+W2TI+W2UI)+
22034      &        0.25D0*(EPSU+0.5D0*EPSS*EPST)*(Y3SUTI+Y3TUSI)+
22035      &        0.25D0*(EPST+0.5D0*EPSS*EPSU)*(Y3STUI+Y3UTSI)+
22036      &        0.25D0*(EPSS+0.5D0*EPST*EPSU)*(Y3TSUI+Y3USTI)
22037               B2STUR=-1D0+0.125D0*EPSS*EPST*(Y3SUTR+Y3TUSR)+
22038      &        0.125D0*EPSS*EPSU*(Y3STUR+Y3UTSR)+
22039      &        0.125D0*EPST*EPSU*(Y3TSUR+Y3USTR)
22040               B2STUI=0.125D0*EPSS*EPST*(Y3SUTI+Y3TUSI)+
22041      &        0.125D0*EPSS*EPSU*(Y3STUI+Y3UTSI)+
22042      &        0.125D0*EPST*EPSU*(Y3TSUI+Y3USTI)
22043             ENDIF
22044             A0STUR=A0STUR+EIWT*B0STUR
22045             A0STUI=A0STUI+EIWT*B0STUI
22046             A0TSUR=A0TSUR+EIWT*B0TSUR
22047             A0TSUI=A0TSUI+EIWT*B0TSUI
22048             A0UTSR=A0UTSR+EIWT*B0UTSR
22049             A0UTSI=A0UTSI+EIWT*B0UTSI
22050             A1STUR=A1STUR+EIWT*B1STUR
22051             A1STUI=A1STUI+EIWT*B1STUI
22052             A2STUR=A2STUR+EIWT*B2STUR
22053             A2STUI=A2STUI+EIWT*B2STUI
22054  1190     CONTINUE
22055           ASQSUM=A0STUR**2+A0STUI**2+A0TSUR**2+A0TSUI**2+A0UTSR**2+
22056      &    A0UTSI**2+4D0*A1STUR**2+4D0*A1STUI**2+A2STUR**2+A2STUI**2
22057           FACGG=COMFAC*FACA/(16D0*PARU(1)**2)*AS**2*AEM**2*ASQSUM
22058           FACGP=COMFAC*FACA*5D0/(192D0*PARU(1)**2)*AS**3*AEM*ASQSUM
22059           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1200
22060           NCHN=NCHN+1
22061           ISIG(NCHN,1)=21
22062           ISIG(NCHN,2)=21
22063           ISIG(NCHN,3)=1
22064           IF(ISUB.EQ.114) SIGH(NCHN)=0.5D0*FACGG
22065           IF(ISUB.EQ.115) SIGH(NCHN)=FACGP
22066  1200     CONTINUE
22067  
22068         ELSEIF(ISUB.EQ.116) THEN
22069 C...g + g -> gamma + Z0
22070  
22071         ELSEIF(ISUB.EQ.117) THEN
22072 C...g + g -> Z0 + Z0
22073  
22074         ELSEIF(ISUB.EQ.118) THEN
22075 C...g + g -> W+ + W-
22076  
22077         ENDIF
22078  
22079 C...G: 2 -> 3, tree diagrams
22080  
22081       ELSEIF(ISUB.LE.140) THEN
22082         IF(ISUB.EQ.121) THEN
22083 C...g + g -> Q + Qbar + h0
22084           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1210
22085           IA=KFPR(ISUBSV,2)
22086           PMF=PYMRUN(IA,SH)
22087           FACQQH=COMFAC*(4D0*PARU(1)*AEM/XW)*(4D0*PARU(1)*AS)**2*
22088      &    (0.5D0*PMF/PMAS(24,1))**2
22089           WID2=1D0
22090           IF(IA.EQ.6.OR.IA.EQ.7.OR.IA.EQ.8) WID2=WIDS(IA,1)
22091           FACQQH=FACQQH*WID2
22092           IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
22093             IKFI=1
22094             IF(IA.LE.10.AND.MOD(IA,2).EQ.0) IKFI=2
22095             IF(IA.GT.10) IKFI=3
22096             FACQQH=FACQQH*PARU(150+10*IHIGG+IKFI)**2
22097           ENDIF
22098           CALL PYQQBH(WTQQBH)
22099           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
22100           HS=SHR*WDTP(0)
22101           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22102           FACBW=(1D0/PARU(1))*VINT(2)*HF/((SH-SQMH)**2+HS**2)
22103           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
22104      &    FACBW=0D0
22105           NCHN=NCHN+1
22106           ISIG(NCHN,1)=21
22107           ISIG(NCHN,2)=21
22108           ISIG(NCHN,3)=1
22109           SIGH(NCHN)=FACQQH*WTQQBH*FACBW
22110  1210     CONTINUE
22111  
22112         ELSEIF(ISUB.EQ.122) THEN
22113 C...q + qbar -> Q + Qbar + h0
22114           IA=KFPR(ISUBSV,2)
22115           PMF=PYMRUN(IA,SH)
22116           FACQQH=COMFAC*(4D0*PARU(1)*AEM/XW)*(4D0*PARU(1)*AS)**2*
22117      &    (0.5D0*PMF/PMAS(24,1))**2
22118           WID2=1D0
22119           IF(IA.EQ.6.OR.IA.EQ.7.OR.IA.EQ.8) WID2=WIDS(IA,1)
22120           FACQQH=FACQQH*WID2
22121           IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
22122             IKFI=1
22123             IF(IA.LE.10.AND.MOD(IA,2).EQ.0) IKFI=2
22124             IF(IA.GT.10) IKFI=3
22125             FACQQH=FACQQH*PARU(150+10*IHIGG+IKFI)**2
22126           ENDIF
22127           CALL PYQQBH(WTQQBH)
22128           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
22129           HS=SHR*WDTP(0)
22130           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22131           FACBW=(1D0/PARU(1))*VINT(2)*HF/((SH-SQMH)**2+HS**2)
22132           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
22133      &    FACBW=0D0
22134           DO 1220 I=MMINA,MMAXA
22135             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
22136      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1220
22137             NCHN=NCHN+1
22138             ISIG(NCHN,1)=I
22139             ISIG(NCHN,2)=-I
22140             ISIG(NCHN,3)=1
22141             SIGH(NCHN)=FACQQH*WTQQBH*FACBW
22142  1220     CONTINUE
22143  
22144         ELSEIF(ISUB.EQ.123) THEN
22145 C...f + f' -> f + f' + h0 (or H0, or A0) (Z0 + Z0 -> h0 as
22146 C...inner process)
22147           FACNOR=COMFAC*(4D0*PARU(1)*AEM/(XW*XW1))**3*SQMZ/32D0
22148           IF(MSTP(4).GE.1.OR.IHIGG.GE.2) FACNOR=FACNOR*
22149      &    PARU(154+10*IHIGG)**2
22150           FACPRP=1D0/((VINT(215)-VINT(204)**2)*
22151      &    (VINT(216)-VINT(209)**2))**2
22152           FACZZ1=FACNOR*FACPRP*(0.5D0*TAUP*VINT(2))*VINT(219)
22153           FACZZ2=FACNOR*FACPRP*VINT(217)*VINT(218)
22154           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
22155           HS=SHR*WDTP(0)
22156           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22157           FACBW=(1D0/PARU(1))*VINT(2)*HF/((SH-SQMH)**2+HS**2)
22158           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
22159      &    FACBW=0D0
22160           DO 1240 I=MMIN1,MMAX1
22161             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1240
22162             IA=IABS(I)
22163             DO 1230 J=MMIN2,MMAX2
22164               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1230
22165               JA=IABS(J)
22166               EI=KCHG(IA,1)*ISIGN(1,I)/3D0
22167               AI=SIGN(1D0,KCHG(IA,1)+0.5D0)*ISIGN(1,I)
22168               VI=AI-4D0*EI*XWV
22169               EJ=KCHG(JA,1)*ISIGN(1,J)/3D0
22170               AJ=SIGN(1D0,KCHG(JA,1)+0.5D0)*ISIGN(1,J)
22171               VJ=AJ-4D0*EJ*XWV
22172               FACLR1=(VI**2+AI**2)*(VJ**2+AJ**2)+4D0*VI*AI*VJ*AJ
22173               FACLR2=(VI**2+AI**2)*(VJ**2+AJ**2)-4D0*VI*AI*VJ*AJ
22174               NCHN=NCHN+1
22175               ISIG(NCHN,1)=I
22176               ISIG(NCHN,2)=J
22177               ISIG(NCHN,3)=1
22178               SIGH(NCHN)=(FACLR1*FACZZ1+FACLR2*FACZZ2)*FACBW
22179  1230       CONTINUE
22180  1240     CONTINUE
22181  
22182         ELSEIF(ISUB.EQ.124) THEN
22183 C...f + f' -> f" + f"' + h0 (or H0, or A0) (W+ + W- -> h0 as
22184 C...inner process)
22185           FACNOR=COMFAC*(4D0*PARU(1)*AEM/XW)**3*SQMW
22186           IF(MSTP(4).GE.1.OR.IHIGG.GE.2) FACNOR=FACNOR*
22187      &    PARU(155+10*IHIGG)**2
22188           FACPRP=1D0/((VINT(215)-VINT(204)**2)*
22189      &    (VINT(216)-VINT(209)**2))**2
22190           FACWW=FACNOR*FACPRP*(0.5D0*TAUP*VINT(2))*VINT(219)
22191           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
22192           HS=SHR*WDTP(0)
22193           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22194           FACBW=(1D0/PARU(1))*VINT(2)*HF/((SH-SQMH)**2+HS**2)
22195           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
22196      &    FACBW=0D0
22197           DO 1260 I=MMIN1,MMAX1
22198             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1260
22199             EI=SIGN(1D0,DBLE(I))*KCHG(IABS(I),1)
22200             DO 1250 J=MMIN2,MMAX2
22201               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1250
22202               EJ=SIGN(1D0,DBLE(J))*KCHG(IABS(J),1)
22203               IF(EI*EJ.GT.0D0) GOTO 1250
22204               FACLR=VINT(180+I)*VINT(180+J)
22205               NCHN=NCHN+1
22206               ISIG(NCHN,1)=I
22207               ISIG(NCHN,2)=J
22208               ISIG(NCHN,3)=1
22209               SIGH(NCHN)=FACLR*FACWW*FACBW
22210  1250       CONTINUE
22211  1260     CONTINUE
22212  
22213         ELSEIF(ISUB.EQ.131.OR.ISUB.EQ.132) THEN
22214 C...f + gamma*_(T,L) -> f + g (q + gamma*_(T,L) -> q + g only)
22215           PH=0D0
22216           IF(MINT(15).EQ.22.AND.MINT(107).EQ.0.AND.VINT(3).LT.0D0) 
22217      &    PH=VINT(3)**2
22218           IF(MINT(16).EQ.22.AND.MINT(108).EQ.0.AND.VINT(4).LT.0D0) 
22219      &    PH=VINT(4)**2
22220           IF(ISUB.EQ.131) THEN
22221             FGQ=COMFAC*AS*AEM*8D0/3D0*SH**2/(SH+PH)**2*
22222      &      ((SH2+UH2-2D0*PH*TH)/(-SH*UH)-2D0*PH*TH/(SH+PH)**2)
22223           ELSE
22224             FGQ=COMFAC*AS*AEM*8D0/3D0*SH**2/(SH+PH)**4*(-4D0*PH*TH)
22225           ENDIF
22226           DO 1280 I=MMINA,MMAXA
22227             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1280
22228             EI=KCHG(IABS(I),1)/3D0
22229             FACGQ=FGQ*EI**2
22230             DO 1270 ISDE=1,2
22231               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 1270
22232               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 1270
22233               NCHN=NCHN+1
22234               ISIG(NCHN,ISDE)=I
22235               ISIG(NCHN,3-ISDE)=22
22236               ISIG(NCHN,3)=1
22237               SIGH(NCHN)=FACGQ
22238  1270       CONTINUE
22239  1280     CONTINUE
22240  
22241         ELSEIF(ISUB.EQ.133.OR.ISUB.EQ.134) THEN
22242 C...f + gamma*_(T,L) -> f + gamma
22243           PH=0D0
22244           IF(MINT(15).EQ.22.AND.MINT(107).EQ.0.AND.VINT(3).LT.0D0) 
22245      &    PH=VINT(3)**2
22246           IF(MINT(16).EQ.22.AND.MINT(108).EQ.0.AND.VINT(4).LT.0D0) 
22247      &    PH=VINT(4)**2
22248           IF(ISUB.EQ.133) THEN
22249             FGQ=COMFAC*AEM**2*2D0*SH**2/(SH+PH)**2*
22250      &      ((SH2+UH2-2D0*PH*TH)/(-SH*UH)-2D0*PH*TH/(SH+PH)**2)
22251           ELSE
22252             FGQ=COMFAC*AEM**2*2D0*SH**2/(SH+PH)**4*(-4D0*PH*TH)
22253           ENDIF
22254           DO 1300 I=MMINA,MMAXA
22255             IF(I.EQ.0) GOTO 1300
22256             EI=KCHG(IABS(I),1)/3D0
22257             FACGQ=FGQ*EI**4
22258             DO 1290 ISDE=1,2
22259               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 1290
22260               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 1290
22261               NCHN=NCHN+1
22262               ISIG(NCHN,ISDE)=I
22263               ISIG(NCHN,3-ISDE)=22
22264               ISIG(NCHN,3)=1
22265               SIGH(NCHN)=FACGQ
22266  1290       CONTINUE
22267  1300     CONTINUE
22268  
22269         ELSEIF(ISUB.EQ.135.OR.ISUB.EQ.136) THEN
22270 C...g + gamma*_(T,L) -> f + fbar (g + gamma*_(T,L) -> q + qbar only)
22271           PH=0D0
22272           IF(MINT(15).EQ.22.AND.MINT(107).EQ.0.AND.VINT(3).LT.0D0) 
22273      &    PH=VINT(3)**2
22274           IF(MINT(16).EQ.22.AND.MINT(108).EQ.0.AND.VINT(4).LT.0D0) 
22275      &    PH=VINT(4)**2
22276           CALL PYWIDT(21,SH,WDTP,WDTE)
22277           WDTESU=0D0
22278           DO 1310 I=1,MIN(8,MDCY(21,3))
22279             EF=KCHG(I,1)/3D0
22280             WDTESU=WDTESU+EF**2*(WDTE(I,1)+WDTE(I,2)+WDTE(I,3)+
22281      &      WDTE(I,4))
22282  1310     CONTINUE
22283           IF(ISUB.EQ.135) THEN
22284             FACQQ=COMFAC*AEM*AS*WDTESU*SH**2/(SH+PH)**2*
22285      &      ((TH2+UH2-2D0*PH*SH)/(TH*UH)+4D0*PH*SH/(SH+PH)**2)
22286           ELSE
22287             FACQQ=COMFAC*AEM*AS*WDTESU*SH**2/(SH+PH)**4*8D0*PH*SH
22288           ENDIF
22289           IF(KFAC(1,21)*KFAC(2,22).NE.0) THEN
22290             NCHN=NCHN+1
22291             ISIG(NCHN,1)=21
22292             ISIG(NCHN,2)=22
22293             ISIG(NCHN,3)=1
22294             SIGH(NCHN)=FACQQ
22295           ENDIF
22296           IF(KFAC(1,22)*KFAC(2,21).NE.0) THEN
22297             NCHN=NCHN+1
22298             ISIG(NCHN,1)=22
22299             ISIG(NCHN,2)=21
22300             ISIG(NCHN,3)=1
22301             SIGH(NCHN)=FACQQ
22302           ENDIF
22303  
22304         ELSEIF(ISUB.GE.137.AND.ISUB.LE.140) THEN
22305 C...gamma*_(T,L) + gamma*_(T,L) -> f + fbar
22306           PH1=0D0
22307           IF(VINT(3).LT.0D0) PH1=VINT(3)**2
22308           PH2=0D0
22309           IF(VINT(4).LT.0D0) PH2=VINT(4)**2
22310           CALL PYWIDT(22,SH,WDTP,WDTE)
22311           WDTESU=0D0
22312           DO 1320 I=1,MIN(12,MDCY(22,3))
22313             IF(I.LE.8) EF= KCHG(I,1)/3D0
22314             IF(I.GE.9) EF= KCHG(9+2*(I-8),1)/3D0
22315             WDTESU=WDTESU+EF**2*(WDTE(I,1)+WDTE(I,2)+WDTE(I,3)+
22316      &      WDTE(I,4))
22317  1320     CONTINUE
22318           DLAMB2=(TH+UH)**2-4D0*PH1*PH2
22319           IF(ISUB.EQ.137) THEN
22320             FPARAM=-SH*(TH+UH)/DLAMB2
22321             FACFF=COMFAC*AEM**2*WDTESU*2D0*SH2/(DLAMB2*TH2*UH2)*
22322      &      (TH*UH-PH1*PH2)*((TH2+UH2)*(1D0-2D0*FPARAM*(1D0-FPARAM))-
22323      &      2D0*PH1*PH2*FPARAM**2)
22324           ELSEIF(ISUB.EQ.138) THEN
22325             FACFF=COMFAC*AEM**2*WDTESU*4D0*SH2*SH/(DLAMB2**2*TH2*UH2)*
22326      &      PH2*(4D0*(TH*UH-PH1*PH2)*(TH*UH+PH1*SH*(TH-UH)**2/DLAMB2)+
22327      &      2D0*PH1**2*(TH-UH)**2)
22328           ELSEIF(ISUB.EQ.139) THEN
22329             FACFF=COMFAC*AEM**2*WDTESU*4D0*SH2*SH/(DLAMB2**2*TH2*UH2)*
22330      &      PH1*(4D0*(TH*UH-PH1*PH2)*(TH*UH+PH2*SH*(TH-UH)**2/DLAMB2)+
22331      &      2D0*PH2**2*(TH-UH)**2)
22332           ELSE
22333             FACFF=COMFAC*AEM**2*WDTESU*32D0*SH2**2/(DLAMB2**3*TH2*UH2)*
22334      &      PH1*PH2*(TH*UH-PH1*PH2)*(TH-UH)**2
22335           ENDIF
22336           IF(KFAC(1,22)*KFAC(2,22).NE.0) THEN
22337             NCHN=NCHN+1
22338             ISIG(NCHN,1)=22
22339             ISIG(NCHN,2)=22
22340             ISIG(NCHN,3)=1
22341             SIGH(NCHN)=FACFF
22342           ENDIF
22343  
22344         ENDIF
22345  
22346 C...H: 2 -> 1, tree diagrams, non-standard model processes
22347  
22348       ELSEIF(ISUB.LE.160) THEN
22349         IF(ISUB.EQ.141) THEN
22350 C...f + fbar -> gamma*/Z0/Z'0
22351           SQMZP=PMAS(32,1)**2
22352           MINT(61)=2
22353           CALL PYWIDT(32,SH,WDTP,WDTE)
22354           HP0=AEM/3D0*SH
22355           HP1=AEM/3D0*XWC*SH
22356           HP2=HP1
22357           HS=SHR*VINT(117)
22358           HSP=SHR*WDTP(0)
22359           FACZP=4D0*COMFAC*3D0
22360           DO 1330 I=MMINA,MMAXA
22361             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1330
22362             EI=KCHG(IABS(I),1)/3D0
22363             AI=SIGN(1D0,EI)
22364             VI=AI-4D0*EI*XWV
22365             IA=IABS(I)
22366             IF(IA.LT.10) THEN
22367               IF(IA.LE.2) THEN
22368                 VPI=PARU(123-2*MOD(IABS(I),2))
22369                 API=PARU(124-2*MOD(IABS(I),2))
22370               ELSEIF(IA.LE.4) THEN
22371                 VPI=PARJ(182-2*MOD(IABS(I),2))
22372                 API=PARJ(183-2*MOD(IABS(I),2))
22373               ELSE
22374                 VPI=PARJ(190-2*MOD(IABS(I),2))
22375                 API=PARJ(191-2*MOD(IABS(I),2))
22376               ENDIF
22377             ELSE
22378               IF(IA.LE.12) THEN
22379                 VPI=PARU(127-2*MOD(IABS(I),2))
22380                 API=PARU(128-2*MOD(IABS(I),2))
22381               ELSEIF(IA.LE.14) THEN
22382                 VPI=PARJ(186-2*MOD(IABS(I),2))
22383                 API=PARJ(187-2*MOD(IABS(I),2))
22384               ELSE
22385                 VPI=PARJ(194-2*MOD(IABS(I),2))
22386                 API=PARJ(195-2*MOD(IABS(I),2))
22387               ENDIF
22388             ENDIF
22389             HI0=HP0
22390             IF(IABS(I).LE.10) HI0=HI0*FACA/3D0
22391             HI1=HP1
22392             IF(IABS(I).LE.10) HI1=HI1*FACA/3D0
22393             HI2=HP2
22394             IF(IABS(I).LE.10) HI2=HI2*FACA/3D0
22395             NCHN=NCHN+1
22396             ISIG(NCHN,1)=I
22397             ISIG(NCHN,2)=-I
22398             ISIG(NCHN,3)=1
22399             SIGH(NCHN)=FACZP*(EI**2/SH2*HI0*HP0*VINT(111)+EI*VI*
22400      &      (1D0-SQMZ/SH)/((SH-SQMZ)**2+HS**2)*(HI0*HP1+HI1*HP0)*
22401      &      VINT(112)+EI*VPI*(1D0-SQMZP/SH)/((SH-SQMZP)**2+HSP**2)*
22402      &      (HI0*HP2+HI2*HP0)*VINT(113)+(VI**2+AI**2)/
22403      &      ((SH-SQMZ)**2+HS**2)*HI1*HP1*VINT(114)+(VI*VPI+AI*API)*
22404      &      ((SH-SQMZ)*(SH-SQMZP)+HS*HSP)/(((SH-SQMZ)**2+HS**2)*
22405      &      ((SH-SQMZP)**2+HSP**2))*(HI1*HP2+HI2*HP1)*VINT(115)+
22406      &      (VPI**2+API**2)/((SH-SQMZP)**2+HSP**2)*HI2*HP2*VINT(116))
22407  1330     CONTINUE
22408  
22409         ELSEIF(ISUB.EQ.142) THEN
22410 C...f + fbar' -> W'+/-
22411           SQMWP=PMAS(34,1)**2
22412           CALL PYWIDT(34,SH,WDTP,WDTE)
22413           HS=SHR*WDTP(0)
22414           FACBW=4D0*COMFAC/((SH-SQMWP)**2+HS**2)*3D0
22415           HP=AEM/(24D0*XW)*SH
22416           DO 1350 I=MMIN1,MMAX1
22417             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1350
22418             IA=IABS(I)
22419             DO 1340 J=MMIN2,MMAX2
22420               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1340
22421               JA=IABS(J)
22422               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1340
22423               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
22424      &        GOTO 1340
22425               KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
22426               HI=HP*(PARU(133)**2+PARU(134)**2)
22427               IF(IA.LE.10) HI=HP*(PARU(131)**2+PARU(132)**2)*
22428      &        VCKM((IA+1)/2,(JA+1)/2)*FACA/3D0
22429               NCHN=NCHN+1
22430               ISIG(NCHN,1)=I
22431               ISIG(NCHN,2)=J
22432               ISIG(NCHN,3)=1
22433               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))
22434               SIGH(NCHN)=HI*FACBW*HF
22435  1340       CONTINUE
22436  1350     CONTINUE
22437  
22438         ELSEIF(ISUB.EQ.143) THEN
22439 C...f + fbar' -> H+/-
22440           SQMHC=PMAS(37,1)**2
22441           CALL PYWIDT(37,SH,WDTP,WDTE)
22442           HS=SHR*WDTP(0)
22443           FACBW=4D0*COMFAC/((SH-SQMHC)**2+HS**2)
22444           HP=AEM/(8D0*XW)*SH/SQMW*SH
22445           DO 1370 I=MMIN1,MMAX1
22446             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1370
22447             IA=IABS(I)
22448             IM=(MOD(IA,10)+1)/2
22449             DO 1360 J=MMIN2,MMAX2
22450               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1360
22451               JA=IABS(J)
22452               JM=(MOD(JA,10)+1)/2
22453               IF(I*J.GT.0.OR.IA.EQ.JA.OR.IM.NE.JM) GOTO 1360
22454               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
22455      &        GOTO 1360
22456               IF(MOD(IA,2).EQ.0) THEN
22457                 IU=IA
22458                 IL=JA
22459               ELSE
22460                 IU=JA
22461                 IL=IA
22462               ENDIF
22463               RML=PYMRUN(IL,SH)**2/SH
22464               RMU=PYMRUN(IU,SH)**2/SH
22465               HI=HP*(RML*PARU(141)**2+RMU/PARU(141)**2)
22466               IF(IA.LE.10) HI=HI*FACA/3D0
22467               KCHHC=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
22468               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHHC)/2)+WDTE(0,4))
22469               NCHN=NCHN+1
22470               ISIG(NCHN,1)=I
22471               ISIG(NCHN,2)=J
22472               ISIG(NCHN,3)=1
22473               SIGH(NCHN)=HI*FACBW*HF
22474  1360       CONTINUE
22475  1370     CONTINUE
22476  
22477         ELSEIF(ISUB.EQ.144) THEN
22478 C...f + fbar' -> R
22479           SQMR=PMAS(40,1)**2
22480           CALL PYWIDT(40,SH,WDTP,WDTE)
22481           HS=SHR*WDTP(0)
22482           FACBW=4D0*COMFAC/((SH-SQMR)**2+HS**2)*3D0
22483           HP=AEM/(12D0*XW)*SH
22484           DO 1390 I=MMIN1,MMAX1
22485             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1390
22486             IA=IABS(I)
22487             DO 1380 J=MMIN2,MMAX2
22488               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1380
22489               JA=IABS(J)
22490               IF(I*J.GT.0.OR.IABS(IA-JA).NE.2) GOTO 1380
22491               HI=HP
22492               IF(IA.LE.10) HI=HI*FACA/3D0
22493               HF=SHR*(WDTE(0,1)+WDTE(0,(10-(I+J))/4)+WDTE(0,4))
22494               NCHN=NCHN+1
22495               ISIG(NCHN,1)=I
22496               ISIG(NCHN,2)=J
22497               ISIG(NCHN,3)=1
22498               SIGH(NCHN)=HI*FACBW*HF
22499  1380       CONTINUE
22500  1390     CONTINUE
22501  
22502         ELSEIF(ISUB.EQ.145) THEN
22503 C...q + l -> LQ (leptoquark)
22504           SQMLQ=PMAS(39,1)**2
22505           CALL PYWIDT(39,SH,WDTP,WDTE)
22506           HS=SHR*WDTP(0)
22507           FACBW=4D0*COMFAC/((SH-SQMLQ)**2+HS**2)
22508           IF(ABS(SHR-PMAS(39,1)).GT.PARP(48)*PMAS(39,2)) FACBW=0D0
22509           HP=AEM/4D0*SH
22510           KFLQQ=KFDP(MDCY(39,2),1)
22511           KFLQL=KFDP(MDCY(39,2),2)
22512           DO 1410 I=MMIN1,MMAX1
22513             IF(KFAC(1,I).EQ.0) GOTO 1410
22514             IA=IABS(I)
22515             IF(IA.NE.KFLQQ.AND.IA.NE.IABS(KFLQL)) GOTO 1410
22516             DO 1400 J=MMIN2,MMAX2
22517               IF(KFAC(2,J).EQ.0) GOTO 1400
22518               JA=IABS(J)
22519               IF(JA.NE.KFLQQ.AND.JA.NE.IABS(KFLQL)) GOTO 1400
22520               IF(I*J.NE.KFLQQ*KFLQL) GOTO 1400
22521               IF(JA.EQ.IA) GOTO 1400
22522               IF(IA.EQ.KFLQQ) KCHLQ=ISIGN(1,I)
22523               IF(JA.EQ.KFLQQ) KCHLQ=ISIGN(1,J)
22524               HI=HP*PARU(151)
22525               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHLQ)/2)+WDTE(0,4))
22526               NCHN=NCHN+1
22527               ISIG(NCHN,1)=I
22528               ISIG(NCHN,2)=J
22529               ISIG(NCHN,3)=1
22530               SIGH(NCHN)=HI*FACBW*HF
22531  1400       CONTINUE
22532  1410     CONTINUE
22533  
22534         ELSEIF(ISUB.EQ.146) THEN
22535 C...e + gamma* -> e* (excited lepton)
22536           KFQSTR=KFPR(ISUB,1)
22537           KCQSTR=PYCOMP(KFQSTR)
22538           KFQEXC=MOD(KFQSTR,KEXCIT)
22539           CALL PYWIDT(KFQSTR,SH,WDTP,WDTE)
22540           HS=SHR*WDTP(0)
22541           FACBW=COMFAC/((SH-PMAS(KCQSTR,1)**2)**2+HS**2)
22542           QF=-PARU(157)/2D0-PARU(158)/2D0
22543           FACBW=FACBW*AEM*QF**2*SH/PARU(155)**2
22544           IF(ABS(SHR-PMAS(KCQSTR,1)).GT.PARP(48)*PMAS(KCQSTR,2))
22545      &    FACBW=0D0
22546           HP=SH
22547           DO 1416 I=-KFQEXC,KFQEXC,2*KFQEXC
22548             DO 1413 ISDE=1,2
22549               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 1413
22550               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 1413
22551               HI=HP
22552               IF(I.GT.0) HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22553               IF(I.LT.0) HF=SHR*(WDTE(0,1)+WDTE(0,3)+WDTE(0,4))
22554               NCHN=NCHN+1
22555               ISIG(NCHN,ISDE)=I
22556               ISIG(NCHN,3-ISDE)=22
22557               ISIG(NCHN,3)=1
22558               SIGH(NCHN)=HI*FACBW*HF
22559  1413       CONTINUE
22560  1416     CONTINUE
22561  
22562         ELSEIF(ISUB.EQ.147.OR.ISUB.EQ.148) THEN
22563 C...d + g -> d* and u + g -> u* (excited quarks)
22564           KFQSTR=KFPR(ISUB,1)
22565           KCQSTR=PYCOMP(KFQSTR)
22566           KFQEXC=MOD(KFQSTR,KEXCIT)
22567           CALL PYWIDT(KFQSTR,SH,WDTP,WDTE)
22568           HS=SHR*WDTP(0)
22569           FACBW=COMFAC/((SH-PMAS(KCQSTR,1)**2)**2+HS**2)
22570           FACBW=FACBW*AS*PARU(159)**2*SH/(3D0*PARU(155)**2)
22571           IF(ABS(SHR-PMAS(KCQSTR,1)).GT.PARP(48)*PMAS(KCQSTR,2))
22572      &    FACBW=0D0
22573           HP=SH
22574           DO 1430 I=-KFQEXC,KFQEXC,2*KFQEXC
22575             DO 1420 ISDE=1,2
22576               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1420
22577               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1420
22578               HI=HP
22579               IF(I.GT.0) HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22580               IF(I.LT.0) HF=SHR*(WDTE(0,1)+WDTE(0,3)+WDTE(0,4))
22581               NCHN=NCHN+1
22582               ISIG(NCHN,ISDE)=I
22583               ISIG(NCHN,3-ISDE)=21
22584               ISIG(NCHN,3)=1
22585               SIGH(NCHN)=HI*FACBW*HF
22586  1420       CONTINUE
22587  1430     CONTINUE
22588  
22589         ELSEIF(ISUB.EQ.149) THEN
22590 C...g + g -> eta_techni
22591           CALL PYWIDT(38,SH,WDTP,WDTE)
22592           HS=SHR*WDTP(0)
22593           FACBW=COMFAC*0.5D0/((SH-PMAS(38,1)**2)**2+HS**2)
22594           IF(ABS(SHR-PMAS(38,1)).GT.PARP(48)*PMAS(38,2)) FACBW=0D0
22595           HP=SH
22596           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1440
22597           HI=HP*WDTP(3)
22598           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22599           NCHN=NCHN+1
22600           ISIG(NCHN,1)=21
22601           ISIG(NCHN,2)=21
22602           ISIG(NCHN,3)=1
22603           SIGH(NCHN)=HI*FACBW*HF
22604  1440     CONTINUE
22605  
22606         ENDIF
22607  
22608 C...I: 2 -> 2, tree diagrams, non-standard model processes
22609  
22610       ELSEIF(ISUB.LE.200) THEN
22611         IF(ISUB.EQ.161) THEN
22612 C...f + g -> f' + H+/- (b + g -> t + H+/- only)
22613 C...(choice of only b and t to avoid kinematics problems)
22614           FHCQ=COMFAC*FACA*AS*AEM/XW*1D0/24
22615 C...H propagator: as simulated in PYOFSH and as desired
22616           SQMHC=PMAS(37,1)**2
22617           GMMHC=PMAS(37,1)*PMAS(37,2)
22618           HBW4=GMMHC/((SQM4-SQMHC)**2+GMMHC**2)
22619           CALL PYWIDT(37,SQM4,WDTP,WDTE)
22620           GMMHCC=SQRT(SQM4)*WDTP(0)
22621           HBW4C=GMMHCC/((SQM4-SQMHC)**2+GMMHCC**2)
22622           FHCQ=FHCQ*HBW4C/HBW4
22623           DO 1460 I=MMINA,MMAXA
22624             IA=IABS(I)
22625             IF(IA.NE.5) GOTO 1460
22626             SQML=PYMRUN(IA,SH)**2
22627             IUA=IA+MOD(IA,2)
22628             SQMQ=PYMRUN(IUA,SH)**2
22629             FACHCQ=FHCQ*(SQML*PARU(141)**2+SQMQ/PARU(141)**2)/SQMW*
22630      &      (SH/(SQMQ-UH)+2D0*SQMQ*(SQMHC-UH)/(SQMQ-UH)**2+(SQMQ-UH)/SH+
22631      &      2D0*SQMQ/(SQMQ-UH)+2D0*(SQMHC-UH)/(SQMQ-UH)*
22632      &      (SQMHC-SQMQ-SH)/SH)
22633             KCHHC=ISIGN(1,KCHG(IA,1)*ISIGN(1,I))
22634             DO 1450 ISDE=1,2
22635               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1450
22636               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,1).EQ.0) GOTO 1450
22637               NCHN=NCHN+1
22638               ISIG(NCHN,ISDE)=I
22639               ISIG(NCHN,3-ISDE)=21
22640               ISIG(NCHN,3)=1
22641               SIGH(NCHN)=FACHCQ*WIDS(37,(5-KCHHC)/2)
22642  1450       CONTINUE
22643  1460     CONTINUE
22644  
22645         ELSEIF(ISUB.EQ.162) THEN
22646 C...q + g -> LQ + lbar; LQ=leptoquark
22647           SQMLQ=PMAS(39,1)**2
22648           FACLQ=COMFAC*FACA*PARU(151)*(AS*AEM/6D0)*(-TH/SH)*
22649      &    (UH2+SQMLQ**2)/(UH-SQMLQ)**2
22650           KFLQQ=KFDP(MDCY(39,2),1)
22651           DO 1480 I=MMINA,MMAXA
22652             IF(IABS(I).NE.KFLQQ) GOTO 1480
22653             KCHLQ=ISIGN(1,I)
22654             DO 1470 ISDE=1,2
22655               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1470
22656               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1470
22657               NCHN=NCHN+1
22658               ISIG(NCHN,ISDE)=I
22659               ISIG(NCHN,3-ISDE)=21
22660               ISIG(NCHN,3)=1
22661               SIGH(NCHN)=FACLQ*WIDS(39,(5-KCHLQ)/2)
22662  1470       CONTINUE
22663  1480     CONTINUE
22664  
22665         ELSEIF(ISUB.EQ.163) THEN
22666 C...g + g -> LQ + LQbar; LQ=leptoquark
22667           SQMLQ=PMAS(39,1)**2
22668           FACLQ=COMFAC*FACA*WIDS(39,1)*(AS**2/2D0)*
22669      &    (7D0/48D0+3D0*(UH-TH)**2/(16D0*SH2))*(1D0+2D0*SQMLQ*TH/
22670      &    (TH-SQMLQ)**2+2D0*SQMLQ*UH/(UH-SQMLQ)**2+4D0*SQMLQ**2/
22671      &    ((TH-SQMLQ)*(UH-SQMLQ)))
22672           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1490
22673           NCHN=NCHN+1
22674           ISIG(NCHN,1)=21
22675           ISIG(NCHN,2)=21
22676 C...Since don't know proper colour flow, randomize between alternatives
22677           ISIG(NCHN,3)=INT(1.5D0+PYR(0))
22678           SIGH(NCHN)=FACLQ
22679  1490     CONTINUE
22680  
22681         ELSEIF(ISUB.EQ.164) THEN
22682 C...q + qbar -> LQ + LQbar; LQ=leptoquark
22683           SQMLQ=PMAS(39,1)**2
22684           FACLQA=COMFAC*WIDS(39,1)*(AS**2/9D0)*
22685      &    (SH*(SH-4D0*SQMLQ)-(UH-TH)**2)/SH2
22686           FACLQS=COMFAC*WIDS(39,1)*((PARU(151)**2*AEM**2/8D0)*
22687      &    (-SH*TH-(SQMLQ-TH)**2)/TH2+(PARU(151)*AEM*AS/18D0)*
22688      &    ((SQMLQ-TH)*(UH-TH)+SH*(SQMLQ+TH))/(SH*TH))
22689           KFLQQ=KFDP(MDCY(39,2),1)
22690           DO 1500 I=MMINA,MMAXA
22691             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
22692      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1500
22693             NCHN=NCHN+1
22694             ISIG(NCHN,1)=I
22695             ISIG(NCHN,2)=-I
22696             ISIG(NCHN,3)=1
22697             SIGH(NCHN)=FACLQA
22698             IF(IABS(I).EQ.KFLQQ) SIGH(NCHN)=FACLQA+FACLQS
22699  1500     CONTINUE
22700  
22701         ELSEIF(ISUB.EQ.165) THEN
22702 C...q + qbar -> l+ + l- (including contact term for compositeness)
22703           ZRATR=XWC*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
22704           ZRATI=XWC*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
22705           KFF=IABS(KFPR(ISUB,1))
22706           EF=KCHG(KFF,1)/3D0
22707           AF=SIGN(1D0,EF+0.1D0)
22708           VF=AF-4D0*EF*XWV
22709           VALF=VF+AF
22710           VARF=VF-AF
22711           FCOF=1D0
22712           IF(KFF.LE.10) FCOF=3D0
22713           WID2=1D0
22714           IF(KFF.EQ.6) WID2=WIDS(6,1)
22715           IF(KFF.EQ.7.OR.KFF.EQ.8) WID2=WIDS(KFF,1)
22716           IF(KFF.EQ.17.OR.KFF.EQ.18) WID2=WIDS(KFF,1)
22717           DO 1510 I=MMINA,MMAXA
22718             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1510
22719             EI=KCHG(IABS(I),1)/3D0
22720             AI=SIGN(1D0,EI+0.1D0)
22721             VI=AI-4D0*EI*XWV
22722             VALI=VI+AI
22723             VARI=VI-AI
22724             FCOI=1D0
22725             IF(IABS(I).LE.10) FCOI=FACA/3D0
22726             IF((MSTP(5).EQ.1.AND.IABS(I).LE.2).OR.MSTP(5).EQ.2) THEN
22727               FGZA=(EI*EF+VALI*VALF*ZRATR+PARU(156)*SH/
22728      &        (AEM*PARU(155)**2))**2+(VALI*VALF*ZRATI)**2+
22729      &        (EI*EF+VARI*VARF*ZRATR)**2+(VARI*VARF*ZRATI)**2
22730             ELSE
22731               FGZA=(EI*EF+VALI*VALF*ZRATR)**2+(VALI*VALF*ZRATI)**2+
22732      &        (EI*EF+VARI*VARF*ZRATR)**2+(VARI*VARF*ZRATI)**2
22733             ENDIF
22734             FGZB=(EI*EF+VALI*VARF*ZRATR)**2+(VALI*VARF*ZRATI)**2+
22735      &      (EI*EF+VARI*VALF*ZRATR)**2+(VARI*VALF*ZRATI)**2
22736             FGZAB=AEM**2*(FGZA*UH2/SH2+FGZB*TH2/SH2)
22737             IF((MSTP(5).EQ.3.AND.IABS(I).EQ.2).OR.(MSTP(5).EQ.4.AND.
22738      &      MOD(IABS(I),2).EQ.0)) FGZAB=FGZAB+SH2/(2D0*PARU(155)**4)
22739             NCHN=NCHN+1
22740             ISIG(NCHN,1)=I
22741             ISIG(NCHN,2)=-I
22742             ISIG(NCHN,3)=1
22743             SIGH(NCHN)=COMFAC*FCOI*FCOF*FGZAB*WID2
22744  1510     CONTINUE
22745  
22746         ELSEIF(ISUB.EQ.166) THEN
22747 C...q + q'bar -> l + nu_l (including contact term for compositeness)
22748           WFAC=(1D0/4D0)*(AEM/XW)**2*UH2/((SH-SQMW)**2+GMMW**2)
22749           WCIFAC=WFAC+SH2/(4D0*PARU(155)**4)
22750           KFF=IABS(KFPR(ISUB,1))
22751           FCOF=1D0
22752           IF(KFF.LE.10) FCOF=3D0
22753           DO 1530 I=MMIN1,MMAX1
22754             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1530
22755             IA=IABS(I)
22756             DO 1520 J=MMIN2,MMAX2
22757               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1520
22758               JA=IABS(J)
22759               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1520
22760               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
22761      &        GOTO 1520
22762               FCOI=1D0
22763               IF(IA.LE.10) FCOI=VCKM((IA+1)/2,(JA+1)/2)*FACA/3D0
22764               WID2=1D0
22765               IF((I.GT.0.AND.MOD(I,2).EQ.0).OR.(J.GT.0.AND.
22766      &        MOD(J,2).EQ.0)) THEN
22767                 IF(KFF.EQ.5) WID2=WIDS(6,2)
22768                 IF(KFF.EQ.7) WID2=WIDS(8,2)*WIDS(7,3)
22769                 IF(KFF.EQ.17) WID2=WIDS(18,2)*WIDS(17,3)
22770               ELSE
22771                 IF(KFF.EQ.5) WID2=WIDS(6,3)
22772                 IF(KFF.EQ.7) WID2=WIDS(8,3)*WIDS(7,2)
22773                 IF(KFF.EQ.17) WID2=WIDS(18,3)*WIDS(17,2)
22774               ENDIF
22775               NCHN=NCHN+1
22776               ISIG(NCHN,1)=I
22777               ISIG(NCHN,2)=J
22778               ISIG(NCHN,3)=1
22779               SIGH(NCHN)=COMFAC*FCOI*FCOF*WFAC*WID2
22780               IF((MSTP(5).EQ.3.AND.IA.LE.2.AND.JA.LE.2).OR.MSTP(5).EQ.4)
22781      &        SIGH(NCHN)=COMFAC*FCOI*FCOF*WCIFAC*WID2
22782  1520       CONTINUE
22783  1530     CONTINUE
22784  
22785         ELSEIF(ISUB.EQ.167.OR.ISUB.EQ.168) THEN
22786 C...q + q' -> q" + d* and q + q' -> q" + u* (excited quarks)
22787           KFQSTR=KFPR(ISUB,2)
22788           KCQSTR=PYCOMP(KFQSTR)
22789           KFQEXC=MOD(KFQSTR,KEXCIT)
22790           FACQSA=COMFAC*(SH/PARU(155)**2)**2*(1D0-SQM4/SH)
22791           FACQSB=COMFAC*0.25D0*(SH/PARU(155)**2)**2*(1D0-SQM4/SH)*
22792      &    (1D0+SQM4/SH)*(1D0+CTH)*(1D0+((SH-SQM4)/(SH+SQM4))*CTH)
22793 C...Propagators: as simulated in PYOFSH and as desired
22794           GMMQ=PMAS(KCQSTR,1)*PMAS(KCQSTR,2)
22795           HBW4=GMMQ/((SQM4-PMAS(KCQSTR,1)**2)**2+GMMQ**2)
22796           CALL PYWIDT(KFQSTR,SQM4,WDTP,WDTE)
22797           GMMQC=SQRT(SQM4)*WDTP(0)
22798           HBW4C=GMMQC/((SQM4-PMAS(KCQSTR,1)**2)**2+GMMQC**2)
22799           FACQSA=FACQSA*HBW4C/HBW4
22800           FACQSB=FACQSB*HBW4C/HBW4
22801           DO 1550 I=MMIN1,MMAX1
22802             IA=IABS(I)
22803             IF(I.EQ.0.OR.IA.GT.6.OR.KFAC(1,I).EQ.0) GOTO 1550
22804             DO 1540 J=MMIN2,MMAX2
22805               JA=IABS(J)
22806               IF(J.EQ.0.OR.JA.GT.6.OR.KFAC(2,J).EQ.0) GOTO 1540
22807               IF(IA.EQ.KFQEXC.AND.I.EQ.J) THEN
22808                 NCHN=NCHN+1
22809                 ISIG(NCHN,1)=I
22810                 ISIG(NCHN,2)=J
22811                 ISIG(NCHN,3)=1
22812                 SIGH(NCHN)=(4D0/3D0)*FACQSA
22813                 NCHN=NCHN+1
22814                 ISIG(NCHN,1)=I
22815                 ISIG(NCHN,2)=J
22816                 ISIG(NCHN,3)=2
22817                 SIGH(NCHN)=(4D0/3D0)*FACQSA
22818               ELSEIF((IA.EQ.KFQEXC.OR.JA.EQ.KFQEXC).AND.I*J.GT.0) THEN
22819                 NCHN=NCHN+1
22820                 ISIG(NCHN,1)=I
22821                 ISIG(NCHN,2)=J
22822                 ISIG(NCHN,3)=1
22823                 IF(JA.EQ.KFQEXC) ISIG(NCHN,3)=2
22824                 SIGH(NCHN)=FACQSA
22825               ELSEIF(IA.EQ.KFQEXC.AND.I.EQ.-J) THEN
22826                 NCHN=NCHN+1
22827                 ISIG(NCHN,1)=I
22828                 ISIG(NCHN,2)=J
22829                 ISIG(NCHN,3)=1
22830                 SIGH(NCHN)=(8D0/3D0)*FACQSB
22831                 NCHN=NCHN+1
22832                 ISIG(NCHN,1)=I
22833                 ISIG(NCHN,2)=J
22834                 ISIG(NCHN,3)=2
22835                 SIGH(NCHN)=(8D0/3D0)*FACQSB
22836               ELSEIF(I.EQ.-J) THEN
22837                 NCHN=NCHN+1
22838                 ISIG(NCHN,1)=I
22839                 ISIG(NCHN,2)=J
22840                 ISIG(NCHN,3)=1
22841                 SIGH(NCHN)=FACQSB
22842                 NCHN=NCHN+1
22843                 ISIG(NCHN,1)=I
22844                 ISIG(NCHN,2)=J
22845                 ISIG(NCHN,3)=2
22846                 SIGH(NCHN)=FACQSB
22847               ELSEIF(IA.EQ.KFQEXC.OR.JA.EQ.KFQEXC) THEN
22848                 NCHN=NCHN+1
22849                 ISIG(NCHN,1)=I
22850                 ISIG(NCHN,2)=J
22851                 ISIG(NCHN,3)=1
22852                 IF(JA.EQ.KFQEXC) ISIG(NCHN,3)=2
22853                 SIGH(NCHN)=FACQSB
22854               ENDIF
22855  1540       CONTINUE
22856  1550     CONTINUE
22857  
22858         ELSEIF(ISUB.EQ.169) THEN
22859 C...q + qbar -> e + e* (excited lepton)
22860           KFQSTR=KFPR(ISUB,2)
22861           KCQSTR=PYCOMP(KFQSTR)
22862           KFQEXC=MOD(KFQSTR,KEXCIT)
22863           FACQSB=(COMFAC/6D0)*(SH/PARU(155)**2)**2*(1D0-SQM4/SH)*
22864      &    (1D0+SQM4/SH)*(1D0+CTH)*(1D0+((SH-SQM4)/(SH+SQM4))*CTH)
22865 C...Propagators: as simulated in PYOFSH and as desired
22866           GMMQ=PMAS(KCQSTR,1)*PMAS(KCQSTR,2)
22867           HBW4=GMMQ/((SQM4-PMAS(KCQSTR,1)**2)**2+GMMQ**2)
22868           CALL PYWIDT(KFQSTR,SQM4,WDTP,WDTE)
22869           GMMQC=SQRT(SQM4)*WDTP(0)
22870           HBW4C=GMMQC/((SQM4-PMAS(KCQSTR,1)**2)**2+GMMQC**2)
22871           FACQSB=FACQSB*HBW4C/HBW4
22872           DO 1555 I=MMIN1,MMAX1
22873             IA=IABS(I)
22874             IF(I.EQ.0.OR.IA.GT.6.OR.KFAC(1,I).EQ.0) GOTO 1555
22875             J=-I
22876             JA=IABS(J)
22877             IF(J.EQ.0.OR.JA.GT.6.OR.KFAC(2,J).EQ.0) GOTO 1555
22878             NCHN=NCHN+1
22879             ISIG(NCHN,1)=I
22880             ISIG(NCHN,2)=J
22881             ISIG(NCHN,3)=1
22882             SIGH(NCHN)=FACQSB
22883             NCHN=NCHN+1
22884             ISIG(NCHN,1)=I
22885             ISIG(NCHN,2)=J
22886             ISIG(NCHN,3)=2
22887             SIGH(NCHN)=FACQSB
22888  1555     CONTINUE
22889  
22890         ELSEIF(ISUB.EQ.191) THEN
22891 C...q + qbar -> rho_tech0.
22892           SQMRHT=PMAS(54,1)**2
22893           CALL PYWIDT(54,SH,WDTP,WDTE)
22894           HS=SHR*WDTP(0)
22895           FACBW=12D0*COMFAC/((SH-SQMRHT)**2+HS**2)
22896           IF(ABS(SHR-PMAS(54,1)).GT.PARP(48)*PMAS(54,2)) FACBW=0D0
22897           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22898           ALPRHT=2.91D0*(3D0/PARP(144))
22899           HP=(1D0/6D0)*(AEM**2/ALPRHT)*(SQMRHT**2/SH)
22900           XWRHT=(1D0-2D0*XW)/(4D0*XW*(1D0-XW))
22901           BWZR=XWRHT*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
22902           BWZI=XWRHT*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
22903           DO 1560 I=MMINA,MMAXA
22904             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1560
22905             IA=IABS(I)
22906             EI=KCHG(IABS(I),1)/3D0
22907             AI=SIGN(1D0,EI+0.1D0)
22908             VI=AI-4D0*EI*XWV
22909             VALI=0.5D0*(VI+AI)
22910             VARI=0.5D0*(VI-AI)
22911             HI=HP*((EI+VALI*BWZR)**2+(VALI*BWZI)**2+
22912      &      (EI+VARI*BWZR)**2+(VARI*BWZI)**2)
22913             IF(IA.LE.10) HI=HI*FACA/3D0
22914             NCHN=NCHN+1
22915             ISIG(NCHN,1)=I
22916             ISIG(NCHN,2)=-I
22917             ISIG(NCHN,3)=1
22918             SIGH(NCHN)=HI*FACBW*HF
22919  1560     CONTINUE
22920  
22921         ELSEIF(ISUB.EQ.192) THEN
22922 C...q + qbar' -> rho_tech+/-.
22923           SQMRHT=PMAS(55,1)**2
22924           CALL PYWIDT(55,SH,WDTP,WDTE)
22925           HS=SHR*WDTP(0)
22926           FACBW=12D0*COMFAC/((SH-SQMRHT)**2+HS**2)
22927           IF(ABS(SHR-PMAS(55,1)).GT.PARP(48)*PMAS(55,2)) FACBW=0D0
22928           ALPRHT=2.91D0*(3D0/PARP(144))
22929           HP=(1D0/6D0)*(AEM**2/ALPRHT)*(SQMRHT**2/SH)*
22930      &    (0.25D0/XW**2)*SH**2/((SH-SQMW)**2+GMMW**2)
22931           DO 1580 I=MMIN1,MMAX1
22932             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1580
22933             IA=IABS(I)
22934             DO 1570 J=MMIN2,MMAX2
22935               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1570
22936               JA=IABS(J)
22937               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1570
22938               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
22939      &        GOTO 1570
22940               KCHR=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
22941               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHR)/2)+WDTE(0,4))
22942               HI=HP
22943               IF(IA.LE.10) HI=HI*VCKM((IA+1)/2,(JA+1)/2)*FACA/3D0
22944               NCHN=NCHN+1
22945               ISIG(NCHN,1)=I
22946               ISIG(NCHN,2)=J
22947               ISIG(NCHN,3)=1
22948               SIGH(NCHN)=HI*FACBW*HF
22949  1570       CONTINUE
22950  1580     CONTINUE
22951  
22952         ELSEIF(ISUB.EQ.193) THEN
22953 C...q + qbar -> omega_tech0.
22954           SQMOMT=PMAS(56,1)**2
22955           CALL PYWIDT(56,SH,WDTP,WDTE)
22956           HS=SHR*WDTP(0)
22957           FACBW=12D0*COMFAC/((SH-SQMOMT)**2+HS**2)
22958           IF(ABS(SHR-PMAS(56,1)).GT.PARP(48)*PMAS(56,2)) FACBW=0D0
22959           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22960           ALPRHT=2.91D0*(3D0/PARP(144))
22961           HP=(1D0/6D0)*(AEM**2/ALPRHT)*(SQMOMT**2/SH)*
22962      &    (2D0*PARP(143)-1D0)**2
22963           BWZR=(0.5D0/(1D0-XW))*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
22964           BWZI=(0.5D0/(1D0-XW))*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
22965           DO 1590 I=MMINA,MMAXA
22966             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1590
22967             IA=IABS(I)
22968             EI=KCHG(IABS(I),1)/3D0
22969             AI=SIGN(1D0,EI+0.1D0)
22970             VI=AI-4D0*EI*XWV
22971             VALI=0.5D0*(VI+AI)
22972             VARI=0.5D0*(VI-AI)
22973             HI=HP*((EI-VALI*BWZR)**2+(VALI*BWZI)**2+
22974      &      (EI-VARI*BWZR)**2+(VARI*BWZI)**2)
22975             IF(IA.LE.10) HI=HI*FACA/3D0
22976             NCHN=NCHN+1
22977             ISIG(NCHN,1)=I
22978             ISIG(NCHN,2)=-I
22979             ISIG(NCHN,3)=1
22980             SIGH(NCHN)=HI*FACBW*HF
22981  1590     CONTINUE
22982  
22983         ELSEIF(ISUB.EQ.194) THEN
22984 C...f + fbar -> f' + fbar' via s-channel rho_tech and omega_tech.
22985           KFA=KFPR(ISUBSV,1)
22986           ALPRHT=2.91D0*(3D0/PARP(144))
22987           HP=AEM**2*COMFAC
22988           TANW=SQRT(PARU(102)/(1D0-PARU(102)))
22989           CT2W=(1D0-2D0*PARU(102))/(2D0*PARU(102)/TANW)
22990
22991           QUPD=2D0*PARP(143)-1D0
22992           FAR=SQRT(AEM/ALPRHT)
22993           FAO=FAR*QUPD
22994           FZR=FAR*CT2W
22995           FZO=-FAO*TANW
22996           SFAR=FAR**2
22997           SFAO=FAO**2
22998           SFZR=FZR**2
22999           SFZO=FZO**2
23000           CALL PYWIDT(23,SH,WDTP,WDTE)
23001           SSMZ=CMPLX(1D0-PMAS(23,1)**2/SH,WDTP(0)/SHR)
23002           CALL PYWIDT(54,SH,WDTP,WDTE)
23003           SSMR=CMPLX(1D0-PMAS(54,1)**2/SH,WDTP(0)/SHR)
23004           CALL PYWIDT(56,SH,WDTP,WDTE)
23005           SSMO=CMPLX(1D0-PMAS(56,1)**2/SH,WDTP(0)/SHR)
23006           DETD=(FAR*FZO-FAO*FZR)**2+SSMZ*SSMR*SSMO-SFZR*SSMO-
23007      $    SFZO*SSMR-SFAR*SSMO*SSMZ-SFAO*SSMR*SSMZ
23008           DAA=(-Sfzr*SSMO - Sfzo*SSMR + SSMO*SSMR*SSMZ)/DETD/SH
23009           DZZ=(-Sfar*SSMO - Sfao*SSMR + SSMO*SSMR)/DETD/SH
23010           DAZ=(far*fzr*SSMO + fao*fzo*SSMR)/DETD/SH
23011
23012           XWRHT=1D0/(4D0*XW*(1D0-XW))
23013           KFF=IABS(KFPR(ISUB,1))
23014           EF=KCHG(KFF,1)/3D0
23015           AF=SIGN(1D0,EF+0.1D0)
23016           VF=AF-4D0*EF*XWV
23017           VALF=0.5D0*(VF+AF)
23018           VARF=0.5D0*(VF-AF)
23019           FCOF=1D0
23020           IF(KFF.LE.10) FCOF=3D0
23021
23022           WID2=1D0
23023           IF(KFF.GE.6.AND.KFF.LE.8) WID2=WIDS(KFF,1)
23024           IF(KFF.EQ.17.OR.KFF.EQ.18) WID2=WIDS(KFF,1)
23025           DZZ=DZZ*CMPLX(XWRHT,0D0)
23026           DAZ=DAZ*CMPLX(SQRT(XWRHT),0D0)
23027
23028           DO 1600 I=MMINA,MMAXA
23029             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1600
23030             EI=KCHG(IABS(I),1)/3D0
23031             AI=SIGN(1D0,EI+0.1D0)
23032             VI=AI-4D0*EI*XWV
23033             VALI=0.5D0*(VI+AI)
23034             VARI=0.5D0*(VI-AI)
23035             FCOI=FCOF
23036             IF(IABS(I).LE.10) FCOI=FCOI/3D0
23037             DIFLL=ABS(EI*EF*DAA+VALI*VALF*DZZ+DAZ*(EI*VALF+EF*VALI))**2
23038             DIFRR=ABS(EI*EF*DAA+VARI*VARF*DZZ+DAZ*(EI*VARF+EF*VARI))**2
23039             DIFLR=ABS(EI*EF*DAA+VALI*VARF*DZZ+DAZ*(EI*VARF+EF*VALI))**2
23040             DIFRL=ABS(EI*EF*DAA+VARI*VALF*DZZ+DAZ*(EI*VALF+EF*VARI))**2
23041             FACSIG=(DIFLL+DIFRR)*((UH-SQM4)**2+SH*SQM4)+
23042      &      (DIFLR+DIFRL)*((TH-SQM3)**2+SH*SQM3)
23043             NCHN=NCHN+1
23044             ISIG(NCHN,1)=I
23045             ISIG(NCHN,2)=-I
23046             ISIG(NCHN,3)=1
23047             SIGH(NCHN)=HP*FCOI*FACSIG*WID2
23048  1600     CONTINUE
23049
23050         ELSEIF(ISUB.EQ.195) THEN
23051 C...f + fbar' -> f'' + fbar''' via s-channel rho_tech+
23052           KFA=KFPR(ISUBSV,1)
23053           KFB=KFA+1
23054           ALPRHT=2.91D0*(3D0/PARP(144))
23055           FACTC=COMFAC*(AEM**2/12D0/XW**2)*(UH-SQM3)*(UH-SQM4)*3D0
23056
23057           FWR=SQRT(AEM/ALPRHT)/(2D0*SQRT(XW))
23058           CALL PYWIDT(24,SH,WDTP,WDTE)
23059           SSMZ=CMPLX(1D0-PMAS(24,1)**2/SH,WDTP(0)/SHR)
23060           CALL PYWIDT(55,SH,WDTP,WDTE)
23061           SSMR=CMPLX(1D0-PMAS(54,1)**2/SH,WDTP(0)/SHR)
23062
23063           FCOF=1D0
23064           IF(KFA.LE.8) FCOF=3D0
23065           DETD=SSMZ*SSMR-CMPLX(FWR**2,0D0)
23066           HP=FACTC*ABS(SSMR/DETD)**2/SH**2*FCOF
23067
23068           DO 1605 I=MMIN1,MMAX1
23069             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1605
23070             IA=IABS(I)
23071             DO 1604 J=MMIN2,MMAX2
23072               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1604
23073               JA=IABS(J)
23074               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1604
23075               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
23076      &        GOTO 1604
23077               KCHR=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
23078               HI=HP
23079               IF(IA.LE.10) HI=HI*VCKM((IA+1)/2,(JA+1)/2)/3D0
23080               NCHN=NCHN+1
23081               ISIG(NCHN,1)=I
23082               ISIG(NCHN,2)=J
23083               ISIG(NCHN,3)=1
23084               SIGH(NCHN)=HI*WIDS(KFA,(5-KCHR)/2)*WIDS(KFB,(5+KCHR)/2)
23085  1604       CONTINUE
23086  1605     CONTINUE
23087  
23088         ENDIF
23089  
23090 CMRENNA++
23091 C...J: 2 -> 2, tree diagrams, SUSY processes
23092  
23093       ELSEIF(ISUB.LE.210) THEN
23094         IF(ISUB.EQ.201) THEN
23095 C...f + fbar -> e_L + e_Lbar
23096           COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23097           DO 1630 I=MMIN1,MMAX1
23098             IA=IABS(I)
23099             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1630
23100             EI=KCHG(IA,1)/3D0
23101             TT3I=SIGN(1D0,EI+1D-6)/2D0
23102             EJ=-1D0
23103             TT3J=-1D0/2D0
23104             FCOL=1D0
23105 C...Color factor for e+ e-
23106             IF(IA.GE.11) FCOL=3D0
23107             IF(ISUBSV.EQ.301) THEN
23108               A1=1D0
23109               A2=0D0
23110             ELSEIF(ILR.EQ.1) THEN
23111               A1=SFMIX(KFID,3)**2
23112               A2=SFMIX(KFID,4)**2
23113             ELSEIF(ILR.EQ.0) THEN
23114               A1=SFMIX(KFID,1)**2
23115               A2=SFMIX(KFID,2)**2
23116             ENDIF
23117             XLQ=(TT3J-EJ*XW)*A1
23118             XRQ=(-EJ*XW)*A2
23119             XLF=(TT3I-EI*XW)
23120             XRF=(-EI*XW)
23121             TAA=2D0*(EI*EJ)**2
23122             TZZ=(XLF**2+XRF**2)*(XLQ+XRQ)**2/XW**2/XW1**2
23123             TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*ZWID/SH**2)
23124             TAZ=2D0*EI*EJ*(XLQ+XRQ)*(XLF+XRF)/XW/XW1
23125             TAZ=TAZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*(1D0-SQMZ/SH)
23126             TNN=0.0D0
23127             TAN=0.0D0
23128             TZN=0.0D0
23129             IF(IA.GE.11.AND.IA.LE.18.AND.KFID.EQ.IA) THEN
23130               FAC2=SQRT(2D0)
23131               TNN1=0D0
23132               TNN2=0D0
23133               TNN3=0D0
23134               DO 1620 II=1,4
23135                 DK=1D0/(TH-SMZ(II)**2)
23136                 FLEK=-FAC2*(TT3I*ZMIX(II,2)-TANW*(TT3I-EI)*
23137      &          ZMIX(II,1))
23138                 FREK=FAC2*TANW*EI*ZMIX(II,1)
23139                 TNN1=TNN1+FLEK**2*DK
23140                 TNN2=TNN2+FREK**2*DK
23141                 DO 1610 JJ=1,4
23142                   DL=1D0/(TH-SMZ(JJ)**2)
23143                   FLEL=-FAC2*(TT3J*ZMIX(JJ,2)-TANW*(TT3J-EJ)*
23144      &            ZMIX(JJ,1))
23145                   FREL=FAC2*TANW*EJ*ZMIX(JJ,1)
23146                   TNN3=TNN3+FLEK*FREK*FLEL*FREL*DK*DL*SMZ(II)*SMZ(JJ)
23147  1610           CONTINUE
23148  1620         CONTINUE
23149               TNN=(UH*TH-SQM3*SQM4)*(A1**2*TNN1**2+A2**2*TNN2**2)
23150               TNN=(TNN+2D0*SH*A1*A2*TNN3)/4D0/XW**2
23151               TZN=(UH*TH-SQM3*SQM4)*(XLQ+XRQ)*
23152      &        (TNN1*XLF*A1+TNN2*XRF*A2)
23153               TZN=TZN/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*
23154      &        (1D0-SQMZ/SH)/SH
23155               TZN=TZN/XW**2/XW1
23156               TAN=EI*EJ*(UH*TH-SQM3*SQM4)/SH*(A1*TNN1+A2*TNN2)/XW
23157             ENDIF
23158             FACQQ1=COMFAC*AEM**2*(TAA+TZZ+TAZ)*FCOL/3D0
23159             FACQQ1=FACQQ1*( UH*TH-SQM3*SQM4 )/SH**2
23160             FACQQ2=COMFAC*AEM**2*(TNN+TZN+TAN)*FCOL/3D0
23161             NCHN=NCHN+1
23162             ISIG(NCHN,1)=I
23163             ISIG(NCHN,2)=-I
23164             ISIG(NCHN,3)=1
23165             SIGH(NCHN)=FACQQ1+FACQQ2
23166  1630     CONTINUE
23167  
23168         ELSEIF(ISUB.EQ.203) THEN
23169 C...f + fbar -> e_L + e_Rbar
23170           DO 1660 I=MMIN1,MMAX1
23171             IA=IABS(I)
23172             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1660
23173             EI=KCHG(IABS(I),1)/3D0
23174             TT3I=SIGN(1D0,EI)/2D0
23175             EJ=-1
23176             TT3J=-1D0/2D0
23177             FCOL=1D0
23178 C...Color factor for e+ e-
23179             IF(IA.GE.11) FCOL=3D0
23180             A1=SFMIX(KFID,1)**2
23181             A2=SFMIX(KFID,2)**2
23182             XLQ=(TT3J-EJ*XW)
23183             XRQ=(-EJ*XW)
23184             XLF=(TT3I-EI*XW)
23185             XRF=(-EI*XW)
23186             TZZ=(XLF**2+XRF**2)*(XLQ-XRQ)**2/XW**2/XW1**2*A1*A2
23187             TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)
23188             TNN=0.0D0
23189             TZN=0.0D0
23190             IF(IA.GE.11.AND.IA.LE.18.AND.KFID.EQ.IA) THEN
23191               FAC2=SQRT(2D0)
23192               TNN1=0D0
23193               TNN2=0D0
23194               TNN3=0D0
23195               DO 1650 II=1,4
23196                 DK=1D0/(TH-SMZ(II)**2)
23197                 FLEK=-FAC2*(TT3I*ZMIX(II,2)-TANW*(TT3I-EI)*
23198      &          ZMIX(II,1))
23199                 FREK=FAC2*TANW*EI*ZMIX(II,1)
23200                 TNN1=TNN1+FLEK**2*DK
23201                 TNN2=TNN2+FREK**2*DK
23202                 DO 1640 JJ=1,4
23203                   DL=1D0/(TH-SMZ(JJ)**2)
23204                   FLEL=-FAC2*(TT3J*ZMIX(JJ,2)-TANW*(TT3J-EJ)*
23205      &            ZMIX(JJ,1))
23206                   FREL=FAC2*TANW*EJ*ZMIX(JJ,1)
23207                   TNN3=TNN3+FLEK*FREK*FLEL*FREL*DK*DL*SMZ(II)*SMZ(JJ)
23208  1640           CONTINUE
23209  1650         CONTINUE
23210               TNN=(UH*TH-SQM3*SQM4)*A1*A2*(TNN2**2+TNN1**2)
23211               TNN=(TNN+SH*(A2**2+A1**2)*TNN3)/4D0
23212               TZN=(UH*TH-SQM3*SQM4)*A1*A2
23213               TZN=TZN*(XLQ-XRQ)*(XLF*TNN1-XRF*TNN2)/XW1
23214               TZN=TZN/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*
23215      &        (1D0-SQMZ/SH)/SH
23216             ENDIF
23217             FACQQ1=COMFAC*AEM**2*TZZ*FCOL/3D0*(UH*TH-SQM3*SQM4)/SH2
23218             FACQQ2=COMFAC*AEM**2/XW**2*(TNN+TZN)*FCOL/3D0
23219             FACQQ=(FACQQ1+FACQQ2)
23220             NCHN=NCHN+1
23221             ISIG(NCHN,1)=I
23222             ISIG(NCHN,2)=-I
23223             ISIG(NCHN,3)=1
23224             SIGH(NCHN)=FACQQ*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23225      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),3)
23226             NCHN=NCHN+1
23227             ISIG(NCHN,1)=I
23228             ISIG(NCHN,2)=-I
23229             ISIG(NCHN,3)=2
23230             SIGH(NCHN)=FACQQ*WIDS(PYCOMP(KFPR(ISUBSV,1)),3)*
23231      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23232  1660     CONTINUE
23233  
23234         ELSEIF(ISUB.EQ.210) THEN
23235 C...q + qbar' -> W*- > ~l_L + ~nu_L
23236           FAC0=RKF*COMFAC*AEM**2/XW**2/12D0
23237           FAC1=(TH*UH-SQM3*SQM4)/((SH-SQMW)**2+WWID**2*SQMW)
23238           DO 1680 I=MMIN1,MMAX1
23239             IA=IABS(I)
23240             IF(I.EQ.0.OR.IA.GT.10.OR.KFAC(1,I).EQ.0) GOTO 1680
23241             DO 1670 J=MMIN2,MMAX2
23242               JA=IABS(J)
23243               IF(J.EQ.0.OR.JA.GT.10.OR.KFAC(2,J).EQ.0) GOTO 1670
23244               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1670
23245               FCKM=3D0
23246               IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
23247               KCHSUM=KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J)
23248               KCHW=2
23249               IF(KCHSUM.LT.0) KCHW=3
23250               NCHN=NCHN+1
23251               ISIG(NCHN,1)=I
23252               ISIG(NCHN,2)=J
23253               ISIG(NCHN,3)=1
23254               IF(ISUBSV.EQ.297.OR.ISUBSV.EQ.298) THEN
23255                 FACR=WIDS(PYCOMP(KFPR(ISUBSV,1)),5-KCHW)*
23256      &          WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23257               ELSE
23258                 FACR=WIDS(PYCOMP(KFPR(ISUBSV,1)),5-KCHW)*
23259      &          WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHW)
23260               ENDIF
23261               SIGH(NCHN)=FAC0*FAC1*FCKM*FACR
23262  1670       CONTINUE
23263  1680     CONTINUE
23264         ENDIF
23265  
23266       ELSEIF(ISUB.LE.220) THEN
23267         IF(ISUB.EQ.213) THEN
23268 C...f + fbar -> ~nu_L + ~nu_Lbar
23269           IF(ISUBSV.EQ.299.OR.ISUBSV.EQ.300) THEN
23270             FACR=WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23271      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23272           ELSE
23273             FACR=WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23274           ENDIF
23275           COMFAC=COMFAC*FACR
23276           PROPZ=(SH-SQMZ)**2+ZWID**2*SQMZ
23277           XLL=0.5D0
23278           XLR=0.0D0
23279           DO 1690 I=MMIN1,MMAX1
23280             IA=IABS(I)
23281             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1690
23282             EI=KCHG(IA,1)/3D0
23283             FCOL=1D0
23284 C...Color factor for e+ e-
23285             IF(IA.GE.11) FCOL=3D0
23286             XLQ=(SIGN(1D0,EI)-2D0*EI*XW)/2D0
23287             XRQ=-EI*XW
23288             TZC=0.0D0
23289             TCC=0.0D0
23290             IF(IA.GE.11.AND.KFID.EQ.IA+1) THEN
23291               TZC=VMIX(1,1)**2/(TH-SMW(1)**2)+VMIX(2,1)**2/
23292      &        (TH-SMW(2)**2)
23293               TCC=TZC**2
23294               TZC=TZC/XW1*(SH-SQMZ)/PROPZ*XLQ*XLL
23295             ENDIF
23296             FACQQ1=(XLQ**2+XRQ**2)*(XLL+XLR)**2/XW1**2/PROPZ
23297             FACQQ2=TZC+TCC/4D0
23298             NCHN=NCHN+1
23299             ISIG(NCHN,1)=I
23300             ISIG(NCHN,2)=-I
23301             ISIG(NCHN,3)=1
23302             SIGH(NCHN)=(FACQQ1+FACQQ2)*RKF*(UH*TH-SQM3*SQM4)*COMFAC
23303      &      *AEM**2*FCOL/3D0/XW**2
23304  1690     CONTINUE
23305  
23306         ELSEIF(ISUB.EQ.216) THEN
23307 C...q + qbar -> ~chi0_1 + ~chi0_1
23308           IF(IZID1.EQ.IZID2) THEN
23309             COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23310           ELSE
23311             COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23312      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23313           ENDIF
23314           FACGG1=COMFAC*AEM**2/3D0/XW**2
23315           IF(IZID1.EQ.IZID2) FACGG1=FACGG1/2D0
23316           ZM12=SQM3
23317           ZM22=SQM4
23318           WU2 = (UH-ZM12)*(UH-ZM22)/SH2
23319           WT2 = (TH-ZM12)*(TH-ZM22)/SH2
23320           XS2 = SMZ(IZID1)*SMZ(IZID2)/SH
23321           PROPZ2 = (SH-SQMZ)**2 + SQMZ*ZWID**2
23322           REPRPZ = (SH-SQMZ)/PROPZ2
23323           OLPP=(-ZMIX(IZID1,3)*ZMIX(IZID2,3)+
23324      &    ZMIX(IZID1,4)*ZMIX(IZID2,4))/2D0
23325           DO 1700 I=MMINA,MMAXA
23326             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1700
23327             EI=KCHG(IABS(I),1)/3D0
23328             FCOL=1D0
23329             IF(ABS(I).GE.11) FCOL=3D0
23330             XLQ=(SIGN(1D0,EI)-2D0*EI*XW)/2D0
23331             XRQ=-EI*XW
23332             XLQ=XLQ/XW1
23333             XRQ=XRQ/XW1
23334 C...Factored out sqrt(2)
23335             FR1=TANW*EI*ZMIX(IZID1,1)
23336             FR2=TANW*EI*ZMIX(IZID2,1)
23337             FL1=-(SIGN(1D0,EI)*ZMIX(IZID1,2)-TANW*
23338      &      (SIGN(1D0,EI)-2D0*EI)*ZMIX(IZID1,1))/2D0
23339             FL2=-(SIGN(1D0,EI)*ZMIX(IZID2,2)-TANW*
23340      &      (SIGN(1D0,EI)-2D0*EI)*ZMIX(IZID2,1))/2D0
23341             FR12=FR1**2
23342             FR22=FR2**2
23343             FL12=FL1**2
23344             FL22=FL2**2
23345             XML2=PMAS(PYCOMP(KSUSY1+IABS(I)),1)**2
23346             XMR2=PMAS(PYCOMP(KSUSY2+IABS(I)),1)**2
23347             FACS=OLPP**2*(XLQ**2+XRQ**2)*(WU2+WT2-2D0*XS2)*(SH2/PROPZ2)
23348             FACT=FL12*FL22*(WT2*SH2/(TH-XML2)**2+WU2*SH2/(UH-XML2)**2-
23349      &      2D0*XS2*SH2/(TH-XML2)/(UH-XML2))
23350             FACU=FR12*FR22*(WT2*SH2/(TH-XMR2)**2+WU2*SH2/(UH-XMR2)**2-
23351      &      2D0*XS2*SH2/(TH-XMR2)/(UH-XMR2))
23352             FACST=2D0*REPRPZ*OLPP*XLQ*FL1*FL2*( (WT2-XS2)*SH2/
23353      &      (TH-XML2) + (WU2-XS2)*SH2/(UH-XML2) )
23354             FACSU=-2D0*REPRPZ*OLPP*XRQ*FR1*FR2*( (WT2-XS2)*SH2/
23355      &      (TH-XMR2) + (WU2-XS2)*SH2/(UH-XMR2) )
23356             NCHN=NCHN+1
23357             ISIG(NCHN,1)=I
23358             ISIG(NCHN,2)=-I
23359             ISIG(NCHN,3)=1
23360             SIGH(NCHN)=FACGG1*FCOL*(FACS+FACT+FACU+FACST+FACSU)
23361  1700     CONTINUE
23362         ENDIF
23363  
23364       ELSEIF(ISUB.LE.230) THEN
23365         IF(ISUB.EQ.226) THEN
23366 C...f + fbar -> ~chi+_1 + ~chi-_1
23367           FACGG1=COMFAC*AEM**2/3D0/XW**2
23368           ZM12=SQM3
23369           ZM22=SQM4
23370           WU2 = (UH-ZM12)*(UH-ZM22)/SH2
23371           WT2 = (TH-ZM12)*(TH-ZM22)/SH2
23372           WS2 = SMW(IZID1)*SMW(IZID2)/SH
23373           PROPZ2 = (SH-SQMZ)**2 + SQMZ*ZWID**2
23374           REPRPZ = (SH-SQMZ)/PROPZ2
23375           DIFF=0D0
23376           IF(IZID1.EQ.IZID2) DIFF=1D0
23377           DO 1710 I=MMINA,MMAXA
23378             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1710
23379             EI=KCHG(IABS(I),1)/3D0
23380             FCOL=1D0
23381             IF(IABS(I).GE.11) FCOL=3D0
23382             XLQ=(SIGN(1D0,EI)-2D0*EI*XW)/2D0
23383             XRQ=-EI*XW
23384             XLQ=XLQ/XW1
23385             XRQ=XRQ/XW1
23386             XLQ2=XLQ**2
23387             XRQ2=XRQ**2
23388             OLP=-VMIX(IZID1,1)*VMIX(IZID2,1)-
23389      &      VMIX(IZID1,2)*VMIX(IZID2,2)/2D0+XW*DIFF
23390             ORP=-UMIX(IZID1,1)*UMIX(IZID2,1)-
23391      &      UMIX(IZID1,2)*UMIX(IZID2,2)/2D0+XW*DIFF
23392             ORP2=ORP**2
23393             OLP2=OLP**2
23394 C...u-type quark - d-type squark
23395             IF(MOD(I,2).EQ.0) THEN
23396               FACT0 = -UMIX(IZID1,1)*UMIX(IZID2,1)
23397               XML2=PMAS(PYCOMP(KSUSY1+IABS(I)-1),1)**2
23398 C...d-type quark - u-type squark
23399             ELSE
23400               FACT0 = VMIX(IZID1,1)*VMIX(IZID2,1)
23401               XML2=PMAS(PYCOMP(KSUSY1+IABS(I)+1),1)**2
23402             ENDIF
23403             FACA=2D0*XW**2*DIFF*(WT2+WU2+2D0*ABS(WS2))*EI**2
23404             FACZ=0.5D0*((XLQ2+XRQ2)*(OLP2+ORP2)*(WT2+WU2)+
23405      &      4D0*(XLQ2+XRQ2)*OLP*ORP*WS2-(XLQ2-XRQ2)*(OLP2-ORP2)*
23406      &      (WU2-WT2))*SH2/PROPZ2
23407             FACT=FACT0**2/4D0*WT2*SH2/(TH-XML2)**2
23408             FACAZ=XW*REPRPZ*DIFF*( (XLQ+XRQ)*(OLP+ORP)*(WU2+
23409      &      WT2+2D0*ABS(WS2))-(XLQ-XRQ)*(OLP-ORP)*(WU2-WT2) )*SH*(-EI)
23410             FACTA=XW*DIFF/(TH-XML2)*(WT2+ABS(WS2))*SH*FACT0*(-EI)
23411             FACTZ=REPRPZ/(TH-XML2)*XLQ*FACT0*(OLP*WT2+ORP*WS2)*SH2
23412             FACSUM=FACGG1*(FACA+FACAZ+FACZ+FACT+FACTA+FACTZ)*FCOL
23413             NCHN=NCHN+1
23414             ISIG(NCHN,1)=I
23415             ISIG(NCHN,2)=-I
23416             ISIG(NCHN,3)=1
23417             IF(IZID1.EQ.IZID2) THEN
23418               SIGH(NCHN)=FACSUM*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23419             ELSE
23420               SIGH(NCHN)=FACSUM*WIDS(PYCOMP(KFPR(ISUBSV,1)),3)*
23421      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23422               NCHN=NCHN+1
23423               ISIG(NCHN,1)=I
23424               ISIG(NCHN,2)=-I
23425               ISIG(NCHN,3)=2
23426               SIGH(NCHN)=FACSUM*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23427      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),3)
23428             ENDIF
23429  1710     CONTINUE
23430  
23431         ELSEIF(ISUB.EQ.229) THEN
23432 C...q + qbar' -> ~chi0_1 + ~chi+-_1
23433           FACGG1=COMFAC*AEM**2/6D0/XW**2
23434           ZM12=SQM3
23435           ZM22=SQM4
23436           ZMU2  = PMAS(PYCOMP(KSUSY1+2),1)**2
23437           ZMD2  = PMAS(PYCOMP(KSUSY1+1),1)**2
23438           WU2 = (UH-ZM12)*(UH-ZM22)/SH2
23439           WT2 = (TH-ZM12)*(TH-ZM22)/SH2
23440           WS2 = SMW(IZID1)*SMZ(IZID2)/SH
23441           RT2I = 1D0/SQRT(2D0)
23442           PROPW = ((SH-SQMW)**2+WWID**2*SQMW)
23443           OL=-RT2I*ZMIX(IZID2,4)*VMIX(IZID1,2)+
23444      &    ZMIX(IZID2,2)*VMIX(IZID1,1)
23445           OR= RT2I*ZMIX(IZID2,3)*UMIX(IZID1,2)+
23446      &    ZMIX(IZID2,2)*UMIX(IZID1,1)
23447           OL2=OL**2
23448           OR2=OR**2
23449           CROSS=2D0*OL*OR
23450           FACST0=UMIX(IZID1,1)
23451           FACSU0=VMIX(IZID1,1)
23452           FACSU0=FACSU0*(0.5D0*ZMIX(IZID2,2)+TANW*ZMIX(IZID2,1)/6D0)
23453           FACST0=FACST0*(-0.5D0*ZMIX(IZID2,2)+TANW*ZMIX(IZID2,1)/6D0)
23454           FACT0=FACST0**2
23455           FACU0=FACSU0**2
23456           FACTU0=FACSU0*FACST0
23457           FACST = -2D0*(SH-SQMW)/PROPW/(TH-ZMD2)*(WT2*SH2*OR
23458      &    + SH2*WS2*OL)*FACST0
23459           FACSU =  2D0*(SH-SQMW)/PROPW/(UH-ZMU2)*(WU2*SH2*OL
23460      &    + SH2*WS2*OR)*FACSU0
23461           FACT = WT2*SH2/(TH-ZMD2)**2*FACT0
23462           FACU = WU2*SH2/(UH-ZMU2)**2*FACU0
23463           FACTU = -2D0*WS2*SH2/(TH-ZMD2)/(UH-ZMU2)*FACTU0
23464           FACW = (OR2*WT2+OL2*WU2+CROSS*WS2)/PROPW*SH2
23465           FACGG1=FACGG1*(FACW+FACT+FACTU+FACU+FACSU+FACST)
23466           DO 1730 I=MMIN1,MMAX1
23467             IA=IABS(I)
23468             IF(I.EQ.0.OR.IA.GT.20.OR.KFAC(1,I).EQ.0) GOTO 1730
23469             DO 1720 J=MMIN2,MMAX2
23470               JA=IABS(J)
23471               IF(J.EQ.0.OR.JA.GT.20.OR.KFAC(2,J).EQ.0) GOTO 1720
23472               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1720
23473               FCKM=3D0
23474               IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
23475               KCHSUM=KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J)
23476               KCHW=2
23477               IF(KCHSUM.LT.0) KCHW=3
23478               NCHN=NCHN+1
23479               ISIG(NCHN,1)=I
23480               ISIG(NCHN,2)=J
23481               ISIG(NCHN,3)=1
23482               SIGH(NCHN)=FACGG1*FCKM*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23483      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHW)
23484  1720       CONTINUE
23485  1730     CONTINUE
23486         ENDIF
23487  
23488       ELSEIF(ISUB.LE.240) THEN
23489         IF(ISUB.EQ.237) THEN
23490 C...q + qbar -> gluino + ~chi0_1
23491           COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23492      &    WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23493           FAC0=COMFAC*AS*AEM*4D0/9D0/XW
23494           GM2=SQM3
23495           ZM2=SQM4
23496           DO 1740 I=MMINA,MMAXA
23497             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1740
23498             EI=KCHG(IABS(I),1)/3D0
23499             IA=IABS(I)
23500             XLQC = -TANW*EI*ZMIX(IZID,1)
23501             XRQC =(SIGN(1D0,EI)*ZMIX(IZID,2)-TANW*
23502      &      (SIGN(1D0,EI)-2D0*EI)*ZMIX(IZID,1))/2D0
23503             XLQ2=XLQC**2
23504             XRQ2=XRQC**2
23505             XML2=PMAS(PYCOMP(KSUSY1+IA),1)**2
23506             XMR2=PMAS(PYCOMP(KSUSY2+IA),1)**2
23507             ATKIN=(TH-GM2)*(TH-ZM2)/(TH-XML2)**2
23508             AUKIN=(UH-GM2)*(UH-ZM2)/(UH-XML2)**2
23509             ATUKIN=SMZ(IZID)*SQRT(GM2)*SH/(TH-XML2)/(UH-XML2)
23510             SGCHIL=XLQ2*(ATKIN+AUKIN-2D0*ATUKIN)
23511             ATKIN=(TH-GM2)*(TH-ZM2)/(TH-XMR2)**2
23512             AUKIN=(UH-GM2)*(UH-ZM2)/(UH-XMR2)**2
23513             ATUKIN=SMZ(IZID)*SQRT(GM2)*SH/(TH-XMR2)/(UH-XMR2)
23514             SGCHIR=XRQ2*(ATKIN+AUKIN-2D0*ATUKIN)
23515             NCHN=NCHN+1
23516             ISIG(NCHN,1)=I
23517             ISIG(NCHN,2)=-I
23518             ISIG(NCHN,3)=1
23519             SIGH(NCHN)=FAC0*(SGCHIL+SGCHIR)
23520  1740     CONTINUE
23521         ENDIF
23522  
23523       ELSEIF(ISUB.LE.250) THEN
23524         IF(ISUB.EQ.241) THEN
23525 C...q + qbar' -> ~chi+-_1 + gluino
23526           FACWG=COMFAC*AS*AEM/XW*2D0/9D0
23527           GM2=SQM3
23528           ZM2=SQM4
23529           FAC01=2D0*UMIX(IZID,1)*VMIX(IZID,1)
23530           FAC0=UMIX(IZID,1)**2
23531           FAC1=VMIX(IZID,1)**2
23532           DO 1760 I=MMIN1,MMAX1
23533             IA=IABS(I)
23534             IF(I.EQ.0.OR.IA.GT.10.OR.KFAC(1,I).EQ.0) GOTO 1760
23535             DO 1750 J=MMIN2,MMAX2
23536               JA=IABS(J)
23537               IF(J.EQ.0.OR.JA.GT.10.OR.KFAC(2,J).EQ.0) GOTO 1750
23538               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1750
23539               FCKM=1D0
23540               IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
23541               KCHSUM=KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J)
23542               KCHW=2
23543               IF(KCHSUM.LT.0) KCHW=3
23544               XMU2=PMAS(PYCOMP(KSUSY1+2),1)**2
23545               XMD2=PMAS(PYCOMP(KSUSY1+1),1)**2
23546               ATKIN=(TH-GM2)*(TH-ZM2)/(TH-XMU2)**2
23547               AUKIN=(UH-GM2)*(UH-ZM2)/(UH-XMD2)**2
23548               ATUKIN=SMW(IZID)*SQRT(GM2)*SH/(TH-XMU2)/(UH-XMD2)
23549               XMU2=PMAS(PYCOMP(KSUSY2+2),1)**2
23550               XMD2=PMAS(PYCOMP(KSUSY2+1),1)**2
23551               ATKIN=(ATKIN+(TH-GM2)*(TH-ZM2)/(TH-XMU2)**2)/2D0
23552               AUKIN=(AUKIN+(UH-GM2)*(UH-ZM2)/(UH-XMD2)**2)/2D0
23553               ATUKIN=(ATUKIN+SMW(IZID)*SQRT(GM2)*
23554      &        SH/(TH-XMU2)/(UH-XMD2))/2D0
23555               NCHN=NCHN+1
23556               ISIG(NCHN,1)=I
23557               ISIG(NCHN,2)=J
23558               ISIG(NCHN,3)=1
23559               SIGH(NCHN)=FACWG*FCKM*(FAC0*ATKIN+FAC1*AUKIN-
23560      &        FAC01*ATUKIN)*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23561      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHW)
23562  1750       CONTINUE
23563  1760     CONTINUE
23564  
23565         ELSEIF(ISUB.EQ.243) THEN
23566 C...q + qbar -> gluino + gluino
23567           COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23568           XMT=SQM3-TH
23569           XMU=SQM3-UH
23570           DO 1770 I=MMINA,MMAXA
23571             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
23572      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1770
23573             NCHN=NCHN+1
23574             XSU=PMAS(PYCOMP(KSUSY1+IABS(I)),1)**2-UH
23575             XST=PMAS(PYCOMP(KSUSY1+IABS(I)),1)**2-TH
23576             FACGG1=COMFAC*AS**2*8D0/3D0*( (XMT**2+XMU**2+
23577      &      2D0*SQM3*SH)/SH2 +4D0/9D0*(XMT**2/XST**2+
23578      &      XMU**2/XSU**2) - (XMT**2+SH*SQM3)/SH/XST +
23579      &      SQM3*SH/XST/XSU/9D0- (XMU**2+SH*SQM3)/SH/XSU )
23580             XSU=PMAS(PYCOMP(KSUSY2+IABS(I)),1)**2-UH
23581             XST=PMAS(PYCOMP(KSUSY2+IABS(I)),1)**2-TH
23582             FACGG2=COMFAC*AS**2*8D0/3D0*( (XMT**2+XMU**2+
23583      &      2D0*SQM3*SH)/SH2 +4D0/9D0*(XMT**2/XST**2+
23584      &      XMU**2/XSU**2) - (XMT**2+SH*SQM3)/SH/XST +
23585      &      SQM3*SH/XST/XSU/9D0- (XMU**2+SH*SQM3)/SH/XSU )
23586             ISIG(NCHN,1)=I
23587             ISIG(NCHN,2)=-I
23588             ISIG(NCHN,3)=1
23589 C...1/2 for identical particles
23590             SIGH(NCHN)=0.25D0*(FACGG1+FACGG2)
23591  1770     CONTINUE
23592  
23593         ELSEIF(ISUB.EQ.244) THEN
23594 C...g + g -> gluino + gluino
23595           COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23596           XMT=SQM3-TH
23597           XMU=SQM3-UH
23598           FACQQ1=COMFAC*AS**2*9D0/4D0*(
23599      &    (XMT*XMU-2D0*SQM3*(TH+SQM3))/XMT**2 -
23600      &    (XMT*XMU+SQM3*(UH-TH))/SH/XMT )
23601           FACQQ2=COMFAC*AS**2*9D0/4D0*(
23602      &    (XMU*XMT-2D0*SQM3*(UH+SQM3))/XMU**2 -
23603      &    (XMU*XMT+SQM3*(TH-UH))/SH/XMU )
23604           FACQQ3=COMFAC*AS**2*9D0/4D0*(2D0*XMT*XMU/SH2 +
23605      &    SQM3*(SH-4D0*SQM3)/XMT/XMU)
23606           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1780
23607           NCHN=NCHN+1
23608           ISIG(NCHN,1)=21
23609           ISIG(NCHN,2)=21
23610           ISIG(NCHN,3)=1
23611           SIGH(NCHN)=FACQQ1/2D0
23612           NCHN=NCHN+1
23613           ISIG(NCHN,1)=21
23614           ISIG(NCHN,2)=21
23615           ISIG(NCHN,3)=2
23616           SIGH(NCHN)=FACQQ2/2D0
23617           NCHN=NCHN+1
23618           ISIG(NCHN,1)=21
23619           ISIG(NCHN,2)=21
23620           ISIG(NCHN,3)=3
23621           SIGH(NCHN)=FACQQ3/2D0
23622  1780     CONTINUE
23623  
23624         ELSEIF(ISUB.EQ.246) THEN
23625 C...g + q_j -> ~chi0_1 + ~q_j
23626           FAC0=COMFAC*AS*AEM/6D0/XW
23627           ZM2=SQM4
23628           QM2=SQM3
23629           FACZQ0=FAC0*( (ZM2-TH)/SH +
23630      &    (UH-ZM2)*(UH+QM2)/(UH-QM2)**2 -
23631      &    (SH*(UH+ZM2)+2D0*(QM2-ZM2)*(ZM2-UH))/SH/(UH-QM2) )
23632           KFNSQ=MOD(KFPR(ISUBSV,1),KSUSY1)
23633           DO 1800 I=-KFNSQ,KFNSQ,2*KFNSQ
23634             IF(I.LT.MMINA.OR.I.GT.MMAXA) GOTO 1800
23635             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1800
23636             EI=KCHG(IABS(I),1)/3D0
23637             IA=IABS(I)
23638             XRQZ = -TANW*EI*ZMIX(IZID,1)
23639             XLQZ =(SIGN(1D0,EI)*ZMIX(IZID,2)-TANW*
23640      &      (SIGN(1D0,EI)-2D0*EI)*ZMIX(IZID,1))/2D0
23641             IF(ILR.EQ.0) THEN
23642               BS=XLQZ**2*SFMIX(IA,1)**2+XRQZ**2*SFMIX(IA,2)**2
23643             ELSE
23644               BS=XLQZ**2*SFMIX(IA,3)**2+XRQZ**2*SFMIX(IA,4)**2
23645             ENDIF
23646             FACZQ=FACZQ0*BS
23647             KCHQ=2
23648             IF(I.LT.0) KCHQ=3
23649             DO 1790 ISDE=1,2
23650               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1790
23651               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1790
23652               NCHN=NCHN+1
23653               ISIG(NCHN,ISDE)=I
23654               ISIG(NCHN,3-ISDE)=21
23655               ISIG(NCHN,3)=1
23656               SIGH(NCHN)=FACZQ*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23657      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23658  1790       CONTINUE
23659  1800     CONTINUE
23660         ENDIF
23661  
23662       ELSEIF(ISUB.LE.260) THEN
23663         IF(ISUB.EQ.254) THEN
23664 C...g + q_j -> ~chi1_1 + ~q_i
23665           FAC0=COMFAC*AS*AEM/12D0/XW
23666           ZM2=SQM4
23667           QM2=SQM3
23668           AU=UMIX(IZID,1)**2
23669           AD=VMIX(IZID,1)**2
23670           FACZQ0=FAC0*( (ZM2-TH)/SH +
23671      &    (UH-ZM2)*(UH+QM2)/(UH-QM2)**2 -
23672      &    (SH*(UH+ZM2)+2D0*(QM2-ZM2)*(ZM2-UH))/SH/(UH-QM2) )
23673           KFNSQ1=MOD(KFPR(ISUBSV,1),KSUSY1)
23674           IF(MOD(KFNSQ1,2).EQ.0) THEN
23675             KFNSQ=KFNSQ1-1
23676             KCHW=2
23677           ELSE
23678             KFNSQ=KFNSQ1+1
23679             KCHW=3
23680           ENDIF
23681           DO 1820 I=-KFNSQ,KFNSQ,2*KFNSQ
23682             IF(I.LT.MMINA.OR.I.GT.MMAXA) GOTO 1820
23683             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1820
23684             IA=IABS(I)
23685             IF(MOD(IA,2).EQ.0) THEN
23686               FACZQ=FACZQ0*AU
23687             ELSE
23688               FACZQ=FACZQ0*AD
23689             ENDIF
23690             FACZQ=FACZQ*SFMIX(KFNSQ1,1+2*ILR)**2
23691             KCHQ=2
23692             IF(I.LT.0) KCHQ=3
23693             KCHWQ=KCHW
23694             IF(I.LT.0) KCHWQ=5-KCHW
23695             DO 1810 ISDE=1,2
23696               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1810
23697               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1810
23698               NCHN=NCHN+1
23699               ISIG(NCHN,ISDE)=I
23700               ISIG(NCHN,3-ISDE)=21
23701               ISIG(NCHN,3)=1
23702               SIGH(NCHN)=FACZQ*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23703      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHWQ)
23704  1810       CONTINUE
23705  1820     CONTINUE
23706  
23707         ELSEIF(ISUB.EQ.258) THEN
23708 C...g + q_j -> gluino + ~q_i
23709           XG2=SQM4
23710           XQ2=SQM3
23711           XMT=XG2-TH
23712           XMU=XG2-UH
23713           XST=XQ2-TH
23714           XSU=XQ2-UH
23715           FACQG1=0.5D0*4D0/9D0*XMT/SH + (XMT*SH+2D0*XG2*XST)/XMT**2 -
23716      &    ( (SH-XQ2+XG2)*(-XST)-SH*XG2 )/SH/(-XMT) +
23717      &    0.5D0*1D0/2D0*( XST*(TH+2D0*UH+XG2)-XMT*(SH-2D0*XST) +
23718      &    (-XMU)*(TH+XG2+2D0*XQ2) )/2D0/XMT/XSU
23719           FACQG2= 4D0/9D0*(-XMU)*(UH+XQ2)/XSU**2 + 1D0/18D0*
23720      &    (SH*(UH+XG2)
23721      &    +2D0*(XQ2-XG2)*XMU)/SH/(-XSU) + 0.5D0*4D0/9D0*XMT/SH +
23722      &    0.5D0*1D0/2D0*(XST*(TH+2D0*UH+XG2)-XMT*(SH-2D0*XST)+
23723      &    (-XMU)*(TH+XG2+2D0*XQ2))/2D0/XMT/XSU
23724           FACQG1=COMFAC*AS**2*FACQG1/2D0
23725           FACQG2=COMFAC*AS**2*FACQG2/2D0
23726           KFNSQ=MOD(KFPR(ISUBSV,1),KSUSY1)
23727           DO 1840 I=-KFNSQ,KFNSQ,2*KFNSQ
23728             IF(I.LT.MMINA.OR.I.GT.MMAXA) GOTO 1840
23729             IF(I.EQ.0.OR.IABS(I).GT.10) GOTO 1840
23730             KCHQ=2
23731             IF(I.LT.0) KCHQ=3
23732             FACSEL=RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23733      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23734             DO 1830 ISDE=1,2
23735               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1830
23736               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1830
23737               NCHN=NCHN+1
23738               ISIG(NCHN,ISDE)=I
23739               ISIG(NCHN,3-ISDE)=21
23740               ISIG(NCHN,3)=1
23741               SIGH(NCHN)=FACQG1*FACSEL
23742               NCHN=NCHN+1
23743               ISIG(NCHN,ISDE)=I
23744               ISIG(NCHN,3-ISDE)=21
23745               ISIG(NCHN,3)=2
23746               SIGH(NCHN)=FACQG2*FACSEL
23747  1830       CONTINUE
23748  1840     CONTINUE
23749         ENDIF
23750  
23751       ELSEIF(ISUB.LE.270) THEN
23752         IF(ISUB.EQ.261) THEN
23753 C...q_i + q_ibar -> ~t_1 + ~t_1bar
23754           FACQQ1=COMFAC*( (UH*TH-SQM3*SQM4)/ SH**2 )*
23755      &    WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23756           KFNSQ=MOD(KFPR(ISUBSV,1),KSUSY1)
23757           FAC0=AS**2*4D0/9D0
23758           DO 1850 I=MMIN1,MMAX1
23759             IA=IABS(I)
23760             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1850
23761             IF(IA.GE.11.AND.IA.LE.18) THEN
23762               EI=KCHG(IA,1)/3D0
23763               EJ=KCHG(KFNSQ,1)/3D0
23764               T3I=SIGN(1D0,EI)/2D0
23765               T3J=SIGN(1D0,EJ)/2D0
23766               XLQ=2D0*(T3J-EJ*XW)*SFMIX(KFNSQ,2*ILR+1)**2
23767               XRQ=2D0*(-EJ*XW)*SFMIX(KFNSQ,2*ILR+2)**2
23768               XLF=2D0*(T3I-EI*XW)
23769               XRF=2D0*(-EI*XW)
23770               TAA=0.5D0*(EI*EJ)**2
23771               TZZ=(XLF**2+XRF**2)*(XLQ+XRQ)**2/64D0/XW**2/XW1**2
23772               TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)
23773               TAZ=EI*EJ*(XLQ+XRQ)*(XLF+XRF)/8D0/XW/XW1
23774               TAZ=TAZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*(1D0-SQMZ/SH)
23775               FAC0=AEM**2*12D0*(TAA+TZZ+TAZ)
23776             ENDIF
23777             NCHN=NCHN+1
23778             ISIG(NCHN,1)=I
23779             ISIG(NCHN,2)=-I
23780             ISIG(NCHN,3)=1
23781             SIGH(NCHN)=FACQQ1*FAC0
23782  1850     CONTINUE
23783  
23784         ELSEIF(ISUB.EQ.263) THEN
23785 C...f + fbar -> ~t1 + ~t2bar
23786           DO 1860 I=MMIN1,MMAX1
23787             IA=IABS(I)
23788             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1860
23789             EI=KCHG(IABS(I),1)/3D0
23790             TT3I=SIGN(1D0,EI)/2D0
23791             EJ=2D0/3D0
23792             TT3J=1D0/2D0
23793             FCOL=1D0
23794 C...Color factor for e+ e-
23795             IF(IA.GE.11) FCOL=3D0
23796             XLQ=2D0*(TT3J-EJ*XW)
23797             XRQ=2D0*(-EJ*XW)
23798             XLF=2D0*(TT3I-EI*XW)
23799             XRF=2D0*(-EI*XW)
23800             TZZ=(XLF**2+XRF**2)*(XLQ-XRQ)**2/64D0/XW**2/XW1**2
23801             TZZ=TZZ*(SFMIX(6,1)*SFMIX(6,2))**2
23802             TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)
23803 C...Factor of 2 for t1 t2bar + t2 t1bar
23804             FACQQ1=2D0*COMFAC*AEM**2*TZZ*FCOL*4D0
23805             FACQQ1=FACQQ1*( UH*TH-SQM3*SQM4 )/SH2
23806             NCHN=NCHN+1
23807             ISIG(NCHN,1)=I
23808             ISIG(NCHN,2)=-I
23809             ISIG(NCHN,3)=1
23810             SIGH(NCHN)=FACQQ1*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23811      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),3)
23812             NCHN=NCHN+1
23813             ISIG(NCHN,1)=I
23814             ISIG(NCHN,2)=-I
23815             ISIG(NCHN,3)=2
23816             SIGH(NCHN)=FACQQ1*WIDS(PYCOMP(KFPR(ISUBSV,1)),3)*
23817      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23818  1860     CONTINUE
23819  
23820         ELSEIF(ISUB.EQ.264) THEN
23821 C...g + g -> ~t_1 + ~t_1bar
23822           XSU=SQM3-UH
23823           XST=SQM3-TH
23824           FAC0=COMFAC*AS**2*(7D0/48D0+3D0*(UH-TH)**2/16D0/SH2 )*0.5D0*
23825      &    WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23826           FACQQ1=FAC0*(0.5D0+2D0*SQM3*TH/XST**2 + 2D0*SQM3**2/XSU/XST)
23827           FACQQ2=FAC0*(0.5D0+2D0*SQM3*UH/XSU**2 + 2D0*SQM3**2/XSU/XST)
23828           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1870
23829           NCHN=NCHN+1
23830           ISIG(NCHN,1)=21
23831           ISIG(NCHN,2)=21
23832           ISIG(NCHN,3)=1
23833           SIGH(NCHN)=FACQQ1
23834           NCHN=NCHN+1
23835           ISIG(NCHN,1)=21
23836           ISIG(NCHN,2)=21
23837           ISIG(NCHN,3)=2
23838           SIGH(NCHN)=FACQQ2
23839  1870     CONTINUE
23840         ENDIF
23841  
23842       ELSEIF(ISUB.LE.280) THEN
23843         IF(ISUB.EQ.271) THEN
23844 C...q + q' -> ~q + ~q' (~g exchange)
23845           XMG2=PMAS(PYCOMP(KSUSY1+21),1)**2
23846           XMT=XMG2-TH
23847           XMU=XMG2-UH
23848           XSU1=SQM3-UH
23849           XSU2=SQM4-UH
23850           XST1=SQM3-TH
23851           XST2=SQM4-TH
23852           IF(ILR.EQ.1) THEN
23853             FACQQ1=COMFAC*AS**2*4D0/9D0*( -(XST1*XST2+SH*TH)/XMT**2 )
23854             FACQQ2=COMFAC*AS**2*4D0/9D0*( -(XSU1*XSU2+SH*UH)/XMU**2 )
23855             FACQQB=0.0D0
23856           ELSE
23857             FACQQ1=0.5D0*COMFAC*AS**2*4D0/9D0*( SH*XMG2/XMT**2 )
23858             FACQQ2=0.5D0*COMFAC*AS**2*4D0/9D0*( SH*XMG2/XMU**2 )
23859             FACQQB=0.5D0*COMFAC*AS**2*4D0/9D0*( -2D0*SH*XMG2/3D0/
23860      &      XMT/XMU )
23861           ENDIF
23862           KFNSQI=MOD(KFPR(ISUBSV,1),KSUSY1)
23863           KFNSQJ=MOD(KFPR(ISUBSV,2),KSUSY1)
23864           DO 1890 I=-KFNSQI,KFNSQI,2*KFNSQI
23865             IF(I.LT.MMIN1.OR.I.GT.MMAX1) GOTO 1890
23866             IA=IABS(I)
23867             IF(I.EQ.0.OR.IA.GT.MSTP(58).OR.KFAC(1,I).EQ.0) GOTO 1890
23868             KCHQ=2
23869             IF(I.LT.0) KCHQ=3
23870             DO 1880 J=-KFNSQJ,KFNSQJ,2*KFNSQJ
23871               IF(J.LT.MMIN2.OR.J.GT.MMAX2) GOTO 1880
23872               JA=IABS(J)
23873               IF(J.EQ.0.OR.JA.GT.MSTP(58).OR.KFAC(2,J).EQ.0) GOTO 1880
23874               IF(I*J.LT.0) GOTO 1880
23875               NCHN=NCHN+1
23876               ISIG(NCHN,1)=I
23877               ISIG(NCHN,2)=J
23878               ISIG(NCHN,3)=1
23879               SIGH(NCHN)=FACQQ1*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23880      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHQ)
23881               IF(I.EQ.J) THEN
23882                 IF(ILR.EQ.0) THEN
23883                   SIGH(NCHN)=0.5D0*(FACQQ1+0.5D0*FACQQB)*RKF*
23884      &            WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ+2)
23885                 ELSE
23886                   SIGH(NCHN)=0.5D0*FACQQ1*RKF*
23887      &            WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23888      &            WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHQ)
23889                 ENDIF
23890                 NCHN=NCHN+1
23891                 ISIG(NCHN,1)=I
23892                 ISIG(NCHN,2)=J
23893                 ISIG(NCHN,3)=2
23894                 IF(ILR.EQ.0) THEN
23895                   SIGH(NCHN)=0.5D0*(FACQQ2+0.5D0*FACQQB)*RKF*
23896      &            WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ+2)
23897                 ELSE
23898                   SIGH(NCHN)=0.5D0*FACQQ2*RKF*
23899      &            WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23900      &            WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHQ)
23901                 ENDIF
23902               ENDIF
23903  1880       CONTINUE
23904  1890     CONTINUE
23905  
23906         ELSEIF(ISUB.EQ.274) THEN
23907 C...q + qbar' -> ~q + ~qbar'
23908           XMG2=PMAS(PYCOMP(KSUSY1+21),1)**2
23909           XMT=XMG2-TH
23910           XMU=XMG2-UH
23911           IF(ILR.EQ.0) THEN
23912 C...Mrenna...Normalization.and.1/XMT
23913             FACQQ1=COMFAC*AS**2*2D0/9D0*(
23914      &      (UH*TH-SQM3*SQM4)/XMT**2 )
23915             FACQQB=COMFAC*AS**2*2D0/9D0*(
23916      &      (UH*TH-SQM3*SQM4)/SH2*(2D0-2D0/3D0*SH/XMT))
23917             FACQQB=FACQQB+FACQQ1
23918           ELSE
23919             FACQQ1=COMFAC*AS**2*4D0/9D0*( XMG2*SH/XMT**2 )
23920             FACQQB=FACQQ1
23921           ENDIF
23922           KFNSQI=MOD(KFPR(ISUBSV,1),KSUSY1)
23923           KFNSQJ=MOD(KFPR(ISUBSV,2),KSUSY1)
23924           DO 1910 I=-KFNSQI,KFNSQI,2*KFNSQI
23925             IF(I.LT.MMIN1.OR.I.GT.MMAX1) GOTO 1910
23926             IA=IABS(I)
23927             IF(I.EQ.0.OR.IA.GT.MSTP(58).OR.KFAC(1,I).EQ.0) GOTO 1910
23928             KCHQ=2
23929             IF(I.LT.0) KCHQ=3
23930             DO 1900 J=-KFNSQJ,KFNSQJ,2*KFNSQJ
23931               IF(J.LT.MMIN2.OR.J.GT.MMAX2) GOTO 1900
23932               JA=IABS(J)
23933               IF(J.EQ.0.OR.JA.GT.MSTP(58).OR.KFAC(2,J).EQ.0) GOTO 1900
23934               IF(I*J.GT.0) GOTO 1900
23935               NCHN=NCHN+1
23936               ISIG(NCHN,1)=I
23937               ISIG(NCHN,2)=J
23938               ISIG(NCHN,3)=1
23939               SIGH(NCHN)=FACQQ1*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23940      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),5-KCHQ)
23941               IF(I.EQ.-J) SIGH(NCHN)=FACQQB*RKF*
23942      &        WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23943  1900       CONTINUE
23944  1910     CONTINUE
23945  
23946         ELSEIF(ISUB.EQ.277) THEN
23947 C...q_i + q_ibar -> ~q_j + ~q_jbar ,i .ne. j
23948 C...if i .eq. j covered in 274
23949           FACQQ1=COMFAC*( (UH*TH-SQM3*SQM4)/ SH**2 )
23950           KFNSQ=MOD(KFPR(ISUBSV,1),KSUSY1)
23951           FAC0=0D0
23952           DO 1920 I=MMIN1,MMAX1
23953             IA=IABS(I)
23954             IF(I.EQ.0.OR.IA.GT.MSTP(58).OR.
23955      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1920
23956             IF(IA.EQ.KFNSQ) GOTO 1920
23957             IF(IA.EQ.11.OR.IA.EQ.13.OR.IA.EQ.15) THEN
23958               EI=KCHG(IA,1)/3D0
23959               EJ=KCHG(KFNSQ,1)/3D0
23960               T3J=SIGN(0.5D0,EJ)
23961               T3I=SIGN(1D0,EI)/2D0
23962               IF(ILR.EQ.0) THEN
23963                 XLQ=2D0*(T3J-EJ*XW)*SFMIX(KFNSQ,1)
23964                 XRQ=2D0*(-EJ*XW)*SFMIX(KFNSQ,2)
23965               ELSE
23966                 XLQ=2D0*(T3J-EJ*XW)*SFMIX(KFNSQ,3)
23967                 XRQ=2D0*(-EJ*XW)*SFMIX(KFNSQ,4)
23968               ENDIF
23969               XLF=2D0*(T3I-EI*XW)
23970               XRF=2D0*(-EI*XW)
23971               IF(ILR.EQ.0) THEN
23972                 XRQ=0D0
23973               ELSE
23974                 XLQ=0D0
23975               ENDIF
23976               TAA=0.5D0*(EI*EJ)**2
23977               TZZ=(XLF**2+XRF**2)*(XLQ+XRQ)**2/64D0/XW**2/XW1**2
23978               TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)
23979               TAZ=EI*EJ*(XLQ+XRQ)*(XLF+XRF)/8D0/XW/XW1
23980               TAZ=TAZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*(1D0-SQMZ/SH)
23981               FAC0=AEM**2*12D0*(TAA+TZZ+TAZ)
23982             ELSEIF(IA.LE.6) THEN
23983               FAC0=AS**2*8D0/9D0/2D0
23984             ENDIF
23985             NCHN=NCHN+1
23986             ISIG(NCHN,1)=I
23987             ISIG(NCHN,2)=-I
23988             ISIG(NCHN,3)=1
23989             SIGH(NCHN)=FACQQ1*FAC0*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23990  1920     CONTINUE
23991  
23992         ELSEIF(ISUB.EQ.279) THEN
23993 C...g + g -> ~q_j + ~q_jbar
23994           XSU=SQM3-UH
23995           XST=SQM3-TH
23996 C...5=RKF because ~t ~tbar treated separately
23997           FAC0=RKF*COMFAC*AS**2*( 7D0/48D0+3D0*(UH-TH)**2/16D0/SH2 )
23998           FACQQ1=FAC0*(0.5D0+2D0*SQM3*TH/XST**2 + 2D0*SQM3**2/XSU/XST)
23999           FACQQ2=FAC0*(0.5D0+2D0*SQM3*UH/XSU**2 + 2D0*SQM3**2/XSU/XST)
24000           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1930
24001           NCHN=NCHN+1
24002           ISIG(NCHN,1)=21
24003           ISIG(NCHN,2)=21
24004           ISIG(NCHN,3)=1
24005           SIGH(NCHN)=FACQQ1/2D0*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
24006           NCHN=NCHN+1
24007           ISIG(NCHN,1)=21
24008           ISIG(NCHN,2)=21
24009           ISIG(NCHN,3)=2
24010           SIGH(NCHN)=FACQQ2/2D0*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
24011  1930     CONTINUE
24012  
24013         ENDIF
24014 CMRENNA--
24015         
24016       ELSEIF(ISUB.LE.340) THEN 
24017
24018       ELSEIF(ISUB.LE.360) THEN
24019
24020         IF(ISUB.EQ.341.OR.ISUB.EQ.342) THEN
24021 C...l + l -> H_L++/-- or H_R++/--.
24022           KFRES=KFPR(ISUB,1)
24023           CALL PYWIDT(KFRES,SH,WDTP,WDTE)
24024           HS=SHR*WDTP(0)
24025           FACBW=8D0*COMFAC/((SH-PMAS(KFRES,1)**2)**2+HS**2)
24026           DO 1950 I=MMIN1,MMAX1
24027             IA=IABS(I)
24028             IF((IA.NE.11.AND.IA.NE.13.AND.IA.NE.15).OR.KFAC(1,I).EQ.0) 
24029      &      GOTO 1950
24030             DO 1940 J=MMIN2,MMAX2
24031               JA=IABS(J)
24032               IF((JA.NE.11.AND.JA.NE.13.AND.JA.NE.15).OR.KFAC(2,J).EQ.0) 
24033      &        GOTO 1940
24034               IF(I*J.LT.0) GOTO 1940
24035               KCHH=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
24036               NCHN=NCHN+1
24037               ISIG(NCHN,1)=I
24038               ISIG(NCHN,2)=J
24039               ISIG(NCHN,3)=1
24040               HI=SH*PARP(181+3*((IA-11)/2)+(JA-11)/2)**2/(8D0*PARU(1))
24041               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHH/2)/2)+WDTE(0,4))
24042               SIGH(NCHN)=HI*FACBW*HF
24043  1940       CONTINUE
24044  1950     CONTINUE
24045
24046         ELSEIF(ISUB.GE.343.AND.ISUB.LE.348) THEN
24047 C...l + gamma -> H_L++/-- l' or l + gamma -> H_R++/-- l'.
24048           KFRES=KFPR(ISUB,1)
24049 C...Propagators: as simulated in PYOFSH and as desired
24050           HBW3=PMAS(KFRES,1)*PMAS(KFRES,2)/((SQM3-PMAS(KFRES,1)**2)**2+
24051      &    (PMAS(KFRES,1)*PMAS(KFRES,2))**2)
24052           CALL PYWIDT(KFRES,SQM3,WDTP,WDTE)
24053           GMMC=SQRT(SQM3)*WDTP(0)
24054           HBW3C=GMMC/((SQM3-PMAS(KFRES,1)**2)**2+GMMC**2)
24055           FHCC=COMFAC*AEM*HBW3C/HBW3
24056           DO 1980 I=MMINA,MMAXA
24057             IA=IABS(I)
24058             IF(IA.NE.11.AND.IA.NE.13.AND.IA.NE.15) GOTO 1980
24059             SQML=PMAS(IA,1)**2
24060             J=ISIGN(KFPR(ISUB,2),-I)
24061             KCHH=ISIGN(2,KCHG(IA,1)*ISIGN(1,I))
24062             WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHH/2)/2)+WDTE(0,4))/WDTP(0)
24063             SMM1=8D0*(SH+TH-SQM3)*(SH+TH-2D0*SQM3-SQML-SQM4)/
24064      &      (UH-SQM3)**2
24065             SMM2=2D0*((2D0*SQM3-3D0*SQML)*SQM4+(SQML-2D0*SQM4)*TH-
24066      &      (TH-SQM4)*SH)/(TH-SQM4)**2 
24067             SMM3=2D0*((2D0*SQM3-3D0*SQM4+TH)*SQML-(2D0*SQML-SQM4+TH)*
24068      &      SH)/(SH-SQML)**2
24069             SMM12=4D0*((2D0*SQML-SQM4-2D0*SQM3+TH)*SH+(TH-3D0*SQM3-
24070      &      3D0*SQM4)*TH+(2D0*SQM3-2D0*SQML+3D0*SQM4)*SQM3)/
24071      &      ((UH-SQM3)*(TH-SQM4))
24072             SMM13=-4D0*((TH+SQML-2D0*SQM4)*TH-(SQM3+3D0*SQML-2D0*SQM4)*
24073      &      SQM3+(SQM3+3D0*SQML+TH)*SH-(TH-SQM3+SH)**2)/
24074      &      ((UH-SQM3)*(SH-SQML))
24075             SMM23=-4D0*((SQML-SQM4+SQM3)*TH-SQM3**2+SQM3*(SQML+SQM4)-
24076      &      3D0*SQML*SQM4-(SQML-SQM4-SQM3+TH)*SH)/
24077      &      ((SH-SQML)*(TH-SQM4))
24078             SMM=(SH/(SH-SQML))**2*(SMM1+SMM2+SMM3+SMM12+SMM13+SMM23)*
24079      &      PARP(181+3*((IA-11)/2)+(IABS(J)-11)/2)**2/(4D0*PARU(1))
24080             DO 1960 ISDE=1,2
24081               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 1960
24082               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 1960
24083               NCHN=NCHN+1
24084               ISIG(NCHN,ISDE)=I
24085               ISIG(NCHN,3-ISDE)=22
24086               ISIG(NCHN,3)=0
24087               SIGH(NCHN)=FHCC*SMM*WIDSC
24088  1960       CONTINUE
24089  1980     CONTINUE
24090  
24091         ELSEIF(ISUB.EQ.349.OR.ISUB.EQ.350) THEN
24092 C...f + fbar -> H_L++ + H_L-- or H_R++ + H_R--
24093           KFRES=KFPR(ISUB,1)
24094           SQMH=PMAS(KFRES,1)**2
24095           GMMH=PMAS(KFRES,1)*PMAS(KFRES,2)
24096 C...Propagators: H++/-- as simulated in PYOFSH and as desired
24097           HBW3=GMMH/((SQM3-SQMH)**2+GMMH**2)
24098           CALL PYWIDT(KFRES,SQM3,WDTP,WDTE)
24099           GMMH3=SQRT(SQM3)*WDTP(0)
24100           HBW3C=GMMH3/((SQM3-SQMH)**2+GMMH3**2)
24101           HBW4=GMMH/((SQM4-SQMH)**2+GMMH**2)
24102           CALL PYWIDT(KFRES,SQM4,WDTP,WDTE)
24103           GMMH4=SQRT(SQM4)*WDTP(0)
24104           HBW4C=GMMH4/((SQM4-SQMH)**2+GMMH4**2)
24105 C...Kinematical and coupling functions
24106           FACHH=COMFAC*(HBW3C/HBW3)*(HBW4C/HBW4)*(TH*UH-SQM3*SQM4)
24107           XWHH=(1D0-2D0*XWV)/(8D0*XWV*(1D0-XWV))         
24108 C...Loop over allowed flavours
24109           DO 2000 I=MMINA,MMAXA
24110             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 2000
24111             EI=KCHG(IABS(I),1)/3D0
24112             AI=SIGN(1D0,EI+0.1D0)
24113             VI=AI-4D0*EI*XWV
24114             FCOI=1D0
24115             IF(IABS(I).LE.10) FCOI=FACA/3D0
24116             IF(ISUB.EQ.349) THEN
24117               HBWZ=1D0/((SH-SQMZ)**2+GMMZ**2)
24118               IF(IABS(I).LT.10) THEN
24119                 DSIGHH=8D0*AEM**2*(EI**2/SH2+
24120      &          2D0*EI*VI*XWHH*(SH-SQMZ)*HBWZ/SH+
24121      &          (VI**2+AI**2)*XWHH**2*HBWZ)
24122               ELSE 
24123                 IAOFF=181+3*((IABS(I)-11)/2)
24124                 HSUM=(PARP(IAOFF)**2+PARP(IAOFF+1)**2+PARP(IAOFF+2)**2)/
24125      &          (4D0*PARU(1))
24126                 DSIGHH=8D0*AEM**2*(EI**2/SH2+
24127      &          2D0*EI*VI*XWHH*(SH-SQMZ)*HBWZ/SH+
24128      &          (VI**2+AI**2)*XWHH**2*HBWZ)+
24129      &          8D0*AEM*(EI*HSUM/(SH*TH)+
24130      &          (VI+AI)*XWHH*HSUM*(SH-SQMZ)*HBWZ/TH)+
24131      &          4D0*HSUM**2/TH2
24132               ENDIF
24133             ELSE
24134               IF(IABS(I).LT.10) THEN
24135                 DSIGHH=8D0*AEM**2*EI**2/SH2
24136               ELSE 
24137                 IAOFF=181+3*((IABS(I)-11)/2)
24138                 HSUM=(PARP(IAOFF)**2+PARP(IAOFF+1)**2+PARP(IAOFF+2)**2)/
24139      &          (4D0*PARU(1))
24140                 DSIGHH=8D0*AEM**2*EI**2/SH2+8D0*AEM*EI*HSUM/(SH*TH)+
24141      &          4D0*HSUM**2/TH2 
24142               ENDIF     
24143             ENDIF
24144             NCHN=NCHN+1
24145             ISIG(NCHN,1)=I
24146             ISIG(NCHN,2)=-I
24147             ISIG(NCHN,3)=1
24148             SIGH(NCHN)=FACHH*FCOI*DSIGHH
24149  2000     CONTINUE
24150  
24151         ELSEIF(ISUB.EQ.351.OR.ISUB.EQ.352) THEN
24152 C...f + f' -> f" + f"' + H++/-- (W+/- + W+/- -> H++/-- as inner process)
24153           KFRES=KFPR(ISUB,1)
24154           SQMH=PMAS(KFRES,1)**2
24155           IF(ISUB.EQ.351) FACNOR=PARP(190)**8*PARP(192)**2
24156           IF(ISUB.EQ.352) FACNOR=PARP(191)**6*2D0*PMAS(63,1)**2
24157           FACWW=COMFAC*FACNOR*TAUP*VINT(2)*VINT(219)
24158           FACPRT=1D0/((VINT(204)**2-VINT(215))*
24159      &    (VINT(209)**2-VINT(216)))
24160           FACPRU=1D0/((VINT(204)**2+2D0*VINT(217))*
24161      &    (VINT(209)**2+2D0*VINT(218)))
24162           CALL PYWIDT(KFRES,SH,WDTP,WDTE)
24163           HS=SHR*WDTP(0)
24164           FACBW=(1D0/PARU(1))*VINT(2)/((SH-SQMH)**2+HS**2)
24165           IF(ABS(SHR-PMAS(KFRES,1)).GT.PARP(48)*PMAS(KFRES,2))
24166      &    FACBW=0D0
24167           DO 2020 I=MMIN1,MMAX1
24168             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 2020
24169             IF(ISUB.EQ.352.AND.IABS(I).GT.10) GOTO 2020
24170             KCHWI=(1-2*MOD(IABS(I),2))*ISIGN(1,I)  
24171             DO 2010 J=MMIN2,MMAX2
24172               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 2010
24173               IF(ISUB.EQ.352.AND.IABS(J).GT.10) GOTO 2010
24174               KCHWJ=(1-2*MOD(IABS(J),2))*ISIGN(1,J)
24175               KCHH=KCHWI+KCHWJ
24176               IF(IABS(KCHH).NE.2) GOTO 2010  
24177               FACLR=VINT(180+I)*VINT(180+J)
24178               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHH/2)/2)+WDTE(0,4))
24179               IF(I.EQ.J.AND.IABS(I).GT.10) THEN
24180                 FACPRP=0.5D0*(FACPRT+FACPRU)**2
24181               ELSE
24182                 FACPRP=FACPRT**2
24183               ENDIF 
24184               NCHN=NCHN+1
24185               ISIG(NCHN,1)=I
24186               ISIG(NCHN,2)=J
24187               ISIG(NCHN,3)=1
24188               SIGH(NCHN)=FACLR*FACWW*FACPRP*FACBW*HF
24189  2010       CONTINUE
24190  2020     CONTINUE
24191         ENDIF
24192
24193       ELSEIF(ISUB.LE.380) THEN
24194  
24195         IF(ISUB.EQ.361) THEN
24196 C...f + fbar -> W_L W_L, W_L pi_tech, pi_tech pi_tech
24197           FACA=(SH**2*BE34**2-(TH-UH)**2)
24198           ALPRHT=2.91D0*(3D0/PARP(144))
24199           HP=(1D0/12D0)*AEM*ALPRHT*CAB2*COMFAC*FACA*3D0
24200           FAR=SQRT(AEM/ALPRHT)
24201           FAO=FAR*QUPD
24202           FZR=FAR*CT2W
24203           FZO=-FAO*TANW
24204           SFAR=FAR**2
24205           SFAO=FAO**2
24206           SFZR=FZR**2
24207           SFZO=FZO**2
24208           CALL PYWIDT(23,SH,WDTP,WDTE)
24209           SSMZ=CMPLX(1D0-PMAS(23,1)**2/SH,WDTP(0)/SHR)
24210           CALL PYWIDT(54,SH,WDTP,WDTE)
24211           SSMR=CMPLX(1D0-PMAS(54,1)**2/SH,WDTP(0)/SHR)
24212           CALL PYWIDT(56,SH,WDTP,WDTE)
24213           SSMO=CMPLX(1D0-PMAS(56,1)**2/SH,WDTP(0)/SHR)
24214           DETD=(FAR*FZO-FAO*FZR)**2+SSMZ*SSMR*SSMO-SFZR*SSMO-
24215      $    SFZO*SSMR-SFAR*SSMO*SSMZ-SFAO*SSMR*SSMZ
24216           DARHO=(-FAR*SFZO+FAO*FZO*FZR+FAR*SSMO*SSMZ)/DETD/SH
24217           DZRHO=(-FZR*SFAO+FAO*FZO*FAR+FZR*SSMO)/DETD/SH
24218
24219           DO 2040 I=MMINA,MMAXA
24220             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 2040
24221             IA=IABS(I)
24222             EI=KCHG(IABS(I),1)/3D0
24223             AI=SIGN(1D0,EI+0.1D0)
24224             VI=AI-4D0*EI*XWV
24225             VALI=0.25D0*(VI+AI)
24226             VARI=0.25D0*(VI-AI)
24227             F2L=EI*DARHO+VALI*DZRHO/SQRT(XW*XW1)
24228             F2R=EI*DARHO+VARI*DZRHO/SQRT(XW*XW1)
24229             HI=ABS(F2L)**2+ABS(F2R)**2
24230             IF(IA.LE.10) HI=HI/3D0
24231             NCHN=NCHN+1
24232             ISIG(NCHN,1)=I
24233             ISIG(NCHN,2)=-I
24234             ISIG(NCHN,3)=1
24235             IF(KFA.EQ.KFB) THEN
24236                SIGH(NCHN)=HI*HP*WIDS(KFA,1)
24237             ELSE
24238                SIGH(NCHN)=HI*HP*WIDS(KFA,2)*WIDS(KFB,3)
24239                NCHN=NCHN+1
24240                ISIG(NCHN,1)=I
24241                ISIG(NCHN,2)=-I
24242                ISIG(NCHN,3)=2
24243                SIGH(NCHN)=HI*HP*WIDS(KFA,3)*WIDS(KFB,2)
24244             ENDIF
24245  2040     CONTINUE
24246
24247         ELSEIF(ISUB.EQ.364) THEN
24248 C...f + fbar -> gamma pi_tech, gamma pi_tech', Z pi_tech, Z pi_tech', 
24249 C...W pi_tech
24250           VFAC=(TH**2+UH**2-2D0*SQM3*SQM4)/SQTV*SH
24251           AFAC=(TH**2+UH**2-2D0*SQM3*SQM4+4D0*SH*SQM3)/SQTA*SH
24252
24253           ALPRHT=2.91D0*(3D0/PARP(144))
24254           HP=(1D0/24D0)*AEM**2*COMFAC*3D0
24255           FAR=SQRT(AEM/ALPRHT)
24256           FAO=FAR*QUPD
24257           FZR=FAR*CT2W
24258           FZO=-FAO*TANW
24259           SFAR=FAR**2
24260           SFAO=FAO**2
24261           SFZR=FZR**2
24262           SFZO=FZO**2
24263           CALL PYWIDT(23,SH,WDTP,WDTE)
24264           SSMZ=CMPLX(1D0-PMAS(23,1)**2/SH,WDTP(0)/SHR)
24265           CALL PYWIDT(54,SH,WDTP,WDTE)
24266           SSMR=CMPLX(1D0-PMAS(54,1)**2/SH,WDTP(0)/SHR)
24267           CALL PYWIDT(56,SH,WDTP,WDTE)
24268           SSMO=CMPLX(1D0-PMAS(56,1)**2/SH,WDTP(0)/SHR)
24269           DETD=(FAR*FZO-FAO*FZR)**2+SSMZ*SSMR*SSMO-SFZR*SSMO-
24270      $    SFZO*SSMR-SFAR*SSMO*SSMZ-SFAO*SSMR*SSMZ
24271           DARHO=(-FAR*SFZO+FAO*FZO*FZR+FAR*SSMO*SSMZ)/DETD/SH
24272           DZRHO=(-FZR*SFAO+FAO*FZO*FAR+FZR*SSMO)/DETD/SH
24273           DAOME=(-FAO*SFZR+FAR*FZO*FZR+FAO*SSMR*SSMZ)/DETD/SH
24274           DZOME=(-FZO*SFAR+FAR*FAO*FZR+FZO*SSMR)/DETD/SH
24275
24276           DO 2060 I=MMINA,MMAXA
24277             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 2060
24278             IA=IABS(I)
24279             EI=KCHG(IABS(I),1)/3D0
24280             AI=SIGN(1D0,EI+0.1D0)
24281             VI=AI-4D0*EI*XWV
24282             VALI=0.25D0*(VI+AI)
24283             VARI=0.25D0*(VI-AI)
24284             F2L=(EI*DARHO+VALI*DZRHO/SQRT(XW*XW1))*VRGP
24285             F2L=F2L+(EI*DAOME+VALI*DZOME/SQRT(XW*XW1))*VOGP
24286             F2R=(EI*DARHO+VARI*DZRHO/SQRT(XW*XW1))*VRGP
24287             F2R=F2R+(EI*DAOME+VARI*DZOME/SQRT(XW*XW1))*VOGP
24288             HI=(ABS(F2L)**2+ABS(F2R)**2)*VFAC
24289             F2L=(EI*DARHO+VALI*DZRHO/SQRT(XW*XW1))*ARGP
24290             F2L=F2L+(EI*DAOME+VALI*DZOME/SQRT(XW*XW1))*AOGP
24291             F2R=(EI*DARHO+VARI*DZRHO/SQRT(XW*XW1))*ARGP
24292             F2R=F2R+(EI*DAOME+VARI*DZOME/SQRT(XW*XW1))*AOGP
24293             HJ=(ABS(F2L)**2+ABS(F2R)**2)*AFAC
24294             HI=HI+HJ
24295             IF(IA.LE.10) HI=HI/3D0
24296             NCHN=NCHN+1
24297             ISIG(NCHN,1)=I
24298             ISIG(NCHN,2)=-I
24299             ISIG(NCHN,3)=1
24300             IF(ISUBSV.NE.368) THEN
24301                SIGH(NCHN)=HI*HP*WIDS(KFA,2)*WIDS(KFB,2)
24302             ELSE
24303                SIGH(NCHN)=HI*HP*WIDS(KFA,2)*WIDS(KFB,3)
24304                NCHN=NCHN+1
24305                ISIG(NCHN,1)=I
24306                ISIG(NCHN,2)=-I
24307                ISIG(NCHN,3)=2
24308                SIGH(NCHN)=HI*HP*WIDS(KFA,3)*WIDS(KFB,2)
24309             ENDIF
24310  2060     CONTINUE
24311
24312         ELSEIF(ISUB.EQ.370) THEN
24313 C...f + fbar' -> W_L Z_L, W_L pi_tech, Z_L pi_tech, pi_tech pi_tech
24314
24315           FACA=(SH**2*BE34**2-(TH-UH)**2)
24316           ALPRHT=2.91D0*(3D0/PARP(144))
24317           HP=(1D0/24D0)*AEM*ALPRHT*CAB2*COMFAC*FACA*3D0/XW
24318
24319           FWR=SQRT(AEM/ALPRHT)/(2D0*SQRT(XW))
24320           CALL PYWIDT(24,SH,WDTP,WDTE)
24321           SSMZ=CMPLX(1D0-PMAS(24,1)**2/SH,WDTP(0)/SHR)
24322           CALL PYWIDT(55,SH,WDTP,WDTE)
24323           SSMR=CMPLX(1D0-PMAS(55,1)**2/SH,WDTP(0)/SHR)
24324
24325           DETD=SSMZ*SSMR-CMPLX(FWR**2,0D0)
24326           HP=HP*FWR**2/ABS(DETD)**2/SH**2
24327
24328           DO 2080 I=MMIN1,MMAX1
24329             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 2080
24330             IA=IABS(I)
24331             DO 2070 J=MMIN2,MMAX2
24332               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 2070
24333               JA=IABS(J)
24334               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 2070
24335               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
24336      &        GOTO 2070
24337               KCHR=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
24338               HI=HP
24339               IF(IA.LE.10) HI=HI*VCKM((IA+1)/2,(JA+1)/2)/3D0
24340               NCHN=NCHN+1
24341               ISIG(NCHN,1)=I
24342               ISIG(NCHN,2)=J
24343               ISIG(NCHN,3)=1
24344               SIGH(NCHN)=HI*WIDS(KFA,(5-KCHR)/2)*WIDS(KFB,2)
24345  2070       CONTINUE
24346  2080     CONTINUE
24347
24348         ELSEIF(ISUB.EQ.374) THEN
24349 C...f + fbar' -> G pi_tech
24350           VFAC=(TH**2+UH**2-2D0*SQM3*SQM4)/SQTV*VRGP**2
24351           AFAC=(TH**2+UH**2-2D0*SQM3*SQM4+4D0*SH*SQM3)/SQTA*ARGP**2
24352
24353           ALPRHT=2.91D0*(3D0/PARP(144))
24354           HP=(1D0/48D0)*AEM**2/XW*COMFAC*3D0*(VFAC+AFAC)*SH
24355
24356           FWR=SQRT(AEM/ALPRHT)/(2D0*SQRT(XW))
24357           CALL PYWIDT(24,SH,WDTP,WDTE)
24358           SSMZ=CMPLX(1D0-PMAS(24,1)**2/SH,WDTP(0)/SHR)
24359           CALL PYWIDT(55,SH,WDTP,WDTE)
24360           SSMR=CMPLX(1D0-PMAS(55,1)**2/SH,WDTP(0)/SHR)
24361
24362           DETD=SSMZ*SSMR-CMPLX(FWR**2,0D0)
24363           HP=HP*FWR**2/ABS(DETD)**2/SH**2
24364
24365           DO 2100 I=MMIN1,MMAX1
24366             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 2100
24367             IA=IABS(I)
24368             DO 2090 J=MMIN2,MMAX2
24369               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 2090
24370               JA=IABS(J)
24371               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 2090
24372               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
24373      &        GOTO 2090
24374               KCHR=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
24375               HI=HP
24376               IF(IA.LE.10) HI=HI*VCKM((IA+1)/2,(JA+1)/2)/3D0
24377               NCHN=NCHN+1
24378               ISIG(NCHN,1)=I
24379               ISIG(NCHN,2)=J
24380               ISIG(NCHN,3)=1
24381               SIGH(NCHN)=HI*WIDS(KFA,(5-KCHR)/2)*WIDS(KFB,2)
24382  2090       CONTINUE
24383  2100     CONTINUE
24384  
24385         ENDIF
24386       ENDIF
24387  
24388 C...Multiply with parton distributions
24389       IF(ISUB.LE.90.OR.ISUB.GE.96) THEN
24390         DO 2200 ICHN=1,NCHN
24391           IF(MINT(45).GE.2) THEN
24392             KFL1=ISIG(ICHN,1)
24393             SIGH(ICHN)=SIGH(ICHN)*XSFX(1,KFL1)
24394           ENDIF
24395           IF(MINT(46).GE.2) THEN
24396             KFL2=ISIG(ICHN,2)
24397             SIGH(ICHN)=SIGH(ICHN)*XSFX(2,KFL2)
24398           ENDIF
24399           SIGS=SIGS+SIGH(ICHN)
24400  2200   CONTINUE
24401       ENDIF
24402  
24403       RETURN
24404       END
24405  
24406 C*********************************************************************
24407  
24408 C...PYPDFU
24409 C...Gives electron, muon, tau, photon, pi+, neutron, proton and hyperon
24410 C...parton distributions according to a few different parametrizations.
24411 C...Note that what is coded is x times the probability distribution,
24412 C...i.e. xq(x,Q2) etc.
24413  
24414       SUBROUTINE PYPDFU(KF,X,Q2,XPQ)
24415  
24416 C...Double precision and integer declarations.
24417       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
24418       IMPLICIT INTEGER(I-N)
24419       INTEGER PYK,PYCHGE,PYCOMP
24420 C...Commonblocks.
24421       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
24422       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
24423       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
24424       COMMON/PYINT1/MINT(400),VINT(400)
24425       COMMON/PYINT8/XPVMD(-6:6),XPANL(-6:6),XPANH(-6:6),XPBEH(-6:6),
24426      &XPDIR(-6:6)
24427       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/,/PYINT8/
24428 C...Local arrays.
24429       DIMENSION XPQ(-25:25),XPEL(-25:25),XPGA(-6:6),VXPGA(-6:6),
24430      &XPPI(-6:6),XPPR(-6:6)
24431  
24432 C...Interface to PDFLIB.
24433       COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX
24434       SAVE /W50513/
24435       DOUBLE PRECISION XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU,
24436      &VALUE(20),XMIN,XMAX,Q2MIN,Q2MAX
24437       CHARACTER*20 PARM(20)
24438       DATA VALUE/20*0D0/,PARM/20*' '/
24439  
24440 C...Data related to Schuler-Sjostrand photon distributions.
24441       DATA ALAMGA/0.2D0/, PMCGA/1.3D0/, PMBGA/4.6D0/
24442  
24443 C...Reset parton distributions.
24444       MINT(92)=0
24445       DO 100 KFL=-25,25
24446         XPQ(KFL)=0D0
24447   100 CONTINUE
24448  
24449 C...Check x and particle species.
24450       IF(X.LE.0D0.OR.X.GE.1D0) THEN
24451         WRITE(MSTU(11),5000) X
24452         RETURN
24453       ENDIF
24454       KFA=IABS(KF)
24455       IF(KFA.NE.11.AND.KFA.NE.13.AND.KFA.NE.15.AND.KFA.NE.22.AND.
24456      &KFA.NE.211.AND.KFA.NE.2112.AND.KFA.NE.2212.AND.KFA.NE.3122.AND.
24457      &KFA.NE.3112.AND.KFA.NE.3212.AND.KFA.NE.3222.AND.KFA.NE.3312.AND.
24458      &KFA.NE.3322.AND.KFA.NE.3334.AND.KFA.NE.111) THEN
24459         WRITE(MSTU(11),5100) KF
24460         RETURN
24461       ENDIF
24462  
24463 C...Electron (or muon or tau) parton distribution call.
24464       IF(KFA.EQ.11.OR.KFA.EQ.13.OR.KFA.EQ.15) THEN
24465         CALL PYPDEL(KFA,X,Q2,XPEL)
24466         DO 110 KFL=-25,25
24467           XPQ(KFL)=XPEL(KFL)
24468   110   CONTINUE
24469  
24470 C...Photon parton distribution call (VDM+anomalous).
24471       ELSEIF(KFA.EQ.22.AND.MINT(109).LE.1) THEN
24472         IF(MSTP(56).EQ.1.AND.MSTP(55).EQ.1) THEN
24473           CALL PYPDGA(X,Q2,XPGA)
24474           DO 120 KFL=-6,6
24475             XPQ(KFL)=XPGA(KFL)
24476   120     CONTINUE
24477         ELSEIF(MSTP(56).EQ.1.AND.MSTP(55).GE.5.AND.MSTP(55).LE.8) THEN
24478           Q2MX=Q2
24479           P2MX=0.36D0
24480           IF(MSTP(55).GE.7) P2MX=4.0D0
24481           IF(MSTP(57).EQ.0) Q2MX=P2MX
24482           P2=0D0
24483           IF(VINT(120).LT.0D0) P2=VINT(120)**2
24484           CALL PYGGAM(MSTP(55)-4,X,Q2MX,P2,MSTP(60),F2GAM,XPGA)
24485           DO 130 KFL=-6,6
24486             XPQ(KFL)=XPGA(KFL)
24487   130     CONTINUE
24488           VINT(231)=P2MX
24489         ELSEIF(MSTP(56).EQ.1.AND.MSTP(55).GE.9.AND.MSTP(55).LE.12) THEN
24490           Q2MX=Q2
24491           P2MX=0.36D0
24492           IF(MSTP(55).GE.11) P2MX=4.0D0
24493           IF(MSTP(57).EQ.0) Q2MX=P2MX
24494           P2=0D0
24495           IF(VINT(120).LT.0D0) P2=VINT(120)**2
24496           CALL PYGGAM(MSTP(55)-8,X,Q2MX,P2,MSTP(60),F2GAM,XPGA)
24497           DO 140 KFL=-6,6
24498             XPQ(KFL)=XPVMD(KFL)+XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL)
24499   140     CONTINUE
24500           VINT(231)=P2MX
24501         ELSEIF(MSTP(56).EQ.2) THEN
24502 C...Call PDFLIB parton distributions.
24503           PARM(1)='NPTYPE'
24504           VALUE(1)=3
24505           PARM(2)='NGROUP'
24506           VALUE(2)=MSTP(55)/1000
24507           PARM(3)='NSET'
24508           VALUE(3)=MOD(MSTP(55),1000)
24509           IF(MINT(93).NE.3000000+MSTP(55)) THEN
24510             CALL PDFSET(PARM,VALUE)
24511             MINT(93)=3000000+MSTP(55)
24512           ENDIF
24513           XX=X
24514           QQ2=MAX(0D0,Q2MIN,Q2)
24515           IF(MSTP(57).EQ.0) QQ2=Q2MIN
24516           P2=0D0
24517           IF(VINT(120).LT.0D0) P2=VINT(120)**2
24518           IP2=MSTP(60)
24519           IF(MSTP(55).EQ.5004) THEN
24520             IF(5D0*P2.LT.QQ2.AND.
24521      &      QQ2.GT.0.6D0.AND.QQ2.LT.5D4.AND.
24522      &      P2.GE.0D0.AND.P2.LT.10D0.AND.
24523      &      XX.GT.1D-4.AND.XX.LT.1D0) THEN
24524               CALL STRUCTP(XX,QQ2,P2,IP2,UPV,DNV,USEA,DSEA,STR,CHM,
24525      &        BOT,TOP,GLU)
24526             ELSE
24527               UPV=0D0
24528               DNV=0D0
24529               USEA=0D0
24530               DSEA=0D0
24531               STR=0D0
24532               CHM=0D0
24533               BOT=0D0
24534               TOP=0D0
24535               GLU=0D0
24536             ENDIF
24537           ELSE
24538             IF(P2.LT.QQ2) THEN
24539               CALL STRUCTP(XX,QQ2,P2,IP2,UPV,DNV,USEA,DSEA,STR,CHM,
24540      &        BOT,TOP,GLU)
24541             ELSE
24542               UPV=0D0
24543               DNV=0D0
24544               USEA=0D0
24545               DSEA=0D0
24546               STR=0D0
24547               CHM=0D0
24548               BOT=0D0
24549               TOP=0D0
24550               GLU=0D0
24551             ENDIF
24552           ENDIF
24553           VINT(231)=Q2MIN
24554           XPQ(0)=GLU
24555           XPQ(1)=DNV
24556           XPQ(-1)=DNV
24557           XPQ(2)=UPV
24558           XPQ(-2)=UPV
24559           XPQ(3)=STR
24560           XPQ(-3)=STR
24561           XPQ(4)=CHM
24562           XPQ(-4)=CHM
24563           XPQ(5)=BOT
24564           XPQ(-5)=BOT
24565           XPQ(6)=TOP
24566           XPQ(-6)=TOP
24567         ELSE
24568           WRITE(MSTU(11),5200) KF,MSTP(56),MSTP(55)
24569         ENDIF
24570  
24571 C...Pion/gammaVDM parton distribution call.
24572       ELSEIF(KFA.EQ.211.OR.KFA.EQ.111.OR.(KFA.EQ.22.AND.
24573      &  MINT(109).EQ.2)) THEN
24574         IF(KFA.EQ.22.AND.MSTP(56).EQ.1.AND.MSTP(55).GE.5.AND.
24575      &  MSTP(55).LE.12) THEN
24576           ISET=1+MOD(MSTP(55)-1,4)
24577           Q2MX=Q2
24578           P2MX=0.36D0
24579           IF(ISET.GE.3) P2MX=4.0D0
24580           IF(MSTP(57).EQ.0) Q2MX=P2MX
24581           P2=0D0
24582           IF(VINT(120).LT.0D0) P2=VINT(120)**2
24583           CALL PYGGAM(ISET,X,Q2MX,P2,MSTP(60),F2GAM,XPGA)
24584           DO 150 KFL=-6,6
24585             XPQ(KFL)=XPVMD(KFL)
24586   150     CONTINUE
24587           VINT(231)=P2MX
24588         ELSEIF(MSTP(54).EQ.1.AND.MSTP(53).GE.1.AND.MSTP(53).LE.3) THEN
24589           CALL PYPDPI(X,Q2,XPPI)
24590           DO 160 KFL=-6,6
24591             XPQ(KFL)=XPPI(KFL)
24592   160     CONTINUE
24593         ELSEIF(MSTP(54).EQ.2) THEN
24594 C...Call PDFLIB parton distributions.
24595           PARM(1)='NPTYPE'
24596           VALUE(1)=2
24597           PARM(2)='NGROUP'
24598           VALUE(2)=MSTP(53)/1000
24599           PARM(3)='NSET'
24600           VALUE(3)=MOD(MSTP(53),1000)
24601           IF(MINT(93).NE.2000000+MSTP(53)) THEN
24602             CALL PDFSET(PARM,VALUE)
24603             MINT(93)=2000000+MSTP(53)
24604           ENDIF
24605           XX=X
24606           QQ=SQRT(MAX(0D0,Q2MIN,Q2))
24607           IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
24608           CALL STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
24609           VINT(231)=Q2MIN
24610           XPQ(0)=GLU
24611           XPQ(1)=DSEA
24612           XPQ(-1)=UPV+DSEA
24613           XPQ(2)=UPV+USEA
24614           XPQ(-2)=USEA
24615           XPQ(3)=STR
24616           XPQ(-3)=STR
24617           XPQ(4)=CHM
24618           XPQ(-4)=CHM
24619           XPQ(5)=BOT
24620           XPQ(-5)=BOT
24621           XPQ(6)=TOP
24622           XPQ(-6)=TOP
24623         ELSE
24624           WRITE(MSTU(11),5200) KF,MSTP(54),MSTP(53)
24625         ENDIF
24626  
24627 C...Anomalous photon parton distribution call.
24628       ELSEIF(KFA.EQ.22.AND.MINT(109).EQ.3) THEN
24629         Q2MX=Q2
24630         P2MX=PARP(15)**2
24631         IF(MSTP(56).EQ.1.AND.MSTP(55).LE.8) THEN
24632           IF(MSTP(55).EQ.5.OR.MSTP(55).EQ.6) P2MX=0.36D0
24633           IF(MSTP(55).EQ.7.OR.MSTP(55).EQ.8) P2MX=4.0D0
24634           IF(MSTP(57).EQ.0) Q2MX=P2MX
24635           P2=0D0
24636           IF(VINT(120).LT.0D0) P2=VINT(120)**2
24637           CALL PYGGAM(MSTP(55)-4,X,Q2MX,P2,MSTP(60),F2GM,XPGA)
24638           DO 170 KFL=-6,6
24639             XPQ(KFL)=XPANL(KFL)+XPANH(KFL)
24640   170     CONTINUE
24641           VINT(231)=P2MX
24642         ELSEIF(MSTP(56).EQ.1) THEN
24643           IF(MSTP(55).EQ.9.OR.MSTP(55).EQ.10) P2MX=0.36D0
24644           IF(MSTP(55).EQ.11.OR.MSTP(55).EQ.12) P2MX=4.0D0
24645           IF(MSTP(57).EQ.0) Q2MX=P2MX
24646           P2=0D0
24647           IF(VINT(120).LT.0D0) P2=VINT(120)**2
24648           CALL PYGGAM(MSTP(55)-8,X,Q2MX,P2,MSTP(60),F2GM,XPGA)
24649           DO 180 KFL=-6,6
24650             XPQ(KFL)=MAX(0D0,XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL))
24651   180     CONTINUE
24652           VINT(231)=P2MX
24653         ELSEIF(MSTP(56).EQ.2) THEN
24654           IF(MSTP(57).EQ.0) Q2MX=P2MX
24655           CALL PYGANO(0,X,Q2MX,P2MX,ALAMGA,XPGA,VXPGA)
24656           DO 190 KFL=-6,6
24657             XPQ(KFL)=XPGA(KFL)
24658   190     CONTINUE
24659           VINT(231)=P2MX
24660         ELSEIF(MSTP(55).GE.1.AND.MSTP(55).LE.5) THEN
24661           IF(MSTP(57).EQ.0) Q2MX=P2MX
24662           CALL PYGVMD(0,MSTP(55),X,Q2MX,P2MX,PARP(1),XPGA,VXPGA)
24663           DO 200 KFL=-6,6
24664             XPQ(KFL)=XPGA(KFL)
24665   200     CONTINUE
24666           VINT(231)=P2MX
24667         ELSE
24668   210     RKF=11D0*PYR(0)
24669           KFR=1
24670           IF(RKF.GT.1D0) KFR=2
24671           IF(RKF.GT.5D0) KFR=3
24672           IF(RKF.GT.6D0) KFR=4
24673           IF(RKF.GT.10D0) KFR=5
24674           IF(KFR.EQ.4.AND.Q2.LT.PMCGA**2) GOTO 210
24675           IF(KFR.EQ.5.AND.Q2.LT.PMBGA**2) GOTO 210
24676           IF(MSTP(57).EQ.0) Q2MX=P2MX
24677           CALL PYGVMD(0,KFR,X,Q2MX,P2MX,PARP(1),XPGA,VXPGA)
24678           DO 220 KFL=-6,6
24679             XPQ(KFL)=XPGA(KFL)
24680   220     CONTINUE
24681           VINT(231)=P2MX
24682         ENDIF
24683  
24684 C...Proton parton distribution call.
24685       ELSE
24686         IF(MSTP(52).EQ.1.AND.MSTP(51).GE.1.AND.MSTP(51).LE.20) THEN
24687           CALL PYPDPR(X,Q2,XPPR)
24688           DO 230 KFL=-6,6
24689             XPQ(KFL)=XPPR(KFL)
24690   230     CONTINUE
24691         ELSEIF(MSTP(52).EQ.2) THEN
24692 C...Call PDFLIB parton distributions.
24693           PARM(1)='NPTYPE'
24694           VALUE(1)=1
24695           PARM(2)='NGROUP'
24696           VALUE(2)=MSTP(51)/1000
24697           PARM(3)='NSET'
24698           VALUE(3)=MOD(MSTP(51),1000)
24699           IF(MINT(93).NE.1000000+MSTP(51)) THEN
24700 C...ALICE
24701             CALL PDFSET_ALICE(PARM,VALUE)
24702             MINT(93)=1000000+MSTP(51)
24703           ENDIF
24704           XX=X
24705           QQ=SQRT(MAX(0D0,Q2MIN,Q2))
24706           IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
24707 C...ALICE
24708           CALL STRUCTM_ALICE(
24709      +         XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
24710           VINT(231)=Q2MIN
24711           XPQ(0)=GLU
24712           XPQ(1)=DNV+DSEA
24713           XPQ(-1)=DSEA
24714           XPQ(2)=UPV+USEA
24715           XPQ(-2)=USEA
24716           XPQ(3)=STR
24717           XPQ(-3)=STR
24718           XPQ(4)=CHM
24719           XPQ(-4)=CHM
24720           XPQ(5)=BOT
24721           XPQ(-5)=BOT
24722           XPQ(6)=TOP
24723           XPQ(-6)=TOP
24724         ELSE
24725           WRITE(MSTU(11),5200) KF,MSTP(52),MSTP(51)
24726         ENDIF
24727       ENDIF
24728  
24729 C...Isospin average for pi0/gammaVDM.
24730       IF(KFA.EQ.111.OR.(KFA.EQ.22.AND.MINT(109).EQ.2)) THEN
24731         IF(KFA.EQ.22.AND.MSTP(55).GE.5.AND.MSTP(55).LE.12) THEN
24732           XPV=XPQ(2)-XPQ(1)
24733           XPQ(2)=XPQ(1)
24734           XPQ(-2)=XPQ(-1)
24735         ELSE
24736           XPS=0.5D0*(XPQ(1)+XPQ(-2))
24737           XPV=0.5D0*(XPQ(2)+XPQ(-1))-XPS
24738           XPQ(2)=XPS
24739           XPQ(-1)=XPS
24740         ENDIF
24741         IF(KFA.EQ.22.AND.MINT(105).LE.223) THEN
24742           XPQ(1)=XPQ(1)+0.2D0*XPV
24743           XPQ(-1)=XPQ(-1)+0.2D0*XPV
24744           XPQ(2)=XPQ(2)+0.8D0*XPV
24745           XPQ(-2)=XPQ(-2)+0.8D0*XPV
24746         ELSEIF(KFA.EQ.22.AND.MINT(105).EQ.333) THEN
24747           XPQ(3)=XPQ(3)+XPV
24748           XPQ(-3)=XPQ(-3)+XPV
24749         ELSEIF(KFA.EQ.22.AND.MINT(105).EQ.443) THEN
24750           XPQ(4)=XPQ(4)+XPV
24751           XPQ(-4)=XPQ(-4)+XPV
24752           IF(MSTP(55).GE.9) THEN
24753             DO 240 KFL=-6,6
24754               XPQ(KFL)=0D0
24755   240       CONTINUE
24756           ENDIF
24757         ELSE
24758           XPQ(1)=XPQ(1)+0.5D0*XPV
24759           XPQ(-1)=XPQ(-1)+0.5D0*XPV
24760           XPQ(2)=XPQ(2)+0.5D0*XPV
24761           XPQ(-2)=XPQ(-2)+0.5D0*XPV
24762         ENDIF
24763  
24764 C...Rescale for gammaVDM by effective gamma -> rho coupling.
24765 C+++Do not rescale?
24766         IF(KFA.EQ.22.AND.MINT(109).EQ.2.AND..NOT.(MSTP(56).EQ.1
24767      &  .AND.MSTP(55).GE.5.AND.MSTP(55).LE.12)) THEN
24768           DO 250 KFL=-6,6
24769             XPQ(KFL)=VINT(281)*XPQ(KFL)
24770   250     CONTINUE
24771           VINT(232)=VINT(281)*XPV
24772         ENDIF
24773  
24774 C...Isospin conjugation for neutron.
24775       ELSEIF(KFA.EQ.2112) THEN
24776         XPS=XPQ(1)
24777         XPQ(1)=XPQ(2)
24778         XPQ(2)=XPS
24779         XPS=XPQ(-1)
24780         XPQ(-1)=XPQ(-2)
24781         XPQ(-2)=XPS
24782  
24783 C...Simple recipes for hyperon (average valence parton distribution).
24784       ELSEIF(KFA.EQ.3122.OR.KFA.EQ.3112.OR.KFA.EQ.3212.OR.KFA.EQ.3222
24785      &  .OR.KFA.EQ.3312.OR.KFA.EQ.3322.OR.KFA.EQ.3334) THEN
24786         XPVAL=(XPQ(1)+XPQ(2)-XPQ(-1)-XPQ(-2))/3D0
24787         XPSEA=0.5D0*(XPQ(-1)+XPQ(-2))
24788         XPQ(1)=XPSEA
24789         XPQ(2)=XPSEA
24790         XPQ(-1)=XPSEA
24791         XPQ(-2)=XPSEA
24792         XPQ(KFA/1000)=XPQ(KFA/1000)+XPVAL
24793         XPQ(MOD(KFA/100,10))=XPQ(MOD(KFA/100,10))+XPVAL
24794         XPQ(MOD(KFA/10,10))=XPQ(MOD(KFA/10,10))+XPVAL
24795       ENDIF
24796  
24797 C...Charge conjugation for antiparticle.
24798       IF(KF.LT.0) THEN
24799         DO 260 KFL=1,25
24800           IF(KFL.EQ.21.OR.KFL.EQ.22.OR.KFL.EQ.23.OR.KFL.EQ.25) GOTO 260
24801           XPS=XPQ(KFL)
24802           XPQ(KFL)=XPQ(-KFL)
24803           XPQ(-KFL)=XPS
24804   260   CONTINUE
24805       ENDIF
24806  
24807 C...Allow gluon also in position 21.
24808       XPQ(21)=XPQ(0)
24809  
24810 C...Check positivity and reset above maximum allowed flavour.
24811       DO 270 KFL=-25,25
24812         XPQ(KFL)=MAX(0D0,XPQ(KFL))
24813         IF(IABS(KFL).GT.MSTP(58).AND.IABS(KFL).LE.8) XPQ(KFL)=0D0
24814   270 CONTINUE
24815  
24816 C...Formats for error printouts.
24817  5000 FORMAT(' Error: x value outside physical range; x =',1P,D12.3)
24818  5100 FORMAT(' Error: illegal particle code for parton distribution;',
24819      &' KF =',I5)
24820  5200 FORMAT(' Error: unknown parton distribution; KF, library, set =',
24821      &3I5)
24822  
24823       RETURN
24824       END
24825  
24826 C*********************************************************************
24827  
24828 C...PYPDFL
24829 C...Gives proton parton distribution at small x and/or Q^2 according to
24830 C...correct limiting behaviour.
24831  
24832       SUBROUTINE PYPDFL(KF,X,Q2,XPQ)
24833  
24834 C...Double precision and integer declarations.
24835       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
24836       IMPLICIT INTEGER(I-N)
24837       INTEGER PYK,PYCHGE,PYCOMP
24838 C...Commonblocks.
24839       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
24840       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
24841       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
24842       COMMON/PYINT1/MINT(400),VINT(400)
24843       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
24844 C...Local arrays.
24845       DIMENSION XPQ(-25:25),XPA(-25:25),XPB(-25:25),WTSB(-3:3)
24846       DATA RMR/0.92D0/,RMP/0.38D0/,WTSB/0.5D0,1D0,1D0,5D0,1D0,1D0,0.5D0/
24847  
24848 C...Send everything but protons/neutrons/VMD pions directly to PYPDFU.
24849       MINT(92)=0
24850       KFA=IABS(KF)
24851       IACC=0
24852       IF((KFA.EQ.2212.OR.KFA.EQ.2112).AND.MSTP(57).GE.2) IACC=1
24853       IF(KFA.EQ.211.AND.MSTP(57).GE.3) IACC=1
24854       IF(KFA.EQ.22.AND.MINT(109).EQ.2.AND.MSTP(57).GE.3) IACC=1
24855       IF(IACC.EQ.0) THEN
24856         CALL PYPDFU(KF,X,Q2,XPQ)
24857         RETURN
24858       ENDIF
24859  
24860 C...Reset. Check x.
24861       DO 100 KFL=-25,25
24862         XPQ(KFL)=0D0
24863   100 CONTINUE
24864       IF(X.LE.0D0.OR.X.GE.1D0) THEN
24865         WRITE(MSTU(11),5000) X
24866         RETURN
24867       ENDIF
24868  
24869 C...Define valence content.
24870       KFC=KF
24871       NV1=2
24872       NV2=1
24873       IF(KF.EQ.2212) THEN
24874         KFV1=2
24875         KFV2=1
24876       ELSEIF(KF.EQ.-2212) THEN
24877         KFV1=-2
24878         KFV2=-1
24879       ELSEIF(KF.EQ.2112) THEN
24880         KFV1=1
24881         KFV2=2
24882       ELSEIF(KF.EQ.-2112) THEN
24883         KFV1=-1
24884         KFV2=-2
24885       ELSEIF(KF.EQ.211) THEN
24886         NV1=1
24887         KFV1=2
24888         KFV2=-1
24889       ELSEIF(KF.EQ.-211) THEN
24890         NV1=1
24891         KFV1=-2
24892         KFV2=1
24893       ELSEIF(MINT(105).LE.223) THEN
24894         KFV1=1
24895         WTV1=0.2D0
24896         KFV2=2
24897         WTV2=0.8D0
24898       ELSEIF(MINT(105).EQ.333) THEN
24899         KFV1=3
24900         WTV1=1.0D0
24901         KFV2=1
24902         WTV2=0.0D0
24903       ELSEIF(MINT(105).EQ.443) THEN
24904         KFV1=4
24905         WTV1=1.0D0
24906         KFV2=1
24907         WTV2=0.0D0
24908       ENDIF
24909  
24910 C...Do naive evaluation and find min Q^2, boundary Q^2 and x_0.
24911       CALL PYPDFU(KFC,X,Q2,XPA)
24912       Q2MN=MAX(3D0,VINT(231))
24913       Q2B=2D0+0.052D0**2*EXP(3.56D0*SQRT(MAX(0D0,-LOG(3D0*X))))
24914       XMN=EXP(-(LOG((Q2MN-2D0)/0.052D0**2)/3.56D0)**2)/3D0
24915  
24916 C...Large Q2 and large x: naive call is enough.
24917       IF(Q2.GT.Q2MN.AND.Q2.GT.Q2B) THEN
24918         DO 110 KFL=-25,25
24919           XPQ(KFL)=XPA(KFL)
24920   110   CONTINUE
24921         MINT(92)=1
24922  
24923 C...Small Q2 and large x: dampen boundary value.
24924       ELSEIF(X.GT.XMN) THEN
24925  
24926 C...Evaluate at boundary and define dampening factors.
24927         CALL PYPDFU(KFC,X,Q2MN,XPA)
24928         FV=(Q2*(Q2MN+RMR)/(Q2MN*(Q2+RMR)))**(0.55D0*(1D0-X)/(1D0-XMN))
24929         FS=(Q2*(Q2MN+RMP)/(Q2MN*(Q2+RMP)))**1.08D0
24930  
24931 C...Separate valence and sea parts of parton distribution.
24932         IF(KFA.NE.22) THEN
24933           XFV1=XPA(KFV1)-XPA(-KFV1)
24934           XPA(KFV1)=XPA(-KFV1)
24935           XFV2=XPA(KFV2)-XPA(-KFV2)
24936           XPA(KFV2)=XPA(-KFV2)
24937         ELSE
24938           XPA(KFV1)=XPA(KFV1)-WTV1*VINT(232)
24939           XPA(-KFV1)=XPA(-KFV1)-WTV1*VINT(232)
24940           XPA(KFV2)=XPA(KFV2)-WTV2*VINT(232)
24941           XPA(-KFV2)=XPA(-KFV2)-WTV2*VINT(232)
24942         ENDIF
24943  
24944 C...Dampen valence and sea separately. Put back together.
24945         DO 120 KFL=-25,25
24946           XPQ(KFL)=FS*XPA(KFL)
24947   120   CONTINUE
24948         IF(KFA.NE.22) THEN
24949           XPQ(KFV1)=XPQ(KFV1)+FV*XFV1
24950           XPQ(KFV2)=XPQ(KFV2)+FV*XFV2
24951         ELSE
24952           XPQ(KFV1)=XPQ(KFV1)+FV*WTV1*VINT(232)
24953           XPQ(-KFV1)=XPQ(-KFV1)+FV*WTV1*VINT(232)
24954           XPQ(KFV2)=XPQ(KFV2)+FV*WTV2*VINT(232)
24955           XPQ(-KFV2)=XPQ(-KFV2)+FV*WTV2*VINT(232)
24956         ENDIF
24957         MINT(92)=2
24958  
24959 C...Large Q2 and small x: interpolate behaviour.
24960       ELSEIF(Q2.GT.Q2MN) THEN
24961  
24962 C...Evaluate at extremes and define coefficients for interpolation.
24963         CALL PYPDFU(KFC,XMN,Q2MN,XPA)
24964         VI232A=VINT(232)
24965         CALL PYPDFU(KFC,X,Q2B,XPB)
24966         VI232B=VINT(232)
24967         FLA=LOG(Q2B/Q2)/LOG(Q2B/Q2MN)
24968         FVA=(X/XMN)**0.45D0*FLA
24969         FSA=(X/XMN)**(-0.08D0)*FLA
24970         FB=1D0-FLA
24971  
24972 C...Separate valence and sea parts of parton distribution.
24973         IF(KFA.NE.22) THEN
24974           XFVA1=XPA(KFV1)-XPA(-KFV1)
24975           XPA(KFV1)=XPA(-KFV1)
24976           XFVA2=XPA(KFV2)-XPA(-KFV2)
24977           XPA(KFV2)=XPA(-KFV2)
24978           XFVB1=XPB(KFV1)-XPB(-KFV1)
24979           XPB(KFV1)=XPB(-KFV1)
24980           XFVB2=XPB(KFV2)-XPB(-KFV2)
24981           XPB(KFV2)=XPB(-KFV2)
24982         ELSE
24983           XPA(KFV1)=XPA(KFV1)-WTV1*VI232A
24984           XPA(-KFV1)=XPA(-KFV1)-WTV1*VI232A
24985           XPA(KFV2)=XPA(KFV2)-WTV2*VI232A
24986           XPA(-KFV2)=XPA(-KFV2)-WTV2*VI232A
24987           XPB(KFV1)=XPB(KFV1)-WTV1*VI232B
24988           XPB(-KFV1)=XPB(-KFV1)-WTV1*VI232B
24989           XPB(KFV2)=XPB(KFV2)-WTV2*VI232B
24990           XPB(-KFV2)=XPB(-KFV2)-WTV2*VI232B
24991         ENDIF
24992  
24993 C...Interpolate for valence and sea. Put back together.
24994         DO 130 KFL=-25,25
24995           XPQ(KFL)=FSA*XPA(KFL)+FB*XPB(KFL)
24996   130   CONTINUE
24997         IF(KFA.NE.22) THEN
24998           XPQ(KFV1)=XPQ(KFV1)+(FVA*XFVA1+FB*XFVB1)
24999           XPQ(KFV2)=XPQ(KFV2)+(FVA*XFVA2+FB*XFVB2)
25000         ELSE
25001           XPQ(KFV1)=XPQ(KFV1)+WTV1*(FVA*VI232A+FB*VI232B)
25002           XPQ(-KFV1)=XPQ(-KFV1)+WTV1*(FVA*VI232A+FB*VI232B)
25003           XPQ(KFV2)=XPQ(KFV2)+WTV2*(FVA*VI232A+FB*VI232B)
25004           XPQ(-KFV2)=XPQ(-KFV2)+WTV2*(FVA*VI232A+FB*VI232B)
25005         ENDIF
25006         MINT(92)=3
25007  
25008 C...Small Q2 and small x: dampen boundary value and add term.
25009       ELSE
25010  
25011 C...Evaluate at boundary and define dampening factors.
25012         CALL PYPDFU(KFC,XMN,Q2MN,XPA)
25013         FB=(XMN-X)*(Q2MN-Q2)/(XMN*Q2MN)
25014         FA=1D0-FB
25015         FVC=(X/XMN)**0.45D0*(Q2/(Q2+RMR))**0.55D0
25016         FVA=FVC*FA*((Q2MN+RMR)/Q2MN)**0.55D0
25017         FVB=FVC*FB*1.10D0*XMN**0.45D0*0.11D0
25018         FSC=(X/XMN)**(-0.08D0)*(Q2/(Q2+RMP))**1.08D0
25019         FSA=FSC*FA*((Q2MN+RMP)/Q2MN)**1.08D0
25020         FSB=FSC*FB*0.21D0*XMN**(-0.08D0)*0.21D0
25021  
25022 C...Separate valence and sea parts of parton distribution.
25023         IF(KFA.NE.22) THEN
25024           XFV1=XPA(KFV1)-XPA(-KFV1)
25025           XPA(KFV1)=XPA(-KFV1)
25026           XFV2=XPA(KFV2)-XPA(-KFV2)
25027           XPA(KFV2)=XPA(-KFV2)
25028         ELSE
25029           XPA(KFV1)=XPA(KFV1)-WTV1*VINT(232)
25030           XPA(-KFV1)=XPA(-KFV1)-WTV1*VINT(232)
25031           XPA(KFV2)=XPA(KFV2)-WTV2*VINT(232)
25032           XPA(-KFV2)=XPA(-KFV2)-WTV2*VINT(232)
25033         ENDIF
25034  
25035 C...Dampen valence and sea separately. Add constant terms.
25036 C...Put back together.
25037         DO 140 KFL=-25,25
25038           XPQ(KFL)=FSA*XPA(KFL)
25039   140   CONTINUE
25040         IF(KFA.NE.22) THEN
25041           DO 150 KFL=-3,3
25042             XPQ(KFL)=XPQ(KFL)+FSB*WTSB(KFL)
25043   150     CONTINUE
25044           XPQ(KFV1)=XPQ(KFV1)+(FVA*XFV1+FVB*NV1)
25045           XPQ(KFV2)=XPQ(KFV2)+(FVA*XFV2+FVB*NV2)
25046         ELSE
25047           DO 160 KFL=-3,3
25048             XPQ(KFL)=XPQ(KFL)+VINT(281)*FSB*WTSB(KFL)
25049   160     CONTINUE
25050           XPQ(KFV1)=XPQ(KFV1)+WTV1*(FVA*VINT(232)+FVB*VINT(281))
25051           XPQ(-KFV1)=XPQ(-KFV1)+WTV1*(FVA*VINT(232)+FVB*VINT(281))
25052           XPQ(KFV2)=XPQ(KFV2)+WTV2*(FVA*VINT(232)+FVB*VINT(281))
25053           XPQ(-KFV2)=XPQ(-KFV2)+WTV2*(FVA*VINT(232)+FVB*VINT(281))
25054         ENDIF
25055         XPQ(21)=XPQ(0)
25056         MINT(92)=4
25057       ENDIF
25058  
25059 C...Format for error printout.
25060  5000 FORMAT(' Error: x value outside physical range; x =',1P,D12.3)
25061  
25062       RETURN
25063       END
25064  
25065 C*********************************************************************
25066  
25067 C...PYPDEL
25068 C...Gives electron (or muon, or tau) parton distribution.
25069  
25070       SUBROUTINE PYPDEL(KFA,X,Q2,XPEL)
25071  
25072 C...Double precision and integer declarations.
25073       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25074       IMPLICIT INTEGER(I-N)
25075       INTEGER PYK,PYCHGE,PYCOMP
25076 C...Commonblocks.
25077       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
25078       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
25079       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
25080       COMMON/PYINT1/MINT(400),VINT(400)
25081       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
25082 C...Local arrays.
25083       DIMENSION XPEL(-25:25),XPGA(-6:6),SXP(0:6)
25084  
25085 C...Interface to PDFLIB.
25086       COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX
25087       SAVE /W50513/
25088       DOUBLE PRECISION XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU,
25089      &VALUE(20),XMIN,XMAX,Q2MIN,Q2MAX
25090       CHARACTER*20 PARM(20)
25091       DATA VALUE/20*0D0/,PARM/20*' '/
25092  
25093 C...Some common constants.
25094       DO 100 KFL=-25,25
25095         XPEL(KFL)=0D0
25096   100 CONTINUE
25097       AEM=PARU(101)
25098       PME=PMAS(11,1)
25099       IF(KFA.EQ.13) PME=PMAS(13,1)
25100       IF(KFA.EQ.15) PME=PMAS(15,1)
25101       XL=LOG(MAX(1D-10,X))
25102       X1L=LOG(MAX(1D-10,1D0-X))
25103       HLE=LOG(MAX(3D0,Q2/PME**2))
25104       HBE2=(AEM/PARU(1))*(HLE-1D0)
25105  
25106 C...Electron inside electron, see R. Kleiss et al., in Z physics at
25107 C...LEP 1, CERN 89-08, p. 34
25108       IF(MSTP(59).LE.1) THEN
25109         HDE=1D0+(AEM/PARU(1))*(1.5D0*HLE+1.289868D0)+(AEM/PARU(1))**2*
25110      &  (-2.164868D0*HLE**2+9.840808D0*HLE-10.130464D0)
25111         HEE=HBE2*(1D0-X)**(HBE2-1D0)*SQRT(MAX(0D0,HDE))-
25112      &  0.5D0*HBE2*(1D0+X)+HBE2**2/8D0*((1D0+X)*(-4D0*X1L+3D0*XL)-
25113      &  4D0*XL/(1D0-X)-5D0-X)
25114       ELSE
25115         HEE=HBE2*(1D0-X)**(HBE2-1D0)*EXP(0.172784D0*HBE2)/
25116      &  PYGAMM(1D0+HBE2)-0.5D0*HBE2*(1D0+X)+HBE2**2/8D0*((1D0+X)*
25117      &  (-4D0*X1L+3D0*XL)-4D0*XL/(1D0-X)-5D0-X)
25118       ENDIF
25119 C...Zero distribution for very large x and rescale it for intermediate.
25120       IF(X.GT.1D0-1D-10) THEN
25121         HEE=0D0
25122       ELSEIF(X.GT.1D0-1D-7) THEN
25123         HEE=HEE*1000D0**HBE2/(1000D0**HBE2-1D0)
25124       ENDIF
25125       XPEL(KFA)=X*HEE
25126  
25127 C...Photon and (transverse) W- inside electron.
25128       AEMP=PYALEM(PME*SQRT(MAX(0D0,Q2)))/PARU(2)
25129       IF(MSTP(13).LE.1) THEN
25130         HLG=HLE
25131       ELSE
25132         HLG=LOG(MAX(1D0,(PARP(13)/PME**2)*(1D0-X)/X**2))
25133       ENDIF
25134       XPEL(22)=AEMP*HLG*(1D0+(1D0-X)**2)
25135       HLW=LOG(1D0+Q2/PMAS(24,1)**2)/(4D0*PARU(102))
25136       XPEL(-24)=AEMP*HLW*(1D0+(1D0-X)**2)
25137  
25138 C...Electron or positron inside photon inside electron.
25139       IF(KFA.EQ.11.AND.MSTP(12).EQ.1) THEN
25140         XFSEA=0.5D0*(AEMP*(HLE-1D0))**2*(4D0/3D0+X-X**2-4D0*X**3/3D0+
25141      &  2D0*X*(1D0+X)*XL)
25142         XPEL(11)=XPEL(11)+XFSEA
25143         XPEL(-11)=XFSEA
25144  
25145 C...Initialize PDFLIB photon parton distributions.
25146         IF(MSTP(56).EQ.2) THEN
25147           PARM(1)='NPTYPE'
25148           VALUE(1)=3
25149           PARM(2)='NGROUP'
25150           VALUE(2)=MSTP(55)/1000
25151           PARM(3)='NSET'
25152           VALUE(3)=MOD(MSTP(55),1000)
25153           IF(MINT(93).NE.3000000+MSTP(55)) THEN
25154             CALL PDFSET(PARM,VALUE)
25155             MINT(93)=3000000+MSTP(55)
25156           ENDIF
25157         ENDIF
25158  
25159 C...Quarks and gluons inside photon inside electron:
25160 C...numerical convolution required.
25161         DO 110 KFL=0,6
25162           SXP(KFL)=0D0
25163   110   CONTINUE
25164         SUMXPP=0D0
25165         ITER=-1
25166   120   ITER=ITER+1
25167         SUMXP=SUMXPP
25168         NSTP=2**(ITER-1)
25169         IF(ITER.EQ.0) NSTP=2
25170         DO 130 KFL=0,6
25171           SXP(KFL)=0.5D0*SXP(KFL)
25172   130   CONTINUE
25173         WTSTP=0.5D0/NSTP
25174         IF(ITER.EQ.0) WTSTP=0.5D0
25175 C...Pick grid of x_{gamma} values logarithmically even.
25176         DO 150 ISTP=1,NSTP
25177           IF(ITER.EQ.0) THEN
25178             XLE=XL*(ISTP-1)
25179           ELSE
25180             XLE=XL*(ISTP-0.5D0)/NSTP
25181           ENDIF
25182           XE=MIN(1D0-1D-10,EXP(XLE))
25183           XG=MIN(1D0-1D-10,X/XE)
25184 C...Evaluate photon inside electron parton distribution for convolution.
25185           XPGP=1D0+(1D0-XE)**2
25186           IF(MSTP(13).LE.1) THEN
25187             XPGP=XPGP*HLE
25188           ELSE
25189             XPGP=XPGP*LOG(MAX(1D0,(PARP(13)/PME**2)*(1D0-XE)/XE**2))
25190           ENDIF
25191 C...Evaluate photon parton distributions for convolution.
25192           IF(MSTP(56).EQ.1) THEN
25193             CALL PYPDGA(XG,Q2,XPGA)
25194             DO 140 KFL=0,5
25195               SXP(KFL)=SXP(KFL)+WTSTP*XPGP*XPGA(KFL)
25196   140       CONTINUE
25197           ELSEIF(MSTP(56).EQ.2) THEN
25198 C...Call PDFLIB parton distributions.
25199             XX=XG
25200             QQ=SQRT(MAX(0D0,Q2MIN,Q2))
25201             IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
25202             CALL STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
25203             SXP(0)=SXP(0)+WTSTP*XPGP*GLU
25204             SXP(1)=SXP(1)+WTSTP*XPGP*DNV
25205             SXP(2)=SXP(2)+WTSTP*XPGP*UPV
25206             SXP(3)=SXP(3)+WTSTP*XPGP*STR
25207             SXP(4)=SXP(4)+WTSTP*XPGP*CHM
25208             SXP(5)=SXP(5)+WTSTP*XPGP*BOT
25209             SXP(6)=SXP(6)+WTSTP*XPGP*TOP
25210           ENDIF
25211   150   CONTINUE
25212         SUMXPP=SXP(0)+2D0*SXP(1)+2D0*SXP(2)
25213         IF(ITER.LE.2.OR.(ITER.LE.7.AND.ABS(SUMXPP-SUMXP).GT.
25214      &  PARP(14)*(SUMXPP+SUMXP))) GOTO 120
25215  
25216 C...Put convolution into output arrays.
25217         FCONV=AEMP*(-XL)
25218         XPEL(0)=FCONV*SXP(0)
25219         DO 160 KFL=1,6
25220           XPEL(KFL)=FCONV*SXP(KFL)
25221           XPEL(-KFL)=XPEL(KFL)
25222   160   CONTINUE
25223       ENDIF
25224  
25225       RETURN
25226       END
25227  
25228 C*********************************************************************
25229  
25230 C...PYPDGA
25231 C...Gives photon parton distribution.
25232  
25233       SUBROUTINE PYPDGA(X,Q2,XPGA)
25234  
25235 C...Double precision and integer declarations.
25236       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25237       IMPLICIT INTEGER(I-N)
25238       INTEGER PYK,PYCHGE,PYCOMP
25239 C...Commonblocks.
25240       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
25241       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
25242       COMMON/PYINT1/MINT(400),VINT(400)
25243       SAVE /PYDAT1/,/PYPARS/,/PYINT1/
25244 C...Local arrays.
25245       DIMENSION XPGA(-6:6),DGAG(4,3),DGBG(4,3),DGCG(4,3),DGAN(4,3),
25246      &DGBN(4,3),DGCN(4,3),DGDN(4,3),DGEN(4,3),DGAS(4,3),DGBS(4,3),
25247      &DGCS(4,3),DGDS(4,3),DGES(4,3)
25248  
25249 C...The following data lines are coefficients needed in the
25250 C...Drees and Grassie photon parton distribution parametrization.
25251       DATA DGAG/-.207D0,.6158D0,1.074D0,0.D0,.8926D-2,.6594D0,
25252      &.4766D0,.1975D-1,.03197D0,1.018D0,.2461D0,.2707D-1/
25253       DATA DGBG/-.1987D0,.6257D0,8.352D0,5.024D0,.5085D-1,.2774D0,
25254      &-.3906D0,-.3212D0,-.618D-2,.9476D0,-.6094D0,-.1067D-1/
25255       DATA DGCG/5.119D0,-.2752D0,-6.993D0,2.298D0,-.2313D0,.1382D0,
25256      &6.542D0,.5162D0,-.1216D0,.9047D0,2.653D0,.2003D-2/
25257       DATA DGAN/2.285D0,-.1526D-1,1330.D0,4.219D0,-.3711D0,1.061D0,
25258      &4.758D0,-.1503D-1,15.8D0,-.9464D0,-.5D0,-.2118D0/
25259       DATA DGBN/6.073D0,-.8132D0,-41.31D0,3.165D0,-.1717D0,.7815D0,
25260      &1.535D0,.7067D-2,2.742D0,-.7332D0,.7148D0,3.287D0/
25261       DATA DGCN/-.4202D0,.1778D-1,.9216D0,.18D0,.8766D-1,.2197D-1,
25262      &.1096D0,.204D0,.2917D-1,.4657D-1,.1785D0,.4811D-1/
25263       DATA DGDN/-.8083D-1,.6346D0,1.208D0,.203D0,-.8915D0,.2857D0,
25264      &2.973D0,.1185D0,-.342D-1,.7196D0,.7338D0,.8139D-1/
25265       DATA DGEN/.5526D-1,1.136D0,.9512D0,.1163D-1,-.1816D0,.5866D0,
25266      &2.421D0,.4059D0,-.2302D-1,.9229D0,.5873D0,-.79D-4/
25267       DATA DGAS/16.69D0,-.7916D0,1099.D0,4.428D0,-.1207D0,1.071D0,
25268      &1.977D0,-.8625D-2,6.734D0,-1.008D0,-.8594D-1,.7625D-1/
25269       DATA DGBS/.176D0,.4794D-1,1.047D0,.25D-1,25.D0,-1.648D0,
25270      &-.1563D-1,6.438D0,59.88D0,-2.983D0,4.48D0,.9686D0/
25271       DATA DGCS/-.208D-1,.3386D-2,4.853D0,.8404D0,-.123D-1,1.162D0,
25272      &.4824D0,-.11D-1,-.3226D-2,.8432D0,.3616D0,.1383D-2/
25273       DATA DGDS/-.1685D-1,1.353D0,1.426D0,1.239D0,-.9194D-1,.7912D0,
25274      &.6397D0,2.327D0,-.3321D-1,.9475D0,-.3198D0,.2132D-1/
25275       DATA DGES/-.1986D0,1.1D0,1.136D0,-.2779D0,.2015D-1,.9869D0,
25276      &-.7036D-1,.1694D-1,.1059D0,.6954D0,-.6663D0,.3683D0/
25277  
25278 C...Photon parton distribution from Drees and Grassie.
25279 C...Allowed variable range: 1 GeV^2 < Q^2 < 10000 GeV^2.
25280       DO 100 KFL=-6,6
25281         XPGA(KFL)=0D0
25282   100 CONTINUE
25283       VINT(231)=1D0
25284       IF(MSTP(57).LE.0) THEN
25285         T=LOG(1D0/0.16D0)
25286       ELSE
25287         T=LOG(MIN(1D4,MAX(1D0,Q2))/0.16D0)
25288       ENDIF
25289       X1=1D0-X
25290       NF=3
25291       IF(Q2.GT.25D0) NF=4
25292       IF(Q2.GT.300D0) NF=5
25293       NFE=NF-2
25294       AEM=PARU(101)
25295  
25296 C...Evaluate gluon content.
25297       DGA=DGAG(1,NFE)*T**DGAG(2,NFE)+DGAG(3,NFE)*T**(-DGAG(4,NFE))
25298       DGB=DGBG(1,NFE)*T**DGBG(2,NFE)+DGBG(3,NFE)*T**(-DGBG(4,NFE))
25299       DGC=DGCG(1,NFE)*T**DGCG(2,NFE)+DGCG(3,NFE)*T**(-DGCG(4,NFE))
25300       XPGL=DGA*X**DGB*X1**DGC
25301  
25302 C...Evaluate up- and down-type quark content.
25303       DGA=DGAN(1,NFE)*T**DGAN(2,NFE)+DGAN(3,NFE)*T**(-DGAN(4,NFE))
25304       DGB=DGBN(1,NFE)*T**DGBN(2,NFE)+DGBN(3,NFE)*T**(-DGBN(4,NFE))
25305       DGC=DGCN(1,NFE)*T**DGCN(2,NFE)+DGCN(3,NFE)*T**(-DGCN(4,NFE))
25306       DGD=DGDN(1,NFE)*T**DGDN(2,NFE)+DGDN(3,NFE)*T**(-DGDN(4,NFE))
25307       DGE=DGEN(1,NFE)*T**DGEN(2,NFE)+DGEN(3,NFE)*T**(-DGEN(4,NFE))
25308       XPQN=X*(X**2+X1**2)/(DGA-DGB*LOG(X1))+DGC*X**DGD*X1**DGE
25309       DGA=DGAS(1,NFE)*T**DGAS(2,NFE)+DGAS(3,NFE)*T**(-DGAS(4,NFE))
25310       DGB=DGBS(1,NFE)*T**DGBS(2,NFE)+DGBS(3,NFE)*T**(-DGBS(4,NFE))
25311       DGC=DGCS(1,NFE)*T**DGCS(2,NFE)+DGCS(3,NFE)*T**(-DGCS(4,NFE))
25312       DGD=DGDS(1,NFE)*T**DGDS(2,NFE)+DGDS(3,NFE)*T**(-DGDS(4,NFE))
25313       DGE=DGES(1,NFE)*T**DGES(2,NFE)+DGES(3,NFE)*T**(-DGES(4,NFE))
25314       DGF=9D0
25315       IF(NF.EQ.4) DGF=10D0
25316       IF(NF.EQ.5) DGF=55D0/6D0
25317       XPQS=DGF*X*(X**2+X1**2)/(DGA-DGB*LOG(X1))+DGC*X**DGD*X1**DGE
25318       IF(NF.LE.3) THEN
25319         XPQU=(XPQS+9D0*XPQN)/6D0
25320         XPQD=(XPQS-4.5D0*XPQN)/6D0
25321       ELSEIF(NF.EQ.4) THEN
25322         XPQU=(XPQS+6D0*XPQN)/8D0
25323         XPQD=(XPQS-6D0*XPQN)/8D0
25324       ELSE
25325         XPQU=(XPQS+7.5D0*XPQN)/10D0
25326         XPQD=(XPQS-5D0*XPQN)/10D0
25327       ENDIF
25328  
25329 C...Put into output arrays.
25330       XPGA(0)=AEM*XPGL
25331       XPGA(1)=AEM*XPQD
25332       XPGA(2)=AEM*XPQU
25333       XPGA(3)=AEM*XPQD
25334       IF(NF.GE.4) XPGA(4)=AEM*XPQU
25335       IF(NF.GE.5) XPGA(5)=AEM*XPQD
25336       DO 110 KFL=1,6
25337         XPGA(-KFL)=XPGA(KFL)
25338   110 CONTINUE
25339  
25340       RETURN
25341       END
25342  
25343 C*********************************************************************
25344  
25345 C...PYGGAM
25346 C...Constructs the F2 and parton distributions of the photon
25347 C...by summing homogeneous (VMD) and inhomogeneous (anomalous) terms.
25348 C...For F2, c and b are included by the Bethe-Heitler formula;
25349 C...in the 'MSbar' scheme additionally a Cgamma term is added.
25350 C...Contains the SaS sets 1D, 1M, 2D and 2M.
25351 C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
25352  
25353       SUBROUTINE PYGGAM(ISET,X,Q2,P2,IP2,F2GM,XPDFGM)
25354  
25355 C...Double precision and integer declarations.
25356       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25357       IMPLICIT INTEGER(I-N)
25358       INTEGER PYK,PYCHGE,PYCOMP
25359 C...Commonblocks.
25360       COMMON/PYINT8/XPVMD(-6:6),XPANL(-6:6),XPANH(-6:6),XPBEH(-6:6),
25361      &XPDIR(-6:6)
25362       COMMON/PYINT9/VXPVMD(-6:6),VXPANL(-6:6),VXPANH(-6:6),VXPDGM(-6:6)
25363       SAVE /PYINT8/,/PYINT9/
25364 C...Local arrays.
25365       DIMENSION XPDFGM(-6:6),XPGA(-6:6), VXPGA(-6:6)
25366 C...Charm and bottom masses (low to compensate for J/psi etc.).
25367       DATA PMC/1.3D0/, PMB/4.6D0/
25368 C...alpha_em and alpha_em/(2*pi).
25369       DATA AEM/0.007297D0/, AEM2PI/0.0011614D0/
25370 C...Lambda value for 4 flavours.
25371       DATA ALAM/0.20D0/
25372 C...Mixture u/(u+d), = 0.5 for incoherent and = 0.8 for coherent sum.
25373       DATA FRACU/0.8D0/
25374 C...VMD couplings f_V**2/(4*pi).
25375       DATA FRHO/2.20D0/, FOMEGA/23.6D0/, FPHI/18.4D0/
25376 C...Masses for rho (=omega) and phi.
25377       DATA PMRHO/0.770D0/, PMPHI/1.020D0/
25378 C...Number of points in integration for IP2=1.
25379       DATA NSTEP/100/
25380  
25381 C...Reset output.
25382       F2GM=0D0
25383       DO 100 KFL=-6,6
25384         XPDFGM(KFL)=0D0
25385         XPVMD(KFL)=0D0
25386         XPANL(KFL)=0D0
25387         XPANH(KFL)=0D0
25388         XPBEH(KFL)=0D0
25389         XPDIR(KFL)=0D0
25390         VXPVMD(KFL)=0D0
25391         VXPANL(KFL)=0D0
25392         VXPANH(KFL)=0D0
25393         VXPDGM(KFL)=0D0
25394   100 CONTINUE
25395  
25396 C...Set Q0 cut-off parameter as function of set used.
25397       IF(ISET.LE.2) THEN
25398         Q0=0.6D0
25399       ELSE
25400         Q0=2D0
25401       ENDIF
25402       Q02=Q0**2
25403  
25404 C...Scale choice for off-shell photon; common factors.
25405       Q2A=Q2
25406       FACNOR=1D0
25407       IF(IP2.EQ.1) THEN
25408         P2MX=P2+Q02
25409         Q2A=Q2+P2*Q02/MAX(Q02,Q2)
25410         FACNOR=LOG(Q2/Q02)/NSTEP
25411       ELSEIF(IP2.EQ.2) THEN
25412         P2MX=MAX(P2,Q02)
25413       ELSEIF(IP2.EQ.3) THEN
25414         P2MX=P2+Q02
25415         Q2A=Q2+P2*Q02/MAX(Q02,Q2)
25416       ELSEIF(IP2.EQ.4) THEN
25417         P2MX=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
25418      &  ((Q2+P2)*(Q02+P2)))
25419       ELSEIF(IP2.EQ.5) THEN
25420         P2MXA=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
25421      &  ((Q2+P2)*(Q02+P2)))
25422         P2MX=Q0*SQRT(P2MXA)
25423         FACNOR=LOG(Q2/P2MXA)/LOG(Q2/P2MX)
25424       ELSEIF(IP2.EQ.6) THEN
25425         P2MX=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
25426      &  ((Q2+P2)*(Q02+P2)))
25427         P2MX=MAX(0D0,1D0-P2/Q2)*P2MX+MIN(1D0,P2/Q2)*MAX(P2,Q02)
25428       ELSE
25429         P2MXA=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
25430      &  ((Q2+P2)*(Q02+P2)))
25431         P2MX=Q0*SQRT(P2MXA)
25432         P2MXB=P2MX
25433         P2MX=MAX(0D0,1D0-P2/Q2)*P2MX+MIN(1D0,P2/Q2)*MAX(P2,Q02)
25434         P2MXB=MAX(0D0,1D0-P2/Q2)*P2MXB+MIN(1D0,P2/Q2)*P2MXA
25435         IF(ABS(Q2-Q02).GT.1D-6) THEN
25436           FACNOR=LOG(Q2/P2MXA)/LOG(Q2/P2MXB)
25437         ELSEIF(P2.LT.Q02) THEN
25438           FACNOR=Q02**3/(Q02+P2)/(Q02**2-P2**2/2D0)
25439         ELSE
25440           FACNOR=1D0
25441         ENDIF
25442       ENDIF
25443  
25444 C...Call VMD parametrization for d quark and use to give rho, omega,
25445 C...phi. Note dipole dampening for off-shell photon.
25446       CALL PYGVMD(ISET,1,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
25447       XFVAL=VXPGA(1)
25448       XPGA(1)=XPGA(2)
25449       XPGA(-1)=XPGA(-2)
25450       FACUD=AEM*(1D0/FRHO+1D0/FOMEGA)*(PMRHO**2/(PMRHO**2+P2))**2
25451       FACS=AEM*(1D0/FPHI)*(PMPHI**2/(PMPHI**2+P2))**2
25452       DO 110 KFL=-5,5
25453         XPVMD(KFL)=(FACUD+FACS)*XPGA(KFL)
25454   110 CONTINUE
25455       XPVMD(1)=XPVMD(1)+(1D0-FRACU)*FACUD*XFVAL
25456       XPVMD(2)=XPVMD(2)+FRACU*FACUD*XFVAL
25457       XPVMD(3)=XPVMD(3)+FACS*XFVAL
25458       XPVMD(-1)=XPVMD(-1)+(1D0-FRACU)*FACUD*XFVAL
25459       XPVMD(-2)=XPVMD(-2)+FRACU*FACUD*XFVAL
25460       XPVMD(-3)=XPVMD(-3)+FACS*XFVAL
25461       VXPVMD(1)=(1D0-FRACU)*FACUD*XFVAL
25462       VXPVMD(2)=FRACU*FACUD*XFVAL
25463       VXPVMD(3)=FACS*XFVAL
25464       VXPVMD(-1)=(1D0-FRACU)*FACUD*XFVAL
25465       VXPVMD(-2)=FRACU*FACUD*XFVAL
25466       VXPVMD(-3)=FACS*XFVAL
25467  
25468       IF(IP2.NE.1) THEN
25469 C...Anomalous parametrizations for different strategies
25470 C...for off-shell photons; except full integration.
25471  
25472 C...Call anomalous parametrization for d + u + s.
25473         CALL PYGANO(-3,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
25474         DO 120 KFL=-5,5
25475           XPANL(KFL)=FACNOR*XPGA(KFL)
25476           VXPANL(KFL)=FACNOR*VXPGA(KFL)
25477   120   CONTINUE
25478  
25479 C...Call anomalous parametrization for c and b.
25480         CALL PYGANO(4,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
25481         DO 130 KFL=-5,5
25482           XPANH(KFL)=FACNOR*XPGA(KFL)
25483           VXPANH(KFL)=FACNOR*VXPGA(KFL)
25484   130   CONTINUE
25485         CALL PYGANO(5,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
25486         DO 140 KFL=-5,5
25487           XPANH(KFL)=XPANH(KFL)+FACNOR*XPGA(KFL)
25488           VXPANH(KFL)=VXPANH(KFL)+FACNOR*VXPGA(KFL)
25489   140   CONTINUE
25490  
25491       ELSE
25492 C...Special option: loop over flavours and integrate over k2.
25493         DO 170 KF=1,5
25494           DO 160 ISTEP=1,NSTEP
25495             Q2STEP=Q02*(Q2/Q02)**((ISTEP-0.5D0)/NSTEP)
25496             IF((KF.EQ.4.AND.Q2STEP.LT.PMC**2).OR.
25497      &      (KF.EQ.5.AND.Q2STEP.LT.PMB**2)) GOTO 160
25498             CALL PYGVMD(0,KF,X,Q2,Q2STEP,ALAM,XPGA,VXPGA)
25499             FACQ=AEM2PI*(Q2STEP/(Q2STEP+P2))**2*FACNOR
25500             IF(MOD(KF,2).EQ.0) FACQ=FACQ*(8D0/9D0)
25501             IF(MOD(KF,2).EQ.1) FACQ=FACQ*(2D0/9D0)
25502             DO 150 KFL=-5,5
25503               IF(KF.LE.3) XPANL(KFL)=XPANL(KFL)+FACQ*XPGA(KFL)
25504               IF(KF.GE.4) XPANH(KFL)=XPANH(KFL)+FACQ*XPGA(KFL)
25505               IF(KF.LE.3) VXPANL(KFL)=VXPANL(KFL)+FACQ*VXPGA(KFL)
25506               IF(KF.GE.4) VXPANH(KFL)=VXPANH(KFL)+FACQ*VXPGA(KFL)
25507   150       CONTINUE
25508   160     CONTINUE
25509   170   CONTINUE
25510       ENDIF
25511  
25512 C...Call Bethe-Heitler term expression for charm and bottom.
25513       CALL PYGBEH(4,X,Q2,P2,PMC**2,XPBH)
25514       XPBEH(4)=XPBH
25515       XPBEH(-4)=XPBH
25516       CALL PYGBEH(5,X,Q2,P2,PMB**2,XPBH)
25517       XPBEH(5)=XPBH
25518       XPBEH(-5)=XPBH
25519  
25520 C...For MSbar subtraction call C^gamma term expression for d, u, s.
25521       IF(ISET.EQ.2.OR.ISET.EQ.4) THEN
25522         CALL PYGDIR(X,Q2,P2,Q02,XPGA)
25523         DO 180 KFL=-5,5
25524           XPDIR(KFL)=XPGA(KFL)
25525   180   CONTINUE
25526       ENDIF
25527  
25528 C...Store result in output array.
25529       DO 190 KFL=-5,5
25530         CHSQ=1D0/9D0
25531         IF(IABS(KFL).EQ.2.OR.IABS(KFL).EQ.4) CHSQ=4D0/9D0
25532         XPF2=XPVMD(KFL)+XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL)
25533         IF(KFL.NE.0) F2GM=F2GM+CHSQ*XPF2
25534         XPDFGM(KFL)=XPVMD(KFL)+XPANL(KFL)+XPANH(KFL)
25535         VXPDGM(KFL)=VXPVMD(KFL)+VXPANL(KFL)+VXPANH(KFL)
25536   190 CONTINUE
25537  
25538       RETURN
25539       END
25540  
25541 C*********************************************************************
25542  
25543 C...PYGVMD
25544 C...Evaluates the VMD parton distributions of a photon,
25545 C...evolved homogeneously from an initial scale P2 to Q2.
25546 C...Does not include dipole suppression factor.
25547 C...ISET is parton distribution set, see above;
25548 C...additionally ISET=0 is used for the evolution of an anomalous photon
25549 C...which branched at a scale P2 and then evolved homogeneously to Q2.
25550 C...ALAM is the 4-flavour Lambda, which is automatically converted
25551 C...to 3- and 5-flavour equivalents as needed.
25552 C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
25553  
25554       SUBROUTINE PYGVMD(ISET,KF,X,Q2,P2,ALAM,XPGA,VXPGA)
25555  
25556 C...Double precision and integer declarations.
25557       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25558       IMPLICIT INTEGER(I-N)
25559       INTEGER PYK,PYCHGE,PYCOMP
25560 C...Local arrays and data.
25561       DIMENSION XPGA(-6:6), VXPGA(-6:6)
25562       DATA PMC/1.3D0/, PMB/4.6D0/, AEM/0.007297D0/, AEM2PI/0.0011614D0/
25563  
25564 C...Reset output.
25565       DO 100 KFL=-6,6
25566         XPGA(KFL)=0D0
25567         VXPGA(KFL)=0D0
25568   100 CONTINUE
25569       KFA=IABS(KF)
25570  
25571 C...Calculate Lambda; protect against unphysical Q2 and P2 input.
25572       ALAM3=ALAM*(PMC/ALAM)**(2D0/27D0)
25573       ALAM5=ALAM*(ALAM/PMB)**(2D0/23D0)
25574       P2EFF=MAX(P2,1.2D0*ALAM3**2)
25575       IF(KFA.EQ.4) P2EFF=MAX(P2EFF,PMC**2)
25576       IF(KFA.EQ.5) P2EFF=MAX(P2EFF,PMB**2)
25577       Q2EFF=MAX(Q2,P2EFF)
25578  
25579 C...Find number of flavours at lower and upper scale.
25580       NFP=4
25581       IF(P2EFF.LT.PMC**2) NFP=3
25582       IF(P2EFF.GT.PMB**2) NFP=5
25583       NFQ=4
25584       IF(Q2EFF.LT.PMC**2) NFQ=3
25585       IF(Q2EFF.GT.PMB**2) NFQ=5
25586  
25587 C...Find s as sum of 3-, 4- and 5-flavour parts.
25588       S=0D0
25589       IF(NFP.EQ.3) THEN
25590         Q2DIV=PMC**2
25591         IF(NFQ.EQ.3) Q2DIV=Q2EFF
25592         S=S+(6D0/27D0)*LOG(LOG(Q2DIV/ALAM3**2)/LOG(P2EFF/ALAM3**2))
25593       ENDIF
25594       IF(NFP.LE.4.AND.NFQ.GE.4) THEN
25595         P2DIV=P2EFF
25596         IF(NFP.EQ.3) P2DIV=PMC**2
25597         Q2DIV=Q2EFF
25598         IF(NFQ.EQ.5) Q2DIV=PMB**2
25599         S=S+(6D0/25D0)*LOG(LOG(Q2DIV/ALAM**2)/LOG(P2DIV/ALAM**2))
25600       ENDIF
25601       IF(NFQ.EQ.5) THEN
25602         P2DIV=PMB**2
25603         IF(NFP.EQ.5) P2DIV=P2EFF
25604         S=S+(6D0/23D0)*LOG(LOG(Q2EFF/ALAM5**2)/LOG(P2DIV/ALAM5**2))
25605       ENDIF
25606  
25607 C...Calculate frequent combinations of x and s.
25608       X1=1D0-X
25609       XL=-LOG(X)
25610       S2=S**2
25611       S3=S**3
25612       S4=S**4
25613  
25614 C...Evaluate homogeneous anomalous parton distributions below or
25615 C...above threshold.
25616       IF(ISET.EQ.0) THEN
25617         IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
25618      &  (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
25619           XVAL = X * 1.5D0 * (X**2+X1**2)
25620           XGLU = 0D0
25621           XSEA = 0D0
25622         ELSE
25623           XVAL = (1.5D0/(1D0-0.197D0*S+4.33D0*S2)*X**2 +
25624      &    (1.5D0+2.10D0*S)/(1D0+3.29D0*S)*X1**2 +
25625      &    5.23D0*S/(1D0+1.17D0*S+19.9D0*S3)*X*X1) *
25626      &    X**(1D0/(1D0+1.5D0*S)) * (1D0-X**2)**(2.667D0*S)
25627           XGLU = 4D0*S/(1D0+4.76D0*S+15.2D0*S2+29.3D0*S4) *
25628      &    X**(-2.03D0*S/(1D0+2.44D0*S)) * (X1*XL)**(1.333D0*S) *
25629      &    ((4D0*X**2+7D0*X+4D0)*X1/3D0 - 2D0*X*(1D0+X)*XL)
25630           XSEA = S2/(1D0+4.54D0*S+8.19D0*S2+8.05D0*S3) *
25631      &    X**(-1.54D0*S/(1D0+1.29D0*S)) * X1**(2.667D0*S) *
25632      &    ((8D0-73D0*X+62D0*X**2)*X1/9D0 + (3D0-8D0*X**2/3D0)*X*XL +
25633      &    (2D0*X-1D0)*X*XL**2)
25634         ENDIF
25635  
25636 C...Evaluate set 1D parton distributions below or above threshold.
25637       ELSEIF(ISET.EQ.1) THEN
25638         IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
25639      &  (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
25640           XVAL = 1.294D0 * X**0.80D0 * X1**0.76D0
25641           XGLU = 1.273D0 * X**0.40D0 * X1**1.76D0
25642           XSEA = 0.100D0 * X1**3.76D0
25643         ELSE
25644           XVAL = 1.294D0/(1D0+0.252D0*S+3.079D0*S2) *
25645      &    X**(0.80D0-0.13D0*S) * X1**(0.76D0+0.667D0*S) * XL**(2D0*S)
25646           XGLU = 7.90D0*S/(1D0+5.50D0*S) * EXP(-5.16D0*S) *
25647      &    X**(-1.90D0*S/(1D0+3.60D0*S)) * X1**1.30D0 *
25648      &    XL**(0.50D0+3D0*S) + 1.273D0 * EXP(-10D0*S) *
25649      &    X**0.40D0 * X1**(1.76D0+3D0*S)
25650           XSEA = (0.1D0-0.397D0*S2+1.121D0*S3)/
25651      &    (1D0+5.61D0*S2+5.26D0*S3) * X**(-7.32D0*S2/(1D0+10.3D0*S2)) *
25652      &    X1**((3.76D0+15D0*S+12D0*S2)/(1D0+4D0*S))
25653           XSEA0 = 0.100D0 * X1**3.76D0
25654         ENDIF
25655  
25656 C...Evaluate set 1M parton distributions below or above threshold.
25657       ELSEIF(ISET.EQ.2) THEN
25658         IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
25659      &  (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
25660           XVAL = 0.8477D0 * X**0.51D0 * X1**1.37D0
25661           XGLU = 3.42D0 * X**0.255D0 * X1**2.37D0
25662           XSEA = 0D0
25663         ELSE
25664           XVAL = 0.8477D0/(1D0+1.37D0*S+2.18D0*S2+3.73D0*S3) *
25665      &    X**(0.51D0+0.21D0*S) * X1**1.37D0 * XL**(2.667D0*S)
25666           XGLU = 24D0*S/(1D0+9.6D0*S+0.92D0*S2+14.34D0*S3) *
25667      &    EXP(-5.94D0*S) * X**((-0.013D0-1.80D0*S)/(1D0+3.14D0*S)) *
25668      &    X1**(2.37D0+0.4D0*S) * XL**(0.32D0+3.6D0*S) + 3.42D0 *
25669      &    EXP(-12D0*S) * X**0.255D0 * X1**(2.37D0+3D0*S)
25670           XSEA = 0.842D0*S/(1D0+21.3D0*S-33.2D0*S2+229D0*S3) *
25671      &    X**((0.13D0-2.90D0*S)/(1D0+5.44D0*S)) * X1**(3.45D0+0.5D0*S) *
25672      &    XL**(2.8D0*S)
25673           XSEA0 = 0D0
25674         ENDIF
25675  
25676 C...Evaluate set 2D parton distributions below or above threshold.
25677       ELSEIF(ISET.EQ.3) THEN
25678         IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
25679      &  (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
25680           XVAL = X**0.46D0 * X1**0.64D0 + 0.76D0 * X
25681           XGLU = 1.925D0 * X1**2
25682           XSEA = 0.242D0 * X1**4
25683         ELSE
25684           XVAL = (1D0+0.186D0*S)/(1D0-0.209D0*S+1.495D0*S2) *
25685      &    X**(0.46D0+0.25D0*S) *
25686      &    X1**((0.64D0+0.14D0*S+5D0*S2)/(1D0+S)) * XL**(1.9D0*S) +
25687      &    (0.76D0+0.4D0*S) * X * X1**(2.667D0*S)
25688           XGLU = (1.925D0+5.55D0*S+147D0*S2)/(1D0-3.59D0*S+3.32D0*S2) *
25689      &    EXP(-18.67D0*S) *
25690      &    X**((-5.81D0*S-5.34D0*S2)/(1D0+29D0*S-4.26D0*S2))
25691      &    * X1**((2D0-5.9D0*S)/(1D0+1.7D0*S)) *
25692      &    XL**(9.3D0*S/(1D0+1.7D0*S))
25693           XSEA = (0.242D0-0.252D0*S+1.19D0*S2)/
25694      &    (1D0-0.607D0*S+21.95D0*S2) *
25695      &    X**(-12.1D0*S2/(1D0+2.62D0*S+16.7D0*S2)) * X1**4 * XL**S
25696           XSEA0 = 0.242D0 * X1**4
25697         ENDIF
25698  
25699 C...Evaluate set 2M parton distributions below or above threshold.
25700       ELSEIF(ISET.EQ.4) THEN
25701         IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
25702      &  (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
25703           XVAL = 1.168D0 * X**0.50D0 * X1**2.60D0 + 0.965D0 * X
25704           XGLU = 1.808D0 * X1**2
25705           XSEA = 0.209D0 * X1**4
25706         ELSE
25707           XVAL = (1.168D0+1.771D0*S+29.35D0*S2) * EXP(-5.776D0*S) *
25708      &    X**((0.5D0+0.208D0*S)/(1D0-0.794D0*S+1.516D0*S2)) *
25709      &    X1**((2.6D0+7.6D0*S)/(1D0+5D0*S)) *
25710      &    XL**(5.15D0*S/(1D0+2D0*S)) +
25711      &    (0.965D0+22.35D0*S)/(1D0+18.4D0*S) * X * X1**(2.667D0*S)
25712           XGLU = (1.808D0+29.9D0*S)/(1D0+26.4D0*S) * EXP(-5.28D0*S) *
25713      &    X**((-5.35D0*S-10.11D0*S2)/(1D0+31.71D0*S)) *
25714      &    X1**((2D0-7.3D0*S+4D0*S2)/(1D0+2.5D0*S)) *
25715      &    XL**(10.9D0*S/(1D0+2.5D0*S))
25716           XSEA = (0.209D0+0.644D0*S2)/(1D0+0.319D0*S+17.6D0*S2) *
25717      &    X**((-0.373D0*S-7.71D0*S2)/(1D0+0.815D0*S+11.0D0*S2)) *
25718      &    X1**(4D0+S) * XL**(0.45D0*S)
25719           XSEA0 = 0.209D0 * X1**4
25720         ENDIF
25721       ENDIF
25722  
25723 C...Threshold factors for c and b sea.
25724       SLL=LOG(LOG(Q2EFF/ALAM**2)/LOG(P2EFF/ALAM**2))
25725       XCHM=0D0
25726       IF(Q2.GT.PMC**2.AND.Q2.GT.1.001D0*P2EFF) THEN
25727         SCH=MAX(0D0,LOG(LOG(PMC**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
25728         IF(ISET.EQ.0) THEN
25729           XCHM=XSEA*(1D0-(SCH/SLL)**2)
25730         ELSE
25731           XCHM=MAX(0D0,XSEA-XSEA0*X1**(2.667D0*S))*(1D0-SCH/SLL)
25732         ENDIF
25733       ENDIF
25734       XBOT=0D0
25735       IF(Q2.GT.PMB**2.AND.Q2.GT.1.001D0*P2EFF) THEN
25736         SBT=MAX(0D0,LOG(LOG(PMB**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
25737         IF(ISET.EQ.0) THEN
25738           XBOT=XSEA*(1D0-(SBT/SLL)**2)
25739         ELSE
25740           XBOT=MAX(0D0,XSEA-XSEA0*X1**(2.667D0*S))*(1D0-SBT/SLL)
25741         ENDIF
25742       ENDIF
25743  
25744 C...Fill parton distributions.
25745       XPGA(0)=XGLU
25746       XPGA(1)=XSEA
25747       XPGA(2)=XSEA
25748       XPGA(3)=XSEA
25749       XPGA(4)=XCHM
25750       XPGA(5)=XBOT
25751       XPGA(KFA)=XPGA(KFA)+XVAL
25752       DO 110 KFL=1,5
25753         XPGA(-KFL)=XPGA(KFL)
25754   110 CONTINUE
25755       VXPGA(KFA)=XVAL
25756       VXPGA(-KFA)=XVAL
25757  
25758       RETURN
25759       END
25760  
25761 C*********************************************************************
25762  
25763 C...PYGANO
25764 C...Evaluates the parton distributions of the anomalous photon,
25765 C...inhomogeneously evolved from a scale P2 (where it vanishes) to Q2.
25766 C...KF=0 gives the sum over (up to) 5 flavours,
25767 C...KF<0 limits to flavours up to abs(KF),
25768 C...KF>0 is for flavour KF only.
25769 C...ALAM is the 4-flavour Lambda, which is automatically converted
25770 C...to 3- and 5-flavour equivalents as needed.
25771 C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
25772  
25773       SUBROUTINE PYGANO(KF,X,Q2,P2,ALAM,XPGA,VXPGA)
25774  
25775 C...Double precision and integer declarations.
25776       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25777       IMPLICIT INTEGER(I-N)
25778       INTEGER PYK,PYCHGE,PYCOMP
25779 C...Local arrays and data.
25780       DIMENSION XPGA(-6:6), VXPGA(-6:6), ALAMSQ(3:5)
25781       DATA PMC/1.3D0/, PMB/4.6D0/, AEM/0.007297D0/, AEM2PI/0.0011614D0/
25782  
25783 C...Reset output.
25784       DO 100 KFL=-6,6
25785         XPGA(KFL)=0D0
25786         VXPGA(KFL)=0D0
25787   100 CONTINUE
25788       IF(Q2.LE.P2) RETURN
25789       KFA=IABS(KF)
25790  
25791 C...Calculate Lambda; protect against unphysical Q2 and P2 input.
25792       ALAMSQ(3)=(ALAM*(PMC/ALAM)**(2D0/27D0))**2
25793       ALAMSQ(4)=ALAM**2
25794       ALAMSQ(5)=(ALAM*(ALAM/PMB)**(2D0/23D0))**2
25795       P2EFF=MAX(P2,1.2D0*ALAMSQ(3))
25796       IF(KF.EQ.4) P2EFF=MAX(P2EFF,PMC**2)
25797       IF(KF.EQ.5) P2EFF=MAX(P2EFF,PMB**2)
25798       Q2EFF=MAX(Q2,P2EFF)
25799       XL=-LOG(X)
25800  
25801 C...Find number of flavours at lower and upper scale.
25802       NFP=4
25803       IF(P2EFF.LT.PMC**2) NFP=3
25804       IF(P2EFF.GT.PMB**2) NFP=5
25805       NFQ=4
25806       IF(Q2EFF.LT.PMC**2) NFQ=3
25807       IF(Q2EFF.GT.PMB**2) NFQ=5
25808  
25809 C...Define range of flavour loop.
25810       IF(KF.EQ.0) THEN
25811         KFLMN=1
25812         KFLMX=5
25813       ELSEIF(KF.LT.0) THEN
25814         KFLMN=1
25815         KFLMX=KFA
25816       ELSE
25817         KFLMN=KFA
25818         KFLMX=KFA
25819       ENDIF
25820  
25821 C...Loop over flavours the photon can branch into.
25822       DO 110 KFL=KFLMN,KFLMX
25823  
25824 C...Light flavours: calculate t range and (approximate) s range.
25825         IF(KFL.LE.3.AND.(KFL.EQ.1.OR.KFL.EQ.KF)) THEN
25826           TDIFF=LOG(Q2EFF/P2EFF)
25827           S=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2EFF/ALAMSQ(NFQ))/
25828      &    LOG(P2EFF/ALAMSQ(NFQ)))
25829           IF(NFQ.GT.NFP) THEN
25830             Q2DIV=PMB**2
25831             IF(NFQ.EQ.4) Q2DIV=PMC**2
25832             SNFQ=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2DIV/ALAMSQ(NFQ))/
25833      &      LOG(P2EFF/ALAMSQ(NFQ)))
25834             SNFP=(6D0/(33D0-2D0*(NFQ-1)))*LOG(LOG(Q2DIV/ALAMSQ(NFQ-1))/
25835      &      LOG(P2EFF/ALAMSQ(NFQ-1)))
25836             S=S+(LOG(Q2DIV/P2EFF)/LOG(Q2EFF/P2EFF))*(SNFP-SNFQ)
25837           ENDIF
25838           IF(NFQ.EQ.5.AND.NFP.EQ.3) THEN
25839             Q2DIV=PMC**2
25840             SNF4=(6D0/(33D0-2D0*4))*LOG(LOG(Q2DIV/ALAMSQ(4))/
25841      &      LOG(P2EFF/ALAMSQ(4)))
25842             SNF3=(6D0/(33D0-2D0*3))*LOG(LOG(Q2DIV/ALAMSQ(3))/
25843      &      LOG(P2EFF/ALAMSQ(3)))
25844             S=S+(LOG(Q2DIV/P2EFF)/LOG(Q2EFF/P2EFF))*(SNF3-SNF4)
25845           ENDIF
25846  
25847 C...u and s quark do not need a separate treatment when d has been done.
25848         ELSEIF(KFL.EQ.2.OR.KFL.EQ.3) THEN
25849  
25850 C...Charm: as above, but only include range above c threshold.
25851         ELSEIF(KFL.EQ.4) THEN
25852           IF(Q2.LE.PMC**2) GOTO 110
25853           P2EFF=MAX(P2EFF,PMC**2)
25854           Q2EFF=MAX(Q2EFF,P2EFF)
25855           TDIFF=LOG(Q2EFF/P2EFF)
25856           S=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2EFF/ALAMSQ(NFQ))/
25857      &    LOG(P2EFF/ALAMSQ(NFQ)))
25858           IF(NFQ.EQ.5.AND.NFP.EQ.4) THEN
25859             Q2DIV=PMB**2
25860             SNFQ=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2DIV/ALAMSQ(NFQ))/
25861      &      LOG(P2EFF/ALAMSQ(NFQ)))
25862             SNFP=(6D0/(33D0-2D0*(NFQ-1)))*LOG(LOG(Q2DIV/ALAMSQ(NFQ-1))/
25863      &      LOG(P2EFF/ALAMSQ(NFQ-1)))
25864             S=S+(LOG(Q2DIV/P2EFF)/LOG(Q2EFF/P2EFF))*(SNFP-SNFQ)
25865           ENDIF
25866  
25867 C...Bottom: as above, but only include range above b threshold.
25868         ELSEIF(KFL.EQ.5) THEN
25869           IF(Q2.LE.PMB**2) GOTO 110
25870           P2EFF=MAX(P2EFF,PMB**2)
25871           Q2EFF=MAX(Q2,P2EFF)
25872           TDIFF=LOG(Q2EFF/P2EFF)
25873           S=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2EFF/ALAMSQ(NFQ))/
25874      &    LOG(P2EFF/ALAMSQ(NFQ)))
25875         ENDIF
25876  
25877 C...Evaluate flavour-dependent prefactor (charge^2 etc.).
25878         CHSQ=1D0/9D0
25879         IF(KFL.EQ.2.OR.KFL.EQ.4) CHSQ=4D0/9D0
25880         FAC=AEM2PI*2D0*CHSQ*TDIFF
25881  
25882 C...Evaluate parton distributions (normalized to unit momentum sum).
25883         IF(KFL.EQ.1.OR.KFL.EQ.4.OR.KFL.EQ.5.OR.KFL.EQ.KF) THEN
25884           XVAL= ((1.5D0+2.49D0*S+26.9D0*S**2)/(1D0+32.3D0*S**2)*X**2 +
25885      &    (1.5D0-0.49D0*S+7.83D0*S**2)/(1D0+7.68D0*S**2)*(1D0-X)**2 +
25886      &    1.5D0*S/(1D0-3.2D0*S+7D0*S**2)*X*(1D0-X)) *
25887      &    X**(1D0/(1D0+0.58D0*S)) * (1D0-X**2)**(2.5D0*S/(1D0+10D0*S))
25888           XGLU= 2D0*S/(1D0+4D0*S+7D0*S**2) *
25889      &    X**(-1.67D0*S/(1D0+2D0*S)) * (1D0-X**2)**(1.2D0*S) *
25890      &    ((4D0*X**2+7D0*X+4D0)*(1D0-X)/3D0 - 2D0*X*(1D0+X)*XL)
25891           XSEA= 0.333D0*S**2/(1D0+4.90D0*S+4.69D0*S**2+21.4D0*S**3) *
25892      &    X**(-1.18D0*S/(1D0+1.22D0*S)) * (1D0-X)**(1.2D0*S) *
25893      &    ((8D0-73D0*X+62D0*X**2)*(1D0-X)/9D0 +
25894      &    (3D0-8D0*X**2/3D0)*X*XL + (2D0*X-1D0)*X*XL**2)
25895  
25896 C...Threshold factors for c and b sea.
25897           SLL=LOG(LOG(Q2EFF/ALAM**2)/LOG(P2EFF/ALAM**2))
25898           XCHM=0D0
25899           IF(Q2.GT.PMC**2.AND.Q2.GT.1.001D0*P2EFF) THEN
25900             SCH=MAX(0D0,LOG(LOG(PMC**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
25901             XCHM=XSEA*(1D0-(SCH/SLL)**3)
25902           ENDIF
25903           XBOT=0D0
25904           IF(Q2.GT.PMB**2.AND.Q2.GT.1.001D0*P2EFF) THEN
25905             SBT=MAX(0D0,LOG(LOG(PMB**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
25906             XBOT=XSEA*(1D0-(SBT/SLL)**3)
25907           ENDIF
25908         ENDIF
25909  
25910 C...Add contribution of each valence flavour.
25911         XPGA(0)=XPGA(0)+FAC*XGLU
25912         XPGA(1)=XPGA(1)+FAC*XSEA
25913         XPGA(2)=XPGA(2)+FAC*XSEA
25914         XPGA(3)=XPGA(3)+FAC*XSEA
25915         XPGA(4)=XPGA(4)+FAC*XCHM
25916         XPGA(5)=XPGA(5)+FAC*XBOT
25917         XPGA(KFL)=XPGA(KFL)+FAC*XVAL
25918         VXPGA(KFL)=VXPGA(KFL)+FAC*XVAL
25919   110 CONTINUE
25920       DO 120 KFL=1,5
25921         XPGA(-KFL)=XPGA(KFL)
25922         VXPGA(-KFL)=VXPGA(KFL)
25923   120 CONTINUE
25924  
25925       RETURN
25926       END
25927  
25928 C*********************************************************************
25929  
25930 C...PYGBEH
25931 C...Evaluates the Bethe-Heitler cross section for heavy flavour
25932 C...production.
25933 C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
25934  
25935       SUBROUTINE PYGBEH(KF,X,Q2,P2,PM2,XPBH)
25936
25937 C...Double precision and integer declarations.
25938       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25939       IMPLICIT INTEGER(I-N)
25940       INTEGER PYK,PYCHGE,PYCOMP
25941  
25942 C...Local data.
25943       DATA AEM2PI/0.0011614D0/
25944  
25945 C...Reset output.
25946       XPBH=0D0
25947       SIGBH=0D0
25948  
25949 C...Check kinematics limits.
25950       IF(X.GE.Q2/(4D0*PM2+Q2+P2)) RETURN
25951       W2=Q2*(1D0-X)/X-P2
25952       BETA2=1D0-4D0*PM2/W2
25953       IF(BETA2.LT.1D-10) RETURN
25954       BETA=SQRT(BETA2)
25955       RMQ=4D0*PM2/Q2
25956  
25957 C...Simple case: P2 = 0.
25958       IF(P2.LT.1D-4) THEN
25959         IF(BETA.LT.0.99D0) THEN
25960           XBL=LOG((1D0+BETA)/(1D0-BETA))
25961         ELSE
25962           XBL=LOG((1D0+BETA)**2*W2/(4D0*PM2))
25963         ENDIF
25964         SIGBH=BETA*(8D0*X*(1D0-X)-1D0-RMQ*X*(1D0-X))+
25965      &  XBL*(X**2+(1D0-X)**2+RMQ*X*(1D0-3D0*X)-0.5D0*RMQ**2*X**2)
25966  
25967 C...Complicated case: P2 > 0, based on approximation of
25968 C...C.T. Hill and G.G. Ross, Nucl. Phys. B148 (1979) 373
25969       ELSE
25970         RPQ=1D0-4D0*X**2*P2/Q2
25971         IF(RPQ.GT.1D-10) THEN
25972           RPBE=SQRT(RPQ*BETA2)
25973           IF(RPBE.LT.0.99D0) THEN
25974             XBL=LOG((1D0+RPBE)/(1D0-RPBE))
25975             XBI=2D0*RPBE/(1D0-RPBE**2)
25976           ELSE
25977             RPBESN=4D0*PM2/W2+(4D0*X**2*P2/Q2)*BETA2
25978             XBL=LOG((1D0+RPBE)**2/RPBESN)
25979             XBI=2D0*RPBE/RPBESN
25980           ENDIF
25981           SIGBH=BETA*(6D0*X*(1D0-X)-1D0)+
25982      &    XBL*(X**2+(1D0-X)**2+RMQ*X*(1D0-3D0*X)-0.5D0*RMQ**2*X**2)+
25983      &    XBI*(2D0*X/Q2)*(PM2*X*(2D0-RMQ)-P2*X)
25984         ENDIF
25985       ENDIF
25986  
25987 C...Multiply by charge-squared etc. to get parton distribution.
25988       CHSQ=1D0/9D0
25989       IF(IABS(KF).EQ.2.OR.IABS(KF).EQ.4) CHSQ=4D0/9D0
25990       XPBH=3D0*CHSQ*AEM2PI*X*SIGBH
25991  
25992       RETURN
25993       END
25994  
25995 C*********************************************************************
25996  
25997 C...PYGDIR
25998 C...Evaluates the direct contribution, i.e. the C^gamma term,
25999 C...as needed in MSbar parametrizations.
26000 C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
26001  
26002       SUBROUTINE PYGDIR(X,Q2,P2,Q02,XPGA)
26003  
26004 C...Double precision and integer declarations.
26005       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
26006       IMPLICIT INTEGER(I-N)
26007       INTEGER PYK,PYCHGE,PYCOMP
26008 C...Local array and data.
26009       DIMENSION XPGA(-6:6)
26010       DATA PMC/1.3D0/, PMB/4.6D0/, AEM2PI/0.0011614D0/
26011  
26012 C...Reset output.
26013       DO 100 KFL=-6,6
26014         XPGA(KFL)=0D0
26015   100 CONTINUE
26016  
26017 C...Evaluate common x-dependent expression.
26018       XTMP = (X**2+(1D0-X)**2) * (-LOG(X)) - 1D0
26019       CGAM = 3D0*AEM2PI*X * (XTMP*(1D0+P2/(P2+Q02)) + 6D0*X*(1D0-X))
26020  
26021 C...d, u, s part by simple charge factor.
26022       XPGA(1)=(1D0/9D0)*CGAM
26023       XPGA(2)=(4D0/9D0)*CGAM
26024       XPGA(3)=(1D0/9D0)*CGAM
26025  
26026 C...Also fill for antiquarks.
26027       DO 110 KF=1,5
26028         XPGA(-KF)=XPGA(KF)
26029   110 CONTINUE
26030  
26031       RETURN
26032       END
26033  
26034 C*********************************************************************
26035  
26036 C...PYPDPI
26037 C...Gives pi+ parton distribution according to two different
26038 C...parametrizations.
26039  
26040       SUBROUTINE PYPDPI(X,Q2,XPPI)
26041  
26042 C...Double precision and integer declarations.
26043       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
26044       IMPLICIT INTEGER(I-N)
26045       INTEGER PYK,PYCHGE,PYCOMP
26046 C...Commonblocks.
26047       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
26048       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
26049       COMMON/PYINT1/MINT(400),VINT(400)
26050       SAVE /PYDAT1/,/PYPARS/,/PYINT1/
26051 C...Local arrays.
26052       DIMENSION XPPI(-6:6),COW(3,5,4,2),XQ(9),TS(6)
26053  
26054 C...The following data lines are coefficients needed in the
26055 C...Owens pion parton distribution parametrizations, see below.
26056 C...Expansion coefficients for up and down valence quark distributions.
26057       DATA ((COW(IP,IS,1,1),IS=1,5),IP=1,3)/
26058      &4.0000D-01,  7.0000D-01,  0.0000D+00,  0.0000D+00,  0.0000D+00,
26059      &-6.2120D-02,  6.4780D-01,  0.0000D+00,  0.0000D+00,  0.0000D+00,
26060      &-7.1090D-03,  1.3350D-02,  0.0000D+00,  0.0000D+00,  0.0000D+00/
26061       DATA ((COW(IP,IS,1,2),IS=1,5),IP=1,3)/
26062      &4.0000D-01,  6.2800D-01,  0.0000D+00,  0.0000D+00,  0.0000D+00,
26063      &-5.9090D-02,  6.4360D-01,  0.0000D+00,  0.0000D+00,  0.0000D+00,
26064      &-6.5240D-03,  1.4510D-02,  0.0000D+00,  0.0000D+00,  0.0000D+00/
26065 C...Expansion coefficients for gluon distribution.
26066       DATA ((COW(IP,IS,2,1),IS=1,5),IP=1,3)/
26067      &8.8800D-01,  0.0000D+00,  3.1100D+00,  6.0000D+00,  0.0000D+00,
26068      &-1.8020D+00, -1.5760D+00, -1.3170D-01,  2.8010D+00, -1.7280D+01,
26069      &1.8120D+00,  1.2000D+00,  5.0680D-01, -1.2160D+01,  2.0490D+01/
26070       DATA ((COW(IP,IS,2,2),IS=1,5),IP=1,3)/
26071      &7.9400D-01,  0.0000D+00,  2.8900D+00,  6.0000D+00,  0.0000D+00,
26072      &-9.1440D-01, -1.2370D+00,  5.9660D-01, -3.6710D+00, -8.1910D+00,
26073      &5.9660D-01,  6.5820D-01, -2.5500D-01, -2.3040D+00,  7.7580D+00/
26074 C...Expansion coefficients for (up+down+strange) quark sea distribution.
26075       DATA ((COW(IP,IS,3,1),IS=1,5),IP=1,3)/
26076      &9.0000D-01,  0.0000D+00,  5.0000D+00,  0.0000D+00,  0.0000D+00,
26077      &-2.4280D-01, -2.1200D-01,  8.6730D-01,  1.2660D+00,  2.3820D+00,
26078      &1.3860D-01,  3.6710D-03,  4.7470D-02, -2.2150D+00,  3.4820D-01/
26079       DATA ((COW(IP,IS,3,2),IS=1,5),IP=1,3)/
26080      &9.0000D-01,  0.0000D+00,  5.0000D+00,  0.0000D+00,  0.0000D+00,
26081      &-1.4170D-01, -1.6970D-01, -2.4740D+00, -2.5340D+00,  5.6210D-01,
26082      &-1.7400D-01, -9.6230D-02,  1.5750D+00,  1.3780D+00, -2.7010D-01/
26083 C...Expansion coefficients for charm quark sea distribution.
26084       DATA ((COW(IP,IS,4,1),IS=1,5),IP=1,3)/
26085      &0.0000D+00, -2.2120D-02,  2.8940D+00,  0.0000D+00,  0.0000D+00,
26086      &7.9280D-02, -3.7850D-01,  9.4330D+00,  5.2480D+00,  8.3880D+00,
26087      &-6.1340D-02, -1.0880D-01, -1.0852D+01, -7.1870D+00, -1.1610D+01/
26088       DATA ((COW(IP,IS,4,2),IS=1,5),IP=1,3)/
26089      &0.0000D+00, -8.8200D-02,  1.9240D+00,  0.0000D+00,  0.0000D+00,
26090      &6.2290D-02, -2.8920D-01,  2.4240D-01, -4.4630D+00, -8.3670D-01,
26091      &-4.0990D-02, -1.0820D-01,  2.0360D+00,  5.2090D+00, -4.8400D-02/
26092  
26093 C...Euler's beta function, requires ordinary Gamma function
26094       EULBET(X,Y)=PYGAMM(X)*PYGAMM(Y)/PYGAMM(X+Y)
26095  
26096 C...Reset output array.
26097       DO 100 KFL=-6,6
26098         XPPI(KFL)=0D0
26099   100 CONTINUE
26100  
26101       IF(MSTP(53).LE.2) THEN
26102 C...Pion parton distributions from Owens.
26103 C...Allowed variable range: 4 GeV^2 < Q^2 < approx 2000 GeV^2.
26104  
26105 C...Determine set, Lambda and s expansion variable.
26106         NSET=MSTP(53)
26107         IF(NSET.EQ.1) ALAM=0.2D0
26108         IF(NSET.EQ.2) ALAM=0.4D0
26109         VINT(231)=4D0
26110         IF(MSTP(57).LE.0) THEN
26111           SD=0D0
26112         ELSE
26113           Q2IN=MIN(2D3,MAX(4D0,Q2))
26114           SD=LOG(LOG(Q2IN/ALAM**2)/LOG(4D0/ALAM**2))
26115         ENDIF
26116  
26117 C...Calculate parton distributions.
26118         DO 120 KFL=1,4
26119           DO 110 IS=1,5
26120             TS(IS)=COW(1,IS,KFL,NSET)+COW(2,IS,KFL,NSET)*SD+
26121      &      COW(3,IS,KFL,NSET)*SD**2
26122   110     CONTINUE
26123           IF(KFL.EQ.1) THEN
26124             XQ(KFL)=X**TS(1)*(1D0-X)**TS(2)/EULBET(TS(1),TS(2)+1D0)
26125           ELSE
26126             XQ(KFL)=TS(1)*X**TS(2)*(1D0-X)**TS(3)*(1D0+TS(4)*X+
26127      &      TS(5)*X**2)
26128           ENDIF
26129   120   CONTINUE
26130  
26131 C...Put into output array.
26132         XPPI(0)=XQ(2)
26133         XPPI(1)=XQ(3)/6D0
26134         XPPI(2)=XQ(1)+XQ(3)/6D0
26135         XPPI(3)=XQ(3)/6D0
26136         XPPI(4)=XQ(4)
26137         XPPI(-1)=XQ(1)+XQ(3)/6D0
26138         XPPI(-2)=XQ(3)/6D0
26139         XPPI(-3)=XQ(3)/6D0
26140         XPPI(-4)=XQ(4)
26141  
26142 C...Leading order pion parton distributions from Gluck, Reya and Vogt.
26143 C...Allowed variable range: 0.25 GeV^2 < Q^2 < 10^8 GeV^2 and
26144 C...10^-5 < x < 1.
26145       ELSE
26146  
26147 C...Determine s expansion variable and some x expressions.
26148         VINT(231)=0.25D0
26149         IF(MSTP(57).LE.0) THEN
26150           SD=0D0
26151         ELSE
26152           Q2IN=MIN(1D8,MAX(0.25D0,Q2))
26153           SD=LOG(LOG(Q2IN/0.232D0**2)/LOG(0.25D0/0.232D0**2))
26154         ENDIF
26155         SD2=SD**2
26156         XL=-LOG(X)
26157         XS=SQRT(X)
26158  
26159 C...Evaluate valence, gluon and sea distributions.
26160         XFVAL=(0.519D0+0.180D0*SD-0.011D0*SD2)*X**(0.499D0-0.027D0*SD)*
26161      &  (1D0+(0.381D0-0.419D0*SD)*XS)*(1D0-X)**(0.367D0+0.563D0*SD)
26162         XFGLU=(X**(0.482D0+0.341D0*SQRT(SD))*((0.678D0+0.877D0*
26163      &  SD-0.175D0*SD2)+
26164      &  (0.338D0-1.597D0*SD)*XS+(-0.233D0*SD+0.406D0*SD2)*X)+
26165      &  SD**0.599D0*EXP(-(0.618D0+2.070D0*SD)+SQRT(3.676D0*SD**1.263D0*
26166      &  XL)))*
26167      &  (1D0-X)**(0.390D0+1.053D0*SD)
26168         XFSEA=SD**0.55D0*(1D0-0.748D0*XS+(0.313D0+0.935D0*SD)*X)*(1D0-
26169      &  X)**3.359D0*
26170      &  EXP(-(4.433D0+1.301D0*SD)+SQRT((9.30D0-0.887D0*SD)*SD**0.56D0*
26171      &  XL))/
26172      &  XL**(2.538D0-0.763D0*SD)
26173         IF(SD.LE.0.888D0) THEN
26174           XFCHM=0D0
26175         ELSE
26176           XFCHM=(SD-0.888D0)**1.02D0*(1D0+1.008D0*X)*(1D0-X)**(1.208D0+
26177      &    0.771D0*SD)*
26178      &    EXP(-(4.40D0+1.493D0*SD)+SQRT((2.032D0+1.901D0*SD)*SD**0.39D0*
26179      &    XL))
26180         ENDIF
26181         IF(SD.LE.1.351D0) THEN
26182           XFBOT=0D0
26183         ELSE
26184           XFBOT=(SD-1.351D0)**1.03D0*(1D0-X)**(0.697D0+0.855D0*SD)*
26185      &    EXP(-(4.51D0+1.490D0*SD)+SQRT((3.056D0+1.694D0*SD)*SD**0.39D0*
26186      &    XL))
26187         ENDIF
26188  
26189 C...Put into output array.
26190         XPPI(0)=XFGLU
26191         XPPI(1)=XFSEA
26192         XPPI(2)=XFSEA
26193         XPPI(3)=XFSEA
26194         XPPI(4)=XFCHM
26195         XPPI(5)=XFBOT
26196         DO 130 KFL=1,5
26197           XPPI(-KFL)=XPPI(KFL)
26198   130   CONTINUE
26199         XPPI(2)=XPPI(2)+XFVAL
26200         XPPI(-1)=XPPI(-1)+XFVAL
26201       ENDIF
26202  
26203       RETURN
26204       END
26205  
26206 C*********************************************************************
26207  
26208 C...PYPDPR
26209 C...Gives proton parton distributions according to a few different
26210 C...parametrizations.
26211  
26212       SUBROUTINE PYPDPR(X,Q2,XPPR)
26213  
26214 C...Double precision and integer declarations.
26215       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
26216       IMPLICIT INTEGER(I-N)
26217       INTEGER PYK,PYCHGE,PYCOMP
26218 C...Commonblocks.
26219       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
26220       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
26221       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
26222       COMMON/PYINT1/MINT(400),VINT(400)
26223       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
26224 C...Arrays and data.
26225       DIMENSION XPPR(-6:6),Q2MIN(16)
26226       DATA Q2MIN/ 2.56D0, 2.56D0, 2.56D0, 0.4D0, 0.4D0, 0.4D0,
26227      &1.0D0, 1.0D0, 2*0D0, 0.25D0, 5D0, 5D0, 4D0, 4D0, 0D0/
26228  
26229 C...Reset output array.
26230       DO 100 KFL=-6,6
26231         XPPR(KFL)=0D0
26232   100 CONTINUE
26233  
26234 C...Common preliminaries.
26235       NSET=MAX(1,MIN(16,MSTP(51)))
26236       IF(NSET.EQ.9.OR.NSET.EQ.10) NSET=6
26237       VINT(231)=Q2MIN(NSET)
26238       IF(MSTP(57).EQ.0) THEN
26239         Q2L=Q2MIN(NSET)
26240       ELSE
26241         Q2L=MAX(Q2MIN(NSET),Q2)
26242       ENDIF
26243  
26244       IF(NSET.GE.1.AND.NSET.LE.3) THEN
26245 C...Interface to the CTEQ 3 parton distributions.
26246         QRT=SQRT(MAX(1D0,Q2L))
26247  
26248 C...Loop over flavours.
26249         DO 110 I=-6,6
26250           IF(I.LE.0) THEN
26251             XPPR(I)=PYCTEQ(NSET,I,X,QRT)
26252           ELSEIF(I.LE.2) THEN
26253             XPPR(I)=PYCTEQ(NSET,I,X,QRT)+XPPR(-I)
26254           ELSE
26255             XPPR(I)=XPPR(-I)
26256           ENDIF
26257   110   CONTINUE
26258  
26259       ELSEIF(NSET.GE.4.AND.NSET.LE.6) THEN
26260 C...Interface to the GRV 94 distributions.
26261         IF(NSET.EQ.4) THEN
26262           CALL PYGRVL (X, Q2L, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
26263         ELSEIF(NSET.EQ.5) THEN
26264           CALL PYGRVM (X, Q2L, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
26265         ELSE
26266           CALL PYGRVD (X, Q2L, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
26267         ENDIF
26268  
26269 C...Put into output array.
26270         XPPR(0)=GL
26271         XPPR(-1)=0.5D0*(UDB+DEL)
26272         XPPR(-2)=0.5D0*(UDB-DEL)
26273         XPPR(-3)=SB
26274         XPPR(-4)=CHM
26275         XPPR(-5)=BOT
26276         XPPR(1)=DV+XPPR(-1)
26277         XPPR(2)=UV+XPPR(-2)
26278         XPPR(3)=SB
26279         XPPR(4)=CHM
26280         XPPR(5)=BOT
26281  
26282       ELSEIF(NSET.EQ.7) THEN
26283 C...Interface to the CTEQ 5L parton distributions.
26284 C...Range of validity 10^-6 < x < 1, 1 < Q < 10^4 extended by
26285 C...freezing x*f(x,Q2) at borders. 
26286         QRT=SQRT(MAX(1D0,MIN(1D4,Q2L)))
26287         XIN=MAX(1D-6,MIN(1D0,X))
26288  
26289 C...Loop over flavours (with u <-> d notation mismatch).
26290         SUMUDB=PYCT5L(-1,XIN,QRT)
26291         RATUDB=PYCT5L(-2,XIN,QRT)
26292         DO 120 I=-5,2
26293           IF(I.EQ.1) THEN
26294             XPPR(I)=XIN*PYCT5L(2,XIN,QRT)
26295           ELSEIF(I.EQ.2) THEN
26296             XPPR(I)=XIN*PYCT5L(1,XIN,QRT)
26297           ELSEIF(I.EQ.-1) THEN
26298             XPPR(I)=XIN*SUMUDB*RATUDB/(1D0+RATUDB)
26299           ELSEIF(I.EQ.-2) THEN
26300             XPPR(I)=XIN*SUMUDB/(1D0+RATUDB)
26301           ELSE
26302             XPPR(I)=XIN*PYCT5L(I,XIN,QRT)
26303             IF(I.LT.0) XPPR(-I)=XPPR(I)
26304           ENDIF
26305   120   CONTINUE
26306  
26307       ELSEIF(NSET.EQ.8) THEN
26308 C...Interface to the CTEQ 5M1 parton distributions.
26309         QRT=SQRT(MAX(1D0,MIN(1D4,Q2L)))
26310         XIN=MAX(1D-6,MIN(1D0,X))
26311  
26312 C...Loop over flavours (with u <-> d notation mismatch).
26313         SUMUDB=PYCT5M(-1,XIN,QRT)
26314         RATUDB=PYCT5M(-2,XIN,QRT)
26315         DO 130 I=-5,2
26316           IF(I.EQ.1) THEN
26317             XPPR(I)=XIN*PYCT5M(2,XIN,QRT)
26318           ELSEIF(I.EQ.2) THEN
26319             XPPR(I)=XIN*PYCT5M(1,XIN,QRT)
26320           ELSEIF(I.EQ.-1) THEN
26321             XPPR(I)=XIN*SUMUDB*RATUDB/(1D0+RATUDB)
26322           ELSEIF(I.EQ.-2) THEN
26323             XPPR(I)=XIN*SUMUDB/(1D0+RATUDB)
26324           ELSE
26325             XPPR(I)=XIN*PYCT5M(I,XIN,QRT)
26326             IF(I.LT.0) XPPR(-I)=XPPR(I)
26327           ENDIF
26328   130   CONTINUE
26329  
26330       ELSEIF(NSET.GE.11.AND.NSET.LE.15) THEN
26331 C...GRV92LO, EHLQ1, EHLQ2, DO1 AND DO2 distributions:
26332 C...obsolete but offers backwards compatibility. 
26333         CALL PYPDPO(X,Q2L,XPPR) 
26334  
26335 C...Symmetric choice for debugging only
26336       ELSEIF(NSET.EQ.16) THEN
26337         XPPR(0)=.5D0/X
26338         XPPR(1)=.05D0/X
26339         XPPR(2)=.05D0/X
26340         XPPR(3)=.05D0/X
26341         XPPR(4)=.05D0/X
26342         XPPR(5)=.05D0/X
26343         XPPR(-1)=.05D0/X
26344         XPPR(-2)=.05D0/X
26345         XPPR(-3)=.05D0/X
26346         XPPR(-4)=.05D0/X
26347         XPPR(-5)=.05D0/X
26348  
26349       ENDIF
26350  
26351       RETURN
26352       END
26353  
26354 C*********************************************************************
26355  
26356 C...PYCTEQ
26357 C...Gives the CTEQ 3 parton distribution function sets in
26358 C...parametrized form, of October 24, 1994.
26359 C...Authors: H.L. Lai, J. Botts, J. Huston, J.G. Morfin, J.F. Owens,
26360 C...J. Qiu, W.K. Tung and H. Weerts.
26361  
26362       FUNCTION PYCTEQ (ISET, IPRT, X, Q)
26363  
26364 C...Double precision declaration.
26365       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
26366       IMPLICIT INTEGER(I-N)
26367  
26368 C...Data on Lambda values of fits, minimum Q and quark masses.
26369       DIMENSION ALM(3), QMS(4:6)
26370       DATA ALM / 0.177D0, 0.239D0, 0.247D0 /
26371       DATA QMN / 1.60D0 /, (QMS(I), I=4,6) / 1.60D0, 5.00D0, 180.0D0 /
26372  
26373 C....Check flavour thresholds. Set up QI for SB.
26374       IP = IABS(IPRT)
26375       IF(IP .GE. 4) THEN
26376         IF(Q .LE. QMS(IP)) THEN
26377           PYCTEQ = 0D0
26378           RETURN
26379         ENDIF
26380         QI = QMS(IP)
26381       ELSE
26382         QI = QMN
26383       ENDIF
26384  
26385 C...Use "standard lambda" of parametrization program for expansion.
26386       ALAM = ALM (ISET)
26387       SBL = LOG(Q/ALAM) / LOG(QI/ALAM)
26388       SB = LOG (SBL)
26389       SB2 = SB*SB
26390       SB3 = SB2*SB
26391  
26392 C...Expansion for CTEQ3L.
26393       IF(ISET .EQ. 1) THEN
26394         IF(IPRT .EQ. 2) THEN
26395           A0=Exp( 0.1907D+00+0.4205D-01*SB +0.2752D+00*SB2-
26396      &    0.3171D+00*SB3)
26397           A1= 0.4611D+00+0.2331D-01*SB -0.3403D-01*SB2+0.3174D-01*SB3
26398           A2= 0.3504D+01+0.5739D+00*SB +0.2676D+00*SB2-0.1553D+00*SB3
26399           A3= 0.7452D+01-0.6742D+01*SB +0.2849D+01*SB2-0.1964D+00*SB3
26400           A4= 0.1116D+01-0.3435D+00*SB +0.2865D+00*SB2-0.1288D+00*SB3
26401           A5= 0.6659D-01+0.2714D+00*SB -0.2688D+00*SB2+0.2763D+00*SB3
26402         ELSEIF(IPRT .EQ. 1) THEN
26403           A0=Exp( 0.1141D+00+0.4764D+00*SB -0.1745D+01*SB2+
26404      &    0.7728D+00*SB3)
26405           A1= 0.4275D+00-0.1290D+00*SB +0.3609D+00*SB2-0.1689D+00*SB3
26406           A2= 0.3000D+01+0.2946D+01*SB -0.4117D+01*SB2+0.1989D+01*SB3
26407           A3=-0.1302D+01+0.2322D+01*SB -0.4258D+01*SB2+0.2109D+01*SB3
26408           A4= 0.2586D+01-0.1920D+00*SB -0.3754D+00*SB2+0.2731D+00*SB3
26409           A5=-0.2251D+00-0.5374D+00*SB +0.2245D+01*SB2-0.1034D+01*SB3
26410         ELSEIF(IPRT .EQ. 0) THEN
26411           A0=Exp(-0.7631D+00-0.7241D+00*SB -0.1170D+01*SB2+
26412      &    0.5343D+00*SB3)
26413           A1=-0.3573D+00+0.3469D+00*SB -0.3396D+00*SB2+0.9188D-01*SB3
26414           A2= 0.5604D+01+0.7458D+00*SB -0.5082D+00*SB2+0.1844D+00*SB3
26415           A3= 0.1549D+02-0.1809D+02*SB +0.1162D+02*SB2-0.3483D+01*SB3
26416           A4= 0.9881D+00+0.1364D+00*SB -0.4421D+00*SB2+0.2051D+00*SB3
26417           A5=-0.9505D-01+0.3259D+01*SB -0.1547D+01*SB2+0.2918D+00*SB3
26418         ELSEIF(IPRT .EQ. -1) THEN
26419           A0=Exp(-0.2449D+01-0.3513D+01*SB +0.4529D+01*SB2-
26420      &    0.2031D+01*SB3)
26421           A1=-0.4050D+00+0.3411D+00*SB -0.3669D+00*SB2+0.1109D+00*SB3
26422           A2= 0.7470D+01-0.2982D+01*SB +0.5503D+01*SB2-0.2419D+01*SB3
26423           A3= 0.1503D+02+0.1638D+01*SB -0.8772D+01*SB2+0.3852D+01*SB3
26424           A4= 0.1137D+01-0.1006D+01*SB +0.1485D+01*SB2-0.6389D+00*SB3
26425           A5=-0.5299D+00+0.3160D+01*SB -0.3104D+01*SB2+0.1219D+01*SB3
26426         ELSEIF(IPRT .EQ. -2) THEN
26427           A0=Exp(-0.2740D+01-0.7987D-01*SB -0.9015D+00*SB2-
26428      &    0.9872D-01*SB3)
26429           A1=-0.3909D+00+0.1244D+00*SB -0.4487D-01*SB2+0.1277D-01*SB3
26430           A2= 0.9163D+01+0.2823D+00*SB -0.7720D+00*SB2-0.9360D-02*SB3
26431           A3= 0.1080D+02-0.3915D+01*SB -0.1153D+01*SB2+0.2649D+01*SB3
26432           A4= 0.9894D+00-0.1647D+00*SB -0.9426D-02*SB2+0.2945D-02*SB3
26433           A5=-0.3395D+00+0.6998D+00*SB +0.7000D+00*SB2-0.6730D-01*SB3
26434         ELSEIF(IPRT .EQ. -3) THEN
26435           A0=Exp(-0.3640D+01+0.1250D+01*SB -0.2914D+01*SB2+
26436      &    0.8390D+00*SB3)
26437           A1=-0.3595D+00-0.5259D-01*SB +0.3122D+00*SB2-0.1642D+00*SB3
26438           A2= 0.7305D+01+0.9727D+00*SB -0.9788D+00*SB2-0.5193D-01*SB3
26439           A3= 0.1198D+02-0.1799D+02*SB +0.2614D+02*SB2-0.1091D+02*SB3
26440           A4= 0.9882D+00-0.6101D+00*SB +0.9737D+00*SB2-0.4935D+00*SB3
26441           A5=-0.1186D+00-0.3231D+00*SB +0.3074D+01*SB2-0.1274D+01*SB3
26442         ELSEIF(IPRT .EQ. -4) THEN
26443           A0=SB** 0.1122D+01*Exp(-0.3718D+01-0.1335D+01*SB +
26444      &    0.1651D-01*SB2)
26445           A1=-0.4719D+00+0.7509D+00*SB -0.8420D+00*SB2+0.2901D+00*SB3
26446           A2= 0.6194D+01-0.1641D+01*SB +0.4907D+01*SB2-0.2523D+01*SB3
26447           A3= 0.4426D+01-0.4270D+01*SB +0.6581D+01*SB2-0.3474D+01*SB3
26448           A4= 0.2683D+00+0.9876D+00*SB -0.7612D+00*SB2+0.1780D+00*SB3
26449           A5=-0.4547D+00+0.4410D+01*SB -0.3712D+01*SB2+0.1245D+01*SB3
26450         ELSEIF(IPRT .EQ. -5) THEN
26451           A0=SB** 0.9838D+00*Exp(-0.2548D+01-0.7660D+01*SB +
26452      &    0.3702D+01*SB2)
26453           A1=-0.3122D+00-0.2120D+00*SB +0.5716D+00*SB2-0.3773D+00*SB3
26454           A2= 0.6257D+01-0.8214D-01*SB -0.2537D+01*SB2+0.2981D+01*SB3
26455           A3=-0.6723D+00+0.2131D+01*SB +0.9599D+01*SB2-0.7910D+01*SB3
26456           A4= 0.9169D-01+0.4295D-01*SB -0.5017D+00*SB2+0.3811D+00*SB3
26457           A5= 0.2402D+00+0.2656D+01*SB -0.1586D+01*SB2+0.2880D+00*SB3
26458         ELSEIF(IPRT .EQ. -6) THEN
26459           A0=SB** 0.1001D+01*Exp(-0.6934D+01+0.3050D+01*SB -
26460      &    0.6943D+00*SB2)
26461           A1=-0.1713D+00-0.5167D+00*SB +0.1241D+01*SB2-0.1703D+01*SB3
26462           A2= 0.6169D+01+0.3023D+01*SB -0.1972D+02*SB2+0.1069D+02*SB3
26463           A3= 0.4439D+01-0.1746D+02*SB +0.1225D+02*SB2+0.8350D+00*SB3
26464           A4= 0.5458D+00-0.4586D+00*SB +0.9089D+00*SB2-0.4049D+00*SB3
26465           A5= 0.3207D+01-0.3362D+01*SB +0.5877D+01*SB2-0.7659D+01*SB3
26466         ENDIF
26467  
26468 C...Expansion for CTEQ3M.
26469       ELSEIF(ISET .EQ. 2) THEN
26470         IF(IPRT .EQ. 2) THEN
26471           A0=Exp( 0.2259D+00+0.1237D+00*SB +0.3035D+00*SB2-
26472      &    0.2935D+00*SB3)
26473           A1= 0.5085D+00+0.1651D-01*SB -0.3592D-01*SB2+0.2782D-01*SB3
26474           A2= 0.3732D+01+0.4901D+00*SB +0.2218D+00*SB2-0.1116D+00*SB3
26475           A3= 0.7011D+01-0.6620D+01*SB +0.2557D+01*SB2-0.1360D+00*SB3
26476           A4= 0.8969D+00-0.2429D+00*SB +0.1811D+00*SB2-0.6888D-01*SB3
26477           A5= 0.8636D-01+0.2558D+00*SB -0.3082D+00*SB2+0.2535D+00*SB3
26478         ELSEIF(IPRT .EQ. 1) THEN
26479           A0=Exp(-0.7266D+00-0.1584D+01*SB +0.1259D+01*SB2-
26480      &    0.4305D-01*SB3)
26481           A1= 0.5285D+00-0.3721D+00*SB +0.5150D+00*SB2-0.1697D+00*SB3
26482           A2= 0.4075D+01+0.8282D+00*SB -0.4496D+00*SB2+0.2107D+00*SB3
26483           A3= 0.3279D+01+0.5066D+01*SB -0.9134D+01*SB2+0.2897D+01*SB3
26484           A4= 0.4399D+00-0.5888D+00*SB +0.4802D+00*SB2-0.1664D+00*SB3
26485           A5= 0.3678D+00-0.8929D+00*SB +0.1592D+01*SB2-0.5713D+00*SB3
26486         ELSEIF(IPRT .EQ. 0) THEN
26487           A0=Exp(-0.2318D+00-0.9779D+00*SB -0.3783D+00*SB2+
26488      &    0.1037D-01*SB3)
26489           A1=-0.2916D+00+0.1754D+00*SB -0.1884D+00*SB2+0.6116D-01*SB3
26490           A2= 0.5349D+01+0.7460D+00*SB +0.2319D+00*SB2-0.2622D+00*SB3
26491           A3= 0.6920D+01-0.3454D+01*SB +0.2027D+01*SB2-0.7626D+00*SB3
26492           A4= 0.1013D+01+0.1423D+00*SB -0.1798D+00*SB2+0.1872D-01*SB3
26493           A5=-0.5465D-01+0.2303D+01*SB -0.9584D+00*SB2+0.3098D+00*SB3
26494         ELSEIF(IPRT .EQ. -1) THEN
26495           A0=Exp(-0.2328D+01-0.3061D+01*SB +0.3620D+01*SB2-
26496      &    0.1602D+01*SB3)
26497           A1=-0.3358D+00+0.3198D+00*SB -0.4210D+00*SB2+0.1571D+00*SB3
26498           A2= 0.8478D+01-0.3112D+01*SB +0.5243D+01*SB2-0.2255D+01*SB3
26499           A3= 0.1971D+02+0.3389D+00*SB -0.5268D+01*SB2+0.2099D+01*SB3
26500           A4= 0.1128D+01-0.4701D+00*SB +0.7779D+00*SB2-0.3506D+00*SB3
26501           A5=-0.4708D+00+0.3341D+01*SB -0.3375D+01*SB2+0.1353D+01*SB3
26502         ELSEIF(IPRT .EQ. -2) THEN
26503           A0=Exp(-0.2906D+01-0.1069D+00*SB -0.1055D+01*SB2+
26504      &    0.2496D+00*SB3)
26505           A1=-0.2875D+00+0.6571D-01*SB -0.1987D-01*SB2-0.1800D-02*SB3
26506           A2= 0.9854D+01-0.2715D+00*SB -0.7407D+00*SB2+0.2888D+00*SB3
26507           A3= 0.1583D+02-0.7687D+01*SB +0.3428D+01*SB2-0.3327D+00*SB3
26508           A4= 0.9763D+00+0.7599D-01*SB -0.2128D+00*SB2+0.6852D-01*SB3
26509           A5=-0.8444D-02+0.9434D+00*SB +0.4152D+00*SB2-0.1481D+00*SB3
26510         ELSEIF(IPRT .EQ. -3) THEN
26511           A0=Exp(-0.3780D+01+0.2499D+01*SB -0.4962D+01*SB2+
26512      &    0.1936D+01*SB3)
26513           A1=-0.2639D+00-0.1575D+00*SB +0.3584D+00*SB2-0.1646D+00*SB3
26514           A2= 0.8082D+01+0.2794D+01*SB -0.5438D+01*SB2+0.2321D+01*SB3
26515           A3= 0.1811D+02-0.2000D+02*SB +0.1951D+02*SB2-0.6904D+01*SB3
26516           A4= 0.9822D+00+0.4972D+00*SB -0.8690D+00*SB2+0.3415D+00*SB3
26517           A5= 0.1772D+00-0.6078D+00*SB +0.3341D+01*SB2-0.1473D+01*SB3
26518         ELSEIF(IPRT .EQ. -4) THEN
26519           A0=SB** 0.1122D+01*Exp(-0.4232D+01-0.1808D+01*SB +
26520      &    0.5348D+00*SB2)
26521           A1=-0.2824D+00+0.5846D+00*SB -0.7230D+00*SB2+0.2419D+00*SB3
26522           A2= 0.5683D+01-0.2948D+01*SB +0.5916D+01*SB2-0.2560D+01*SB3
26523           A3= 0.2051D+01+0.4795D+01*SB -0.4271D+01*SB2+0.4174D+00*SB3
26524           A4= 0.1737D+00+0.1717D+01*SB -0.1978D+01*SB2+0.6643D+00*SB3
26525           A5= 0.8689D+00+0.3500D+01*SB -0.3283D+01*SB2+0.1026D+01*SB3
26526         ELSEIF(IPRT .EQ. -5) THEN
26527           A0=SB** 0.9906D+00*Exp(-0.1496D+01-0.6576D+01*SB +
26528      &    0.1569D+01*SB2)
26529           A1=-0.2140D+00-0.6419D-01*SB -0.2741D-02*SB2+0.3185D-02*SB3
26530           A2= 0.5781D+01+0.1049D+00*SB -0.3930D+00*SB2+0.5174D+00*SB3
26531           A3=-0.9420D+00+0.5511D+00*SB +0.8817D+00*SB2+0.1903D+01*SB3
26532           A4= 0.2418D-01+0.4232D-01*SB -0.1244D-01*SB2-0.2365D-01*SB3
26533           A5= 0.7664D+00+0.1794D+01*SB -0.4917D+00*SB2-0.1284D+00*SB3
26534         ELSEIF(IPRT .EQ. -6) THEN
26535           A0=SB** 0.1000D+01*Exp(-0.8460D+01+0.1154D+01*SB +
26536      &    0.8838D+01*SB2)
26537           A1=-0.4316D-01-0.2976D+00*SB +0.3174D+00*SB2-0.1429D+01*SB3
26538           A2= 0.4910D+01+0.2273D+01*SB +0.5631D+01*SB2-0.1994D+02*SB3
26539           A3= 0.1190D+02-0.2000D+02*SB -0.2000D+02*SB2+0.1292D+02*SB3
26540           A4= 0.5771D+00-0.2552D+00*SB +0.7510D+00*SB2+0.6923D+00*SB3
26541           A5= 0.4402D+01-0.1627D+01*SB -0.2085D+01*SB2-0.6737D+01*SB3
26542         ENDIF
26543  
26544 C...Expansion for CTEQ3D.
26545       ELSEIF(ISET .EQ. 3) THEN
26546         IF(IPRT .EQ. 2) THEN
26547           A0=Exp( 0.2148D+00+0.5814D-01*SB +0.2734D+00*SB2-
26548      &    0.2902D+00*SB3)
26549           A1= 0.4810D+00+0.1657D-01*SB -0.3800D-01*SB2+0.3125D-01*SB3
26550           A2= 0.3509D+01+0.3923D+00*SB +0.4010D+00*SB2-0.1932D+00*SB3
26551           A3= 0.7055D+01-0.6552D+01*SB +0.3466D+01*SB2-0.5657D+00*SB3
26552           A4= 0.1061D+01-0.3453D+00*SB +0.4089D+00*SB2-0.1817D+00*SB3
26553           A5= 0.8687D-01+0.2548D+00*SB -0.2967D+00*SB2+0.2647D+00*SB3
26554         ELSEIF(IPRT .EQ. 1) THEN
26555           A0=Exp( 0.3961D+00+0.4914D+00*SB -0.1728D+01*SB2+
26556      &    0.7257D+00*SB3)
26557           A1= 0.4162D+00-0.1419D+00*SB +0.3680D+00*SB2-0.1618D+00*SB3
26558           A2= 0.3248D+01+0.3028D+01*SB -0.4307D+01*SB2+0.1920D+01*SB3
26559           A3=-0.1100D+01+0.2184D+01*SB -0.3820D+01*SB2+0.1717D+01*SB3
26560           A4= 0.2082D+01-0.2756D+00*SB +0.3043D+00*SB2-0.1260D+00*SB3
26561           A5=-0.4822D+00-0.5706D+00*SB +0.2243D+01*SB2-0.9760D+00*SB3
26562         ELSEIF(IPRT .EQ. 0) THEN
26563           A0=Exp(-0.4665D+00-0.7554D+00*SB -0.3323D+00*SB2-
26564      &    0.2734D-04*SB3)
26565           A1=-0.3359D+00+0.2395D+00*SB -0.2377D+00*SB2+0.7059D-01*SB3
26566           A2= 0.5451D+01+0.6086D+00*SB +0.8606D-01*SB2-0.1425D+00*SB3
26567           A3= 0.1026D+02-0.9352D+01*SB +0.4879D+01*SB2-0.1150D+01*SB3
26568           A4= 0.9935D+00-0.5017D-01*SB -0.1707D-01*SB2-0.1464D-02*SB3
26569           A5=-0.4160D-01+0.2305D+01*SB -0.1063D+01*SB2+0.3211D+00*SB3
26570         ELSEIF(IPRT .EQ. -1) THEN
26571           A0=Exp(-0.2714D+01-0.2868D+01*SB +0.3700D+01*SB2-
26572      &    0.1671D+01*SB3)
26573           A1=-0.3893D+00+0.3341D+00*SB -0.3897D+00*SB2+0.1420D+00*SB3
26574           A2= 0.8359D+01-0.3267D+01*SB +0.5327D+01*SB2-0.2245D+01*SB3
26575           A3= 0.2359D+02-0.5669D+01*SB -0.4602D+01*SB2+0.3153D+01*SB3
26576           A4= 0.1106D+01-0.4745D+00*SB +0.7739D+00*SB2-0.3417D+00*SB3
26577           A5=-0.5557D+00+0.3433D+01*SB -0.3390D+01*SB2+0.1354D+01*SB3
26578         ELSEIF(IPRT .EQ. -2) THEN
26579           A0=Exp(-0.3323D+01+0.2296D+00*SB -0.1109D+01*SB2+
26580      &    0.2223D+00*SB3)
26581           A1=-0.3410D+00+0.8847D-01*SB -0.1111D-01*SB2-0.5927D-02*SB3
26582           A2= 0.9753D+01-0.5182D+00*SB -0.4670D+00*SB2+0.1921D+00*SB3
26583           A3= 0.1977D+02-0.1600D+02*SB +0.9481D+01*SB2-0.1864D+01*SB3
26584           A4= 0.9818D+00+0.2839D-02*SB -0.1188D+00*SB2+0.3584D-01*SB3
26585           A5=-0.7934D-01+0.1004D+01*SB +0.3704D+00*SB2-0.1220D+00*SB3
26586         ELSEIF(IPRT .EQ. -3) THEN
26587           A0=Exp(-0.3985D+01+0.2855D+01*SB -0.5208D+01*SB2+
26588      &    0.1937D+01*SB3)
26589           A1=-0.3337D+00-0.1150D+00*SB +0.3691D+00*SB2-0.1709D+00*SB3
26590           A2= 0.7968D+01+0.3641D+01*SB -0.6599D+01*SB2+0.2642D+01*SB3
26591           A3= 0.1873D+02-0.1999D+02*SB +0.1734D+02*SB2-0.5813D+01*SB3
26592           A4= 0.9731D+00+0.5082D+00*SB -0.8780D+00*SB2+0.3231D+00*SB3
26593           A5=-0.5542D-01-0.4189D+00*SB +0.3309D+01*SB2-0.1439D+01*SB3
26594         ELSEIF(IPRT .EQ. -4) THEN
26595           A0=SB** 0.1105D+01*Exp(-0.3952D+01-0.1901D+01*SB +
26596      &    0.5137D+00*SB2)
26597           A1=-0.3543D+00+0.6055D+00*SB -0.6941D+00*SB2+0.2278D+00*SB3
26598           A2= 0.5955D+01-0.2629D+01*SB +0.5337D+01*SB2-0.2300D+01*SB3
26599           A3= 0.1933D+01+0.4882D+01*SB -0.3810D+01*SB2+0.2290D+00*SB3
26600           A4= 0.1806D+00+0.1655D+01*SB -0.1893D+01*SB2+0.6395D+00*SB3
26601           A5= 0.4790D+00+0.3612D+01*SB -0.3152D+01*SB2+0.9684D+00*SB3
26602         ELSEIF(IPRT .EQ. -5) THEN
26603           A0=SB** 0.9818D+00*Exp(-0.1825D+01-0.7464D+01*SB +
26604      &    0.2143D+01*SB2)
26605           A1=-0.2604D+00-0.1400D+00*SB +0.1702D+00*SB2-0.8476D-01*SB3
26606           A2= 0.6005D+01+0.6275D+00*SB -0.2535D+01*SB2+0.2219D+01*SB3
26607           A3=-0.9067D+00+0.1149D+01*SB +0.1974D+01*SB2+0.4716D+01*SB3
26608           A4= 0.3915D-01+0.5945D-01*SB -0.9844D-01*SB2+0.2783D-01*SB3
26609           A5= 0.5500D+00+0.1994D+01*SB -0.6727D+00*SB2-0.1510D+00*SB3
26610         ELSEIF(IPRT .EQ. -6) THEN
26611           A0=SB** 0.1002D+01*Exp(-0.8553D+01+0.3793D+00*SB +
26612      &    0.9998D+01*SB2)
26613           A1=-0.5870D-01-0.2792D+00*SB +0.6526D+00*SB2-0.1984D+01*SB3
26614           A2= 0.4716D+01+0.4473D+00*SB +0.1128D+02*SB2-0.1937D+02*SB3
26615           A3= 0.1289D+02-0.1742D+02*SB -0.1983D+02*SB2-0.9274D+00*SB3
26616           A4= 0.5647D+00-0.2732D+00*SB +0.1074D+01*SB2+0.5981D+00*SB3
26617           A5= 0.4390D+01-0.1262D+01*SB -0.9026D+00*SB2-0.9394D+01*SB3
26618         ENDIF
26619       ENDIF
26620  
26621 C...Calculation of x * f(x, Q).
26622       PYCTEQ = MAX(0D0, A0 *(X**A1) *((1D0-X)**A2) *(1D0+A3*(X**A4))
26623      &   *(LOG(1D0+1D0/X))**A5 )
26624  
26625       RETURN
26626       END
26627  
26628 C*********************************************************************
26629  
26630 C...PYGRVL
26631 C...Gives the GRV 94 L (leading order) parton distribution function set
26632 C...in parametrized form.
26633 C...Authors: M. Glueck, E. Reya and A. Vogt.
26634  
26635       SUBROUTINE PYGRVL (X, Q2, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
26636  
26637 C...Double precision declaration.
26638       IMPLICIT DOUBLE PRECISION (A - Z)
26639  
26640 C...Common expressions.
26641       MU2  = 0.23D0
26642       LAM2 = 0.2322D0 * 0.2322D0
26643       S  = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
26644       DS = SQRT (S)
26645       S2 = S * S
26646       S3 = S2 * S
26647  
26648 C...uv :
26649       NU  =  2.284D0 + 0.802D0 * S + 0.055D0 * S2
26650       AKU =  0.590D0 - 0.024D0 * S
26651       BKU =  0.131D0 + 0.063D0 * S
26652       AU  = -0.449D0 - 0.138D0 * S - 0.076D0 * S2
26653       BU  =  0.213D0 + 2.669D0 * S - 0.728D0 * S2
26654       CU  =  8.854D0 - 9.135D0 * S + 1.979D0 * S2
26655       DU  =  2.997D0 + 0.753D0 * S - 0.076D0 * S2
26656       UV  = PYGRVV (X, NU, AKU, BKU, AU, BU, CU, DU)
26657  
26658 C...dv :
26659       ND  =  0.371D0 + 0.083D0 * S + 0.039D0 * S2
26660       AKD =  0.376D0
26661       BKD =  0.486D0 + 0.062D0 * S
26662       AD  = -0.509D0 + 3.310D0 * S - 1.248D0 * S2
26663       BD  =  12.41D0 - 10.52D0 * S + 2.267D0 * S2
26664       CD  =  6.373D0 - 6.208D0 * S + 1.418D0 * S2
26665       DD  =  3.691D0 + 0.799D0 * S - 0.071D0 * S2
26666       DV  = PYGRVV (X, ND, AKD, BKD, AD, BD, CD, DD)
26667  
26668 C...del :
26669       NE  =  0.082D0 + 0.014D0 * S + 0.008D0 * S2
26670       AKE =  0.409D0 - 0.005D0 * S
26671       BKE =  0.799D0 + 0.071D0 * S
26672       AE  = -38.07D0 + 36.13D0 * S - 0.656D0 * S2
26673       BE  =  90.31D0 - 74.15D0 * S + 7.645D0 * S2
26674       CE  =  0.0D0
26675       DE  =  7.486D0 + 1.217D0 * S - 0.159D0 * S2
26676       DEL = PYGRVV (X, NE, AKE, BKE, AE, BE, CE, DE)
26677  
26678 C...udb :
26679       ALX =  1.451D0
26680       BEX =  0.271D0
26681       AKX =  0.410D0 - 0.232D0 * S
26682       BKX =  0.534D0 - 0.457D0 * S
26683       AGX =  0.890D0 - 0.140D0 * S
26684       BGX = -0.981D0
26685       CX  =  0.320D0 + 0.683D0 * S
26686       DX  =  4.752D0 + 1.164D0 * S + 0.286D0 * S2
26687       EX  =  4.119D0 + 1.713D0 * S
26688       ESX =  0.682D0 + 2.978D0 * S
26689       UDB = PYGRVW (X, S, ALX, BEX, AKX, BKX, AGX, BGX, CX,
26690      & DX, EX, ESX)
26691  
26692 C...sb :
26693       STS =  0D0
26694       ALS =  0.914D0
26695       BES =  0.577D0
26696       AKS =  1.798D0 - 0.596D0 * S
26697       AS  = -5.548D0 + 3.669D0 * DS - 0.616D0 * S
26698       BS  =  18.92D0 - 16.73D0 * DS + 5.168D0 * S
26699       DST =  6.379D0 - 0.350D0 * S  + 0.142D0 * S2
26700       EST =  3.981D0 + 1.638D0 * S
26701       ESS =  6.402D0
26702       SB  = PYGRVS (X, S, STS, ALS, BES, AKS, AS, BS, DST, EST, ESS)
26703  
26704 C...cb :
26705       STC =  0.888D0
26706       ALC =  1.01D0
26707       BEC =  0.37D0
26708       AKC =  0D0
26709       AC  =  0D0
26710       BC  =  4.24D0  - 0.804D0 * S
26711       DCT =  3.46D0  - 1.076D0 * S
26712       ECT =  4.61D0  + 1.49D0  * S
26713       ESC =  2.555D0 + 1.961D0 * S
26714       CHM = PYGRVS (X, S, STC, ALC, BEC, AKC, AC, BC, DCT, ECT, ESC)
26715  
26716 C...bb :
26717       STB =  1.351D0
26718       ALB =  1.00D0
26719       BEB =  0.51D0
26720       AKB =  0D0
26721       AB  =  0D0
26722       BB  =  1.848D0
26723       DBT =  2.929D0 + 1.396D0 * S
26724       EBT =  4.71D0  + 1.514D0 * S
26725       ESB =  4.02D0  + 1.239D0 * S
26726       BOT = PYGRVS (X, S, STB, ALB, BEB, AKB, AB, BB, DBT, EBT, ESB)
26727  
26728 C...gl :
26729       ALG =  0.524D0
26730       BEG =  1.088D0
26731       AKG =  1.742D0 - 0.930D0 * S
26732       BKG =                         - 0.399D0 * S2
26733       AG  =  7.486D0 - 2.185D0 * S
26734       BG  =  16.69D0 - 22.74D0 * S  + 5.779D0 * S2
26735       CG  = -25.59D0 + 29.71D0 * S  - 7.296D0 * S2
26736       DG  =  2.792D0 + 2.215D0 * S  + 0.422D0 * S2 - 0.104D0 * S3
26737       EG  =  0.807D0 + 2.005D0 * S
26738       ESG =  3.841D0 + 0.316D0 * S
26739       GL  = PYGRVW (X, S, ALG, BEG, AKG, BKG, AG, BG, CG,
26740      & DG, EG, ESG)
26741  
26742       RETURN
26743       END
26744  
26745 C*********************************************************************
26746  
26747 C...PYGRVM
26748 C...Gives the GRV 94 M (MSbar) parton distribution function set
26749 C...in parametrized form.
26750 C...Authors: M. Glueck, E. Reya and A. Vogt.
26751  
26752       SUBROUTINE PYGRVM (X, Q2, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
26753  
26754 C...Double precision declaration.
26755       IMPLICIT DOUBLE PRECISION (A - Z)
26756  
26757 C...Common expressions.
26758       MU2  = 0.34D0
26759       LAM2 = 0.248D0 * 0.248D0
26760       S  = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
26761       DS = SQRT (S)
26762       S2 = S * S
26763       S3 = S2 * S
26764  
26765 C...uv :
26766       NU  =  1.304D0 + 0.863D0 * S
26767       AKU =  0.558D0 - 0.020D0 * S
26768       BKU =          0.183D0 * S
26769       AU  = -0.113D0 + 0.283D0 * S - 0.321D0 * S2
26770       BU  =  6.843D0 - 5.089D0 * S + 2.647D0 * S2 - 0.527D0 * S3
26771       CU  =  7.771D0 - 10.09D0 * S + 2.630D0 * S2
26772       DU  =  3.315D0 + 1.145D0 * S - 0.583D0 * S2 + 0.154D0 * S3
26773       UV  = PYGRVV (X, NU, AKU, BKU, AU, BU, CU, DU)
26774  
26775 C...dv :
26776       ND  =  0.102D0 - 0.017D0 * S + 0.005D0 * S2
26777       AKD =  0.270D0 - 0.019D0 * S
26778       BKD =  0.260D0
26779       AD  =  2.393D0 + 6.228D0 * S - 0.881D0 * S2
26780       BD  =  46.06D0 + 4.673D0 * S - 14.98D0 * S2 + 1.331D0 * S3
26781       CD  =  17.83D0 - 53.47D0 * S + 21.24D0 * S2
26782       DD  =  4.081D0 + 0.976D0 * S - 0.485D0 * S2 + 0.152D0 * S3
26783       DV  = PYGRVV (X, ND, AKD, BKD, AD, BD, CD, DD)
26784  
26785 C...del :
26786       NE  =  0.070D0 + 0.042D0 * S - 0.011D0 * S2 + 0.004D0 * S3
26787       AKE =  0.409D0 - 0.007D0 * S
26788       BKE =  0.782D0 + 0.082D0 * S
26789       AE  = -29.65D0 + 26.49D0 * S + 5.429D0 * S2
26790       BE  =  90.20D0 - 74.97D0 * S + 4.526D0 * S2
26791       CE  =  0.0D0
26792       DE  =  8.122D0 + 2.120D0 * S - 1.088D0 * S2 + 0.231D0 * S3
26793       DEL = PYGRVV (X, NE, AKE, BKE, AE, BE, CE, DE)
26794  
26795 C...udb :
26796       ALX =  0.877D0
26797       BEX =  0.561D0
26798       AKX =  0.275D0
26799       BKX =  0.0D0
26800       AGX =  0.997D0
26801       BGX =  3.210D0 - 1.866D0 * S
26802       CX  =  7.300D0
26803       DX  =  9.010D0 + 0.896D0 * DS + 0.222D0 * S2
26804       EX  =  3.077D0 + 1.446D0 * S
26805       ESX =  3.173D0 - 2.445D0 * DS + 2.207D0 * S
26806       UDB = PYGRVW (X, S, ALX, BEX, AKX, BKX, AGX, BGX, CX,
26807      & DX, EX, ESX)
26808  
26809 C...sb :
26810       STS =  0D0
26811       ALS =  0.756D0
26812       BES =  0.216D0
26813       AKS =  1.690D0 + 0.650D0 * DS - 0.922D0 * S
26814       AS  = -4.329D0 + 1.131D0 * S
26815       BS  =  9.568D0 - 1.744D0 * S
26816       DST =  9.377D0 + 1.088D0 * DS - 1.320D0 * S + 0.130D0 * S2
26817       EST =  3.031D0 + 1.639D0 * S
26818       ESS =  5.837D0 + 0.815D0 * S
26819       SB  = PYGRVS (X, S, STS, ALS, BES, AKS, AS, BS, DST, EST, ESS)
26820  
26821 C...cb :
26822       STC =  0.820D0
26823       ALC =  0.98D0
26824       BEC =  0D0
26825       AKC = -0.625D0 - 0.523D0 * S
26826       AC  =  0D0
26827       BC  =  1.896D0 + 1.616D0 * S
26828       DCT =  4.12D0  + 0.683D0 * S
26829       ECT =  4.36D0  + 1.328D0 * S
26830       ESC =  0.677D0 + 0.679D0 * S
26831       CHM = PYGRVS (X, S, STC, ALC, BEC, AKC, AC, BC, DCT, ECT, ESC)
26832  
26833 C...bb :
26834       STB =  1.297D0
26835       ALB =  0.99D0
26836       BEB =  0D0
26837       AKB =          - 0.193D0 * S
26838       AB  =  0D0
26839       BB  =  0D0
26840       DBT =  3.447D0 + 0.927D0 * S
26841       EBT =  4.68D0  + 1.259D0 * S
26842       ESB =  1.892D0 + 2.199D0 * S
26843       BOT = PYGRVS (X, S, STB, ALB, BEB, AKB, AB, BB, DBT, EBT, ESB)
26844  
26845 C...gl :
26846        ALG =  1.014D0
26847        BEG =  1.738D0
26848        AKG =  1.724D0 + 0.157D0 * S
26849        BKG =  0.800D0 + 1.016D0 * S
26850        AG  =  7.517D0 - 2.547D0 * S
26851        BG  =  34.09D0 - 52.21D0 * DS + 17.47D0 * S
26852        CG  =  4.039D0 + 1.491D0 * S
26853        DG  =  3.404D0 + 0.830D0 * S
26854        EG  = -1.112D0 + 3.438D0 * S  - 0.302D0 * S2
26855        ESG =  3.256D0 - 0.436D0 * S
26856        GL  = PYGRVW (X, S, ALG, BEG, AKG, BKG, AG, BG, CG, DG, EG, ESG)
26857  
26858        RETURN
26859        END
26860  
26861 C*********************************************************************
26862  
26863 C...PYGRVD
26864 C...Gives the GRV 94 D (DIS) parton distribution function set
26865 C...in parametrized form.
26866 C...Authors: M. Glueck, E. Reya and A. Vogt.
26867  
26868       SUBROUTINE PYGRVD (X, Q2, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
26869  
26870 C...Double precision declaration.
26871       IMPLICIT DOUBLE PRECISION (A - Z)
26872  
26873 C...Common expressions.
26874       MU2  = 0.34D0
26875       LAM2 = 0.248D0 * 0.248D0
26876       S  = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
26877       DS = SQRT (S)
26878       S2 = S * S
26879       S3 = S2 * S
26880  
26881 C...uv :
26882       NU  =  2.484D0 + 0.116D0 * S + 0.093D0 * S2
26883       AKU =  0.563D0 - 0.025D0 * S
26884       BKU =  0.054D0 + 0.154D0 * S
26885       AU  = -0.326D0 - 0.058D0 * S - 0.135D0 * S2
26886       BU  = -3.322D0 + 8.259D0 * S - 3.119D0 * S2 + 0.291D0 * S3
26887       CU  =  11.52D0 - 12.99D0 * S + 3.161D0 * S2
26888       DU  =  2.808D0 + 1.400D0 * S - 0.557D0 * S2 + 0.119D0 * S3
26889       UV  = PYGRVV (X, NU, AKU, BKU, AU, BU, CU, DU)
26890  
26891 C...dv :
26892       ND  =  0.156D0 - 0.017D0 * S
26893       AKD =  0.299D0 - 0.022D0 * S
26894       BKD =  0.259D0 - 0.015D0 * S
26895       AD  =  3.445D0 + 1.278D0 * S + 0.326D0 * S2
26896       BD  = -6.934D0 + 37.45D0 * S - 18.95D0 * S2 + 1.463D0 * S3
26897       CD  =  55.45D0 - 69.92D0 * S + 20.78D0 * S2
26898       DD  =  3.577D0 + 1.441D0 * S - 0.683D0 * S2 + 0.179D0 * S3
26899       DV  = PYGRVV (X, ND, AKD, BKD, AD, BD, CD, DD)
26900  
26901 C...del :
26902       NE  =  0.099D0 + 0.019D0 * S + 0.002D0 * S2
26903       AKE =  0.419D0 - 0.013D0 * S
26904       BKE =  1.064D0 - 0.038D0 * S
26905       AE  = -44.00D0 + 98.70D0 * S - 14.79D0 * S2
26906       BE  =  28.59D0 - 40.94D0 * S - 13.66D0 * S2 + 2.523D0 * S3
26907       CE  =  84.57D0 - 108.8D0 * S + 31.52D0 * S2
26908       DE  =  7.469D0 + 2.480D0 * S - 0.866D0 * S2
26909       DEL = PYGRVV (X, NE, AKE, BKE, AE, BE, CE, DE)
26910  
26911 C...udb :
26912       ALX =  1.215D0
26913       BEX =  0.466D0
26914       AKX =  0.326D0 + 0.150D0 * S
26915       BKX =  0.956D0 + 0.405D0 * S
26916       AGX =  0.272D0
26917       BGX =  3.794D0 - 2.359D0 * DS
26918       CX  =  2.014D0
26919       DX  =  7.941D0 + 0.534D0 * DS - 0.940D0 * S + 0.410D0 * S2
26920       EX  =  3.049D0 + 1.597D0 * S
26921       ESX =  4.396D0 - 4.594D0 * DS + 3.268D0 * S
26922       UDB = PYGRVW (X, S, ALX, BEX, AKX, BKX, AGX, BGX, CX,
26923      & DX, EX, ESX)
26924  
26925 C...sb :
26926       STS =  0D0
26927       ALS =  0.175D0
26928       BES =  0.344D0
26929       AKS =  1.415D0 - 0.641D0 * DS
26930       AS  =  0.580D0 - 9.763D0 * DS + 6.795D0 * S  - 0.558D0 * S2
26931       BS  =  5.617D0 + 5.709D0 * DS - 3.972D0 * S
26932       DST =  13.78D0 - 9.581D0 * S  + 5.370D0 * S2 - 0.996D0 * S3
26933       EST =  4.546D0 + 0.372D0 * S2
26934       ESS =  5.053D0 - 1.070D0 * S  + 0.805D0 * S2
26935       SB  = PYGRVS (X, S, STS, ALS, BES, AKS, AS, BS, DST, EST, ESS)
26936  
26937 C...cb :
26938       STC =  0.820D0
26939       ALC =  0.98D0
26940       BEC =  0D0
26941       AKC = -0.625D0 - 0.523D0 * S
26942       AC  =  0D0
26943       BC  =  1.896D0 + 1.616D0 * S
26944       DCT =  4.12D0  + 0.683D0 * S
26945       ECT =  4.36D0  + 1.328D0 * S
26946       ESC =  0.677D0 + 0.679D0 * S
26947       CHM = PYGRVS (X, S, STC, ALC, BEC, AKC, AC, BC, DCT, ECT, ESC)
26948  
26949 C...bb :
26950       STB =  1.297D0
26951       ALB =  0.99D0
26952       BEB =  0D0
26953       AKB =          - 0.193D0 * S
26954       AB  =  0D0
26955       BB  =  0D0
26956       DBT =  3.447D0 + 0.927D0 * S
26957       EBT =  4.68D0  + 1.259D0 * S
26958       ESB =  1.892D0 + 2.199D0 * S
26959       BOT = PYGRVS (X, S, STB, ALB, BEB, AKB, AB, BB, DBT, EBT, ESB)
26960  
26961 C...gl :
26962       ALG =  1.258D0
26963       BEG =  1.846D0
26964       AKG =  2.423D0
26965       BKG =  2.427D0 + 1.311D0 * S  - 0.153D0 * S2
26966       AG  =  25.09D0 - 7.935D0 * S
26967       BG  = -14.84D0 - 124.3D0 * DS + 72.18D0 * S
26968       CG  =  590.3D0 - 173.8D0 * S
26969       DG  =  5.196D0 + 1.857D0 * S
26970       EG  = -1.648D0 + 3.988D0 * S  - 0.432D0 * S2
26971       ESG =  3.232D0 - 0.542D0 * S
26972       GL  = PYGRVW (X, S, ALG, BEG, AKG, BKG, AG, BG, CG, DG, EG, ESG)
26973  
26974       RETURN
26975       END
26976  
26977 C*********************************************************************
26978  
26979 C...PYGRVV
26980 C...Auxiliary for the GRV 94 parton distribution functions
26981 C...for u and d valence and d-u sea.
26982 C...Authors: M. Glueck, E. Reya and A. Vogt.
26983  
26984       FUNCTION PYGRVV (X, N, AK, BK, A, B, C, D)
26985  
26986 C...Double precision declaration.
26987       IMPLICIT DOUBLE PRECISION (A - Z)
26988  
26989 C...Evaluation.
26990       DX = SQRT (X)
26991       PYGRVV = N * X**AK * (1D0+ A*X**BK + X * (B + C*DX)) *
26992      & (1D0- X)**D
26993  
26994       RETURN
26995       END
26996  
26997 C*********************************************************************
26998  
26999 C...PYGRVW
27000 C...Auxiliary for the GRV 94 parton distribution functions
27001 C...for d+u sea and gluon.
27002 C...Authors: M. Glueck, E. Reya and A. Vogt.
27003  
27004       FUNCTION PYGRVW (X, S, AL, BE, AK, BK, A, B, C, D, E, ES)
27005  
27006 C...Double precision declaration.
27007       IMPLICIT DOUBLE PRECISION (A - Z)
27008  
27009 C...Evaluation.
27010       LX = LOG (1D0/X)
27011       PYGRVW = (X**AK * (A + X * (B + X*C)) * LX**BK + S**AL
27012      &     * EXP (-E + SQRT (ES * S**BE * LX))) * (1D0- X)**D
27013  
27014       RETURN
27015       END
27016  
27017 C*********************************************************************
27018  
27019 C...PYGRVS
27020 C...Auxiliary for the GRV 94 parton distribution functions
27021 C...for s, c and b sea.
27022 C...Authors: M. Glueck, E. Reya and A. Vogt.
27023  
27024       FUNCTION PYGRVS (X, S, STH, AL, BE, AK, AG, B, D, E, ES)
27025  
27026 C...Double precision declaration.
27027       IMPLICIT DOUBLE PRECISION (A - Z)
27028  
27029 C...Evaluation.
27030       IF(S.LE.STH) THEN
27031         PYGRVS = 0D0
27032       ELSE
27033         DX = SQRT (X)
27034         LX = LOG (1D0/X)
27035         PYGRVS = (S - STH)**AL / LX**AK * (1D0+ AG*DX + B*X) *
27036      &     (1D0- X)**D * EXP (-E + SQRT (ES * S**BE * LX))
27037       ENDIF
27038  
27039       RETURN
27040       END
27041
27042 C*********************************************************************
27043
27044 C...CTEQ5M1 and CTEQ5L Parton Distribution Functions 
27045 C...in Parametrized Form
27046 C...            September 15, 1999
27047 C
27048 C...Ref: "GLOBAL QCD ANALYSIS OF PARTON STRUCTURE OF THE NUCLEON:
27049 C...      CTEQ5 PPARTON DISTRIBUTIONS"
27050 C...hep-ph/9903282
27051
27052 C...The CTEQ5M1 set given here is an updated version of the original 
27053 C...CTEQ5M set posted, in the table version, on the Web page of CTEQ.
27054 C...The differences between CTEQ5M and CTEQ5M1 are insignificant for 
27055 C...almost all applications. 
27056 C...The improvement is in the QCD evolution which is now more 
27057 C...accurate, and which agrees completely with the benchmark work 
27058 C...of the HERA 96/97 Workshop.
27059 C...The differences between the parametrized and the corresponding 
27060 C...table versions (on which it is based) are of similar order as 
27061 C...between the two version.
27062     
27063 C...!! Because accurate parametrizations over a wide range of (x,Q) 
27064 C...is hard to obtain, only the most widely used sets CTEQ5M and 
27065 C...CTEQ5L are available in parametrized form for now. 
27066
27067 C...These parametrizations were obtained by Jon Pumplin.
27068
27069 C  Iset   PDF        Description              Alpha_s(Mz)  Lam4  Lam5
27070 C -------------------------------------------------------------------
27071 C   1    CTEQ5M1  Standard NLO MSbar scheme      0.118     326   226
27072 C   3    CTEQ5L   Leading Order                  0.127     192   146
27073 C -------------------------------------------------------------------
27074 C...Note the Qcd-lambda values given for CTEQ5L is for the leading 
27075 C...order form of Alpha_s!!  Alpha_s(Mz) gives the absolute 
27076 C...calibration.
27077
27078 C...The two Iset value are adopted to agree with the standard table 
27079 C...versions.
27080        
27081 C...Range of validity:  
27082 C...The range of (x, Q) covered by this parametrization of the QCD 
27083 C...evolved parton distributions is 1E-6 < x < 1 ; 
27084 C...1.1 GeV < Q < 10 TeV.  Of course, the PDF's are constrained by 
27085 C...data only in a subset of that region; and the assumed DGLAP 
27086 C...evolution is unlikely to be valid for all of it either.
27087
27088 C...The range of (x, Q) used in the CTEQ5 round of global analysis is 
27089 C...approximately 0.01 < x < 0.75 ; and 4 GeV^2 < Q^2 < 400 GeV^2 for 
27090 C...fixed target experiments; 0.0001 < x < 0.3 from HERA data; and   
27091 C...Q^2 up to 40,000 GeV^2 from Tevatron inclusive Jet data.
27092
27093 C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
27094
27095 C...PYCT5L 
27096 C...Auxiliary function for parametrization of CTEQ5L. 
27097 C...Author: J. Pumplin 9/99.
27098
27099       FUNCTION PYCT5L(IFL,X,Q)
27100  
27101 C...Double precision declaration.
27102       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
27103       IMPLICIT INTEGER(I-N)
27104
27105       PARAMETER (NEX=8, NLF=2)
27106       DIMENSION AM(0:NEX,0:NLF,-5:2)
27107       DIMENSION ALFVEC(-5:2), QMAVEC(-5:2)
27108       DIMENSION MEXVEC(-5:2), MLFVEC(-5:2)
27109       DIMENSION UT1VEC(-5:2), UT2VEC(-5:2)
27110       DIMENSION AF(0:NEX)
27111
27112       DATA MEXVEC( 2) / 8 /
27113       DATA MLFVEC( 2) / 2 /
27114       DATA UT1VEC( 2) /  0.4971265E+01 /
27115       DATA UT2VEC( 2) / -0.1105128E+01 /
27116       DATA ALFVEC( 2) /  0.2987216E+00 /
27117       DATA QMAVEC( 2) /  0.0000000E+00 /
27118       DATA (AM( 0,K, 2),K=0, 2)
27119      & /  0.5292616E+01, -0.2751910E+01, -0.2488990E+01 /
27120       DATA (AM( 1,K, 2),K=0, 2)
27121      & /  0.9714424E+00,  0.1011827E-01, -0.1023660E-01 /
27122       DATA (AM( 2,K, 2),K=0, 2)
27123      & / -0.1651006E+02,  0.7959721E+01,  0.8810563E+01 /
27124       DATA (AM( 3,K, 2),K=0, 2)
27125      & / -0.1643394E+02,  0.5892854E+01,  0.9348874E+01 /
27126       DATA (AM( 4,K, 2),K=0, 2)
27127      & /  0.3067422E+02,  0.4235796E+01, -0.5112136E+00 /
27128       DATA (AM( 5,K, 2),K=0, 2)
27129      & /  0.2352526E+02, -0.5305168E+01, -0.1169174E+02 /
27130       DATA (AM( 6,K, 2),K=0, 2)
27131      & / -0.1095451E+02,  0.3006577E+01,  0.5638136E+01 /
27132       DATA (AM( 7,K, 2),K=0, 2)
27133      & / -0.1172251E+02, -0.2183624E+01,  0.4955794E+01 /
27134       DATA (AM( 8,K, 2),K=0, 2)
27135      & /  0.1662533E-01,  0.7622870E-02, -0.4895887E-03 /
27136
27137       DATA MEXVEC( 1) / 8 /
27138       DATA MLFVEC( 1) / 2 /
27139       DATA UT1VEC( 1) /  0.2612618E+01 /
27140       DATA UT2VEC( 1) / -0.1258304E+06 /
27141       DATA ALFVEC( 1) /  0.3407552E+00 /
27142       DATA QMAVEC( 1) /  0.0000000E+00 /
27143       DATA (AM( 0,K, 1),K=0, 2)
27144      & /  0.9905300E+00, -0.4502235E+00,  0.1624441E+00 /
27145       DATA (AM( 1,K, 1),K=0, 2)
27146      & /  0.8867534E+00,  0.1630829E-01, -0.4049085E-01 /
27147       DATA (AM( 2,K, 1),K=0, 2)
27148      & /  0.8547974E+00,  0.3336301E+00,  0.1371388E+00 /
27149       DATA (AM( 3,K, 1),K=0, 2)
27150      & /  0.2941113E+00, -0.1527905E+01,  0.2331879E+00 /
27151       DATA (AM( 4,K, 1),K=0, 2)
27152      & /  0.3384235E+02,  0.3715315E+01,  0.8276930E+00 /
27153       DATA (AM( 5,K, 1),K=0, 2)
27154      & /  0.6230115E+01,  0.3134639E+01, -0.1729099E+01 /
27155       DATA (AM( 6,K, 1),K=0, 2)
27156      & / -0.1186928E+01, -0.3282460E+00,  0.1052020E+00 /
27157       DATA (AM( 7,K, 1),K=0, 2)
27158      & / -0.8545702E+01, -0.6247947E+01,  0.3692561E+01 /
27159       DATA (AM( 8,K, 1),K=0, 2)
27160      & /  0.1724598E-01,  0.7120465E-02,  0.4003646E-04 /
27161
27162       DATA MEXVEC( 0) / 8 /
27163       DATA MLFVEC( 0) / 2 /
27164       DATA UT1VEC( 0) / -0.4656819E+00 /
27165       DATA UT2VEC( 0) / -0.2742390E+03 /
27166       DATA ALFVEC( 0) /  0.4491863E+00 /
27167       DATA QMAVEC( 0) /  0.0000000E+00 /
27168       DATA (AM( 0,K, 0),K=0, 2)
27169      & /  0.1193572E+03, -0.3886845E+01, -0.1133965E+01 /
27170       DATA (AM( 1,K, 0),K=0, 2)
27171      & / -0.9421449E+02,  0.3995885E+01,  0.1607363E+01 /
27172       DATA (AM( 2,K, 0),K=0, 2)
27173      & /  0.4206383E+01,  0.2485954E+00,  0.2497468E+00 /
27174       DATA (AM( 3,K, 0),K=0, 2)
27175      & /  0.1210557E+03, -0.3015765E+01, -0.1423651E+01 /
27176       DATA (AM( 4,K, 0),K=0, 2)
27177      & / -0.1013897E+03, -0.7113478E+00,  0.2621865E+00 /
27178       DATA (AM( 5,K, 0),K=0, 2)
27179      & / -0.1312404E+01, -0.9297691E+00, -0.1562531E+00 /
27180       DATA (AM( 6,K, 0),K=0, 2)
27181      & /  0.1627137E+01,  0.4954111E+00, -0.6387009E+00 /
27182       DATA (AM( 7,K, 0),K=0, 2)
27183      & /  0.1537698E+00, -0.2487878E+00,  0.8305947E+00 /
27184       DATA (AM( 8,K, 0),K=0, 2)
27185      & /  0.2496448E-01,  0.2457823E-02,  0.8234276E-03 /
27186
27187       DATA MEXVEC(-1) / 8 /
27188       DATA MLFVEC(-1) / 2 /
27189       DATA UT1VEC(-1) /  0.3862583E+01 /
27190       DATA UT2VEC(-1) / -0.1265969E+01 /
27191       DATA ALFVEC(-1) /  0.2457668E+00 /
27192       DATA QMAVEC(-1) /  0.0000000E+00 /
27193       DATA (AM( 0,K,-1),K=0, 2)
27194      & /  0.2647441E+02,  0.1059277E+02, -0.9176654E+00 /
27195       DATA (AM( 1,K,-1),K=0, 2)
27196      & /  0.1990636E+01,  0.8558918E-01,  0.4248667E-01 /
27197       DATA (AM( 2,K,-1),K=0, 2)
27198      & / -0.1476095E+02, -0.3276255E+02,  0.1558110E+01 /
27199       DATA (AM( 3,K,-1),K=0, 2)
27200      & / -0.2966889E+01, -0.3649037E+02,  0.1195914E+01 /
27201       DATA (AM( 4,K,-1),K=0, 2)
27202      & / -0.1000519E+03, -0.2464635E+01,  0.1964849E+00 /
27203       DATA (AM( 5,K,-1),K=0, 2)
27204      & /  0.3718331E+02,  0.4700389E+02, -0.2772142E+01 /
27205       DATA (AM( 6,K,-1),K=0, 2)
27206      & / -0.1872722E+02, -0.2291189E+02,  0.1089052E+01 /
27207       DATA (AM( 7,K,-1),K=0, 2)
27208      & / -0.1628146E+02, -0.1823993E+02,  0.2537369E+01 /
27209       DATA (AM( 8,K,-1),K=0, 2)
27210      & / -0.1156300E+01, -0.1280495E+00,  0.5153245E-01 /
27211
27212       DATA MEXVEC(-2) / 7 /
27213       DATA MLFVEC(-2) / 2 /
27214       DATA UT1VEC(-2) /  0.1895615E+00 /
27215       DATA UT2VEC(-2) / -0.3069097E+01 /
27216       DATA ALFVEC(-2) /  0.5293999E+00 /
27217       DATA QMAVEC(-2) /  0.0000000E+00 /
27218       DATA (AM( 0,K,-2),K=0, 2)
27219      & / -0.6556775E+00,  0.2490190E+00,  0.3966485E-01 /
27220       DATA (AM( 1,K,-2),K=0, 2)
27221      & /  0.1305102E+01, -0.1188925E+00, -0.4600870E-02 /
27222       DATA (AM( 2,K,-2),K=0, 2)
27223      & / -0.2371436E+01,  0.3566814E+00, -0.2834683E+00 /
27224       DATA (AM( 3,K,-2),K=0, 2)
27225      & / -0.6152826E+01,  0.8339877E+00, -0.7233230E+00 /
27226       DATA (AM( 4,K,-2),K=0, 2)
27227      & / -0.8346558E+01,  0.2892168E+01,  0.2137099E+00 /
27228       DATA (AM( 5,K,-2),K=0, 2)
27229      & /  0.1279530E+02,  0.1021114E+00,  0.5787439E+00 /
27230       DATA (AM( 6,K,-2),K=0, 2)
27231      & /  0.5858816E+00, -0.1940375E+01, -0.4029269E+00 /
27232       DATA (AM( 7,K,-2),K=0, 2)
27233      & / -0.2795725E+02, -0.5263392E+00,  0.1290229E+01 /
27234
27235       DATA MEXVEC(-3) / 7 /
27236       DATA MLFVEC(-3) / 2 /
27237       DATA UT1VEC(-3) /  0.3753257E+01 /
27238       DATA UT2VEC(-3) / -0.1113085E+01 /
27239       DATA ALFVEC(-3) /  0.3713141E+00 /
27240       DATA QMAVEC(-3) /  0.0000000E+00 /
27241       DATA (AM( 0,K,-3),K=0, 2)
27242      & /  0.1580931E+01, -0.2273826E+01, -0.1822245E+01 /
27243       DATA (AM( 1,K,-3),K=0, 2)
27244      & /  0.2702644E+01,  0.6763243E+00,  0.7231586E-02 /
27245       DATA (AM( 2,K,-3),K=0, 2)
27246      & / -0.1857924E+02,  0.3907500E+01,  0.5850109E+01 /
27247       DATA (AM( 3,K,-3),K=0, 2)
27248      & / -0.3044793E+02,  0.2639332E+01,  0.5566644E+01 /
27249       DATA (AM( 4,K,-3),K=0, 2)
27250      & / -0.4258011E+01, -0.5429244E+01,  0.4418946E+00 /
27251       DATA (AM( 5,K,-3),K=0, 2)
27252      & /  0.3465259E+02, -0.5532604E+01, -0.4904153E+01 /
27253       DATA (AM( 6,K,-3),K=0, 2)
27254      & / -0.1658858E+02,  0.2923275E+01,  0.2266286E+01 /
27255       DATA (AM( 7,K,-3),K=0, 2)
27256      & / -0.1149263E+02,  0.2877475E+01, -0.7999105E+00 /
27257
27258       DATA MEXVEC(-4) / 7 /
27259       DATA MLFVEC(-4) / 2 /
27260       DATA UT1VEC(-4) /  0.4400772E+01 /
27261       DATA UT2VEC(-4) / -0.1356116E+01 /
27262       DATA ALFVEC(-4) /  0.3712017E-01 /
27263       DATA QMAVEC(-4) /  0.1300000E+01 /
27264       DATA (AM( 0,K,-4),K=0, 2)
27265      & / -0.8293661E+00, -0.3982375E+01, -0.6494283E-01 /
27266       DATA (AM( 1,K,-4),K=0, 2)
27267      & /  0.2754618E+01,  0.8338636E+00, -0.6885160E-01 /
27268       DATA (AM( 2,K,-4),K=0, 2)
27269      & / -0.1657987E+02,  0.1439143E+02, -0.6887240E+00 /
27270       DATA (AM( 3,K,-4),K=0, 2)
27271      & / -0.2800703E+02,  0.1535966E+02, -0.7377693E+00 /
27272       DATA (AM( 4,K,-4),K=0, 2)
27273      & / -0.6460216E+01, -0.4783019E+01,  0.4913297E+00 /
27274       DATA (AM( 5,K,-4),K=0, 2)
27275      & /  0.3141830E+02, -0.3178031E+02,  0.7136013E+01 /
27276       DATA (AM( 6,K,-4),K=0, 2)
27277      & / -0.1802509E+02,  0.1862163E+02, -0.4632843E+01 /
27278       DATA (AM( 7,K,-4),K=0, 2)
27279      & / -0.1240412E+02,  0.2565386E+02, -0.1066570E+02 /
27280
27281       DATA MEXVEC(-5) / 6 /
27282       DATA MLFVEC(-5) / 2 /
27283       DATA UT1VEC(-5) /  0.5562568E+01 /
27284       DATA UT2VEC(-5) / -0.1801317E+01 /
27285       DATA ALFVEC(-5) /  0.4952010E-02 /
27286       DATA QMAVEC(-5) /  0.4500000E+01 /
27287       DATA (AM( 0,K,-5),K=0, 2)
27288      & / -0.6031237E+01,  0.1992727E+01, -0.1076331E+01 /
27289       DATA (AM( 1,K,-5),K=0, 2)
27290      & /  0.2933912E+01,  0.5839674E+00,  0.7509435E-01 /
27291       DATA (AM( 2,K,-5),K=0, 2)
27292      & / -0.8284919E+01,  0.1488593E+01, -0.8251678E+00 /
27293       DATA (AM( 3,K,-5),K=0, 2)
27294      & / -0.1925986E+02,  0.2805753E+01, -0.3015446E+01 /
27295       DATA (AM( 4,K,-5),K=0, 2)
27296      & / -0.9480483E+01, -0.9767837E+00, -0.1165544E+01 /
27297       DATA (AM( 5,K,-5),K=0, 2)
27298      & /  0.2193195E+02, -0.1788518E+02,  0.9460908E+01 /
27299       DATA (AM( 6,K,-5),K=0, 2)
27300      & / -0.1327377E+02,  0.1201754E+02, -0.6277844E+01 /
27301
27302       IF(Q .LE. QMAVEC(IFL)) THEN
27303          PYCT5L = 0.D0
27304          RETURN
27305       ENDIF
27306
27307       IF(X .GE. 1.D0) THEN
27308          PYCT5L = 0.D0
27309          RETURN
27310       ENDIF
27311
27312       TMP = LOG(Q/ALFVEC(IFL))
27313       IF(TMP .LE. 0.D0) THEN
27314          PYCT5L = 0.D0
27315          RETURN
27316       ENDIF
27317
27318       SB = LOG(TMP)
27319       SB1 = SB - 1.2D0
27320       SB2 = SB1*SB1
27321
27322       DO 110 I = 0, NEX
27323          AF(I) = 0.D0
27324          SBX = 1.D0
27325          DO 100 K = 0, MLFVEC(IFL)
27326             AF(I) = AF(I) + SBX*AM(I,K,IFL)
27327             SBX = SB1*SBX
27328   100    CONTINUE
27329   110 CONTINUE      
27330
27331       Y = -LOG(X)
27332       U = LOG(X/0.00001D0)
27333
27334       PART1 = AF(1)*Y**(1.D0+0.01D0*AF(4))*(1.D0+ AF(8)*U)
27335       PART2 = AF(0)*(1.D0 - X) + AF(3)*X 
27336       PART3 = X*(1.D0-X)*(AF(5)+AF(6)*(1.D0-X)+AF(7)*X*(1.D0-X))
27337       PART4 = UT1VEC(IFL)*LOG(1.D0-X) + 
27338      &        AF(2)*LOG(1.D0+EXP(UT2VEC(IFL))-X)
27339
27340       PYCT5L = EXP(LOG(X) + PART1 + PART2 + PART3 + PART4)
27341
27342 C...Include threshold factor.
27343       PYCT5L = PYCT5L * (1.D0 - QMAVEC(IFL)/Q)
27344
27345       RETURN
27346       END
27347  
27348 C*********************************************************************
27349
27350 C...PYCT5M 
27351 C...Auxiliary function for parametrization of CTEQ5M1.
27352 C...Author: J. Pumplin 9/99.
27353
27354       FUNCTION PYCT5M(IFL,X,Q)
27355  
27356 C...Double precision declaration.
27357       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
27358       IMPLICIT INTEGER(I-N)
27359
27360       PARAMETER (NEX=8, NLF=2)
27361       DIMENSION AM(0:NEX,0:NLF,-5:2)
27362       DIMENSION ALFVEC(-5:2), QMAVEC(-5:2)
27363       DIMENSION MEXVEC(-5:2), MLFVEC(-5:2)
27364       DIMENSION UT1VEC(-5:2), UT2VEC(-5:2)
27365       DIMENSION AF(0:NEX)
27366
27367       DATA MEXVEC( 2) / 8 /
27368       DATA MLFVEC( 2) / 2 /
27369       DATA UT1VEC( 2) /  0.5141718E+01 /
27370       DATA UT2VEC( 2) / -0.1346944E+01 /
27371       DATA ALFVEC( 2) /  0.5260555E+00 /
27372       DATA QMAVEC( 2) /  0.0000000E+00 /
27373       DATA (AM( 0,K, 2),K=0, 2)
27374      & /  0.4289071E+01, -0.2536870E+01, -0.1259948E+01 /
27375       DATA (AM( 1,K, 2),K=0, 2)
27376      & /  0.9839410E+00,  0.4168426E-01, -0.5018952E-01 /
27377       DATA (AM( 2,K, 2),K=0, 2)
27378      & / -0.1651961E+02,  0.9246261E+01,  0.5996400E+01 /
27379       DATA (AM( 3,K, 2),K=0, 2)
27380      & / -0.2077936E+02,  0.9786469E+01,  0.7656465E+01 /
27381       DATA (AM( 4,K, 2),K=0, 2)
27382      & /  0.3054926E+02,  0.1889536E+01,  0.1380541E+01 /
27383       DATA (AM( 5,K, 2),K=0, 2)
27384      & /  0.3084695E+02, -0.1212303E+02, -0.1053551E+02 /
27385       DATA (AM( 6,K, 2),K=0, 2)
27386      & / -0.1426778E+02,  0.6239537E+01,  0.5254819E+01 /
27387       DATA (AM( 7,K, 2),K=0, 2)
27388      & / -0.1909811E+02,  0.3695678E+01,  0.5495729E+01 /
27389       DATA (AM( 8,K, 2),K=0, 2)
27390      & /  0.1889751E-01,  0.5027193E-02,  0.6624896E-03 /
27391
27392       DATA MEXVEC( 1) / 8 /
27393       DATA MLFVEC( 1) / 2 /
27394       DATA UT1VEC( 1) /  0.4138426E+01 /
27395       DATA UT2VEC( 1) / -0.3221374E+01 /
27396       DATA ALFVEC( 1) /  0.4960962E+00 /
27397       DATA QMAVEC( 1) /  0.0000000E+00 /
27398       DATA (AM( 0,K, 1),K=0, 2)
27399      & /  0.1332497E+01, -0.3703718E+00,  0.1288638E+00 /
27400       DATA (AM( 1,K, 1),K=0, 2)
27401      & /  0.7544687E+00,  0.3255075E-01, -0.4706680E-01 /
27402       DATA (AM( 2,K, 1),K=0, 2)
27403      & / -0.7638814E+00,  0.5008313E+00, -0.9237374E-01 /
27404       DATA (AM( 3,K, 1),K=0, 2)
27405      & / -0.3689889E+00, -0.1055098E+01, -0.4645065E+00 /
27406       DATA (AM( 4,K, 1),K=0, 2)
27407      & /  0.3991610E+02,  0.1979881E+01,  0.1775814E+01 /
27408       DATA (AM( 5,K, 1),K=0, 2)
27409      & /  0.6201080E+01,  0.2046288E+01,  0.3804571E+00 /
27410       DATA (AM( 6,K, 1),K=0, 2)
27411      & / -0.8027900E+00, -0.7011688E+00, -0.8049612E+00 /
27412       DATA (AM( 7,K, 1),K=0, 2)
27413      & / -0.8631305E+01, -0.3981200E+01,  0.6970153E+00 /
27414       DATA (AM( 8,K, 1),K=0, 2)
27415      & /  0.2371230E-01,  0.5372683E-02,  0.1118701E-02 /
27416
27417       DATA MEXVEC( 0) / 8 /
27418       DATA MLFVEC( 0) / 2 /
27419       DATA UT1VEC( 0) / -0.1026789E+01 /
27420       DATA UT2VEC( 0) / -0.9051707E+01 /
27421       DATA ALFVEC( 0) /  0.9462977E+00 /
27422       DATA QMAVEC( 0) /  0.0000000E+00 /
27423       DATA (AM( 0,K, 0),K=0, 2)
27424      & /  0.1191990E+03, -0.8548739E+00, -0.1963040E+01 /
27425       DATA (AM( 1,K, 0),K=0, 2)
27426      & / -0.9449972E+02,  0.1074771E+01,  0.2056055E+01 /
27427       DATA (AM( 2,K, 0),K=0, 2)
27428      & /  0.3701064E+01, -0.1167947E-02,  0.1933573E+00 /
27429       DATA (AM( 3,K, 0),K=0, 2)
27430      & /  0.1171345E+03, -0.1064540E+01, -0.1875312E+01 /
27431       DATA (AM( 4,K, 0),K=0, 2)
27432      & / -0.1014453E+03, -0.5707427E+00,  0.4511242E-01 /
27433       DATA (AM( 5,K, 0),K=0, 2)
27434      & /  0.6365168E+01,  0.1275354E+01, -0.4964081E+00 /
27435       DATA (AM( 6,K, 0),K=0, 2)
27436      & / -0.3370693E+01, -0.1122020E+01,  0.5947751E-01 /
27437       DATA (AM( 7,K, 0),K=0, 2)
27438      & / -0.5327270E+01, -0.9293556E+00,  0.6629940E+00 /
27439       DATA (AM( 8,K, 0),K=0, 2)
27440      & /  0.2437513E-01,  0.1600939E-02,  0.6855336E-03 /
27441
27442       DATA MEXVEC(-1) / 8 /
27443       DATA MLFVEC(-1) / 2 /
27444       DATA UT1VEC(-1) /  0.5243571E+01 /
27445       DATA UT2VEC(-1) / -0.2870513E+01 /
27446       DATA ALFVEC(-1) /  0.6701448E+00 /
27447       DATA QMAVEC(-1) /  0.0000000E+00 /
27448       DATA (AM( 0,K,-1),K=0, 2)
27449      & /  0.2428863E+02,  0.1907035E+01, -0.4606457E+00 /
27450       DATA (AM( 1,K,-1),K=0, 2)
27451      & /  0.2006810E+01, -0.1265915E+00,  0.7153556E-02 /
27452       DATA (AM( 2,K,-1),K=0, 2)
27453      & / -0.1884546E+02, -0.2339471E+01,  0.5740679E+01 /
27454       DATA (AM( 3,K,-1),K=0, 2)
27455      & / -0.2527892E+02, -0.2044124E+01,  0.1280470E+02 /
27456       DATA (AM( 4,K,-1),K=0, 2)
27457      & / -0.1013824E+03, -0.1594199E+01,  0.2216401E+00 /
27458       DATA (AM( 5,K,-1),K=0, 2)
27459      & /  0.8070930E+02,  0.1792072E+01, -0.2164364E+02 /
27460       DATA (AM( 6,K,-1),K=0, 2)
27461      & / -0.4641050E+02,  0.1977338E+00,  0.1273014E+02 /
27462       DATA (AM( 7,K,-1),K=0, 2)
27463      & / -0.3910568E+02,  0.1719632E+01,  0.1086525E+02 /
27464       DATA (AM( 8,K,-1),K=0, 2)
27465      & / -0.1185496E+01, -0.1905847E+00, -0.8744118E-03 /
27466
27467       DATA MEXVEC(-2) / 7 /
27468       DATA MLFVEC(-2) / 2 /
27469       DATA UT1VEC(-2) /  0.4782210E+01 /
27470       DATA UT2VEC(-2) / -0.1976856E+02 /
27471       DATA ALFVEC(-2) /  0.7558374E+00 /
27472       DATA QMAVEC(-2) /  0.0000000E+00 /
27473       DATA (AM( 0,K,-2),K=0, 2)
27474      & / -0.6216935E+00,  0.2369963E+00, -0.7909949E-02 /
27475       DATA (AM( 1,K,-2),K=0, 2)
27476      & /  0.1245440E+01, -0.1031510E+00,  0.4916523E-02 /
27477       DATA (AM( 2,K,-2),K=0, 2)
27478      & / -0.7060824E+01, -0.3875283E-01,  0.1784981E+00 /
27479       DATA (AM( 3,K,-2),K=0, 2)
27480      & / -0.7430595E+01,  0.1964572E+00, -0.1284999E+00 /
27481       DATA (AM( 4,K,-2),K=0, 2)
27482      & / -0.6897810E+01,  0.2620543E+01,  0.8012553E-02 /
27483       DATA (AM( 5,K,-2),K=0, 2)
27484      & /  0.1507713E+02,  0.2340307E-01,  0.2482535E+01 /
27485       DATA (AM( 6,K,-2),K=0, 2)
27486      & / -0.1815341E+01, -0.1538698E+01, -0.2014208E+01 /
27487       DATA (AM( 7,K,-2),K=0, 2)
27488      & / -0.2571932E+02,  0.2903941E+00, -0.2848206E+01 /
27489
27490       DATA MEXVEC(-3) / 7 /
27491       DATA MLFVEC(-3) / 2 /
27492       DATA UT1VEC(-3) /  0.4518239E+01 /
27493       DATA UT2VEC(-3) / -0.2690590E+01 /
27494       DATA ALFVEC(-3) /  0.6124079E+00 /
27495       DATA QMAVEC(-3) /  0.0000000E+00 /
27496       DATA (AM( 0,K,-3),K=0, 2)
27497      & / -0.2734458E+01, -0.7245673E+00, -0.6351374E+00 /
27498       DATA (AM( 1,K,-3),K=0, 2)
27499      & /  0.2927174E+01,  0.4822709E+00, -0.1088787E-01 /
27500       DATA (AM( 2,K,-3),K=0, 2)
27501      & / -0.1771017E+02, -0.1416635E+01,  0.8467622E+01 /
27502       DATA (AM( 3,K,-3),K=0, 2)
27503      & / -0.4972782E+02, -0.3348547E+01,  0.1767061E+02 /
27504       DATA (AM( 4,K,-3),K=0, 2)
27505      & / -0.7102770E+01, -0.3205337E+01,  0.4101704E+00 /
27506       DATA (AM( 5,K,-3),K=0, 2)
27507      & /  0.7169698E+02, -0.2205985E+01, -0.2463931E+02 /
27508       DATA (AM( 6,K,-3),K=0, 2)
27509      & / -0.4090347E+02,  0.2103486E+01,  0.1416507E+02 /
27510       DATA (AM( 7,K,-3),K=0, 2)
27511      & / -0.2952639E+02,  0.5376136E+01,  0.7825585E+01 /
27512
27513       DATA MEXVEC(-4) / 7 /
27514       DATA MLFVEC(-4) / 2 /
27515       DATA UT1VEC(-4) /  0.2783230E+01 /
27516       DATA UT2VEC(-4) / -0.1746328E+01 /
27517       DATA ALFVEC(-4) /  0.1115653E+01 /
27518       DATA QMAVEC(-4) /  0.1300000E+01 /
27519       DATA (AM( 0,K,-4),K=0, 2)
27520      & / -0.1743872E+01, -0.1128921E+01, -0.2841969E+00 /
27521       DATA (AM( 1,K,-4),K=0, 2)
27522      & /  0.3345755E+01,  0.3187765E+00,  0.1378124E+00 /
27523       DATA (AM( 2,K,-4),K=0, 2)
27524      & / -0.2037615E+02,  0.4121687E+01,  0.2236520E+00 /
27525       DATA (AM( 3,K,-4),K=0, 2)
27526      & / -0.4703104E+02,  0.5353087E+01, -0.1455347E+01 /
27527       DATA (AM( 4,K,-4),K=0, 2)
27528      & / -0.1060230E+02, -0.1551122E+01, -0.1078863E+01 /
27529       DATA (AM( 5,K,-4),K=0, 2)
27530      & /  0.5088892E+02, -0.8197304E+01,  0.8083451E+01 /
27531       DATA (AM( 6,K,-4),K=0, 2)
27532      & / -0.2819070E+02,  0.4554086E+01, -0.5890995E+01 /
27533       DATA (AM( 7,K,-4),K=0, 2)
27534      & / -0.1098238E+02,  0.2590096E+01, -0.8062879E+01 /
27535
27536       DATA MEXVEC(-5) / 6 /
27537       DATA MLFVEC(-5) / 2 /
27538       DATA UT1VEC(-5) /  0.1619654E+02 /
27539       DATA UT2VEC(-5) / -0.3367346E+01 /
27540       DATA ALFVEC(-5) /  0.5109891E-02 /
27541       DATA QMAVEC(-5) /  0.4500000E+01 /
27542       DATA (AM( 0,K,-5),K=0, 2)
27543      & / -0.6800138E+01,  0.2493627E+01, -0.1075724E+01 /
27544       DATA (AM( 1,K,-5),K=0, 2)
27545      & /  0.3036555E+01,  0.3324733E+00,  0.2008298E+00 /
27546       DATA (AM( 2,K,-5),K=0, 2)
27547      & / -0.5203879E+01, -0.8493476E+01, -0.4523208E+01 /
27548       DATA (AM( 3,K,-5),K=0, 2)
27549      & / -0.1524239E+01, -0.3411912E+01, -0.1771867E+02 /
27550       DATA (AM( 4,K,-5),K=0, 2)
27551      & / -0.1099444E+02,  0.1320930E+01, -0.2353831E+01 /
27552       DATA (AM( 5,K,-5),K=0, 2)
27553      & /  0.1699299E+02, -0.3565802E+02,  0.3566872E+02 /
27554       DATA (AM( 6,K,-5),K=0, 2)
27555      & / -0.1465793E+02,  0.2703365E+02, -0.2176372E+02 /
27556
27557       IF(Q .LE. QMAVEC(IFL)) THEN
27558          PYCT5M = 0.D0
27559          RETURN
27560       ENDIF
27561
27562       IF(X .GE. 1.D0) THEN
27563          PYCT5M = 0.D0
27564          RETURN
27565       ENDIF
27566
27567       TMP = LOG(Q/ALFVEC(IFL))
27568       IF(TMP .LE. 0.D0) THEN
27569          PYCT5M = 0.D0
27570          RETURN
27571       ENDIF
27572
27573       SB = LOG(TMP)
27574       SB1 = SB - 1.2D0
27575       SB2 = SB1*SB1
27576
27577       DO 110 I = 0, NEX
27578          AF(I) = 0.D0
27579          SBX = 1.D0
27580          DO 100 K = 0, MLFVEC(IFL)
27581             AF(I) = AF(I) + SBX*AM(I,K,IFL)
27582             SBX = SB1*SBX
27583   100    CONTINUE
27584   110 CONTINUE      
27585
27586       Y = -LOG(X)
27587       U = LOG(X/0.00001D0)
27588
27589       PART1 = AF(1)*Y**(1.D0+0.01D0*AF(4))*(1.D0+ AF(8)*U)
27590       PART2 = AF(0)*(1.D0 - X) + AF(3)*X 
27591       PART3 = X*(1.D0-X)*(AF(5)+AF(6)*(1.D0-X)+AF(7)*X*(1.D0-X))
27592       PART4 = UT1VEC(IFL)*LOG(1.D0-X) + 
27593      &        AF(2)*LOG(1.D0+EXP(UT2VEC(IFL))-X)
27594
27595       PYCT5M = EXP(LOG(X) + PART1 + PART2 + PART3 + PART4)
27596
27597 C...Include threshold factor.
27598       PYCT5M = PYCT5M * (1.D0 - QMAVEC(IFL)/Q)
27599
27600       RETURN
27601       END
27602  
27603 C*********************************************************************
27604  
27605 C...PYPDPO
27606 C...Auxiliary to PYPDPR. Gives proton parton distributions according to 
27607 C...a few older parametrizations, now obsolete but convenient for 
27608 C...backwards checks.
27609
27610       SUBROUTINE PYPDPO(X,Q2,XPPR)
27611  
27612 C...Double precision and integer declarations.
27613       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
27614       IMPLICIT INTEGER(I-N)
27615       INTEGER PYK,PYCHGE,PYCOMP
27616 C...Commonblocks.
27617       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
27618       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
27619       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
27620       COMMON/PYINT1/MINT(400),VINT(400)
27621       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
27622       DIMENSION XPPR(-6:6),XQ(9),TX(6),TT(6),TS(6),NEHLQ(8,2),
27623      &CEHLQ(6,6,2,8,2),CDO(3,6,5,2)
27624  
27625  
27626 C...The following data lines are coefficients needed in the
27627 C...Eichten, Hinchliffe, Lane, Quigg proton structure function
27628 C...parametrizations, see below.
27629 C...Powers of 1-x in different cases.
27630       DATA NEHLQ/3,4,7,5,7,7,7,7,3,4,7,6,7,7,7,7/
27631 C...Expansion coefficients for up valence quark distribution.
27632       DATA (((CEHLQ(IX,IT,NX,1,1),IX=1,6),IT=1,6),NX=1,2)/
27633      1 7.677D-01,-2.087D-01,-3.303D-01,-2.517D-02,-1.570D-02,-1.000D-04,
27634      2-5.326D-01,-2.661D-01, 3.201D-01, 1.192D-01, 2.434D-02, 7.620D-03,
27635      3 2.162D-01, 1.881D-01,-8.375D-02,-6.515D-02,-1.743D-02,-5.040D-03,
27636      4-9.211D-02,-9.952D-02, 1.373D-02, 2.506D-02, 8.770D-03, 2.550D-03,
27637      5 3.670D-02, 4.409D-02, 9.600D-04,-7.960D-03,-3.420D-03,-1.050D-03,
27638      6-1.549D-02,-2.026D-02,-3.060D-03, 2.220D-03, 1.240D-03, 4.100D-04,
27639      1 2.395D-01, 2.905D-01, 9.778D-02, 2.149D-02, 3.440D-03, 5.000D-04,
27640      2 1.751D-02,-6.090D-03,-2.687D-02,-1.916D-02,-7.970D-03,-2.750D-03,
27641      3-5.760D-03,-5.040D-03, 1.080D-03, 2.490D-03, 1.530D-03, 7.500D-04,
27642      4 1.740D-03, 1.960D-03, 3.000D-04,-3.400D-04,-2.900D-04,-1.800D-04,
27643      5-5.300D-04,-6.400D-04,-1.700D-04, 4.000D-05, 6.000D-05, 4.000D-05,
27644      6 1.700D-04, 2.200D-04, 8.000D-05, 1.000D-05,-1.000D-05,-1.000D-05/
27645       DATA (((CEHLQ(IX,IT,NX,1,2),IX=1,6),IT=1,6),NX=1,2)/
27646      1 7.237D-01,-2.189D-01,-2.995D-01,-1.909D-02,-1.477D-02, 2.500D-04,
27647      2-5.314D-01,-2.425D-01, 3.283D-01, 1.119D-01, 2.223D-02, 7.070D-03,
27648      3 2.289D-01, 1.890D-01,-9.859D-02,-6.900D-02,-1.747D-02,-5.080D-03,
27649      4-1.041D-01,-1.084D-01, 2.108D-02, 2.975D-02, 9.830D-03, 2.830D-03,
27650      5 4.394D-02, 5.116D-02,-1.410D-03,-1.055D-02,-4.230D-03,-1.270D-03,
27651      6-1.991D-02,-2.539D-02,-2.780D-03, 3.430D-03, 1.720D-03, 5.500D-04,
27652      1 2.410D-01, 2.884D-01, 9.369D-02, 1.900D-02, 2.530D-03, 2.400D-04,
27653      2 1.765D-02,-9.220D-03,-3.037D-02,-2.085D-02,-8.440D-03,-2.810D-03,
27654      3-6.450D-03,-5.260D-03, 1.720D-03, 3.110D-03, 1.830D-03, 8.700D-04,
27655      4 2.120D-03, 2.320D-03, 2.600D-04,-4.900D-04,-3.900D-04,-2.300D-04,
27656      5-6.900D-04,-8.200D-04,-2.000D-04, 7.000D-05, 9.000D-05, 6.000D-05,
27657      6 2.400D-04, 3.100D-04, 1.100D-04, 0.000D+00,-2.000D-05,-2.000D-05/
27658 C...Expansion coefficients for down valence quark distribution.
27659       DATA (((CEHLQ(IX,IT,NX,2,1),IX=1,6),IT=1,6),NX=1,2)/
27660      1 3.813D-01,-8.090D-02,-1.634D-01,-2.185D-02,-8.430D-03,-6.200D-04,
27661      2-2.948D-01,-1.435D-01, 1.665D-01, 6.638D-02, 1.473D-02, 4.080D-03,
27662      3 1.252D-01, 1.042D-01,-4.722D-02,-3.683D-02,-1.038D-02,-2.860D-03,
27663      4-5.478D-02,-5.678D-02, 8.900D-03, 1.484D-02, 5.340D-03, 1.520D-03,
27664      5 2.220D-02, 2.567D-02,-3.000D-05,-4.970D-03,-2.160D-03,-6.500D-04,
27665      6-9.530D-03,-1.204D-02,-1.510D-03, 1.510D-03, 8.300D-04, 2.700D-04,
27666      1 1.261D-01, 1.354D-01, 3.958D-02, 8.240D-03, 1.660D-03, 4.500D-04,
27667      2 3.890D-03,-1.159D-02,-1.625D-02,-9.610D-03,-3.710D-03,-1.260D-03,
27668      3-1.910D-03,-5.600D-04, 1.590D-03, 1.590D-03, 8.400D-04, 3.900D-04,
27669      4 6.400D-04, 4.900D-04,-1.500D-04,-2.900D-04,-1.800D-04,-1.000D-04,
27670      5-2.000D-04,-1.900D-04, 0.000D+00, 6.000D-05, 4.000D-05, 3.000D-05,
27671      6 7.000D-05, 8.000D-05, 2.000D-05,-1.000D-05,-1.000D-05,-1.000D-05/
27672       DATA (((CEHLQ(IX,IT,NX,2,2),IX=1,6),IT=1,6),NX=1,2)/
27673      1 3.578D-01,-8.622D-02,-1.480D-01,-1.840D-02,-7.820D-03,-4.500D-04,
27674      2-2.925D-01,-1.304D-01, 1.696D-01, 6.243D-02, 1.353D-02, 3.750D-03,
27675      3 1.318D-01, 1.041D-01,-5.486D-02,-3.872D-02,-1.038D-02,-2.850D-03,
27676      4-6.162D-02,-6.143D-02, 1.303D-02, 1.740D-02, 5.940D-03, 1.670D-03,
27677      5 2.643D-02, 2.957D-02,-1.490D-03,-6.450D-03,-2.630D-03,-7.700D-04,
27678      6-1.218D-02,-1.497D-02,-1.260D-03, 2.240D-03, 1.120D-03, 3.500D-04,
27679      1 1.263D-01, 1.334D-01, 3.732D-02, 7.070D-03, 1.260D-03, 3.400D-04,
27680      2 3.660D-03,-1.357D-02,-1.795D-02,-1.031D-02,-3.880D-03,-1.280D-03,
27681      3-2.100D-03,-3.600D-04, 2.050D-03, 1.920D-03, 9.800D-04, 4.400D-04,
27682      4 7.700D-04, 5.400D-04,-2.400D-04,-3.900D-04,-2.400D-04,-1.300D-04,
27683      5-2.600D-04,-2.300D-04, 2.000D-05, 9.000D-05, 6.000D-05, 4.000D-05,
27684      6 9.000D-05, 1.000D-04, 2.000D-05,-2.000D-05,-2.000D-05,-1.000D-05/
27685 C...Expansion coefficients for up and down sea quark distributions.
27686       DATA (((CEHLQ(IX,IT,NX,3,1),IX=1,6),IT=1,6),NX=1,2)/
27687      1 6.870D-02,-6.861D-02, 2.973D-02,-5.400D-03, 3.780D-03,-9.700D-04,
27688      2-1.802D-02, 1.400D-04, 6.490D-03,-8.540D-03, 1.220D-03,-1.750D-03,
27689      3-4.650D-03, 1.480D-03,-5.930D-03, 6.000D-04,-1.030D-03,-8.000D-05,
27690      4 6.440D-03, 2.570D-03, 2.830D-03, 1.150D-03, 7.100D-04, 3.300D-04,
27691      5-3.930D-03,-2.540D-03,-1.160D-03,-7.700D-04,-3.600D-04,-1.900D-04,
27692      6 2.340D-03, 1.930D-03, 5.300D-04, 3.700D-04, 1.600D-04, 9.000D-05,
27693      1 1.014D+00,-1.106D+00, 3.374D-01,-7.444D-02, 8.850D-03,-8.700D-04,
27694      2 9.233D-01,-1.285D+00, 4.475D-01,-9.786D-02, 1.419D-02,-1.120D-03,
27695      3 4.888D-02,-1.271D-01, 8.606D-02,-2.608D-02, 4.780D-03,-6.000D-04,
27696      4-2.691D-02, 4.887D-02,-1.771D-02, 1.620D-03, 2.500D-04,-6.000D-05,
27697      5 7.040D-03,-1.113D-02, 1.590D-03, 7.000D-04,-2.000D-04, 0.000D+00,
27698      6-1.710D-03, 2.290D-03, 3.800D-04,-3.500D-04, 4.000D-05, 1.000D-05/
27699       DATA (((CEHLQ(IX,IT,NX,3,2),IX=1,6),IT=1,6),NX=1,2)/
27700      1 1.008D-01,-7.100D-02, 1.973D-02,-5.710D-03, 2.930D-03,-9.900D-04,
27701      2-5.271D-02,-1.823D-02, 1.792D-02,-6.580D-03, 1.750D-03,-1.550D-03,
27702      3 1.220D-02, 1.763D-02,-8.690D-03,-8.800D-04,-1.160D-03,-2.100D-04,
27703      4-1.190D-03,-7.180D-03, 2.360D-03, 1.890D-03, 7.700D-04, 4.100D-04,
27704      5-9.100D-04, 2.040D-03,-3.100D-04,-1.050D-03,-4.000D-04,-2.400D-04,
27705      6 1.190D-03,-1.700D-04,-2.000D-04, 4.200D-04, 1.700D-04, 1.000D-04,
27706      1 1.081D+00,-1.189D+00, 3.868D-01,-8.617D-02, 1.115D-02,-1.180D-03,
27707      2 9.917D-01,-1.396D+00, 4.998D-01,-1.159D-01, 1.674D-02,-1.720D-03,
27708      3 5.099D-02,-1.338D-01, 9.173D-02,-2.885D-02, 5.890D-03,-6.500D-04,
27709      4-3.178D-02, 5.703D-02,-2.070D-02, 2.440D-03, 1.100D-04,-9.000D-05,
27710      5 8.970D-03,-1.392D-02, 2.050D-03, 6.500D-04,-2.300D-04, 2.000D-05,
27711      6-2.340D-03, 3.010D-03, 5.000D-04,-3.900D-04, 6.000D-05, 1.000D-05/
27712 C...Expansion coefficients for gluon distribution.
27713       DATA (((CEHLQ(IX,IT,NX,4,1),IX=1,6),IT=1,6),NX=1,2)/
27714      1 9.482D-01,-9.578D-01, 1.009D-01,-1.051D-01, 3.456D-02,-3.054D-02,
27715      2-9.627D-01, 5.379D-01, 3.368D-01,-9.525D-02, 1.488D-02,-2.051D-02,
27716      3 4.300D-01,-8.306D-02,-3.372D-01, 4.902D-02,-9.160D-03, 1.041D-02,
27717      4-1.925D-01,-1.790D-02, 2.183D-01, 7.490D-03, 4.140D-03,-1.860D-03,
27718      5 8.183D-02, 1.926D-02,-1.072D-01,-1.944D-02,-2.770D-03,-5.200D-04,
27719      6-3.884D-02,-1.234D-02, 5.410D-02, 1.879D-02, 3.350D-03, 1.040D-03,
27720      1 2.948D+01,-3.902D+01, 1.464D+01,-3.335D+00, 5.054D-01,-5.915D-02,
27721      2 2.559D+01,-3.955D+01, 1.661D+01,-4.299D+00, 6.904D-01,-8.243D-02,
27722      3-1.663D+00, 1.176D+00, 1.118D+00,-7.099D-01, 1.948D-01,-2.404D-02,
27723      4-2.168D-01, 8.170D-01,-7.169D-01, 1.851D-01,-1.924D-02,-3.250D-03,
27724      5 2.088D-01,-4.355D-01, 2.239D-01,-2.446D-02,-3.620D-03, 1.910D-03,
27725      6-9.097D-02, 1.601D-01,-5.681D-02,-2.500D-03, 2.580D-03,-4.700D-04/
27726       DATA (((CEHLQ(IX,IT,NX,4,2),IX=1,6),IT=1,6),NX=1,2)/
27727      1 2.367D+00, 4.453D-01, 3.660D-01, 9.467D-02, 1.341D-01, 1.661D-02,
27728      2-3.170D+00,-1.795D+00, 3.313D-02,-2.874D-01,-9.827D-02,-7.119D-02,
27729      3 1.823D+00, 1.457D+00,-2.465D-01, 3.739D-02, 6.090D-03, 1.814D-02,
27730      4-1.033D+00,-9.827D-01, 2.136D-01, 1.169D-01, 5.001D-02, 1.684D-02,
27731      5 5.133D-01, 5.259D-01,-1.173D-01,-1.139D-01,-4.988D-02,-2.021D-02,
27732      6-2.881D-01,-3.145D-01, 5.667D-02, 9.161D-02, 4.568D-02, 1.951D-02,
27733      1 3.036D+01,-4.062D+01, 1.578D+01,-3.699D+00, 6.020D-01,-7.031D-02,
27734      2 2.700D+01,-4.167D+01, 1.770D+01,-4.804D+00, 7.862D-01,-1.060D-01,
27735      3-1.909D+00, 1.357D+00, 1.127D+00,-7.181D-01, 2.232D-01,-2.481D-02,
27736      4-2.488D-01, 9.781D-01,-8.127D-01, 2.094D-01,-2.997D-02,-4.710D-03,
27737      5 2.506D-01,-5.427D-01, 2.672D-01,-3.103D-02,-1.800D-03, 2.870D-03,
27738      6-1.128D-01, 2.087D-01,-6.972D-02,-2.480D-03, 2.630D-03,-8.400D-04/
27739 C...Expansion coefficients for strange sea quark distribution.
27740       DATA (((CEHLQ(IX,IT,NX,5,1),IX=1,6),IT=1,6),NX=1,2)/
27741      1 4.968D-02,-4.173D-02, 2.102D-02,-3.270D-03, 3.240D-03,-6.700D-04,
27742      2-6.150D-03,-1.294D-02, 6.740D-03,-6.890D-03, 9.000D-04,-1.510D-03,
27743      3-8.580D-03, 5.050D-03,-4.900D-03,-1.600D-04,-9.400D-04,-1.500D-04,
27744      4 7.840D-03, 1.510D-03, 2.220D-03, 1.400D-03, 7.000D-04, 3.500D-04,
27745      5-4.410D-03,-2.220D-03,-8.900D-04,-8.500D-04,-3.600D-04,-2.000D-04,
27746      6 2.520D-03, 1.840D-03, 4.100D-04, 3.900D-04, 1.600D-04, 9.000D-05,
27747      1 9.235D-01,-1.085D+00, 3.464D-01,-7.210D-02, 9.140D-03,-9.100D-04,
27748      2 9.315D-01,-1.274D+00, 4.512D-01,-9.775D-02, 1.380D-02,-1.310D-03,
27749      3 4.739D-02,-1.296D-01, 8.482D-02,-2.642D-02, 4.760D-03,-5.700D-04,
27750      4-2.653D-02, 4.953D-02,-1.735D-02, 1.750D-03, 2.800D-04,-6.000D-05,
27751      5 6.940D-03,-1.132D-02, 1.480D-03, 6.500D-04,-2.100D-04, 0.000D+00,
27752      6-1.680D-03, 2.340D-03, 4.200D-04,-3.400D-04, 5.000D-05, 1.000D-05/
27753       DATA (((CEHLQ(IX,IT,NX,5,2),IX=1,6),IT=1,6),NX=1,2)/
27754      1 6.478D-02,-4.537D-02, 1.643D-02,-3.490D-03, 2.710D-03,-6.700D-04,
27755      2-2.223D-02,-2.126D-02, 1.247D-02,-6.290D-03, 1.120D-03,-1.440D-03,
27756      3-1.340D-03, 1.362D-02,-6.130D-03,-7.900D-04,-9.000D-04,-2.000D-04,
27757      4 5.080D-03,-3.610D-03, 1.700D-03, 1.830D-03, 6.800D-04, 4.000D-04,
27758      5-3.580D-03, 6.000D-05,-2.600D-04,-1.050D-03,-3.800D-04,-2.300D-04,
27759      6 2.420D-03, 9.300D-04,-1.000D-04, 4.500D-04, 1.700D-04, 1.100D-04,
27760      1 9.868D-01,-1.171D+00, 3.940D-01,-8.459D-02, 1.124D-02,-1.250D-03,
27761      2 1.001D+00,-1.383D+00, 5.044D-01,-1.152D-01, 1.658D-02,-1.830D-03,
27762      3 4.928D-02,-1.368D-01, 9.021D-02,-2.935D-02, 5.800D-03,-6.600D-04,
27763      4-3.133D-02, 5.785D-02,-2.023D-02, 2.630D-03, 1.600D-04,-8.000D-05,
27764      5 8.840D-03,-1.416D-02, 1.900D-03, 5.800D-04,-2.500D-04, 1.000D-05,
27765      6-2.300D-03, 3.080D-03, 5.500D-04,-3.700D-04, 7.000D-05, 1.000D-05/
27766 C...Expansion coefficients for charm sea quark distribution.
27767       DATA (((CEHLQ(IX,IT,NX,6,1),IX=1,6),IT=1,6),NX=1,2)/
27768      1 9.270D-03,-1.817D-02, 9.590D-03,-6.390D-03, 1.690D-03,-1.540D-03,
27769      2 5.710D-03,-1.188D-02, 6.090D-03,-4.650D-03, 1.240D-03,-1.310D-03,
27770      3-3.960D-03, 7.100D-03,-3.590D-03, 1.840D-03,-3.900D-04, 3.400D-04,
27771      4 1.120D-03,-1.960D-03, 1.120D-03,-4.800D-04, 1.000D-04,-4.000D-05,
27772      5 4.000D-05,-3.000D-05,-1.800D-04, 9.000D-05,-5.000D-05,-2.000D-05,
27773      6-4.200D-04, 7.300D-04,-1.600D-04, 5.000D-05, 5.000D-05, 5.000D-05,
27774      1 8.098D-01,-1.042D+00, 3.398D-01,-6.824D-02, 8.760D-03,-9.000D-04,
27775      2 8.961D-01,-1.217D+00, 4.339D-01,-9.287D-02, 1.304D-02,-1.290D-03,
27776      3 3.058D-02,-1.040D-01, 7.604D-02,-2.415D-02, 4.600D-03,-5.000D-04,
27777      4-2.451D-02, 4.432D-02,-1.651D-02, 1.430D-03, 1.200D-04,-1.000D-04,
27778      5 1.122D-02,-1.457D-02, 2.680D-03, 5.800D-04,-1.200D-04, 3.000D-05,
27779      6-7.730D-03, 7.330D-03,-7.600D-04,-2.400D-04, 1.000D-05, 0.000D+00/
27780       DATA (((CEHLQ(IX,IT,NX,6,2),IX=1,6),IT=1,6),NX=1,2)/
27781      1 9.980D-03,-1.945D-02, 1.055D-02,-6.870D-03, 1.860D-03,-1.560D-03,
27782      2 5.700D-03,-1.203D-02, 6.250D-03,-4.860D-03, 1.310D-03,-1.370D-03,
27783      3-4.490D-03, 7.990D-03,-4.170D-03, 2.050D-03,-4.400D-04, 3.300D-04,
27784      4 1.470D-03,-2.480D-03, 1.460D-03,-5.700D-04, 1.200D-04,-1.000D-05,
27785      5-9.000D-05, 1.500D-04,-3.200D-04, 1.200D-04,-6.000D-05,-4.000D-05,
27786      6-4.200D-04, 7.600D-04,-1.400D-04, 4.000D-05, 7.000D-05, 5.000D-05,
27787      1 8.698D-01,-1.131D+00, 3.836D-01,-8.111D-02, 1.048D-02,-1.300D-03,
27788      2 9.626D-01,-1.321D+00, 4.854D-01,-1.091D-01, 1.583D-02,-1.700D-03,
27789      3 3.057D-02,-1.088D-01, 8.022D-02,-2.676D-02, 5.590D-03,-5.600D-04,
27790      4-2.845D-02, 5.164D-02,-1.918D-02, 2.210D-03,-4.000D-05,-1.500D-04,
27791      5 1.311D-02,-1.751D-02, 3.310D-03, 5.100D-04,-1.200D-04, 5.000D-05,
27792      6-8.590D-03, 8.380D-03,-9.200D-04,-2.600D-04, 1.000D-05,-1.000D-05/
27793 C...Expansion coefficients for bottom sea quark distribution.
27794       DATA (((CEHLQ(IX,IT,NX,7,1),IX=1,6),IT=1,6),NX=1,2)/
27795      1 9.010D-03,-1.401D-02, 7.150D-03,-4.130D-03, 1.260D-03,-1.040D-03,
27796      2 6.280D-03,-9.320D-03, 4.780D-03,-2.890D-03, 9.100D-04,-8.200D-04,
27797      3-2.930D-03, 4.090D-03,-1.890D-03, 7.600D-04,-2.300D-04, 1.400D-04,
27798      4 3.900D-04,-1.200D-03, 4.400D-04,-2.500D-04, 2.000D-05,-2.000D-05,
27799      5 2.600D-04, 1.400D-04,-8.000D-05, 1.000D-04, 1.000D-05, 1.000D-05,
27800      6-2.600D-04, 3.200D-04, 1.000D-05,-1.000D-05, 1.000D-05,-1.000D-05,
27801      1 8.029D-01,-1.075D+00, 3.792D-01,-7.843D-02, 1.007D-02,-1.090D-03,
27802      2 7.903D-01,-1.099D+00, 4.153D-01,-9.301D-02, 1.317D-02,-1.410D-03,
27803      3-1.704D-02,-1.130D-02, 2.882D-02,-1.341D-02, 3.040D-03,-3.600D-04,
27804      4-7.200D-04, 7.230D-03,-5.160D-03, 1.080D-03,-5.000D-05,-4.000D-05,
27805      5 3.050D-03,-4.610D-03, 1.660D-03,-1.300D-04,-1.000D-05, 1.000D-05,
27806      6-4.360D-03, 5.230D-03,-1.610D-03, 2.000D-04,-2.000D-05, 0.000D+00/
27807       DATA (((CEHLQ(IX,IT,NX,7,2),IX=1,6),IT=1,6),NX=1,2)/
27808      1 8.980D-03,-1.459D-02, 7.510D-03,-4.410D-03, 1.310D-03,-1.070D-03,
27809      2 5.970D-03,-9.440D-03, 4.800D-03,-3.020D-03, 9.100D-04,-8.500D-04,
27810      3-3.050D-03, 4.440D-03,-2.100D-03, 8.500D-04,-2.400D-04, 1.400D-04,
27811      4 5.300D-04,-1.300D-03, 5.600D-04,-2.700D-04, 3.000D-05,-2.000D-05,
27812      5 2.000D-04, 1.400D-04,-1.100D-04, 1.000D-04, 0.000D+00, 0.000D+00,
27813      6-2.600D-04, 3.200D-04, 0.000D+00,-3.000D-05, 1.000D-05,-1.000D-05,
27814      1 8.672D-01,-1.174D+00, 4.265D-01,-9.252D-02, 1.244D-02,-1.460D-03,
27815      2 8.500D-01,-1.194D+00, 4.630D-01,-1.083D-01, 1.614D-02,-1.830D-03,
27816      3-2.241D-02,-5.630D-03, 2.815D-02,-1.425D-02, 3.520D-03,-4.300D-04,
27817      4-7.300D-04, 8.030D-03,-5.780D-03, 1.380D-03,-1.300D-04,-4.000D-05,
27818      5 3.460D-03,-5.380D-03, 1.960D-03,-2.100D-04, 1.000D-05, 1.000D-05,
27819      6-4.850D-03, 5.950D-03,-1.890D-03, 2.600D-04,-3.000D-05, 0.000D+00/
27820 C...Expansion coefficients for top sea quark distribution.
27821       DATA (((CEHLQ(IX,IT,NX,8,1),IX=1,6),IT=1,6),NX=1,2)/
27822      1 4.410D-03,-7.480D-03, 3.770D-03,-2.580D-03, 7.300D-04,-7.100D-04,
27823      2 3.840D-03,-6.050D-03, 3.030D-03,-2.030D-03, 5.800D-04,-5.900D-04,
27824      3-8.800D-04, 1.660D-03,-7.500D-04, 4.700D-04,-1.000D-04, 1.000D-04,
27825      4-8.000D-05,-1.500D-04, 1.200D-04,-9.000D-05, 3.000D-05, 0.000D+00,
27826      5 1.300D-04,-2.200D-04,-2.000D-05,-2.000D-05,-2.000D-05,-2.000D-05,
27827      6-7.000D-05, 1.900D-04,-4.000D-05, 2.000D-05, 0.000D+00, 0.000D+00,
27828      1 6.623D-01,-9.248D-01, 3.519D-01,-7.930D-02, 1.110D-02,-1.180D-03,
27829      2 6.380D-01,-9.062D-01, 3.582D-01,-8.479D-02, 1.265D-02,-1.390D-03,
27830      3-2.581D-02, 2.125D-02, 4.190D-03,-4.980D-03, 1.490D-03,-2.100D-04,
27831      4 7.100D-04, 5.300D-04,-1.270D-03, 3.900D-04,-5.000D-05,-1.000D-05,
27832      5 3.850D-03,-5.060D-03, 1.860D-03,-3.500D-04, 4.000D-05, 0.000D+00,
27833      6-3.530D-03, 4.460D-03,-1.500D-03, 2.700D-04,-3.000D-05, 0.000D+00/
27834       DATA (((CEHLQ(IX,IT,NX,8,2),IX=1,6),IT=1,6),NX=1,2)/
27835      1 4.260D-03,-7.530D-03, 3.830D-03,-2.680D-03, 7.600D-04,-7.300D-04,
27836      2 3.640D-03,-6.050D-03, 3.030D-03,-2.090D-03, 5.900D-04,-6.000D-04,
27837      3-9.200D-04, 1.710D-03,-8.200D-04, 5.000D-04,-1.200D-04, 1.000D-04,
27838      4-5.000D-05,-1.600D-04, 1.300D-04,-9.000D-05, 3.000D-05, 0.000D+00,
27839      5 1.300D-04,-2.100D-04,-1.000D-05,-2.000D-05,-2.000D-05,-1.000D-05,
27840      6-8.000D-05, 1.800D-04,-5.000D-05, 2.000D-05, 0.000D+00, 0.000D+00,
27841      1 7.146D-01,-1.007D+00, 3.932D-01,-9.246D-02, 1.366D-02,-1.540D-03,
27842      2 6.856D-01,-9.828D-01, 3.977D-01,-9.795D-02, 1.540D-02,-1.790D-03,
27843      3-3.053D-02, 2.758D-02, 2.150D-03,-4.880D-03, 1.640D-03,-2.500D-04,
27844      4 9.200D-04, 4.200D-04,-1.340D-03, 4.600D-04,-8.000D-05,-1.000D-05,
27845      5 4.230D-03,-5.660D-03, 2.140D-03,-4.300D-04, 6.000D-05, 0.000D+00,
27846      6-3.890D-03, 5.000D-03,-1.740D-03, 3.300D-04,-4.000D-05, 0.000D+00/
27847  
27848 C...The following data lines are coefficients needed in the
27849 C...Duke, Owens proton structure function parametrizations, see below.
27850 C...Expansion coefficients for (up+down) valence quark distribution.
27851       DATA ((CDO(IP,IS,1,1),IS=1,6),IP=1,3)/
27852      1 4.190D-01, 3.460D+00, 4.400D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27853      2 4.000D-03, 7.240D-01,-4.860D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27854      3-7.000D-03,-6.600D-02, 1.330D+00, 0.000D+00, 0.000D+00, 0.000D+00/
27855       DATA ((CDO(IP,IS,1,2),IS=1,6),IP=1,3)/
27856      1 3.740D-01, 3.330D+00, 6.030D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27857      2 1.400D-02, 7.530D-01,-6.220D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27858      3 0.000D+00,-7.600D-02, 1.560D+00, 0.000D+00, 0.000D+00, 0.000D+00/
27859 C...Expansion coefficients for down valence quark distribution.
27860       DATA ((CDO(IP,IS,2,1),IS=1,6),IP=1,3)/
27861      1 7.630D-01, 4.000D+00, 0.000D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27862      2-2.370D-01, 6.270D-01,-4.210D-01, 0.000D+00, 0.000D+00, 0.000D+00,
27863      3 2.600D-02,-1.900D-02, 3.300D-02, 0.000D+00, 0.000D+00, 0.000D+00/
27864       DATA ((CDO(IP,IS,2,2),IS=1,6),IP=1,3)/
27865      1 7.610D-01, 3.830D+00, 0.000D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27866      2-2.320D-01, 6.270D-01,-4.180D-01, 0.000D+00, 0.000D+00, 0.000D+00,
27867      3 2.300D-02,-1.900D-02, 3.600D-02, 0.000D+00, 0.000D+00, 0.000D+00/
27868 C...Expansion coefficients for (up+down+strange) sea quark distribution.
27869       DATA ((CDO(IP,IS,3,1),IS=1,6),IP=1,3)/
27870      1 1.265D+00, 0.000D+00, 8.050D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27871      2-1.132D+00,-3.720D-01, 1.590D+00, 6.310D+00,-1.050D+01, 1.470D+01,
27872      3 2.930D-01,-2.900D-02,-1.530D-01,-2.730D-01,-3.170D+00, 9.800D+00/
27873       DATA ((CDO(IP,IS,3,2),IS=1,6),IP=1,3)/
27874      1 1.670D+00, 0.000D+00, 9.150D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27875      2-1.920D+00,-2.730D-01, 5.300D-01, 1.570D+01,-1.010D+02, 2.230D+02,
27876      3 5.820D-01,-1.640D-01,-7.630D-01,-2.830D+00, 4.470D+01,-1.170D+02/
27877 C...Expansion coefficients for charm sea quark distribution.
27878       DATA ((CDO(IP,IS,4,1),IS=1,6),IP=1,3)/
27879      1 0.000D+00,-3.600D-02, 6.350D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27880      2 1.350D-01,-2.220D-01, 3.260D+00,-3.030D+00, 1.740D+01,-1.790D+01,
27881      3-7.500D-02,-5.800D-02,-9.090D-01, 1.500D+00,-1.130D+01, 1.560D+01/
27882        DATA ((CDO(IP,IS,4,2),IS=1,6),IP=1,3)/
27883      1 0.000D+00,-1.200D-01, 3.510D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27884      2 6.700D-02,-2.330D-01, 3.660D+00,-4.740D-01, 9.500D+00,-1.660D+01,
27885      3-3.100D-02,-2.300D-02,-4.530D-01, 3.580D-01,-5.430D+00, 1.550D+01/
27886 C...Expansion coefficients for gluon distribution.
27887       DATA ((CDO(IP,IS,5,1),IS=1,6),IP=1,3)/
27888      1 1.560D+00, 0.000D+00, 6.000D+00, 9.000D+00, 0.000D+00, 0.000D+00,
27889      2-1.710D+00,-9.490D-01, 1.440D+00,-7.190D+00,-1.650D+01, 1.530D+01,
27890      3 6.380D-01, 3.250D-01,-1.050D+00, 2.550D-01, 1.090D+01,-1.010D+01/
27891       DATA ((CDO(IP,IS,5,2),IS=1,6),IP=1,3)/
27892      1 8.790D-01, 0.000D+00, 4.000D+00, 9.000D+00, 0.000D+00, 0.000D+00,
27893      2-9.710D-01,-1.160D+00, 1.230D+00,-5.640D+00,-7.540D+00,-5.960D-01,
27894      3 4.340D-01, 4.760D-01,-2.540D-01,-8.170D-01, 5.500D+00, 1.260D-01/
27895  
27896 C...Euler's beta function, requires ordinary Gamma function
27897       EULBET(X,Y)=PYGAMM(X)*PYGAMM(Y)/PYGAMM(X+Y)
27898  
27899 C...Leading order proton parton distributions from Gluck, Reya and Vogt.
27900 C...Allowed variable range: 0.25 GeV^2 < Q^2 < 10^8 GeV^2 and
27901 C...10^-5 < x < 1.
27902       IF(MSTP(51).EQ.11) THEN
27903  
27904 C...Determine s expansion variable and some x expressions.
27905         Q2IN=MIN(1D8,MAX(0.25D0,Q2))
27906         SD=LOG(LOG(Q2IN/0.232D0**2)/LOG(0.25D0/0.232D0**2))
27907         SD2=SD**2
27908         XL=-LOG(X)
27909         XS=SQRT(X)
27910  
27911 C...Evaluate valence, gluon and sea distributions.
27912         XFVUD=(0.663D0+0.191D0*SD-0.041D0*SD2+0.031D0*SD**3)*
27913      &  X**0.326D0*(1D0+(-1.97D0+6.74D0*SD-1.96D0*SD2)*XS+
27914      &  (24.4D0-20.7D0*SD+4.08D0*SD2)*X)*
27915      &  (1D0-X)**(2.86D0+0.70D0*SD-0.02D0*SD2)
27916         XFVDD=(0.579D0+0.283D0*SD+0.047D0*SD2)*X**(0.523D0-0.015D0*SD)*
27917      &  (1D0+(2.22D0-0.59D0*SD-0.27D0*SD2)*XS+(5.95D0-6.19D0*SD+
27918      &  1.55D0*SD2)*X)*(1D0-X)**(3.57D0+0.94D0*SD-0.16D0*SD2)
27919         XFGLU=(X**(1.00D0-0.17D0*SD)*((4.879D0*SD-1.383D0*SD2)+
27920      &  (25.92D0-28.97D0*SD+5.596D0*SD2)*X+(-25.69D0+23.68D0*SD-
27921      &  1.975D0*SD2)*X**2)+SD**0.558D0*EXP(-(0.595D0+2.138D0*SD)+
27922      &  SQRT(4.066D0*SD**1.218D0*XL)))*
27923      &  (1D0-X)**(2.537D0+1.718D0*SD+0.353D0*SD2)
27924         XFSEA=(X**(0.412D0-0.171D0*SD)*(0.363D0-1.196D0*X+(1.029D0+
27925      &  1.785D0*SD-0.459D0*SD2)*X**2)*XL**(0.566D0-0.496D0*SD)+
27926      &  SD**1.396D0*EXP(-(3.838D0+1.944D0*SD)+SQRT(2.845D0*SD**1.331D0*
27927      &  XL)))*(1D0-X)**(4.696D0+2.109D0*SD)
27928         XFSTR=SD**0.803D0*(1D0+(-3.055D0+1.024D0*SD**0.67D0)*XS+
27929      &  (27.4D0-20.0D0*SD**0.154D0)*X)*(1D0-X)**6.22D0*
27930      &  EXP(-(4.33D0+1.408D0*SD)+SQRT((8.27D0-0.437D0*SD)*
27931      &  SD**0.563D0*XL))/XL**(2.082D0-0.577D0*SD)
27932         IF(SD.LE.0.888D0) THEN
27933           XFCHM=0D0
27934         ELSE
27935           XFCHM=(SD-0.888D0)**1.01D0*(1.+(4.24D0-0.804D0*SD)*X)*
27936      &    (1D0-X)**(3.46D0+1.076D0*SD)*EXP(-(4.61D0+1.49D0*SD)+
27937      &    SQRT((2.555D0+1.961D0*SD)*SD**0.37D0*XL))
27938         ENDIF
27939         IF(SD.LE.1.351D0) THEN
27940           XFBOT=0D0
27941         ELSE
27942           XFBOT=(SD-1.351D0)*(1D0+1.848D0*X)*(1D0-X)**(2.929D0+
27943      &    1.396D0*SD)*EXP(-(4.71D0+1.514D0*SD)+
27944      &    SQRT((4.02D0+1.239D0*SD)*SD**0.51D0*XL))
27945         ENDIF
27946  
27947 C...Put into output array.
27948         XPPR(0)=XFGLU
27949         XPPR(1)=XFVDD+XFSEA
27950         XPPR(2)=XFVUD-XFVDD+XFSEA
27951         XPPR(3)=XFSTR
27952         XPPR(4)=XFCHM
27953         XPPR(5)=XFBOT
27954         XPPR(-1)=XFSEA
27955         XPPR(-2)=XFSEA
27956         XPPR(-3)=XFSTR
27957         XPPR(-4)=XFCHM
27958         XPPR(-5)=XFBOT
27959  
27960 C...Proton parton distributions from Eichten, Hinchliffe, Lane, Quigg.
27961 C...Allowed variable range: 5 GeV^2 < Q^2 < 1E8 GeV^2; 1E-4 < x < 1
27962       ELSEIF(MSTP(51).EQ.12.OR.MSTP(51).EQ.13) THEN
27963  
27964 C...Determine set, Lambda and x and t expansion variables.
27965         NSET=MSTP(51)-11
27966         IF(NSET.EQ.1) ALAM=0.2D0
27967         IF(NSET.EQ.2) ALAM=0.29D0
27968         TMIN=LOG(5D0/ALAM**2)
27969         TMAX=LOG(1D8/ALAM**2)
27970         T=LOG(MAX(1D0,Q2/ALAM**2))
27971         VT=MAX(-1D0,MIN(1D0,(2D0*T-TMAX-TMIN)/(TMAX-TMIN)))
27972         NX=1
27973         IF(X.LE.0.1D0) NX=2
27974         IF(NX.EQ.1) VX=(2D0*X-1.1D0)/0.9D0
27975         IF(NX.EQ.2) VX=MAX(-1D0,(2D0*LOG(X)+11.51293D0)/6.90776D0)
27976  
27977 C...Chebyshev polynomials for x and t expansion.
27978         TX(1)=1D0
27979         TX(2)=VX
27980         TX(3)=2D0*VX**2-1D0
27981         TX(4)=4D0*VX**3-3D0*VX
27982         TX(5)=8D0*VX**4-8D0*VX**2+1D0
27983         TX(6)=16D0*VX**5-20D0*VX**3+5D0*VX
27984         TT(1)=1D0
27985         TT(2)=VT
27986         TT(3)=2D0*VT**2-1D0
27987         TT(4)=4D0*VT**3-3D0*VT
27988         TT(5)=8D0*VT**4-8D0*VT**2+1D0
27989         TT(6)=16D0*VT**5-20D0*VT**3+5D0*VT
27990  
27991 C...Calculate structure functions.
27992         DO 130 KFL=1,6
27993           XQSUM=0D0
27994           DO 120 IT=1,6
27995             DO 110 IX=1,6
27996               XQSUM=XQSUM+CEHLQ(IX,IT,NX,KFL,NSET)*TX(IX)*TT(IT)
27997   110       CONTINUE
27998   120     CONTINUE
27999           XQ(KFL)=XQSUM*(1D0-X)**NEHLQ(KFL,NSET)
28000   130   CONTINUE
28001  
28002 C...Put into output array.
28003         XPPR(0)=XQ(4)
28004         XPPR(1)=XQ(2)+XQ(3)
28005         XPPR(2)=XQ(1)+XQ(3)
28006         XPPR(3)=XQ(5)
28007         XPPR(4)=XQ(6)
28008         XPPR(-1)=XQ(3)
28009         XPPR(-2)=XQ(3)
28010         XPPR(-3)=XQ(5)
28011         XPPR(-4)=XQ(6)
28012  
28013 C...Special expansion for bottom (threshold effects).
28014         IF(MSTP(58).GE.5) THEN
28015           IF(NSET.EQ.1) TMIN=8.1905D0
28016           IF(NSET.EQ.2) TMIN=7.4474D0
28017           IF(T.GT.TMIN) THEN
28018             VT=MAX(-1D0,MIN(1D0,(2D0*T-TMAX-TMIN)/(TMAX-TMIN)))
28019             TT(1)=1D0
28020             TT(2)=VT
28021             TT(3)=2D0*VT**2-1D0
28022             TT(4)=4D0*VT**3-3D0*VT
28023             TT(5)=8D0*VT**4-8D0*VT**2+1D0
28024             TT(6)=16D0*VT**5-20D0*VT**3+5D0*VT
28025             XQSUM=0D0
28026             DO 150 IT=1,6
28027               DO 140 IX=1,6
28028                 XQSUM=XQSUM+CEHLQ(IX,IT,NX,7,NSET)*TX(IX)*TT(IT)
28029   140         CONTINUE
28030   150       CONTINUE
28031             XPPR(5)=XQSUM*(1D0-X)**NEHLQ(7,NSET)
28032             XPPR(-5)=XPPR(5)
28033           ENDIF
28034         ENDIF
28035  
28036 C...Special expansion for top (threshold effects).
28037         IF(MSTP(58).GE.6) THEN
28038           IF(NSET.EQ.1) TMIN=11.5528D0
28039           IF(NSET.EQ.2) TMIN=10.8097D0
28040           TMIN=TMIN+2D0*LOG(PMAS(6,1)/30D0)
28041           TMAX=TMAX+2D0*LOG(PMAS(6,1)/30D0)
28042           IF(T.GT.TMIN) THEN
28043             VT=MAX(-1D0,MIN(1D0,(2D0*T-TMAX-TMIN)/(TMAX-TMIN)))
28044             TT(1)=1D0
28045             TT(2)=VT
28046             TT(3)=2D0*VT**2-1D0
28047             TT(4)=4D0*VT**3-3D0*VT
28048             TT(5)=8D0*VT**4-8D0*VT**2+1D0
28049             TT(6)=16D0*VT**5-20D0*VT**3+5D0*VT
28050             XQSUM=0D0
28051             DO 170 IT=1,6
28052               DO 160 IX=1,6
28053                 XQSUM=XQSUM+CEHLQ(IX,IT,NX,8,NSET)*TX(IX)*TT(IT)
28054   160         CONTINUE
28055   170       CONTINUE
28056             XPPR(6)=XQSUM*(1D0-X)**NEHLQ(8,NSET)
28057             XPPR(-6)=XPPR(6)
28058           ENDIF
28059         ENDIF
28060  
28061 C...Proton parton distributions from Duke, Owens.
28062 C...Allowed variable range: 4 GeV^2 < Q^2 < approx 1E6 GeV^2.
28063       ELSEIF(MSTP(51).EQ.14.OR.MSTP(51).EQ.15) THEN
28064  
28065 C...Determine set, Lambda and s expansion parameter.
28066         NSET=MSTP(51)-13
28067         IF(NSET.EQ.1) ALAM=0.2D0
28068         IF(NSET.EQ.2) ALAM=0.4D0
28069         Q2IN=MIN(1D6,MAX(4D0,Q2))
28070         SD=LOG(LOG(Q2IN/ALAM**2)/LOG(4D0/ALAM**2))
28071  
28072 C...Calculate structure functions.
28073         DO 190 KFL=1,5
28074           DO 180 IS=1,6
28075             TS(IS)=CDO(1,IS,KFL,NSET)+CDO(2,IS,KFL,NSET)*SD+
28076      &      CDO(3,IS,KFL,NSET)*SD**2
28077   180     CONTINUE
28078           IF(KFL.LE.2) THEN
28079             XQ(KFL)=X**TS(1)*(1D0-X)**TS(2)*(1D0+TS(3)*X)/(EULBET(TS(1),
28080      &      TS(2)+1D0)*(1D0+TS(3)*TS(1)/(TS(1)+TS(2)+1D0)))
28081           ELSE
28082             XQ(KFL)=TS(1)*X**TS(2)*(1D0-X)**TS(3)*(1D0+TS(4)*X+
28083      &      TS(5)*X**2+TS(6)*X**3)
28084           ENDIF
28085   190   CONTINUE
28086  
28087 C...Put into output arrays.
28088         XPPR(0)=XQ(5)
28089         XPPR(1)=XQ(2)+XQ(3)/6D0
28090         XPPR(2)=3D0*XQ(1)-XQ(2)+XQ(3)/6D0
28091         XPPR(3)=XQ(3)/6D0
28092         XPPR(4)=XQ(4)
28093         XPPR(-1)=XQ(3)/6D0
28094         XPPR(-2)=XQ(3)/6D0
28095         XPPR(-3)=XQ(3)/6D0
28096         XPPR(-4)=XQ(4)
28097
28098       ENDIF
28099   
28100       RETURN
28101       END
28102  
28103 C*********************************************************************
28104  
28105 C...PYHFTH
28106 C...Gives threshold attractive/repulsive factor for heavy flavour
28107 C...production.
28108  
28109       FUNCTION PYHFTH(SH,SQM,FRATT)
28110  
28111 C...Double precision and integer declarations.
28112       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28113       IMPLICIT INTEGER(I-N)
28114       INTEGER PYK,PYCHGE,PYCOMP
28115 C...Commonblocks.
28116       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
28117       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
28118       COMMON/PYINT1/MINT(400),VINT(400)
28119       SAVE /PYDAT1/,/PYPARS/,/PYINT1/
28120  
28121 C...Value for alpha_strong.
28122       IF(MSTP(35).LE.1) THEN
28123         ALSSG=PARP(35)
28124       ELSE
28125         MST115=MSTU(115)
28126         MSTU(115)=MSTP(36)
28127         Q2BN=SQRT(MAX(1D0,SQM*((SQRT(SH)-2D0*SQRT(SQM))**2+
28128      &  PARP(36)**2)))
28129         ALSSG=PYALPS(Q2BN)
28130         MSTU(115)=MST115
28131       ENDIF
28132  
28133 C...Evaluate attractive and repulsive factors.
28134       XATTR=4D0*PARU(1)*ALSSG/(3D0*SQRT(MAX(1D-20,1D0-4D0*SQM/SH)))
28135       FATTR=XATTR/(1D0-EXP(-MIN(50D0,XATTR)))
28136       XREPU=PARU(1)*ALSSG/(6D0*SQRT(MAX(1D-20,1D0-4D0*SQM/SH)))
28137       FREPU=XREPU/(EXP(MIN(50D0,XREPU))-1D0)
28138       PYHFTH=FRATT*FATTR+(1D0-FRATT)*FREPU
28139       VINT(138)=PYHFTH
28140  
28141       RETURN
28142       END
28143  
28144 C*********************************************************************
28145  
28146 C...PYSPLI
28147 C...Splits a hadron remnant into two (partons or hadron + parton)
28148 C...in case it is more complicated than just a quark or a diquark.
28149  
28150       SUBROUTINE PYSPLI(KF,KFLIN,KFLCH,KFLSP)
28151  
28152 C...Double precision and integer declarations.
28153       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28154       IMPLICIT INTEGER(I-N)
28155       INTEGER PYK,PYCHGE,PYCOMP
28156 C...Commonblocks. PYDAT1 temporary
28157       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
28158       COMMON/PYINT1/MINT(400),VINT(400)
28159       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
28160       SAVE /PYPARS/,/PYINT1/,/PYDAT1/
28161 C...Local array.
28162       DIMENSION KFL(3)
28163  
28164 C...Preliminaries. Parton composition.
28165       KFA=IABS(KF)
28166       KFS=ISIGN(1,KF)
28167       KFL(1)=MOD(KFA/1000,10)
28168       KFL(2)=MOD(KFA/100,10)
28169       KFL(3)=MOD(KFA/10,10)
28170       IF(KFA.EQ.22.AND.MINT(109).EQ.2) THEN
28171         KFL(2)=INT(1.5D0+PYR(0))
28172         IF(MINT(105).EQ.333) KFL(2)=3
28173         IF(MINT(105).EQ.443) KFL(2)=4
28174         KFL(3)=KFL(2)
28175       ELSEIF((KFA.EQ.111.OR.KFA.EQ.113).AND.PYR(0).GT.0.5D0) THEN
28176         KFL(2)=2
28177         KFL(3)=2
28178       ELSEIF(KFA.EQ.223.AND.PYR(0).GT.0.5D0) THEN
28179         KFL(2)=1
28180         KFL(3)=1
28181       ENDIF
28182       IF(KFLIN.NE.21.AND.KFLIN.NE.22.AND.KFLIN.NE.23) THEN
28183         KFLR=KFLIN*KFS
28184       ELSE
28185         KFLR=KFLIN
28186       ENDIF
28187       KFLCH=0
28188  
28189 C...Subdivide lepton.
28190       IF(KFA.GE.11.AND.KFA.LE.18) THEN
28191         IF(KFLR.EQ.KFA) THEN
28192           KFLSP=KFS*22
28193         ELSEIF(KFLR.EQ.22) THEN
28194           KFLSP=KFA
28195         ELSEIF(KFLR.EQ.-24.AND.MOD(KFA,2).EQ.1) THEN
28196           KFLSP=KFA+1
28197         ELSEIF(KFLR.EQ.24.AND.MOD(KFA,2).EQ.0) THEN
28198           KFLSP=KFA-1
28199         ELSEIF(KFLR.EQ.21) THEN
28200           KFLSP=KFA
28201           KFLCH=KFS*21
28202         ELSE
28203           KFLSP=KFA
28204           KFLCH=-KFLR
28205         ENDIF
28206  
28207 C...Subdivide photon.
28208       ELSEIF(KFA.EQ.22.AND.MINT(109).NE.2) THEN
28209         IF(KFLR.NE.21) THEN
28210           KFLSP=-KFLR
28211         ELSE
28212           RAGR=0.75D0*PYR(0)
28213           KFLSP=1
28214           IF(RAGR.GT.0.125D0) KFLSP=2
28215           IF(RAGR.GT.0.625D0) KFLSP=3
28216           IF(PYR(0).GT.0.5D0) KFLSP=-KFLSP
28217           KFLCH=-KFLSP
28218         ENDIF
28219  
28220 C...Subdivide Reggeon or Pomeron.
28221       ELSEIF(KFA.EQ.28.OR.KFA.EQ.29) THEN
28222         IF(KFLIN.EQ.21) THEN
28223           KFLSP=KFS*21
28224         ELSE
28225           KFLSP=-KFLIN
28226         ENDIF
28227  
28228 C...Subdivide meson.
28229       ELSEIF(KFL(1).EQ.0) THEN
28230         KFL(2)=KFL(2)*(-1)**KFL(2)
28231         KFL(3)=-KFL(3)*(-1)**IABS(KFL(2))
28232         IF(KFLR.EQ.KFL(2)) THEN
28233           KFLSP=KFL(3)
28234         ELSEIF(KFLR.EQ.KFL(3)) THEN
28235           KFLSP=KFL(2)
28236         ELSEIF(KFLR.EQ.21.AND.PYR(0).GT.0.5D0) THEN
28237           KFLSP=KFL(2)
28238           KFLCH=KFL(3)
28239         ELSEIF(KFLR.EQ.21) THEN
28240           KFLSP=KFL(3)
28241           KFLCH=KFL(2)
28242         ELSEIF(KFLR*KFL(2).GT.0) THEN
28243           NTRY=0
28244   100     NTRY=NTRY+1
28245           CALL PYKFDI(-KFLR,KFL(2),KFDUMP,KFLCH)
28246           IF(KFLCH.EQ.0.AND.NTRY.LT.100) THEN
28247             GOTO 100
28248           ELSEIF(KFLCH.EQ.0) THEN
28249             CALL PYERRM(14,'(PYSPLI:) caught in infinite loop')
28250             MINT(51)=1
28251             RETURN
28252           ENDIF
28253           KFLSP=KFL(3)
28254         ELSE
28255           NTRY=0
28256   110     NTRY=NTRY+1
28257           CALL PYKFDI(-KFLR,KFL(3),KFDUMP,KFLCH)
28258           IF(KFLCH.EQ.0.AND.NTRY.LT.100) THEN
28259             GOTO 110
28260           ELSEIF(KFLCH.EQ.0) THEN
28261             CALL PYERRM(14,'(PYSPLI:) caught in infinite loop')
28262             MINT(51)=1
28263             RETURN
28264           ENDIF
28265           KFLSP=KFL(2)
28266         ENDIF
28267  
28268 C...Subdivide baryon.
28269       ELSE
28270         NAGR=0
28271         DO 120 J=1,3
28272           IF(KFLR.EQ.KFL(J)) NAGR=NAGR+1
28273   120   CONTINUE
28274         IF(NAGR.GE.1) THEN
28275           RAGR=0.00001D0+(NAGR-0.00002D0)*PYR(0)
28276           IAGR=0
28277           DO 130 J=1,3
28278             IF(KFLR.EQ.KFL(J)) RAGR=RAGR-1D0
28279             IF(IAGR.EQ.0.AND.RAGR.LE.0D0) IAGR=J
28280   130     CONTINUE
28281         ELSE
28282           IAGR=1.00001D0+2.99998D0*PYR(0)
28283         ENDIF
28284         ID1=1
28285         IF(IAGR.EQ.1) ID1=2
28286         IF(IAGR.EQ.1.AND.KFL(3).GT.KFL(2)) ID1=3
28287         ID2=6-IAGR-ID1
28288         KSP=3
28289         IF(MOD(KFA,10).EQ.2.AND.KFL(1).EQ.KFL(2)) THEN
28290           IF(IAGR.NE.3.AND.PYR(0).GT.0.25D0) KSP=1
28291         ELSEIF(MOD(KFA,10).EQ.2.AND.KFL(2).GE.KFL(3)) THEN
28292           IF(IAGR.NE.1.AND.PYR(0).GT.0.25D0) KSP=1
28293         ELSEIF(MOD(KFA,10).EQ.2) THEN
28294           IF(IAGR.EQ.1) KSP=1
28295           IF(IAGR.NE.1.AND.PYR(0).GT.0.75D0) KSP=1
28296         ENDIF
28297         KFLSP=1000*KFL(ID1)+100*KFL(ID2)+KSP
28298         IF(KFLR.EQ.21) THEN
28299           KFLCH=KFL(IAGR)
28300         ELSEIF(NAGR.EQ.0.AND.KFLR.GT.0) THEN
28301           NTRY=0
28302   140     NTRY=NTRY+1
28303           CALL PYKFDI(-KFLR,KFL(IAGR),KFDUMP,KFLCH)
28304           IF(KFLCH.EQ.0.AND.NTRY.LT.100) THEN
28305             GOTO 140
28306           ELSEIF(KFLCH.EQ.0) THEN
28307             CALL PYERRM(14,'(PYSPLI:) caught in infinite loop')
28308             MINT(51)=1
28309             RETURN
28310           ENDIF
28311         ELSEIF(NAGR.EQ.0) THEN
28312           NTRY=0
28313   150     NTRY=NTRY+1
28314           CALL PYKFDI(10000*KFL(ID1)+KFLSP,-KFLR,KFDUMP,KFLCH)
28315           IF(KFLCH.EQ.0.AND.NTRY.LT.100) THEN
28316             GOTO 150
28317           ELSEIF(KFLCH.EQ.0) THEN
28318             CALL PYERRM(14,'(PYSPLI:) caught in infinite loop')
28319             MINT(51)=1
28320             RETURN
28321           ENDIF
28322           KFLSP=KFL(IAGR)
28323         ENDIF
28324       ENDIF
28325  
28326 C...Add on correct sign for result.
28327       KFLCH=KFLCH*KFS
28328       KFLSP=KFLSP*KFS
28329  
28330       RETURN
28331       END
28332
28333 C*********************************************************************
28334  
28335 C...PYGAMM
28336 C...Gives ordinary Gamma function Gamma(x) for positive, real arguments;
28337 C...see M. Abramowitz, I. A. Stegun: Handbook of Mathematical Functions
28338 C...(Dover, 1965) 6.1.36.
28339  
28340       FUNCTION PYGAMM(X)
28341  
28342 C...Double precision and integer declarations.
28343       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28344       IMPLICIT INTEGER(I-N)
28345       INTEGER PYK,PYCHGE,PYCOMP
28346 C...Local array and data.
28347       DIMENSION B(8)
28348       DATA B/-0.577191652D0,0.988205891D0,-0.897056937D0,0.918206857D0,
28349      &-0.756704078D0,0.482199394D0,-0.193527818D0,0.035868343D0/
28350  
28351       NX=INT(X)
28352       DX=X-NX
28353  
28354       PYGAMM=1D0
28355       DXP=1D0
28356       DO 100 I=1,8
28357         DXP=DXP*DX
28358         PYGAMM=PYGAMM+B(I)*DXP
28359   100 CONTINUE
28360       IF(X.LT.1D0) THEN
28361         PYGAMM=PYGAMM/X
28362       ELSE
28363         DO 110 IX=1,NX-1
28364           PYGAMM=(X-IX)*PYGAMM
28365   110   CONTINUE
28366       ENDIF
28367  
28368       RETURN
28369       END
28370  
28371 C***********************************************************************
28372  
28373 C...PYWAUX
28374 C...Calculates real and imaginary parts of the auxiliary functions W1
28375 C...and W2; see R. K. Ellis, I. Hinchliffe, M. Soldate and J. J. van
28376 C...der Bij, Nucl. Phys. B297 (1988) 221.
28377  
28378       SUBROUTINE PYWAUX(IAUX,EPS,WRE,WIM)
28379  
28380 C...Double precision and integer declarations.
28381       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28382       IMPLICIT INTEGER(I-N)
28383       INTEGER PYK,PYCHGE,PYCOMP
28384 C...Commonblocks.
28385       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
28386       SAVE /PYDAT1/
28387  
28388       ASINH(X)=LOG(X+SQRT(X**2+1D0))
28389       ACOSH(X)=LOG(X+SQRT(X**2-1D0))
28390  
28391       IF(EPS.LT.0D0) THEN
28392         IF(IAUX.EQ.1) WRE=2D0*SQRT(1D0-EPS)*ASINH(SQRT(-1D0/EPS))
28393         IF(IAUX.EQ.2) WRE=4D0*(ASINH(SQRT(-1D0/EPS)))**2
28394         WIM=0D0
28395       ELSEIF(EPS.LT.1D0) THEN
28396         IF(IAUX.EQ.1) WRE=2D0*SQRT(1D0-EPS)*ACOSH(SQRT(1D0/EPS))
28397         IF(IAUX.EQ.2) WRE=4D0*(ACOSH(SQRT(1D0/EPS)))**2-PARU(1)**2
28398         IF(IAUX.EQ.1) WIM=-PARU(1)*SQRT(1D0-EPS)
28399         IF(IAUX.EQ.2) WIM=-4D0*PARU(1)*ACOSH(SQRT(1D0/EPS))
28400       ELSE
28401         IF(IAUX.EQ.1) WRE=2D0*SQRT(EPS-1D0)*ASIN(SQRT(1D0/EPS))
28402         IF(IAUX.EQ.2) WRE=-4D0*(ASIN(SQRT(1D0/EPS)))**2
28403         WIM=0D0
28404       ENDIF
28405  
28406       RETURN
28407       END
28408  
28409 C***********************************************************************
28410  
28411 C...PYI3AU
28412 C...Calculates real and imaginary parts of the auxiliary function I3;
28413 C...see R. K. Ellis, I. Hinchliffe, M. Soldate and J. J. van der Bij,
28414 C...Nucl. Phys. B297 (1988) 221.
28415  
28416       SUBROUTINE PYI3AU(EPS,RAT,Y3RE,Y3IM)
28417  
28418 C...Double precision and integer declarations.
28419       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28420       IMPLICIT INTEGER(I-N)
28421       INTEGER PYK,PYCHGE,PYCOMP
28422 C...Commonblocks.
28423       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
28424       SAVE /PYDAT1/
28425  
28426       BE=0.5D0*(1D0+SQRT(1D0+RAT*EPS))
28427       IF(EPS.LT.1D0) GA=0.5D0*(1D0+SQRT(1D0-EPS))
28428  
28429       IF(EPS.LT.0D0) THEN
28430         IF(ABS(EPS).LT.1D-4.AND.ABS(RAT*EPS).LT.1D-4) THEN
28431           F3RE=PYSPEN(-0.25D0*EPS/(1D0+0.25D0*(RAT-1D0)*EPS),0D0,1)-
28432      &    PYSPEN((1D0-0.25D0*EPS)/(1D0+0.25D0*(RAT-1D0)*EPS),0D0,1)+
28433      &    PYSPEN(0.25D0*(RAT+1D0)*EPS/(1D0+0.25D0*RAT*EPS),0D0,1)-
28434      &    PYSPEN((RAT+1D0)/RAT,0D0,1)+0.5D0*(LOG(1D0+0.25D0*RAT*EPS)**2-
28435      &    LOG(0.25D0*RAT*EPS)**2)+LOG(1D0-0.25D0*EPS)*
28436      &    LOG((1D0+0.25D0*(RAT-1D0)*EPS)/(1D0+0.25D0*RAT*EPS))+
28437      &    LOG(-0.25D0*EPS)*LOG(0.25D0*RAT*EPS/(1D0+0.25D0*(RAT-1D0)*
28438      &    EPS))
28439         ELSEIF(ABS(EPS).LT.1D-4.AND.ABS(RAT*EPS).GE.1D-4) THEN
28440           F3RE=PYSPEN(-0.25D0*EPS/(BE-0.25D0*EPS),0D0,1)-
28441      &    PYSPEN((1D0-0.25D0*EPS)/(BE-0.25D0*EPS),0D0,1)+
28442      &    PYSPEN((BE-1D0+0.25D0*EPS)/BE,0D0,1)-
28443      &    PYSPEN((BE-1D0+0.25D0*EPS)/(BE-1D0),0D0,1)+
28444      &    0.5D0*(LOG(BE)**2-LOG(BE-1D0)**2)+
28445      &    LOG(1D0-0.25D0*EPS)*LOG((BE-0.25D0*EPS)/BE)+
28446      &    LOG(-0.25D0*EPS)*LOG((BE-1D0)/(BE-0.25D0*EPS))
28447         ELSEIF(ABS(EPS).GE.1D-4.AND.ABS(RAT*EPS).LT.1D-4) THEN
28448           F3RE=PYSPEN((GA-1D0)/(GA+0.25D0*RAT*EPS),0D0,1)-
28449      &    PYSPEN(GA/(GA+0.25D0*RAT*EPS),0D0,1)+
28450      &    PYSPEN((1D0+0.25D0*RAT*EPS-GA)/(1D0+0.25D0*RAT*EPS),0D0,1)-
28451      &    PYSPEN((1D0+0.25D0*RAT*EPS-GA)/(0.25D0*RAT*EPS),0D0,1)+
28452      &    0.5D0*(LOG(1D0+0.25D0*RAT*EPS)**2-LOG(0.25D0*RAT*EPS)**2)+
28453      &    LOG(GA)*LOG((GA+0.25D0*RAT*EPS)/(1D0+0.25D0*RAT*EPS))+
28454      &    LOG(GA-1D0)*LOG(0.25D0*RAT*EPS/(GA+0.25D0*RAT*EPS))
28455         ELSE
28456           F3RE=PYSPEN((GA-1D0)/(GA+BE-1D0),0D0,1)-
28457      &    PYSPEN(GA/(GA+BE-1D0),0D0,1)+PYSPEN((BE-GA)/BE,0D0,1)-
28458      &    PYSPEN((BE-GA)/(BE-1D0),0D0,1)+0.5D0*(LOG(BE)**2-
28459      &    LOG(BE-1D0)**2)+LOG(GA)*LOG((GA+BE-1D0)/BE)+
28460      &    LOG(GA-1D0)*LOG((BE-1D0)/(GA+BE-1D0))
28461         ENDIF
28462         F3IM=0D0
28463       ELSEIF(EPS.LT.1D0) THEN
28464         IF(ABS(EPS).LT.1D-4.AND.ABS(RAT*EPS).LT.1D-4) THEN
28465           F3RE=PYSPEN(-0.25D0*EPS/(1D0+0.25D0*(RAT-1D0)*EPS),0D0,1)-
28466      &    PYSPEN((1D0-0.25D0*EPS)/(1D0+0.25D0*(RAT-1D0)*EPS),0D0,1)+
28467      &    PYSPEN((1D0-0.25D0*EPS)/(-0.25D0*(RAT+1D0)*EPS),0D0,1)-
28468      &    PYSPEN(1D0/(RAT+1D0),0D0,1)+LOG((1D0-0.25D0*EPS)/
28469      &    (0.25D0*EPS))*LOG((1D0+0.25D0*(RAT-1D0)*EPS)/
28470      &    (0.25D0*(RAT+1D0)*EPS))
28471           F3IM=-PARU(1)*LOG((1D0+0.25D0*(RAT-1D0)*EPS)/
28472      &    (0.25D0*(RAT+1D0)*EPS))
28473         ELSEIF(ABS(EPS).LT.1D-4.AND.ABS(RAT*EPS).GE.1D-4) THEN
28474           F3RE=PYSPEN(-0.25D0*EPS/(BE-0.25D0*EPS),0D0,1)-
28475      &    PYSPEN((1D0-0.25D0*EPS)/(BE-0.25D0*EPS),0D0,1)+
28476      &    PYSPEN((1D0-0.25D0*EPS)/(1D0-0.25D0*EPS-BE),0D0,1)-
28477      &    PYSPEN(-0.25D0*EPS/(1D0-0.25D0*EPS-BE),0D0,1)+
28478      &    LOG((1D0-0.25D0*EPS)/(0.25D0*EPS))*
28479      &    LOG((BE-0.25D0*EPS)/(BE-1D0+0.25D0*EPS))
28480           F3IM=-PARU(1)*LOG((BE-0.25D0*EPS)/(BE-1D0+0.25D0*EPS))
28481         ELSEIF(ABS(EPS).GE.1D-4.AND.ABS(RAT*EPS).LT.1D-4) THEN
28482           F3RE=PYSPEN((GA-1D0)/(GA+0.25D0*RAT*EPS),0D0,1)-
28483      &    PYSPEN(GA/(GA+0.25D0*RAT*EPS),0D0,1)+
28484      &    PYSPEN(GA/(GA-1D0-0.25D0*RAT*EPS),0D0,1)-
28485      &    PYSPEN((GA-1D0)/(GA-1D0-0.25D0*RAT*EPS),0D0,1)+
28486      &    LOG(GA/(1D0-GA))*LOG((GA+0.25D0*RAT*EPS)/
28487      &    (1D0+0.25D0*RAT*EPS-GA))
28488           F3IM=-PARU(1)*LOG((GA+0.25D0*RAT*EPS)/
28489      &    (1D0+0.25D0*RAT*EPS-GA))
28490         ELSE
28491           F3RE=PYSPEN((GA-1D0)/(GA+BE-1D0),0D0,1)-
28492      &    PYSPEN(GA/(GA+BE-1D0),0D0,1)+PYSPEN(GA/(GA-BE),0D0,1)-
28493      &    PYSPEN((GA-1D0)/(GA-BE),0D0,1)+LOG(GA/(1D0-GA))*
28494      &    LOG((GA+BE-1D0)/(BE-GA))
28495           F3IM=-PARU(1)*LOG((GA+BE-1D0)/(BE-GA))
28496         ENDIF
28497       ELSE
28498         RSQ=EPS/(EPS-1D0+(2D0*BE-1D0)**2)
28499         RCTHE=RSQ*(1D0-2D0*BE/EPS)
28500         RSTHE=SQRT(MAX(0D0,RSQ-RCTHE**2))
28501         RCPHI=RSQ*(1D0+2D0*(BE-1D0)/EPS)
28502         RSPHI=SQRT(MAX(0D0,RSQ-RCPHI**2))
28503         R=SQRT(RSQ)
28504         THE=ACOS(MAX(-0.999999D0,MIN(0.999999D0,RCTHE/R)))
28505         PHI=ACOS(MAX(-0.999999D0,MIN(0.999999D0,RCPHI/R)))
28506         F3RE=PYSPEN(RCTHE,RSTHE,1)+PYSPEN(RCTHE,-RSTHE,1)-
28507      &  PYSPEN(RCPHI,RSPHI,1)-PYSPEN(RCPHI,-RSPHI,1)+
28508      &  (PHI-THE)*(PHI+THE-PARU(1))
28509         F3IM=PYSPEN(RCTHE,RSTHE,2)+PYSPEN(RCTHE,-RSTHE,2)-
28510      &  PYSPEN(RCPHI,RSPHI,2)-PYSPEN(RCPHI,-RSPHI,2)
28511       ENDIF
28512  
28513       Y3RE=2D0/(2D0*BE-1D0)*F3RE
28514       Y3IM=2D0/(2D0*BE-1D0)*F3IM
28515  
28516       RETURN
28517       END
28518  
28519 C***********************************************************************
28520  
28521 C...PYSPEN
28522 C...Calculates real and imaginary part of Spence function; see
28523 C...G. 't Hooft and M. Veltman, Nucl. Phys. B153 (1979) 365.
28524  
28525       FUNCTION PYSPEN(XREIN,XIMIN,IREIM)
28526  
28527 C...Double precision and integer declarations.
28528       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28529       IMPLICIT INTEGER(I-N)
28530       INTEGER PYK,PYCHGE,PYCOMP
28531 C...Commonblocks.
28532       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
28533       SAVE /PYDAT1/
28534 C...Local array and data.
28535       DIMENSION B(0:14)
28536       DATA B/
28537      &1.000000D+00,        -5.000000D-01,         1.666667D-01,
28538      &0.000000D+00,        -3.333333D-02,         0.000000D+00,
28539      &2.380952D-02,         0.000000D+00,        -3.333333D-02,
28540      &0.000000D+00,         7.575757D-02,         0.000000D+00,
28541      &-2.531135D-01,         0.000000D+00,         1.166667D+00/
28542  
28543       XRE=XREIN
28544       XIM=XIMIN
28545       IF(ABS(1D0-XRE).LT.1D-6.AND.ABS(XIM).LT.1D-6) THEN
28546         IF(IREIM.EQ.1) PYSPEN=PARU(1)**2/6D0
28547         IF(IREIM.EQ.2) PYSPEN=0D0
28548         RETURN
28549       ENDIF
28550  
28551       XMOD=SQRT(XRE**2+XIM**2)
28552       IF(XMOD.LT.1D-6) THEN
28553         IF(IREIM.EQ.1) PYSPEN=0D0
28554         IF(IREIM.EQ.2) PYSPEN=0D0
28555         RETURN
28556       ENDIF
28557  
28558       XARG=SIGN(ACOS(XRE/XMOD),XIM)
28559       SP0RE=0D0
28560       SP0IM=0D0
28561       SGN=1D0
28562       IF(XMOD.GT.1D0) THEN
28563         ALGXRE=LOG(XMOD)
28564         ALGXIM=XARG-SIGN(PARU(1),XARG)
28565         SP0RE=-PARU(1)**2/6D0-(ALGXRE**2-ALGXIM**2)/2D0
28566         SP0IM=-ALGXRE*ALGXIM
28567         SGN=-1D0
28568         XMOD=1D0/XMOD
28569         XARG=-XARG
28570         XRE=XMOD*COS(XARG)
28571         XIM=XMOD*SIN(XARG)
28572       ENDIF
28573       IF(XRE.GT.0.5D0) THEN
28574         ALGXRE=LOG(XMOD)
28575         ALGXIM=XARG
28576         XRE=1D0-XRE
28577         XIM=-XIM
28578         XMOD=SQRT(XRE**2+XIM**2)
28579         XARG=SIGN(ACOS(XRE/XMOD),XIM)
28580         ALGYRE=LOG(XMOD)
28581         ALGYIM=XARG
28582         SP0RE=SP0RE+SGN*(PARU(1)**2/6D0-(ALGXRE*ALGYRE-ALGXIM*ALGYIM))
28583         SP0IM=SP0IM-SGN*(ALGXRE*ALGYIM+ALGXIM*ALGYRE)
28584         SGN=-SGN
28585       ENDIF
28586  
28587       XRE=1D0-XRE
28588       XIM=-XIM
28589       XMOD=SQRT(XRE**2+XIM**2)
28590       XARG=SIGN(ACOS(XRE/XMOD),XIM)
28591       ZRE=-LOG(XMOD)
28592       ZIM=-XARG
28593  
28594       SPRE=0D0
28595       SPIM=0D0
28596       SAVERE=1D0
28597       SAVEIM=0D0
28598       DO 100 I=0,14
28599         IF(MAX(ABS(SAVERE),ABS(SAVEIM)).LT.1D-30) GOTO 110
28600         TERMRE=(SAVERE*ZRE-SAVEIM*ZIM)/DBLE(I+1)
28601         TERMIM=(SAVERE*ZIM+SAVEIM*ZRE)/DBLE(I+1)
28602         SAVERE=TERMRE
28603         SAVEIM=TERMIM
28604         SPRE=SPRE+B(I)*TERMRE
28605         SPIM=SPIM+B(I)*TERMIM
28606   100 CONTINUE
28607  
28608   110 IF(IREIM.EQ.1) PYSPEN=SP0RE+SGN*SPRE
28609       IF(IREIM.EQ.2) PYSPEN=SP0IM+SGN*SPIM
28610  
28611       RETURN
28612       END
28613  
28614 C***********************************************************************
28615  
28616 C...PYQQBH
28617 C...Calculates the matrix element for the processes
28618 C...g + g or q + qbar -> Q + Qbar + H (normally with Q = t).
28619 C...REDUCE output and part of the rest courtesy Z. Kunszt, see
28620 C...Z. Kunszt, Nucl. Phys. B247 (1984) 339.
28621  
28622       SUBROUTINE PYQQBH(WTQQBH)
28623  
28624 C...Double precision and integer declarations.
28625       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28626       IMPLICIT INTEGER(I-N)
28627       INTEGER PYK,PYCHGE,PYCOMP
28628 C...Commonblocks.
28629       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
28630       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
28631       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
28632       COMMON/PYINT1/MINT(400),VINT(400)
28633       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
28634       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/,/PYINT2/
28635 C...Local arrays and function.
28636       DIMENSION PP(15,4),CLR(8,8),FM(10,10),RM(8,8),DX(8)
28637       DOT(I,J)=PP(I,4)*PP(J,4)-PP(I,1)*PP(J,1)-PP(I,2)*PP(J,2)-
28638      &PP(I,3)*PP(J,3)
28639  
28640 C...Mass parameters.
28641       WTQQBH=0D0
28642       ISUB=MINT(1)
28643       SHPR=SQRT(VINT(26))*VINT(1)
28644       PQ=PMAS(PYCOMP(KFPR(ISUB,2)),1)
28645       PH=SQRT(VINT(21))*VINT(1)
28646       SPQ=PQ**2
28647       SPH=PH**2
28648  
28649 C...Set up outgoing kinematics: 1=t, 2=tbar, 3=H.
28650       DO 100 I=1,2
28651         PT=SQRT(MAX(0D0,VINT(197+5*I)))
28652         PP(I,1)=PT*COS(VINT(198+5*I))
28653         PP(I,2)=PT*SIN(VINT(198+5*I))
28654   100 CONTINUE
28655       PP(3,1)=-PP(1,1)-PP(2,1)
28656       PP(3,2)=-PP(1,2)-PP(2,2)
28657       PMS1=SPQ+PP(1,1)**2+PP(1,2)**2
28658       PMS2=SPQ+PP(2,1)**2+PP(2,2)**2
28659       PMS3=SPH+PP(3,1)**2+PP(3,2)**2
28660       PMT3=SQRT(PMS3)
28661       PP(3,3)=PMT3*SINH(VINT(211))
28662       PP(3,4)=PMT3*COSH(VINT(211))
28663       PMS12=(SHPR-PP(3,4))**2-PP(3,3)**2
28664       PP(1,3)=(-PP(3,3)*(PMS12+PMS1-PMS2)+
28665      &VINT(213)*(SHPR-PP(3,4))*VINT(220))/(2D0*PMS12)
28666       PP(2,3)=-PP(1,3)-PP(3,3)
28667       PP(1,4)=SQRT(PMS1+PP(1,3)**2)
28668       PP(2,4)=SQRT(PMS2+PP(2,3)**2)
28669  
28670 C...Set up incoming kinematics and derived momentum combinations.
28671       DO 110 I=4,5
28672         PP(I,1)=0D0
28673         PP(I,2)=0D0
28674         PP(I,3)=-0.5D0*SHPR*(-1)**I
28675         PP(I,4)=-0.5D0*SHPR
28676   110 CONTINUE
28677       DO 120 J=1,4
28678         PP(6,J)=PP(1,J)+PP(2,J)
28679         PP(7,J)=PP(1,J)+PP(3,J)
28680         PP(8,J)=PP(1,J)+PP(4,J)
28681         PP(9,J)=PP(1,J)+PP(5,J)
28682         PP(10,J)=-PP(2,J)-PP(3,J)
28683         PP(11,J)=-PP(2,J)-PP(4,J)
28684         PP(12,J)=-PP(2,J)-PP(5,J)
28685         PP(13,J)=-PP(4,J)-PP(5,J)
28686   120 CONTINUE
28687  
28688 C...Derived kinematics invariants.
28689       X1=DOT(1,2)
28690       X2=DOT(1,3)
28691       X3=DOT(1,4)
28692       X4=DOT(1,5)
28693       X5=DOT(2,3)
28694       X6=DOT(2,4)
28695       X7=DOT(2,5)
28696       X8=DOT(3,4)
28697       X9=DOT(3,5)
28698       X10=DOT(4,5)
28699  
28700 C...Propagators.
28701       SS1=DOT(7,7)-SPQ
28702       SS2=DOT(8,8)-SPQ
28703       SS3=DOT(9,9)-SPQ
28704       SS4=DOT(10,10)-SPQ
28705       SS5=DOT(11,11)-SPQ
28706       SS6=DOT(12,12)-SPQ
28707       SS7=DOT(13,13)
28708       DX(1)=SS1*SS6
28709       DX(2)=SS2*SS6
28710       DX(3)=SS2*SS4
28711       DX(4)=SS1*SS5
28712       DX(5)=SS3*SS5
28713       DX(6)=SS3*SS4
28714       DX(7)=SS7*SS1
28715       DX(8)=SS7*SS4
28716  
28717 C...Define colour coefficients for g + g -> Q + Qbar + H.
28718       IF(ISUB.EQ.121.OR.ISUB.EQ.181.OR.ISUB.EQ.186) THEN
28719         DO 140 I=1,3
28720           DO 130 J=1,3
28721             CLR(I,J)=16D0/3D0
28722             CLR(I+3,J+3)=16D0/3D0
28723             CLR(I,J+3)=-2D0/3D0
28724             CLR(I+3,J)=-2D0/3D0
28725   130     CONTINUE
28726   140   CONTINUE
28727         DO 160 L=1,2
28728           DO 150 I=1,3
28729             CLR(I,6+L)=-6D0
28730             CLR(I+3,6+L)=6D0
28731             CLR(6+L,I)=-6D0
28732             CLR(6+L,I+3)=6D0
28733   150     CONTINUE
28734   160   CONTINUE
28735         DO 180 K1=1,2
28736           DO 170 K2=1,2
28737             CLR(6+K1,6+K2)=12D0
28738   170     CONTINUE
28739   180   CONTINUE
28740  
28741 C...Evaluate matrix elements for g + g -> Q + Qbar + H.
28742         FM(1,1)=64*PQ**6+16*PQ**4*PH**2+32*PQ**4*(X1+2*X2+X4+X9+2*
28743      &  X7+X5)+8*PQ**2*PH**2*(-X1-X4+2*X7)+16*PQ**2*(X2*X9+4*X2*
28744      &  X7+X2*X5-2*X4*X7-2*X9*X7)+8*PH**2*X4*X7-16*X2*X9*X7
28745         FM(1,2)=16*PQ**6+8*PQ**4*(-2*X1+X2-2*X3-2*X4-4*X10+X9-X8+2
28746      &  *X7-4*X6+X5)+8*PQ**2*(-2*X1*X2-2*X2*X4-2*X2*X10+X2*X7-2*
28747      &  X2*X6-2*X3*X7+2*X4*X7+4*X10*X7-X9*X7-X8*X7)+16*X2*X7*(X4+
28748      &  X10)
28749         FM(1,3)=16*PQ**6-4*PQ**4*PH**2+8*PQ**4*(-2*X1+2*X2-2*X3-4*
28750      &  X4-8*X10+X9+X8-2*X7-4*X6+2*X5)-(4*PQ**2*PH**2)*(X1+X4+X10
28751      &  +X6)+8*PQ**2*(-2*X1*X2-2*X1*X10+X1*X9+X1*X8-2*X1*X5+X2**2
28752      &  -4*X2*X4-5*X2*X10+X2*X8-X2*X7-3*X2*X6+X2*X5+X3*X9+2*X3*X7
28753      &  -X3*X5+X4*X8+2*X4*X6-3*X4*X5-5*X10*X5+X9*X8+X9*X6+X9*X5+
28754      &  X8*X7-4*X6*X5+X5**2)-(16*X2*X5)*(X1+X4+X10+X6)
28755         FM(1,4)=16*PQ**6+4*PQ**4*PH**2+16*PQ**4*(-X1+X2-X3-X4+X10-
28756      &  X9-X8+2*X7+2*X6-X5)+4*PQ**2*PH**2*(X1+X3+X4+X10+2*X7+2*X6
28757      &  )+8*PQ**2*(4*X1*X10+4*X1*X7+4*X1*X6+2*X2*X10-X2*X9-X2*X8+
28758      &  4*X2*X7+4*X2*X6-X2*X5+4*X10*X5+4*X7*X5+4*X6*X5)-(8*PH**2*
28759      &  X1)*(X10+X7+X6)+16*X2*X5*(X10+X7+X6)
28760         FM(1,5)=8*PQ**4*(-2*X1-2*X4+X10-X9)+4*PQ**2*(4*X1**2-2*X1*
28761      &  X2+8*X1*X3+6*X1*X10-2*X1*X9+4*X1*X8+4*X1*X7+4*X1*X6+2*X1*
28762      &  X5+X2*X10+4*X3*X4-X3*X9+2*X3*X7+3*X4*X8-2*X4*X6+2*X4*X5-4
28763      &  *X10*X7+3*X10*X5-3*X9*X6+3*X8*X7-4*X7**2+4*X7*X5)+8*(X1**
28764      &  2*X9-X1**2*X8-X1*X2*X7+X1*X2*X6+X1*X3*X9+X1*X3*X5-X1*X4*
28765      &  X8-X1*X4*X5+X1*X10*X9+X1*X9*X7+X1*X9*X6-X1*X8*X7-X2*X3*X7
28766      &  +X2*X4*X6-X2*X10*X7-X2*X7**2+X3*X7*X5-X4*X10*X5-X4*X7*X5-
28767      &  X4*X6*X5)
28768         FM(1,6)=16*PQ**4*(-4*X1-X4+X9-X7)+4*PQ**2*PH**2*(-2*X1-X4-
28769      &  X7)+16*PQ**2*(-2*X1**2-3*X1*X2-2*X1*X4-3*X1*X9-2*X1*X7-3*
28770      &  X1*X5-2*X2*X4-2*X7*X5)-8*PH**2*X4*X7+8*(-X1*X2*X9-2*X1*X2
28771      &  *X5-X1*X9**2-X1*X9*X5+X2**2*X7-X2*X4*X5+X2*X9*X7-X2*X7*X5
28772      &  +X4*X9*X5+X4*X5**2)
28773         FM(1,7)=8*PQ**4*(2*X3+X4+3*X10+X9+2*X8+3*X7+6*X6)+2*PQ**2*
28774      &  PH**2*(-2*X3-X4+3*X10+3*X7+6*X6)+4*PQ**2*(4*X1*X10+4*X1*
28775      &  X7+8*X1*X6+6*X2*X10+X2*X9+2*X2*X8+6*X2*X7+12*X2*X6-8*X3*
28776      &  X7+4*X4*X7+4*X4*X6+4*X10*X5+4*X9*X7+4*X9*X6-8*X8*X7+4*X7*
28777      &  X5+8*X6*X5)+4*PH**2*(-X1*X10-X1*X7-2*X1*X6+2*X3*X7-X4*X7-
28778      &  X4*X6)+8*X2*(X10*X5+X9*X7+X9*X6-2*X8*X7+X7*X5+2*X6*X5)
28779         FM(1,8)=8*PQ**4*(2*X3+X4+3*X10+2*X9+X8+3*X7+6*X6)+2*PQ**2*
28780      &  PH**2*(-2*X3-X4+2*X10+X7+2*X6)+4*PQ**2*(4*X1*X10-2*X1*X9+
28781      &  2*X1*X8+4*X1*X7+8*X1*X6+5*X2*X10+2*X2*X9+X2*X8+4*X2*X7+8*
28782      &  X2*X6-X3*X9-8*X3*X7+2*X3*X5+2*X4*X9-X4*X8+4*X4*X7+4*X4*X6
28783      &  +4*X4*X5+5*X10*X5+X9**2-X9*X8+2*X9*X7+5*X9*X6+X9*X5-7*X8*
28784      &  X7+2*X8*X5+2*X7*X5+10*X6*X5)+2*PH**2*(-X1*X10+X3*X7-2*X4*
28785      &  X7+X4*X6)+4*(-X1*X9**2+X1*X9*X8-2*X1*X9*X5-X1*X8*X5+2*X2*
28786      &  X10*X5+X2*X9*X7+X2*X9*X6-2*X2*X8*X7+3*X2*X6*X5+X3*X9*X5+
28787      &  X3*X5**2+X4*X9*X5-2*X4*X8*X5+2*X4*X5**2)
28788         FM(2,2)=16*PQ**6+16*PQ**4*(-X1+X3-X4-X10+X7-X6)+16*PQ**2*(
28789      &  X3*X10+X3*X7+X3*X6+X4*X7+X10*X7)-16*X3*X10*X7
28790         FM(2,3)=16*PQ**6+8*PQ**4*(-2*X1+X2+2*X3-4*X4-4*X10-X9+X8-2
28791      &  *X7-2*X6+X5)+8*PQ**2*(-2*X1*X5+4*X3*X10-X3*X9-X3*X8-2*X3*
28792      &  X7+2*X3*X6+X3*X5-2*X4*X5-2*X10*X5-2*X6*X5)+16*X3*X5*(X10+
28793      &  X6)
28794         FM(2,4)=8*PQ**4*(-2*X1-2*X3+X10-X8)+4*PQ**2*(4*X1**2-2*X1*
28795      &  X2+8*X1*X4+6*X1*X10+4*X1*X9-2*X1*X8+4*X1*X7+4*X1*X6+2*X1*
28796      &  X5+X2*X10+4*X3*X4+3*X3*X9-2*X3*X7+2*X3*X5-X4*X8+2*X4*X6-4
28797      &  *X10*X6+3*X10*X5+3*X9*X6-3*X8*X7-4*X6**2+4*X6*X5)+8*(-X1
28798      &  **2*X9+X1**2*X8+X1*X2*X7-X1*X2*X6-X1*X3*X9-X1*X3*X5+X1*X4
28799      &  *X8+X1*X4*X5+X1*X10*X8-X1*X9*X6+X1*X8*X7+X1*X8*X6+X2*X3*
28800      &  X7-X2*X4*X6-X2*X10*X6-X2*X6**2-X3*X10*X5-X3*X7*X5-X3*X6*
28801      &  X5+X4*X6*X5)
28802         FM(2,5)=16*PQ**4*X10+8*PQ**2*(2*X1**2+2*X1*X3+2*X1*X4+2*X1
28803      &  *X10+2*X1*X7+2*X1*X6+X3*X7+X4*X6)+8*(-2*X1**3-2*X1**2*X3-
28804      &  2*X1**2*X4-2*X1**2*X10-2*X1**2*X7-2*X1**2*X6-2*X1*X3*X4-
28805      &  X1*X3*X10-2*X1*X3*X6-X1*X4*X10-2*X1*X4*X7-X1*X10**2-X1*
28806      &  X10*X7-X1*X10*X6-2*X1*X7*X6+X3**2*X7-X3*X4*X7-X3*X4*X6+X3
28807      &  *X10*X7+X3*X7**2-X3*X7*X6+X4**2*X6+X4*X10*X6-X4*X7*X6+X4*
28808      &  X6**2)
28809         FM(2,6)=8*PQ**4*(-2*X1+X10-X9-2*X7)+4*PQ**2*(4*X1**2+2*X1*
28810      &  X2+4*X1*X3+4*X1*X4+6*X1*X10-2*X1*X9+4*X1*X8+8*X1*X6-2*X1*
28811      &  X5+4*X2*X4+3*X2*X10+2*X2*X7-3*X3*X9-2*X3*X7-4*X4**2-4*X4*
28812      &  X10+3*X4*X8+2*X4*X6+X10*X5-X9*X6+3*X8*X7+4*X7*X6)+8*(X1**
28813      &  2*X9-X1**2*X8-X1*X2*X7+X1*X2*X6+X1*X3*X9+X1*X3*X5+X1*X4*
28814      &  X9-X1*X4*X8-X1*X4*X5+X1*X10*X9+X1*X9*X6-X1*X8*X7-X2*X3*X7
28815      &  -X2*X4*X7+X2*X4*X6-X2*X10*X7+X3*X7*X5-X4**2*X5-X4*X10*X5-
28816      &  X4*X6*X5)
28817         FM(2,7)=8*PQ**4*(X3+2*X4+3*X10+X7+2*X6)+4*PQ**2*(-4*X1*X3-
28818      &  2*X1*X4-2*X1*X10+X1*X9-X1*X8-4*X1*X7-2*X1*X6+X2*X3+2*X2*
28819      &  X4+3*X2*X10+X2*X7+2*X2*X6-6*X3*X4-6*X3*X10-2*X3*X9-2*X3*
28820      &  X7-4*X3*X6-X3*X5-6*X4**2-6*X4*X10-3*X4*X9-X4*X8-4*X4*X7-2
28821      &  *X4*X6-2*X4*X5-3*X10*X9-3*X10*X8-6*X10*X7-6*X10*X6+X10*X5
28822      &  +X9*X7-2*X8*X7-2*X8*X6-6*X7*X6+X7*X5-6*X6**2+2*X6*X5)+4*(
28823      &  -X1**2*X9+X1**2*X8-2*X1*X2*X10-3*X1*X2*X7-3*X1*X2*X6+X1*
28824      &  X3*X9-X1*X3*X5+X1*X4*X9+X1*X4*X8+X1*X4*X5+X1*X10*X9+X1*
28825      &  X10*X8-X1*X9*X6+X1*X8*X6+X2*X3*X7-3*X2*X4*X7-X2*X4*X6-3*
28826      &  X2*X10*X7-3*X2*X10*X6-3*X2*X7*X6-3*X2*X6**2-2*X3*X4*X5-X3
28827      &  *X10*X5-X3*X6*X5-X4**2*X5-X4*X10*X5+X4*X6*X5)
28828         FM(2,8)=8*PQ**4*(X3+2*X4+3*X10+X7+2*X6)+4*PQ**2*(-4*X1*X3-
28829      &  2*X1*X4-2*X1*X10-X1*X9+X1*X8-4*X1*X7-2*X1*X6+X2*X3+2*X2*
28830      &  X4+X2*X10-X2*X7-2*X2*X6-6*X3*X4-6*X3*X10-2*X3*X9+X3*X8-2*
28831      &  X3*X7-4*X3*X6+X3*X5-6*X4**2-6*X4*X10-2*X4*X9-4*X4*X7-2*X4
28832      &  *X6+2*X4*X5-3*X10*X9-3*X10*X8-6*X10*X7-6*X10*X6+3*X10*X5-
28833      &  X9*X6-2*X8*X7-3*X8*X6-6*X7*X6+X7*X5-6*X6**2+2*X6*X5)+4*(
28834      &  X1**2*X9-X1**2*X8-X1*X2*X7+X1*X2*X6-3*X1*X3*X5+X1*X4*X9-
28835      &  X1*X4*X8-3*X1*X4*X5+X1*X10*X9+X1*X10*X8-2*X1*X10*X5+X1*X9
28836      &  *X6+X1*X8*X7+X1*X8*X6-X2*X4*X7+X2*X4*X6-X2*X10*X7-X2*X10*
28837      &  X6-2*X2*X7*X6-X2*X6**2-3*X3*X4*X5-3*X3*X10*X5+X3*X7*X5-3*
28838      &  X3*X6*X5-3*X4**2*X5-3*X4*X10*X5-X4*X6*X5)
28839         FM(3,3)=64*PQ**6+16*PQ**4*PH**2+32*PQ**4*(X1+X2+2*X3+X8+X6
28840      &  +2*X5)+8*PQ**2*PH**2*(-X1+2*X3-X6)+16*PQ**2*(X2*X5-2*X3*
28841      &  X8-2*X3*X6+4*X3*X5+X8*X5)+8*PH**2*X3*X6-16*X3*X8*X5
28842         FM(3,4)=16*PQ**4*(-4*X1-X3+X8-X6)+4*PQ**2*PH**2*(-2*X1-X3-
28843      &  X6)+16*PQ**2*(-2*X1**2-3*X1*X2-2*X1*X3-3*X1*X8-2*X1*X6-3*
28844      &  X1*X5-2*X2*X3-2*X6*X5)-8*PH**2*X3*X6+8*(-X1*X2*X8-2*X1*X2
28845      &  *X5-X1*X8**2-X1*X8*X5+X2**2*X6-X2*X3*X5+X2*X8*X6-X2*X6*X5
28846      &  +X3*X8*X5+X3*X5**2)
28847         FM(3,5)=8*PQ**4*(-2*X1+X10-X8-2*X6)+4*PQ**2*(4*X1**2+2*X1*
28848      &  X2+4*X1*X3+4*X1*X4+6*X1*X10+4*X1*X9-2*X1*X8+8*X1*X7-2*X1*
28849      &  X5+4*X2*X3+3*X2*X10+2*X2*X6-4*X3**2-4*X3*X10+3*X3*X9+2*X3
28850      &  *X7-3*X4*X8-2*X4*X6+X10*X5+3*X9*X6-X8*X7+4*X7*X6)+8*(-X1
28851      &  **2*X9+X1**2*X8+X1*X2*X7-X1*X2*X6-X1*X3*X9+X1*X3*X8-X1*X3
28852      &  *X5+X1*X4*X8+X1*X4*X5+X1*X10*X8-X1*X9*X6+X1*X8*X7+X2*X3*
28853      &  X7-X2*X3*X6-X2*X4*X6-X2*X10*X6-X3**2*X5-X3*X10*X5-X3*X7*
28854      &  X5+X4*X6*X5)
28855         FM(3,6)=16*PQ**6+4*PQ**4*PH**2+16*PQ**4*(-X1-X2+2*X3+2*X4+
28856      &  X10-X9-X8-X7-X6+X5)+4*PQ**2*PH**2*(X1+2*X3+2*X4+X10+X7+X6
28857      &  )+8*PQ**2*(4*X1*X3+4*X1*X4+4*X1*X10+4*X2*X3+4*X2*X4+4*X2*
28858      &  X10-X2*X5+4*X3*X5+4*X4*X5+2*X10*X5-X9*X5-X8*X5)-(8*PH**2*
28859      &  X1)*(X3+X4+X10)+16*X2*X5*(X3+X4+X10)
28860         FM(3,7)=8*PQ**4*(3*X3+6*X4+3*X10+X9+2*X8+2*X7+X6)+2*PQ**2*
28861      &  PH**2*(X3+2*X4+2*X10-2*X7-X6)+4*PQ**2*(4*X1*X3+8*X1*X4+4*
28862      &  X1*X10+2*X1*X9-2*X1*X8+2*X2*X3+10*X2*X4+5*X2*X10+2*X2*X9+
28863      &  X2*X8+2*X2*X7+4*X2*X6-7*X3*X9+2*X3*X8-8*X3*X7+4*X3*X6+4*
28864      &  X3*X5+5*X4*X8+4*X4*X6+8*X4*X5+5*X10*X5-X9*X8-X9*X6+X9*X5+
28865      &  X8**2-X8*X7+2*X8*X6+2*X8*X5)+2*PH**2*(-X1*X10+X3*X7-2*X3*
28866      &  X6+X4*X6)+4*(-X1*X2*X9-2*X1*X2*X8+X1*X9*X8-X1*X8**2+X2**2
28867      &  *X7+2*X2**2*X6+3*X2*X4*X5+2*X2*X10*X5-2*X2*X9*X6+X2*X8*X7
28868      &  +X2*X8*X6-2*X3*X9*X5+X3*X8*X5+X4*X8*X5)
28869         FM(3,8)=8*PQ**4*(3*X3+6*X4+3*X10+2*X9+X8+2*X7+X6)+2*PQ**2*
28870      &  PH**2*(3*X3+6*X4+3*X10-2*X7-X6)+4*PQ**2*(4*X1*X3+8*X1*X4+
28871      &  4*X1*X10+4*X2*X3+8*X2*X4+4*X2*X10-8*X3*X9+4*X3*X8-8*X3*X7
28872      &  +4*X3*X6+6*X3*X5+4*X4*X8+4*X4*X6+12*X4*X5+6*X10*X5+2*X9*
28873      &  X5+X8*X5)+4*PH**2*(-X1*X3-2*X1*X4-X1*X10+2*X3*X7-X3*X6-X4
28874      &  *X6)+8*X5*(X2*X3+2*X2*X4+X2*X10-2*X3*X9+X3*X8+X4*X8)
28875         FM(4,4)=64*PQ**6+16*PQ**4*PH**2+32*PQ**4*(X1+2*X2+X3+X8+2*
28876      &  X6+X5)+8*PQ**2*PH**2*(-X1-X3+2*X6)+16*PQ**2*(X2*X8+4*X2*
28877      &  X6+X2*X5-2*X3*X6-2*X8*X6)+8*PH**2*X3*X6-16*X2*X8*X6
28878         FM(4,5)=16*PQ**6+8*PQ**4*(-2*X1+X2-2*X3-2*X4-4*X10-X9+X8-4
28879      &  *X7+2*X6+X5)+8*PQ**2*(-2*X1*X2-2*X2*X3-2*X2*X10-2*X2*X7+
28880      &  X2*X6+2*X3*X6-2*X4*X6+4*X10*X6-X9*X6-X8*X6)+16*X2*X6*(X3+
28881      &  X10)
28882         FM(4,6)=16*PQ**6-4*PQ**4*PH**2+8*PQ**4*(-2*X1+2*X2-4*X3-2*
28883      &  X4-8*X10+X9+X8-4*X7-2*X6+2*X5)-(4*PQ**2*PH**2)*(X1+X3+X10
28884      &  +X7)+8*PQ**2*(-2*X1*X2-2*X1*X10+X1*X9+X1*X8-2*X1*X5+X2**2
28885      &  -4*X2*X3-5*X2*X10+X2*X9-3*X2*X7-X2*X6+X2*X5+X3*X9+2*X3*X7
28886      &  -3*X3*X5+X4*X8+2*X4*X6-X4*X5-5*X10*X5+X9*X8+X9*X6+X8*X7+
28887      &  X8*X5-4*X7*X5+X5**2)-(16*X2*X5)*(X1+X3+X10+X7)
28888         FM(4,7)=8*PQ**4*(-X3-2*X4-3*X10-2*X9-X8-6*X7-3*X6)+2*PQ**2
28889      &  *PH**2*(X3+2*X4-3*X10-6*X7-3*X6)+4*PQ**2*(-4*X1*X10-8*X1*
28890      &  X7-4*X1*X6-6*X2*X10-2*X2*X9-X2*X8-12*X2*X7-6*X2*X6-4*X3*
28891      &  X7-4*X3*X6+8*X4*X6-4*X10*X5+8*X9*X6-4*X8*X7-4*X8*X6-8*X7*
28892      &  X5-4*X6*X5)+4*PH**2*(X1*X10+2*X1*X7+X1*X6+X3*X7+X3*X6-2*
28893      &  X4*X6)+8*X2*(-X10*X5+2*X9*X6-X8*X7-X8*X6-2*X7*X5-X6*X5)
28894         FM(4,8)=8*PQ**4*(-X3-2*X4-3*X10-X9-2*X8-6*X7-3*X6)+2*PQ**2
28895      &  *PH**2*(X3+2*X4-2*X10-2*X7-X6)+4*PQ**2*(-4*X1*X10-2*X1*X9
28896      &  +2*X1*X8-8*X1*X7-4*X1*X6-5*X2*X10-X2*X9-2*X2*X8-8*X2*X7-4
28897      &  *X2*X6+X3*X9-2*X3*X8-4*X3*X7-4*X3*X6-4*X3*X5+X4*X8+8*X4*
28898      &  X6-2*X4*X5-5*X10*X5+X9*X8+7*X9*X6-2*X9*X5-X8**2-5*X8*X7-2
28899      &  *X8*X6-X8*X5-10*X7*X5-2*X6*X5)+2*PH**2*(X1*X10-X3*X7+2*X3
28900      &  *X6-X4*X6)+4*(-X1*X9*X8+X1*X9*X5+X1*X8**2+2*X1*X8*X5-2*X2
28901      &  *X10*X5+2*X2*X9*X6-X2*X8*X7-X2*X8*X6-3*X2*X7*X5+2*X3*X9*
28902      &  X5-X3*X8*X5-2*X3*X5**2-X4*X8*X5-X4*X5**2)
28903         FM(5,5)=16*PQ**6+16*PQ**4*(-X1-X3+X4-X10-X7+X6)+16*PQ**2*(
28904      &  X3*X6+X4*X10+X4*X7+X4*X6+X10*X6)-16*X4*X10*X6
28905         FM(5,6)=16*PQ**6+8*PQ**4*(-2*X1+X2-4*X3+2*X4-4*X10+X9-X8-2
28906      &  *X7-2*X6+X5)+8*PQ**2*(-2*X1*X5-2*X3*X5+4*X4*X10-X4*X9-X4*
28907      &  X8+2*X4*X7-2*X4*X6+X4*X5-2*X10*X5-2*X7*X5)+16*X4*X5*(X10+
28908      &  X7)
28909         FM(5,7)=8*PQ**4*(-2*X3-X4-3*X10-2*X7-X6)+4*PQ**2*(2*X1*X3+
28910      &  4*X1*X4+2*X1*X10+X1*X9-X1*X8+2*X1*X7+4*X1*X6-2*X2*X3-X2*
28911      &  X4-3*X2*X10-2*X2*X7-X2*X6+6*X3**2+6*X3*X4+6*X3*X10+X3*X9+
28912      &  3*X3*X8+2*X3*X7+4*X3*X6+2*X3*X5+6*X4*X10+2*X4*X8+4*X4*X7+
28913      &  2*X4*X6+X4*X5+3*X10*X9+3*X10*X8+6*X10*X7+6*X10*X6-X10*X5+
28914      &  2*X9*X7+2*X9*X6-X8*X6+6*X7**2+6*X7*X6-2*X7*X5-X6*X5)+4*(-
28915      &  X1**2*X9+X1**2*X8+2*X1*X2*X10+3*X1*X2*X7+3*X1*X2*X6-X1*X3
28916      &  *X9-X1*X3*X8-X1*X3*X5-X1*X4*X8+X1*X4*X5-X1*X10*X9-X1*X10*
28917      &  X8-X1*X9*X7+X1*X8*X7+X2*X3*X7+3*X2*X3*X6-X2*X4*X6+3*X2*
28918      &  X10*X7+3*X2*X10*X6+3*X2*X7**2+3*X2*X7*X6+X3**2*X5+2*X3*X4
28919      &  *X5+X3*X10*X5-X3*X7*X5+X4*X10*X5+X4*X7*X5)
28920         FM(5,8)=8*PQ**4*(-2*X3-X4-3*X10-2*X7-X6)+4*PQ**2*(2*X1*X3+
28921      &  4*X1*X4+2*X1*X10-X1*X9+X1*X8+2*X1*X7+4*X1*X6-2*X2*X3-X2*
28922      &  X4-X2*X10+2*X2*X7+X2*X6+6*X3**2+6*X3*X4+6*X3*X10+2*X3*X8+
28923      &  2*X3*X7+4*X3*X6-2*X3*X5+6*X4*X10-X4*X9+2*X4*X8+4*X4*X7+2*
28924      &  X4*X6-X4*X5+3*X10*X9+3*X10*X8+6*X10*X7+6*X10*X6-3*X10*X5+
28925      &  3*X9*X7+2*X9*X6+X8*X7+6*X7**2+6*X7*X6-2*X7*X5-X6*X5)+4*(
28926      &  X1**2*X9-X1**2*X8-X1*X2*X7+X1*X2*X6+X1*X3*X9-X1*X3*X8+3*
28927      &  X1*X3*X5+3*X1*X4*X5-X1*X10*X9-X1*X10*X8+2*X1*X10*X5-X1*X9
28928      &  *X7-X1*X9*X6-X1*X8*X7-X2*X3*X7+X2*X3*X6+X2*X10*X7+X2*X10*
28929      &  X6+X2*X7**2+2*X2*X7*X6+3*X3**2*X5+3*X3*X4*X5+3*X3*X10*X5+
28930      &  X3*X7*X5+3*X4*X10*X5+3*X4*X7*X5-X4*X6*X5)
28931         FM(6,6)=64*PQ**6+16*PQ**4*PH**2+32*PQ**4*(X1+X2+2*X4+X9+X7
28932      &  +2*X5)+8*PQ**2*PH**2*(-X1+2*X4-X7)+16*PQ**2*(X2*X5-2*X4*
28933      &  X9-2*X4*X7+4*X4*X5+X9*X5)+8*PH**2*X4*X7-16*X4*X9*X5
28934         FM(6,7)=8*PQ**4*(-6*X3-3*X4-3*X10-2*X9-X8-X7-2*X6)+2*PQ**2
28935      &  *PH**2*(-2*X3-X4-2*X10+X7+2*X6)+4*PQ**2*(-8*X1*X3-4*X1*X4
28936      &  -4*X1*X10+2*X1*X9-2*X1*X8-10*X2*X3-2*X2*X4-5*X2*X10-X2*X9
28937      &  -2*X2*X8-4*X2*X7-2*X2*X6-5*X3*X9-4*X3*X7-8*X3*X5-2*X4*X9+
28938      &  7*X4*X8-4*X4*X7+8*X4*X6-4*X4*X5-5*X10*X5-X9**2+X9*X8-2*X9
28939      &  *X7+X9*X6-2*X9*X5+X8*X7-X8*X5)+2*PH**2*(X1*X10-X3*X7+2*X4
28940      &  *X7-X4*X6)+4*(2*X1*X2*X9+X1*X2*X8+X1*X9**2-X1*X9*X8-2*X2
28941      &  **2*X7-X2**2*X6-3*X2*X3*X5-2*X2*X10*X5-X2*X9*X7-X2*X9*X6+
28942      &  2*X2*X8*X7-X3*X9*X5-X4*X9*X5+2*X4*X8*X5)
28943         FM(6,8)=8*PQ**4*(-6*X3-3*X4-3*X10-X9-2*X8-X7-2*X6)+2*PQ**2
28944      &  *PH**2*(-6*X3-3*X4-3*X10+X7+2*X6)+4*PQ**2*(-8*X1*X3-4*X1*
28945      &  X4-4*X1*X10-8*X2*X3-4*X2*X4-4*X2*X10-4*X3*X9-4*X3*X7-12*
28946      &  X3*X5-4*X4*X9+8*X4*X8-4*X4*X7+8*X4*X6-6*X4*X5-6*X10*X5-X9
28947      &  *X5-2*X8*X5)+4*PH**2*(2*X1*X3+X1*X4+X1*X10+X3*X7+X4*X7-2*
28948      &  X4*X6)+8*X5*(-2*X2*X3-X2*X4-X2*X10-X3*X9-X4*X9+2*X4*X8)
28949         FM(7,7)=72*PQ**4*X10+18*PQ**2*PH**2*X10+8*PQ**2*(X1*X10+9*
28950      &  X2*X10+7*X3*X7+2*X3*X6+2*X4*X7+7*X4*X6+X10*X5+2*X9*X7+7*
28951      &  X9*X6+7*X8*X7+2*X8*X6)+2*PH**2*(-X1*X10-7*X3*X7-2*X3*X6-2
28952      &  *X4*X7-7*X4*X6)+4*X2*(X10*X5+2*X9*X7+7*X9*X6+7*X8*X7+2*X8
28953      &  *X6)
28954         FM(7,8)=72*PQ**4*X10+2*PQ**2*PH**2*X10+4*PQ**2*(2*X1*X10+
28955      &  10*X2*X10+7*X3*X9+2*X3*X8+14*X3*X7+4*X3*X6+2*X4*X9+7*X4*
28956      &  X8+4*X4*X7+14*X4*X6+10*X10*X5+X9**2+7*X9*X8+2*X9*X7+7*X9*
28957      &  X6+X8**2+7*X8*X7+2*X8*X6)+2*PH**2*(7*X1*X10-7*X3*X7-2*X3*
28958      &  X6-2*X4*X7-7*X4*X6)+2*(-2*X1*X9**2-14*X1*X9*X8-2*X1*X8**2
28959      &  +2*X2*X10*X5+2*X2*X9*X7+7*X2*X9*X6+7*X2*X8*X7+2*X2*X8*X6+
28960      &  7*X3*X9*X5+2*X3*X8*X5+2*X4*X9*X5+7*X4*X8*X5)
28961         FM(8,8)=72*PQ**4*X10+18*PQ**2*PH**2*X10+8*PQ**2*(X1*X10+X2
28962      &  *X10+7*X3*X9+2*X3*X8+7*X3*X7+2*X3*X6+2*X4*X9+7*X4*X8+2*X4
28963      &  *X7+7*X4*X6+9*X10*X5)+2*PH**2*(-X1*X10-7*X3*X7-2*X3*X6-2*
28964      &  X4*X7-7*X4*X6)+4*X5*(X2*X10+7*X3*X9+2*X3*X8+2*X4*X9+7*X4*
28965      &  X8)
28966         FM(9,9)=-4*PQ**4*X10-PQ**2*PH**2*X10+4*PQ**2*(-X1*X10-X2*X10+
28967      &  X3*X7+X4*X6-X10*X5+X9*X6+X8*X7)+PH**2*(X1*X10-X3*X7-X4*X6
28968      &  )+2*X2*(-X10*X5+X9*X6+X8*X7)
28969         FM(9,10)=-4*PQ**4*X10-PQ**2*PH**2*X10+2*PQ**2*(-2*X1*X10-2*X2*
28970      &  X10+2*X3*X9+2*X3*X7+2*X4*X6-2*X10*X5+X9*X8+2*X8*X7)+PH**2
28971      &  *(X1*X10-X3*X7-X4*X6)+2*(-X1*X9*X8-X2*X10*X5+X2*X8*X7+X3*
28972      &  X9*X5)
28973         FMXX=-4*PQ**4*X10-PQ**2*PH**2*X10+2*PQ**2*(-2*X1*X10-2*X2*
28974      &  X10+2*X4*X8+2*X4*X6+2*X3*X7-2*X10*X5+X9*X8+2*X9*X6)+PH**2
28975      &  *(X1*X10-X3*X7-X4*X6)+2*(-X1*X9*X8-X2*X10*X5+X2*X9*X6+X4*
28976      &  X8*X5)
28977         FM(9,10)=0.5D0*(FMXX+FM(9,10))
28978         FM(10,10)=-4*PQ**4*X10-PQ**2*PH**2*X10+4*PQ**2*(-X1*X10-X2*X10+
28979      &  X3*X7+X4*X6-X10*X5+X9*X3+X8*X4)+PH**2*(X1*X10-X3*X7-X4*X6
28980      &  )+2*X5*(-X10*X2+X9*X3+X8*X4)
28981  
28982 C...Repackage matrix elements.
28983         DO 200 I=1,8
28984           DO 190 J=1,8
28985             RM(I,J)=FM(I,J)
28986   190     CONTINUE
28987   200   CONTINUE
28988         RM(7,7)=FM(7,7)-2D0*FM(9,9)
28989         RM(7,8)=FM(7,8)-2D0*FM(9,10)
28990         RM(8,8)=FM(8,8)-2D0*FM(10,10)
28991  
28992 C...Produce final result: matrix elements * colours * propagators.
28993         DO 220 I=1,8
28994           DO 210 J=I,8
28995             FAC=8D0
28996             IF(I.EQ.J)FAC=4D0
28997             WTQQBH=WTQQBH+RM(I,J)*FAC*CLR(I,J)/(DX(I)*DX(J))
28998   210     CONTINUE
28999   220   CONTINUE
29000         WTQQBH=-WTQQBH/256D0
29001  
29002       ELSE
29003 C...Evaluate matrix elements for q + qbar -> Q + Qbar + H.
29004         A11=-8D0*PQ**4*X10-2D0*PQ**2*PH**2*X10-(8D0*PQ**2)*(X2*X10+X3
29005      &  *X7+X4*X6+X9*X6+X8*X7)+2D0*PH**2*(X3*X7+X4*X6)-(4D0*X2)*(X9
29006      &  *X6+X8*X7)
29007         A12=-8D0*PQ**4*X10+4D0*PQ**2*(-X2*X10-X3*X9-2D0*X3*X7-X4*X8-
29008      &  2D0*X4*X6-X10*X5-X9*X8-X9*X6-X8*X7)+2D0*PH**2*(-X1*X10+X3*X7
29009      &  +X4*X6)+2D0*(2D0*X1*X9*X8-X2*X9*X6-X2*X8*X7-X3*X9*X5-X4*X8*
29010      &  X5)
29011         A22=-8D0*PQ**4*X10-2D0*PQ**2*PH**2*X10-(8D0*PQ**2)*(X3*X9+X3*
29012      &  X7+X4*X8+X4*X6+X10*X5)+2D0*PH**2*(X3*X7+X4*X6)-(4D0*X5)*(X3
29013      &  *X9+X4*X8)
29014  
29015 C...Produce final result: matrix elements * propagators.
29016         A11=A11/DX(7)**2
29017         A12=A12/(DX(7)*DX(8))
29018         A22=A22/DX(8)**2
29019         WTQQBH=-(A11+A22+2D0*A12)/8D0
29020       ENDIF
29021  
29022       RETURN
29023       END
29024  
29025 C*********************************************************************
29026  
29027 C...PYMSIN
29028 C...Initializes supersymmetry: finds sparticle masses and
29029 C...branching ratios and stores this information.
29030 C...AUTHOR: STEPHEN MRENNA
29031  
29032       SUBROUTINE PYMSIN
29033  
29034 C...Double precision and integer declarations.
29035       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
29036       IMPLICIT INTEGER(I-N)
29037       INTEGER PYK,PYCHGE,PYCOMP
29038 C...Parameter statement to help give large particle numbers.
29039       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
29040 C...Commonblocks.
29041       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
29042       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
29043       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
29044       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
29045       COMMON/PYINT4/MWID(500),WIDS(500,5)
29046       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
29047       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
29048      &SFMIX(16,4)
29049       COMMON/PYHTRI/HHH(7)
29050       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYPARS/,/PYINT4/,/PYMSSM/,
29051      &/PYSSMT/
29052  
29053 C...Local variables.
29054       INTEGER NSTR
29055       DOUBLE PRECISION ALFA,BETA
29056       DOUBLE PRECISION TANB,AL,BE,COSA,COSB,SINA,SINB,XW,AEM,FACT
29057       DOUBLE PRECISION PYALEM
29058       INTEGER I,J,J1,J2,I1,I2,I3,IKNT,K1
29059       INTEGER KC,LKNT,IDLAM(200,3),IDLAM0(100,3),LKNT0
29060       DOUBLE PRECISION XLAM(0:200),XLAM0(0:200),XALL
29061       DOUBLE PRECISION WDTP(0:200),WDTE(0:200,0:5)
29062  1    DOUBLE PRECISION ATERM,TAN2T,THETA,DENOM
29063       DOUBLE PRECISION XARG,COS2B,XMW2,XMZ2
29064       DOUBLE PRECISION COSW,SINW,WDMIN,WDMAX
29065       DOUBLE PRECISION DELM,XMDIF,BRLIM
29066       DOUBLE PRECISION DX,DY,DS,DMU2,DMA2,DQ2,DU2,DD2,DL2,DE2,DHU2,DHD2
29067       DOUBLE PRECISION ARG,SGNMU,R,GAM
29068       INTEGER IS1,IS2,IS3,IS4,JS1,JS2,JS3,JS4,KS1,KS2,KS3,KS4
29069       INTEGER IMSSM,KFHIGG
29070       INTEGER IRPRTY
29071       INTEGER KFSUSY(36),MWIDSU(36),MDCYSU(36)
29072       SAVE INIT,MWIDSU,MDCYSU
29073       DATA KFSUSY/
29074      &1000001,2000001,1000002,2000002,1000003,2000003,
29075      &1000004,2000004,1000005,2000005,1000006,2000006,
29076      &1000011,2000011,1000012,2000012,1000013,2000013,
29077      &1000014,2000014,1000015,2000015,1000016,2000016,
29078      &1000021,1000022,1000023,1000025,1000035,1000024,
29079      &1000037,1000039,     25,     35,     36,     37/
29080       DATA INIT/0/
29081
29082 C...Do nothing if SUSY not requested.
29083       IMSSM=IMSS(1)
29084       IF(IMSSM.EQ.0) RETURN
29085
29086 C...Save copy of MWID(KC) and MDCY(KC,1) values before 
29087 C...they are set to zero for the LSP.
29088       IF(INIT.EQ.0) THEN
29089         INIT=1
29090         DO 105 I=1,36
29091           KF=KFSUSY(I)
29092           KC=PYCOMP(KF)
29093           MWIDSU(I)=MWID(KC)
29094           MDCYSU(I)=MDCY(KC,1)
29095   105   CONTINUE
29096       ENDIF
29097   
29098 C...Restore MWID(KC) and MDCY(KC,1) values previously zeroed for LSP.
29099       DO 107 I=1,36
29100         KF=KFSUSY(I)
29101         KC=PYCOMP(KF)
29102         IF(MDCY(KC,1).EQ.0.AND.MDCYSU(I).NE.0) THEN
29103           MWID(KC)=MWIDSU(I)
29104           MDCY(KC,1)=MDCYSU(I)
29105         ENDIF
29106   107 CONTINUE
29107
29108 C...First part of routine: set masses and couplings.
29109  
29110 C...Reset mixing values in sfermion sector to pure left/right.
29111       DO 100 I=1,16
29112         SFMIX(I,1)=1D0
29113         SFMIX(I,4)=1D0
29114         SFMIX(I,2)=0D0
29115         SFMIX(I,3)=0D0
29116   100 CONTINUE
29117  
29118 C...Common couplings.
29119       TANB=RMSS(5)
29120       BETA=ATAN(TANB)
29121       COSB=COS(BETA)
29122       SINB=TANB*COSB
29123       COS2B=COS(2D0*BETA)
29124       ALFA=RMSS(18)
29125       XMW2=PMAS(24,1)**2
29126       XMZ2=PMAS(23,1)**2
29127       XW=PARU(102)
29128  
29129 C...Define sparticle masses for a general MSSM simulation.
29130       IF(IMSSM.EQ.1) THEN
29131         IF(IMSS(9).EQ.0) RMSS(22)=RMSS(9)
29132         DO 110 I=1,5,2
29133           KC=PYCOMP(KSUSY1+I)
29134           PMAS(KC,1)=SQRT(RMSS(8)**2-(2D0*XMW2+XMZ2)*COS2B/6D0)
29135           KC=PYCOMP(KSUSY2+I)
29136           PMAS(KC,1)=SQRT(RMSS(9)**2+(XMW2-XMZ2)*COS2B/3D0)
29137           KC=PYCOMP(KSUSY1+I+1)
29138           PMAS(KC,1)=SQRT(RMSS(8)**2+(4D0*XMW2-XMZ2)*COS2B/6D0)
29139           KC=PYCOMP(KSUSY2+I+1)
29140           PMAS(KC,1)=SQRT(RMSS(22)**2-(XMW2-XMZ2)*COS2B*2D0/3D0)
29141   110   CONTINUE
29142         XARG=RMSS(6)**2-PMAS(24,1)**2*ABS(COS(2D0*BETA))
29143         IF(XARG.LT.0D0) THEN
29144           WRITE(MSTU(11),*) ' SNEUTRINO MASS IS NEGATIVE'//
29145      &    ' FROM THE SUM RULE. '
29146           WRITE(MSTU(11),*) '  TRY A SMALLER VALUE OF TAN(BETA). '
29147           RETURN
29148         ELSE
29149           XARG=SQRT(XARG)
29150         ENDIF
29151         DO 120 I=11,15,2
29152           PMAS(PYCOMP(KSUSY1+I),1)=RMSS(6)
29153           PMAS(PYCOMP(KSUSY2+I),1)=RMSS(7)
29154           PMAS(PYCOMP(KSUSY1+I+1),1)=XARG
29155           PMAS(PYCOMP(KSUSY2+I+1),1)=9999D0
29156   120   CONTINUE
29157         IF(IMSS(8).EQ.1) THEN
29158           RMSS(13)=RMSS(6)
29159           RMSS(14)=RMSS(7)
29160         ENDIF
29161  
29162 C...Alternatively derive masses from SUGRA relations.
29163       ELSEIF(IMSSM.EQ.2) THEN
29164         CALL PYAPPS
29165       ENDIF
29166  
29167 C...Add in extra D-term contributions.
29168       IF(IMSS(7).EQ.1) THEN
29169         R=0.43D0
29170         DX=RMSS(23)
29171         DY=RMSS(24)
29172         DS=RMSS(25)
29173         WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
29174         WRITE(MSTU(11),*) 'C  NEW DTERMS ADDED TO SCALAR MASSES   '
29175         WRITE(MSTU(11),*) 'C   IN A U(B-L) THEORY                 '
29176         WRITE(MSTU(11),*) 'C   DX = ',DX
29177         WRITE(MSTU(11),*) 'C   DY = ',DY
29178         WRITE(MSTU(11),*) 'C   DS = ',DS
29179         WRITE(MSTU(11),*) 'C                                      '
29180         DY=R*DY-4D0/33D0*(1D0-R)*DX+(1D0-R)/33D0*DS
29181         WRITE(MSTU(11),*) 'C   DY AT THE WEAK SCALE = ',DY
29182         WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
29183         DQ2=DY/6D0-DX/3D0-DS/3D0
29184         DU2=-2D0*DY/3D0-DX/3D0-DS/3D0
29185         DD2=DY/3D0+DX-2D0*DS/3D0
29186         DL2=-DY/2D0+DX-2D0*DS/3D0
29187         DE2=DY-DX/3D0-DS/3D0
29188         DHU2=DY/2D0+2D0*DX/3D0+2D0*DS/3D0
29189         DHD2=-DY/2D0-2D0*DX/3D0+DS
29190         DMU2=(-DY/2D0-2D0/3D0*DX+(COSB**2-2D0*SINB**2/3D0)*DS)
29191      &  /ABS(COS2B)
29192         DMA2 = 2D0*DMU2+DHU2+DHD2
29193         DO 130 I=1,5,2
29194           KC=PYCOMP(KSUSY1+I)
29195           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DQ2)
29196           KC=PYCOMP(KSUSY2+I)
29197           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DD2)
29198           KC=PYCOMP(KSUSY1+I+1)
29199           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DQ2)
29200           KC=PYCOMP(KSUSY2+I+1)
29201           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DU2)
29202   130   CONTINUE
29203         DO 140 I=11,15,2
29204           KC=PYCOMP(KSUSY1+I)
29205           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DL2)
29206           KC=PYCOMP(KSUSY2+I)
29207           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DE2)
29208           KC=PYCOMP(KSUSY1+I+1)
29209           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DL2)
29210   140   CONTINUE
29211         IF(RMSS(4)**2+DMU2.LT.0D0) THEN
29212           WRITE(MSTU(11),*) ' MU2 DRIVEN NEGATIVE '
29213           STOP
29214         ENDIF
29215         SGNMU=SIGN(1D0,RMSS(4))
29216         RMSS(4)=SGNMU*SQRT(RMSS(4)**2+DMU2)
29217         ARG=RMSS(10)**2*SIGN(1D0,RMSS(10))+DQ2
29218         RMSS(10)=SIGN(SQRT(ABS(ARG)),ARG)
29219         ARG=RMSS(11)**2*SIGN(1D0,RMSS(11))+DD2
29220         RMSS(11)=SIGN(SQRT(ABS(ARG)),ARG)
29221         ARG=RMSS(12)**2*SIGN(1D0,RMSS(12))+DU2
29222         RMSS(12)=SIGN(SQRT(ABS(ARG)),ARG)
29223         ARG=RMSS(13)**2*SIGN(1D0,RMSS(13))+DL2
29224         RMSS(13)=SIGN(SQRT(ABS(ARG)),ARG)
29225         ARG=RMSS(14)**2*SIGN(1D0,RMSS(14))+DE2
29226         RMSS(14)=SIGN(SQRT(ABS(ARG)),ARG)
29227         IF( RMSS(19)**2 + DMA2 .LE. 50D0 ) THEN
29228           WRITE(MSTU(11),*) ' MA DRIVEN TOO LOW '
29229           STOP
29230         ENDIF
29231         RMSS(19)=SQRT(RMSS(19)**2+DMA2)
29232         RMSS(6)=SQRT(RMSS(6)**2+DL2)
29233         RMSS(7)=SQRT(RMSS(7)**2+DE2)
29234         WRITE(MSTU(11),*) ' MTL = ',RMSS(10)
29235         WRITE(MSTU(11),*) ' MBR = ',RMSS(11)
29236         WRITE(MSTU(11),*) ' MTR = ',RMSS(12)
29237         WRITE(MSTU(11),*) ' SEL = ',RMSS(6),RMSS(13)
29238         WRITE(MSTU(11),*) ' SER = ',RMSS(7),RMSS(14)
29239       ENDIF
29240  
29241 C...Fix the third generation sfermions.
29242       CALL PYTHRG
29243       XARG=RMSS(13)**2-PMAS(24,1)**2*ABS(COS2B)
29244       IF(XARG.LT.0D0) THEN
29245         WRITE(MSTU(11),*) ' TAU SNEUTRINO MASS IS NEGATIVE FROM'//
29246      &  ' THE SUM RULE. '
29247         WRITE(MSTU(11),*) '  TRY A SMALLER VALUE OF TAN(BETA). '
29248         RETURN
29249       ELSE
29250         PMAS(PYCOMP(KSUSY1+16),1)=SQRT(XARG)
29251       ENDIF
29252  
29253 C...Fix the neutralino--chargino--gluino sector.
29254       CALL PYINOM
29255  
29256 C...Fix the Higgs sector.
29257       CALL PYHGGM(ALFA)
29258  
29259 C...Choose the Gunion-Haber convention.
29260       ALFA=-ALFA
29261       RMSS(18)=ALFA
29262  
29263 C...Print information on mass parameters.
29264       IF(IMSSM.EQ.2.AND.MSTP(122).GT.0) THEN
29265         WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
29266         WRITE(MSTU(11),*) ' USING APPROXIMATE SUGRA RELATIONS '
29267         WRITE(MSTU(11),*) ' M0 = ',RMSS(8)
29268         WRITE(MSTU(11),*) ' M1/2=',RMSS(1)
29269         WRITE(MSTU(11),*) ' TANB=',RMSS(5)
29270         WRITE(MSTU(11),*) ' MU = ',RMSS(4)
29271         WRITE(MSTU(11),*) ' AT = ',RMSS(16)
29272         WRITE(MSTU(11),*) ' MA = ',RMSS(19)
29273         WRITE(MSTU(11),*) ' MTOP=',PMAS(6,1)
29274         WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
29275       ENDIF
29276       IF(IMSS(20).EQ.1) THEN
29277         WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
29278         WRITE(MSTU(11),*) ' DEBUG MODE '
29279         WRITE(MSTU(11),*) ' UMIX = ',UMIX(1,1),UMIX(1,2),
29280      &  UMIX(2,1),UMIX(2,2)
29281         WRITE(MSTU(11),*) ' VMIX = ',VMIX(1,1),VMIX(1,2),
29282      &  VMIX(2,1),VMIX(2,2)
29283         WRITE(MSTU(11),*) ' ZMIX = ',ZMIX
29284         WRITE(MSTU(11),*) ' ALFA = ',ALFA
29285         WRITE(MSTU(11),*) ' BETA = ',BETA
29286         WRITE(MSTU(11),*) ' STOP = ',(SFMIX(6,I),I=1,4)
29287         WRITE(MSTU(11),*) ' SBOT = ',(SFMIX(5,I),I=1,4)
29288         WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
29289       ENDIF
29290  
29291 C...Set up the Higgs couplings - needed here since initialization
29292 C...in PYINRE did not yet occur when PYWIDT is called below.
29293       AL=ALFA
29294       BE=BETA
29295       SINA=SIN(AL)
29296       COSA=COS(AL)
29297       COSB=COS(BE)
29298       SINB=TANB*COSB
29299       SBMA=SIN(BE-AL)
29300       SAPB=SIN(AL+BE)
29301       CAPB=COS(AL+BE)
29302       CBMA=COS(BE-AL)
29303       S2A=SIN(2D0*AL)
29304       C2A=COS(2D0*AL)
29305       C2B=COSB**2-SINB**2
29306 C...tanb (used for H+)
29307       PARU(141)=TANB
29308  
29309 C...Firstly: h
29310 C...Coupling to d-type quarks
29311       PARU(161)=SINA/COSB
29312 C...Coupling to u-type quarks
29313       PARU(162)=-COSA/SINB
29314 C...Coupling to leptons
29315       PARU(163)=PARU(161)
29316 C...Coupling to Z
29317       PARU(164)=SBMA
29318 C...Coupling to W
29319       PARU(165)=PARU(164)
29320  
29321 C...Secondly: H
29322 C...Coupling to d-type quarks
29323       PARU(171)=-COSA/COSB
29324 C...Coupling to u-type quarks
29325       PARU(172)=-SINA/SINB
29326 C...Coupling to leptons
29327       PARU(173)=PARU(171)
29328 C...Coupling to Z
29329       PARU(174)=CBMA
29330 C...Coupling to W
29331       PARU(175)=PARU(174)
29332 C...Coupling to h
29333 C      PARU(176)=COS(2D0*AL)*COS(BE+AL)-2D0*SIN(2D0*AL)*SIN(BE+AL)
29334       HHH(3)=HHH(3)+HHH(4)+HHH(5)
29335       PARU(176)=-3D0/HHH(1)*(HHH(1)*SINA**2*COSB*COSA+
29336      1 HHH(2)*COSA**2*SINB*SINA+HHH(3)*(SINA**3*SINB+COSA**3*COSB-
29337      2 2D0/3D0*CBMA)-HHH(6)*SINA*(COSB*C2A+COSA*CAPB)+
29338      3 HHH(7)*COSA*(SINB*C2A+SINA*CAPB))
29339 C...Coupling to H+
29340 C...Define later
29341 C      PARU(168)=-SBMA-COS(2D0*BE)*SAPB/2D0/(1D0-XW)
29342       PARU(168)=1D0/HHH(1)*(HHH(1)*SINB**2*COSB*SINA-
29343      1 HHH(2)*COSB**2*SINB*COSA-HHH(3)*(SINB**3*COSA-COSB**3*SINA)+
29344      2 2D0*HHH(5)*SBMA-HHH(6)*SINB*(COSB*SAPB+SINA*C2B)-
29345      3 HHH(7)*COSB*(COSA*C2B-SINB*SAPB)-(HHH(5)-HHH(4))*SBMA)
29346 C...Coupling to A
29347 C      PARU(177)=COS(2D0*BE)*COS(BE+AL)
29348       PARU(177)=-1D0/HHH(1)*(HHH(1)*SINB**2*COSB*COSA+
29349      1 HHH(2)*COSB**2*SINB*SINA+HHH(3)*(SINB**3*SINA+COSB**3*COSA)-
29350      2 2D0*HHH(5)*CBMA-HHH(6)*SINB*(COSB*CAPB+COSA*C2B)+
29351      3 HHH(7)*COSB*(SINB*CAPB+SINA*C2B))
29352 C...Coupling to H+
29353       PARU(178)=PARU(177)-(HHH(5)-HHH(4))/HHH(1)*CBMA
29354 C...Thirdly, A
29355 C...Coupling to d-type quarks
29356       PARU(181)=TANB
29357 C...Coupling to u-type quarks
29358       PARU(182)=1D0/PARU(181)
29359 C...Coupling to leptons
29360       PARU(183)=PARU(181)
29361       PARU(184)=0D0
29362       PARU(185)=0D0
29363 C...Coupling to Z h
29364       PARU(186)=COS(BE-AL)
29365 C...Coupling to Z H
29366       PARU(187)=SIN(BE-AL)
29367       PARU(188)=0D0
29368       PARU(189)=0D0
29369       PARU(190)=0D0
29370  
29371 C...Finally: H+
29372 C...Coupling to W h
29373       PARU(195)=COS(BE-AL)
29374  
29375 C...Tell that all Higgs couplings have been set.
29376       MSTP(4)=1
29377  
29378 C...Second part of routine: set decay modes and branching ratios.
29379  
29380 C...Allow chi10 -> gravitino + gamma or not.
29381       KC=PYCOMP(KSUSY1+39)
29382       IF( IMSS(11) .NE. 0 ) THEN
29383         PMAS(KC,1)=RMSS(21)/1000000000D0
29384         PMAS(KC,2)=0.0001D0
29385         IRPRTY=0
29386         WRITE(MSTU(11),*) ' ALLOWING DECAYS TO GRAVITINOS '
29387       ELSE
29388         PMAS(KC,1)=9999D0
29389         IRPRTY=1
29390       ENDIF
29391  
29392 C...Loop over sparticle and Higgs species.
29393       PMCHI1=PMAS(PYCOMP(KSUSY1+22),1)
29394 C...Find the LSP or NLSP for a gravitino LSP
29395       ILSP=0
29396       PMLSP=1D20
29397       DO 150 I=1,36
29398         KF=KFSUSY(I)
29399         IF(KF.EQ.1000039) GOTO 150
29400         KC=PYCOMP(KF)
29401         IF(PMAS(KC,1).LT.PMLSP) THEN
29402           ILSP=I
29403           PMLSP=PMAS(KC,1)
29404         ENDIF
29405   150 CONTINUE
29406       DO 210 I=1,36
29407         KF=KFSUSY(I)
29408         KC=PYCOMP(KF)
29409         LKNT=0
29410  
29411 C...Sfermion decays.
29412         IF(I.LE.24) THEN
29413 C...First check to see if sneutrino is lighter than chi10.
29414           IF((I.EQ.15.OR.I.EQ.19.OR.I.EQ.23).AND.
29415      &    PMAS(KC,1).LT.PMCHI1) THEN
29416           ELSE
29417             CALL PYSFDC(KF,XLAM,IDLAM,LKNT)
29418           ENDIF
29419  
29420 C...Gluino decays.
29421         ELSEIF(I.EQ.25) THEN
29422           CALL PYGLUI(KF,XLAM,IDLAM,LKNT)
29423           IF(I.EQ.ILSP) LKNT=0
29424  
29425 C...Neutralino decays.
29426         ELSEIF(I.GE.26.AND.I.LE.29) THEN
29427           CALL PYNJDC(KF,XLAM,IDLAM,LKNT)
29428 C...chi10 stable or chi10 -> gravitino + gamma.
29429           IF(I.EQ.26.AND.IRPRTY.EQ.1) THEN
29430             PMAS(KC,2)=1D-6
29431             MDCY(KC,1)=0
29432             MWID(KC)=0
29433           ENDIF
29434  
29435 C...Chargino decays.
29436         ELSEIF(I.GE.30.AND.I.LE.31) THEN
29437           CALL PYCJDC(KF,XLAM,IDLAM,LKNT)
29438  
29439 C...Gravitino is stable.
29440         ELSEIF(I.EQ.32) THEN
29441           MDCY(KC,1)=0
29442           MWID(KC)=0
29443  
29444 C...Higgs decays.
29445         ELSEIF(I.GE.33.AND.I.LE.36) THEN
29446 C...Calculate decays to non-SUSY particles.
29447           CALL PYWIDT(KF,PMAS(KC,1)**2,WDTP,WDTE)
29448           LKNT=0
29449           DO 160 I1=0,100
29450             XLAM(I1)=0D0
29451   160     CONTINUE
29452           DO 180 I1=1,MDCY(KC,3)
29453             K1=MDCY(KC,2)+I1-1
29454             IF(IABS(KFDP(K1,1)).GT.KSUSY1.OR.
29455      &      IABS(KFDP(K1,2)).GT.KSUSY1) GOTO 180
29456             XLAM(I1)=WDTP(I1)
29457             XLAM(0)=XLAM(0)+XLAM(I1)
29458             DO 170 J1=1,3
29459               IDLAM(I1,J1)=KFDP(K1,J1)
29460   170       CONTINUE
29461             LKNT=LKNT+1
29462   180     CONTINUE
29463 C...Add the decays to SUSY particles.
29464           CALL PYHEXT(KF,XLAM,IDLAM,LKNT)
29465         ENDIF
29466 C...Zero the branching ratios for use in loop mode
29467 C...thanks to K. Matchev (FNAL)
29468         DO 185 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
29469           BRAT(IDC)=0D0
29470   185   CONTINUE
29471  
29472 C...Set stable particles.
29473         IF(LKNT.EQ.0) THEN
29474           MDCY(KC,1)=0
29475           MWID(KC)=0
29476           PMAS(KC,2)=1D-6
29477           PMAS(KC,3)=1D-5
29478           PMAS(KC,4)=0D0
29479  
29480 C...Store branching ratios in the standard tables.
29481         ELSE
29482           IDC=MDCY(KC,2)+MDCY(KC,3)-1
29483           DELM=1D6
29484           DO 200 IL=1,LKNT
29485             IDCSV=IDC
29486   190       IDC=IDC+1
29487             BRAT(IDC)=0D0
29488             IF(IDC.EQ.MDCY(KC,2)+MDCY(KC,3)) IDC=MDCY(KC,2)
29489             IF(IDLAM(IL,1).EQ.KFDP(IDC,1).AND.IDLAM(IL,2).EQ.
29490      &      KFDP(IDC,2).AND.IDLAM(IL,3).EQ.KFDP(IDC,3)) THEN
29491               BRAT(IDC)=XLAM(IL)/XLAM(0)
29492               XMDIF=PMAS(KC,1)
29493               IF(MDME(IDC,1).GE.1) THEN
29494                 XMDIF=XMDIF-PMAS(PYCOMP(KFDP(IDC,1)),1)-
29495      &          PMAS(PYCOMP(KFDP(IDC,2)),1)
29496                 IF(KFDP(IDC,3).NE.0) XMDIF=XMDIF-
29497      &          PMAS(PYCOMP(KFDP(IDC,3)),1)
29498               ENDIF
29499               IF(I.LE.32) THEN
29500                 IF(XMDIF.GE.0D0) THEN
29501                   DELM=MIN(DELM,XMDIF)
29502                 ELSE
29503                   WRITE(MSTU(11),*) ' ERROR WITH DELM ',DELM,XMDIF
29504                   WRITE(MSTU(11),*) ' KF = ',KF
29505                   WRITE(MSTU(11),*) ' KF(decay) = ',(KFDP(IDC,J),J=1,3)
29506                 ENDIF
29507               ENDIF
29508               GOTO 200
29509             ELSEIF(IDC.EQ.IDCSV) THEN
29510               WRITE(MSTU(11),*) ' Error in PYMSIN: SUSY decay ',
29511      &        'channel not recognized:'
29512               WRITE(MSTU(11),*) KF,' -> ',(IDLAM(I,J),J=1,3)
29513               GOTO 200
29514             ELSE
29515               GOTO 190
29516             ENDIF
29517   200     CONTINUE
29518  
29519 C...Store width, cutoff and lifetime.
29520           PMAS(KC,2)=XLAM(0)
29521           IF(PMAS(KC,2).LT.0.1D0*DELM) THEN
29522             PMAS(KC,3)=PMAS(KC,2)*10D0
29523           ELSE
29524             PMAS(KC,3)=0.95D0*DELM
29525           ENDIF
29526           IF(PMAS(KC,2).NE.0D0) THEN
29527             PMAS(KC,4)=PARU(3)/PMAS(KC,2)*1D-12
29528           ENDIF
29529         ENDIF
29530   210 CONTINUE
29531  
29532       RETURN
29533       END
29534  
29535 C*********************************************************************
29536  
29537 C...PYAPPS
29538 C...Uses approximate analytical formulae to determine the full set of
29539 C...MSSM parameters from SUGRA input.
29540 C...See M. Drees and S.P. Martin, hep-ph/9504124
29541  
29542       SUBROUTINE PYAPPS
29543  
29544 C...Double precision and integer declarations.
29545       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
29546       IMPLICIT INTEGER(I-N)
29547       INTEGER PYK,PYCHGE,PYCOMP
29548 C...Parameter statement to help give large particle numbers.
29549       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
29550 C...Commonblocks.
29551       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
29552       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
29553       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
29554       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/
29555  
29556       IMSS(5)=0
29557       XMT=PMAS(6,1)
29558       XMZ2=PMAS(23,1)**2
29559       XMW2=PMAS(24,1)**2
29560       TANB=RMSS(5)
29561       BETA=ATAN(TANB)
29562       XW=PARU(102)
29563       XMG=RMSS(1)
29564       XMG2=XMG*XMG
29565       XM0=RMSS(8)
29566       XM02=XM0*XM0
29567       AT=-RMSS(16)
29568       RMSS(15)=AT
29569       RMSS(17)=AT
29570       COSB=COS(BETA)
29571       SINB=TANB/SQRT(TANB**2+1D0)
29572       COSB=SINB/TANB
29573  
29574       DTERM=XMZ2*COS(2D0*BETA)
29575       XMER=SQRT(XM02+0.15D0*XMG2-XW*DTERM)
29576       XMEL=SQRT(XM02+0.52D0*XMG2-(0.5D0-XW)*DTERM)
29577       RMSS(6)=XMEL
29578       RMSS(7)=XMER
29579       XMUR=SQRT(PYRNMQ(2,2D0/3D0*XW*DTERM))
29580       XMDR=SQRT(PYRNMQ(3,-1D0/3D0*XW*DTERM))
29581       XMUL=SQRT(PYRNMQ(1,(0.5D0-2D0/3D0*XW)*DTERM))
29582       XMDL=SQRT(PYRNMQ(1,-(0.5D0-1D0/3D0*XW)*DTERM))
29583       DO 100 I=1,5,2
29584         PMAS(PYCOMP(KSUSY1+I),1)=XMDL
29585         PMAS(PYCOMP(KSUSY2+I),1)=XMDR
29586         PMAS(PYCOMP(KSUSY1+I+1),1)=XMUL
29587         PMAS(PYCOMP(KSUSY2+I+1),1)=XMUR
29588   100 CONTINUE
29589       XARG=XMEL**2-XMW2*ABS(COS(2D0*BETA))
29590       IF(XARG.LT.0D0) THEN
29591         WRITE(MSTU(11),*) ' SNEUTRINO MASS IS NEGATIVE'//
29592      &  ' FROM THE SUM RULE. '
29593         WRITE(MSTU(11),*) '  TRY A SMALLER VALUE OF TAN(BETA). '
29594         RETURN
29595       ELSE
29596         XARG=SQRT(XARG)
29597       ENDIF
29598       DO 110 I=11,15,2
29599         PMAS(PYCOMP(KSUSY1+I),1)=XMEL
29600         PMAS(PYCOMP(KSUSY2+I),1)=XMER
29601         PMAS(PYCOMP(KSUSY1+I+1),1)=XARG
29602         PMAS(PYCOMP(KSUSY2+I+1),1)=9999D0
29603   110 CONTINUE
29604       XMNU=XARG
29605  
29606       RMT=PYRNMT(XMT)
29607       XTOP=(RMT/150D0/SINB)**2*(.9D0*XM02+2.1D0*XMG2+
29608      &(1D0-(RMT/190D0/SINB)**3)*(.24D0*AT**2+AT*XMG))
29609       RMB=3D0
29610       XBOT=(RMB/150D0/COSB)**2*(.9D0*XM02+2.1D0*XMG2+
29611      &(1D0-(RMB/190D0/COSB)**3)*(.24D0*AT**2+AT*XMG))
29612       XTAU=1D-4/COSB**2*(XM02+0.15D0*XMG2+AT**2/3D0)
29613       ATP=AT*(1D0-(RMT/190D0/SINB)**2)+XMG*(3.47D0-1.9D0*(RMT/190D0/
29614      &SINB)**2)
29615       RMSS(16)=-ATP
29616 C      XMU2=-XM02-0.52D0*XMG2-0.5D0*XMZ2+XTOP/(1D0-1D0/TANB**2)
29617 C.....
29618       XMU2=-.5D0*XMZ2+(SINB**2*(XM02+.52D0*XMG2-XTOP)-
29619      &COSB**2*(XM02+.52D0*XMG2-XBOT-XTAU/3D0))/(COSB**2-SINB**2)
29620 C      XMA2=(XMNU**2+XMU2-XBOT-XTAU/3D0)/SINB**2
29621 C.....
29622       XMA2=2D0*(XM02+.52D0*XMG2)-XTOP-XBOT-XTAU/3D0+2D0*XMU2
29623       XMU=SIGN(SQRT(XMU2),RMSS(4))
29624       RMSS(4)=XMU
29625       RMSS(19)=SQRT(XMA2)
29626       ARG=XM02+0.15D0*XMG2-2D0*XTAU/3D0-XW*DTERM
29627       IF(ARG.GT.0D0) THEN
29628         RMSS(14)=SQRT(ARG)
29629       ELSE
29630         WRITE(MSTU(11),*) ' RIGHT STAU MASS < 0 '
29631         STOP
29632       ENDIF
29633       ARG=XM02+0.52D0*XMG2-XTAU/3D0-(0.5D0-XW)*DTERM
29634       IF(ARG.GT.0D0) THEN
29635         RMSS(13)=SQRT(ARG)
29636       ELSE
29637         WRITE(MSTU(11),*) ' LEFT STAU MASS < 0 '
29638         STOP
29639       ENDIF
29640       ARG=PYRNMQ(1,-(XBOT+XTOP)/3D0)
29641       IF(ARG.GT.0D0) THEN
29642         RMSS(10)=SQRT(ARG)
29643       ELSE
29644         RMSS(10)=-SQRT(-ARG)
29645       ENDIF
29646       ARG=PYRNMQ(2,-2D0*XTOP/3D0)
29647       IF(ARG.GT.0D0) THEN
29648         RMSS(12)=SQRT(ARG)
29649       ELSE
29650         RMSS(12)=-SQRT(-ARG)
29651       ENDIF
29652       ARG=PYRNMQ(3,-2D0*XBOT/3D0)
29653       IF(ARG.GT.0D0) THEN
29654         RMSS(11)=SQRT(ARG)
29655       ELSE
29656         RMSS(11)=-SQRT(-ARG)
29657       ENDIF
29658  
29659       RETURN
29660       END
29661  
29662 C*********************************************************************
29663  
29664 C...PYRNMQ
29665 C...Determines the running mass of quarks.
29666  
29667       FUNCTION PYRNMQ(ID,DTERM)
29668  
29669 C...Double precision and integer declarations.
29670       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
29671       IMPLICIT INTEGER(I-N)
29672       INTEGER PYK,PYCHGE,PYCOMP
29673 C...Commonblock.
29674       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
29675       SAVE /PYMSSM/
29676  
29677 C...Local variables.
29678       DOUBLE PRECISION PI,R
29679       DOUBLE PRECISION TOL
29680       DOUBLE PRECISION CI(3)
29681       EXTERNAL PYALPS
29682       DOUBLE PRECISION PYALPS
29683       DATA TOL/0.001D0/
29684       DATA PI,R/3.141592654D0,.61803399D0/
29685       DATA CI/0.47D0,0.07D0,0.02D0/
29686  
29687       C=1D0-R
29688       CA=CI(ID)
29689       AG=(0.71D0)**2/4D0/PI
29690       AG=RMSS(20)
29691       XM0=RMSS(8)
29692       XMG=RMSS(1)
29693       XM02=XM0*XM0
29694       XMG2=XMG*XMG
29695  
29696       AS=PYALPS(XM02+6D0*XMG2)
29697       CG=8D0/9D0*((AS/AG)**2-1D0)
29698       BX=XM02+(CA+CG)*XMG2+DTERM
29699       AX=MIN(50D0**2,0.5D0*BX)
29700       CX=MAX(2000D0**2,2D0*BX)
29701  
29702       X0=AX
29703       X3=CX
29704       IF(ABS(CX-BX).GT.ABS(BX-AX))THEN
29705         X1=BX
29706         X2=BX+C*(CX-BX)
29707       ELSE
29708         X2=BX
29709         X1=BX-C*(BX-AX)
29710       ENDIF
29711       AS1=PYALPS(X1)
29712       CG=8D0/9D0*((AS1/AG)**2-1D0)
29713       F1=ABS(XM02+(CA+CG)*XMG2+DTERM-X1)
29714       AS2=PYALPS(X2)
29715       CG=8D0/9D0*((AS2/AG)**2-1D0)
29716       F2=ABS(XM02+(CA+CG)*XMG2+DTERM-X2)
29717   100 IF(ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2))) THEN
29718         IF(F2.LT.F1) THEN
29719           X0=X1
29720           X1=X2
29721           X2=R*X1+C*X3
29722           F1=F2
29723           AS2=PYALPS(X2)
29724           CG=8D0/9D0*((AS2/AG)**2-1D0)
29725           F2=ABS(XM02+(CA+CG)*XMG2+DTERM-X2)
29726         ELSE
29727           X3=X2
29728           X2=X1
29729           X1=R*X2+C*X0
29730           F2=F1
29731           AS1=PYALPS(X1)
29732           CG=8D0/9D0*((AS1/AG)**2-1D0)
29733           F1=ABS(XM02+(CA+CG)*XMG2+DTERM-X1)
29734         ENDIF
29735         GOTO 100
29736       ENDIF
29737       IF(F1.LT.F2) THEN
29738         PYRNMQ=X1
29739         XMIN=X1
29740       ELSE
29741         PYRNMQ=X2
29742         XMIN=X2
29743       ENDIF
29744  
29745       RETURN
29746       END
29747  
29748 C*********************************************************************
29749  
29750 C...PYRNMT
29751 C...Determines the running mass of the top quark.
29752  
29753       FUNCTION PYRNMT(XMT)
29754  
29755 C...Double precision and integer declarations.
29756       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
29757       IMPLICIT INTEGER(I-N)
29758       INTEGER PYK,PYCHGE,PYCOMP
29759 C...Commonblock.
29760       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
29761       SAVE /PYMSSM/
29762  
29763 C...Local variables.
29764       DOUBLE PRECISION XMT
29765       DOUBLE PRECISION PI,R
29766       DOUBLE PRECISION TOL
29767       EXTERNAL PYALPS
29768       DOUBLE PRECISION PYALPS
29769       DATA TOL/0.001D0/
29770       DATA PI,R/3.141592654D0,0.61803399D0/
29771  
29772       C=1D0-R
29773  
29774       BX=XMT
29775       AX=MIN(50D0,BX*0.5D0)
29776       CX=MAX(300D0,2D0*BX)
29777  
29778       X0=AX
29779       X3=CX
29780       IF(ABS(CX-BX).GT.ABS(BX-AX))THEN
29781         X1=BX
29782         X2=BX+C*(CX-BX)
29783       ELSE
29784         X2=BX
29785         X1=BX-C*(BX-AX)
29786       ENDIF
29787       AS1=PYALPS(X1**2)/PI
29788       F1=ABS(XMT/(1D0+4D0/3D0*AS1+11D0*AS1**2)-X1)
29789       AS2=PYALPS(X2**2)/PI
29790       F2=ABS(XMT/(1D0+4D0/3D0*AS2+11D0*AS2**2)-X2)
29791   100 IF(ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2))) THEN
29792         IF(F2.LT.F1) THEN
29793           X0=X1
29794           X1=X2
29795           X2=R*X1+C*X3
29796           F1=F2
29797           AS2=PYALPS(X2**2)/PI
29798           F2=ABS(XMT/(1D0+4D0/3D0*AS2+11D0*AS2**2)-X2)
29799         ELSE
29800           X3=X2
29801           X2=X1
29802           X1=R*X2+C*X0
29803           F2=F1
29804           AS1=PYALPS(X1**2)/PI
29805           F1=ABS(XMT/(1D0+4D0/3D0*AS1+11D0*AS1**2)-X1)
29806         ENDIF
29807         GOTO 100
29808       ENDIF
29809       IF(F1.LT.F2) THEN
29810         PYRNMT=X1
29811         XMIN=X1
29812       ELSE
29813         PYRNMT=X2
29814         XMIN=X2
29815       ENDIF
29816  
29817       RETURN
29818       END
29819  
29820 C*********************************************************************
29821  
29822 C...PYTHRG
29823 C...Calculates the mass eigenstates of the third generation sfermions.
29824 C...Created:  5-31-96
29825  
29826       SUBROUTINE PYTHRG
29827  
29828 C...Double precision and integer declarations.
29829       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
29830       IMPLICIT INTEGER(I-N)
29831       INTEGER PYK,PYCHGE,PYCOMP
29832 C...Parameter statement to help give large particle numbers.
29833       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
29834 C...Commonblocks.
29835       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
29836       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
29837       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
29838       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
29839      &SFMIX(16,4)
29840       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
29841  
29842 C...Local variables.
29843       DOUBLE PRECISION BETA
29844       DOUBLE PRECISION PYRNMT
29845       DOUBLE PRECISION AM2(2,2),RT(2,2),DI(2,2)
29846       DOUBLE PRECISION XMZ2,XMW2,TANB,XMU,COS2B,XMQL2,XMQR2
29847       DOUBLE PRECISION XMF,XMF2,DIFF,SAME,XMF12,XMF22,SMALL
29848       DOUBLE PRECISION SIN2T,COS2T,TWOT,ATR,AMQR,XXX,YYY,AMQL
29849       INTEGER ID1(3),ID2(3),ID3(3),ID4(3)
29850       INTEGER IF,I,J,II,JJ,IT,L
29851       LOGICAL DTERM
29852       DATA SMALL/1D-3/
29853       DATA ID1/10,10,13/
29854       DATA ID2/5,6,15/
29855       DATA ID3/15,16,17/
29856       DATA ID4/11,12,14/
29857       DATA DTERM/.TRUE./
29858  
29859       XMZ2=PMAS(23,1)**2
29860       XMW2=PMAS(24,1)**2
29861       TANB=RMSS(5)
29862       XMU=-RMSS(4)
29863       BETA=ATAN(TANB)
29864       COS2B=COS(2D0*BETA)
29865  
29866 C...OPTION TO FIX T1, T2, B1 MASSES AND MIXINGS
29867  
29868       IOPT=IMSS(5)
29869       IF(IOPT.EQ.1) THEN
29870         CTT=RMSS(27)
29871         CTT2=CTT**2
29872         STT2=1D0-CTT2
29873         STT=SQRT(STT2)
29874         XM12=RMSS(12)**2
29875         XM22=RMSS(10)**2
29876         XMQL2=CTT2*XM12+STT2*XM22
29877         XMQR2=STT2*XM12+CTT2*XM22
29878         XMFR=PMAS(6,1)
29879         XMF2=PYRNMT(XMFR)**2
29880         ATOP=-XMU/TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
29881         ATMT=SQRT(XMF2)*(ATOP+XMU/TANB)
29882         XTEST=(XMQL2-XMQR2)*(CTT2-STT2)
29883         IF(XTEST.GT.4D0*STT*CTT*ATMT) THEN
29884          STT=-STT
29885          ATOP=-XMU/TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
29886         ENDIF
29887         RMSS(16)=ATOP
29888 C......SUBTRACT OUT D-TERM AND FERMION MASS
29889         XMQL2=XMQL2-XMF2-(4D0*XMW2-XMZ2)*COS2B/6D0
29890         XMQR2=XMQR2-XMF2+(XMW2-XMZ2)*COS2B*2D0/3D0
29891         IF(XMQL2.GE.0D0) THEN
29892           RMSS(10)=SQRT(XMQL2)
29893         ELSE
29894           RMSS(10)=-SQRT(-XMQL2)
29895         ENDIF
29896         IF(XMQR2.GE.0D0) THEN
29897           RMSS(12)=SQRT(XMQR2)
29898         ELSE
29899           RMSS(12)=-SQRT(-XMQR2)
29900         ENDIF
29901 C SAME FOR BOTTOM SQUARK
29902         CTT=RMSS(26)
29903         CTT2=CTT**2
29904         STT2=1D0-CTT2
29905         STT=MAX(SQRT(STT2),1D-6)
29906         XMF=3D00
29907         XMF2=XMF**2
29908         XM12=RMSS(11)**2
29909         XMQL2=RMSS(10)**2-(2D0*XMW2+XMZ2)*COS2B/6D0+XMF2
29910         IF(ABS(CTT).EQ.1D0) THEN
29911           XM22=XM12
29912           XM12=XMQL2
29913           XMQR2=XM22
29914         ELSEIF(CTT.EQ.0D0) THEN
29915           XM22=XMQL2
29916           XMQR2=XM12
29917         ELSE
29918           XM22=(XMQL2-CTT2*XM12)/STT2
29919           XMQR2=STT2*XM12+CTT2*XM22
29920         ENDIF
29921         ABOT=-XMU*TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
29922         ATMT=SQRT(XMF2)*(ABOT+XMU*TANB)
29923         XTEST=(XMQL2-XMQR2)*(CTT2-STT2)
29924         IF(XTEST.GT.4D0*STT*CTT*ATMT) THEN
29925           STT=-STT
29926           ABOT=-XMU*TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
29927         ENDIF
29928         RMSS(15)=ABOT
29929 C......SUBTRACT OUT D-TERM AND FERMION MASS
29930         XMQR2=XMQR2-(XMW2-XMZ2)*COS2B/3D0-XMF2
29931         IF(XMQR2.GE.0D0) THEN
29932           RMSS(11)=SQRT(XMQR2)
29933         ELSE
29934           RMSS(11)=-SQRT(-XMQR2)
29935         ENDIF
29936 C SAME FOR TAU SLEPTON
29937         CTT=RMSS(28)
29938         CTT2=CTT**2
29939         STT2=1D0-CTT2
29940         STT=SQRT(STT2)
29941         XM12=RMSS(14)**2
29942         XM22=RMSS(13)**2
29943         XMQL2=CTT2*XM12+STT2*XM22
29944         XMQR2=STT2*XM12+CTT2*XM22
29945         XMFR=PMAS(15,1)
29946         XMF2=XMFR**2
29947         ATAU=-XMU*TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
29948         ATMT=SQRT(XMF2)*(ATAU+XMU*TANB)
29949         XTEST=(XMQL2-XMQR2)*(CTT2-STT2)
29950         IF(XTEST.GT.4D0*STT*CTT*ATMT) THEN
29951          STT=-STT
29952          ATAU=-XMU*TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
29953         ENDIF
29954         RMSS(17)=ATAU
29955 C......SUBTRACT OUT D-TERM AND FERMION MASS
29956         XMQL2=XMQL2-XMF2+(-.5D0*XMZ2+XMW2)*COS2B
29957         XMQR2=XMQR2-XMF2+(XMZ2-XMW2)*COS2B
29958         IF(XMQL2.GE.0D0) THEN
29959           RMSS(13)=SQRT(XMQL2)
29960         ELSE
29961           RMSS(13)=-SQRT(-XMQL2)
29962         ENDIF
29963         IF(XMQR2.GE.0D0) THEN
29964           RMSS(14)=SQRT(XMQR2)
29965         ELSE
29966           RMSS(14)=-SQRT(-XMQR2)
29967         ENDIF
29968       ENDIF
29969       DO 170 L=1,3
29970         AMQL=RMSS(ID1(L))
29971         IF(AMQL.LT.0D0) THEN
29972           XMQL2=-AMQL**2
29973         ELSE
29974           XMQL2=AMQL**2
29975         ENDIF
29976         IF=ID2(L)
29977         XMF=PMAS(IF,1)
29978         IF(L.EQ.1) XMF=3D0
29979         IF(L.EQ.2) XMF=PYRNMT(XMF)
29980         XMF2=XMF**2
29981         ATR=RMSS(ID3(L))
29982         AMQR=RMSS(ID4(L))
29983         IF(AMQR.LT.0D0) THEN
29984           XMQR2=-AMQR**2
29985         ELSE
29986           XMQR2=AMQR**2
29987         ENDIF
29988         AM2(1,1)=XMQL2+XMF2
29989         AM2(2,2)=XMQR2+XMF2
29990         IF(DTERM) THEN
29991           IF(L.EQ.1) THEN
29992             AM2(1,1)=AM2(1,1)-(2D0*XMW2+XMZ2)*COS2B/6D0
29993             AM2(2,2)=AM2(2,2)+(XMW2-XMZ2)*COS2B/3D0
29994             AM2(1,2)=XMF*(ATR+XMU*TANB)
29995           ELSEIF(L.EQ.2) THEN
29996             AM2(1,1)=AM2(1,1)+(4D0*XMW2-XMZ2)*COS2B/6D0
29997             AM2(2,2)=AM2(2,2)-(XMW2-XMZ2)*COS2B*2D0/3D0
29998             AM2(1,2)=XMF*(ATR+XMU/TANB)
29999           ELSEIF(L.EQ.3) THEN
30000             IF(IMSS(8).EQ.1) THEN
30001               AM2(1,1)=RMSS(6)**2
30002               AM2(2,2)=RMSS(7)**2
30003               AM2(1,2)=0D0
30004               RMSS(13)=RMSS(6)
30005               RMSS(14)=RMSS(7)
30006             ELSE
30007               AM2(1,2)=XMF*(ATR+XMU*TANB)
30008             ENDIF
30009           ENDIF
30010         ENDIF
30011         AM2(2,1)=AM2(1,2)
30012         DETM=AM2(1,1)*AM2(2,2)-AM2(2,1)**2
30013         IF(DETM.LT.0D0) THEN
30014           WRITE(MSTU(11),*) ID1(L),DETM
30015           CALL PYERRM(30,' NEGATIVE**2 MASS FOR SFERMION ')
30016         ENDIF
30017         SAME=0.5D0*(AM2(1,1)+AM2(2,2))
30018         DIFF=0.5D0*SQRT((AM2(1,1)-AM2(2,2))**2+4D0*AM2(1,2)*AM2(2,1))
30019         XMF12=SAME-DIFF
30020         XMF22=SAME+DIFF
30021         IT=0
30022         IF(XMF22-XMF12.GT.0D0) THEN
30023           RT(1,1) = SQRT(MAX(0D0,(XMF22-AM2(1,1))/(XMF22-XMF12)))
30024           RT(2,2) = RT(1,1)
30025           RT(1,2) = -SIGN(SQRT(MAX(0D0,1D0-RT(1,1)**2)),
30026      &    AM2(1,2)/(XMF22-XMF12))
30027           RT(2,1) = -RT(1,2)
30028         ELSE
30029           RT(1,1) = 1D0
30030           RT(2,2) = RT(1,1)
30031           RT(1,2) = 0D0
30032           RT(2,1) = -RT(1,2)
30033         ENDIF
30034   100   CONTINUE
30035         IT=IT+1
30036  
30037         DO 140 I=1,2
30038           DO 130 JJ=1,2
30039             DI(I,JJ)=0D0
30040             DO 120 II=1,2
30041               DO 110 J=1,2
30042                 DI(I,JJ)=DI(I,JJ)+RT(I,J)*AM2(J,II)*RT(JJ,II)
30043   110         CONTINUE
30044   120       CONTINUE
30045   130     CONTINUE
30046   140   CONTINUE
30047  
30048         IF(DI(1,1).GT.DI(2,2)) THEN
30049           WRITE(MSTU(11),*) ' ERROR IN DIAGONALIZATION '
30050           WRITE(MSTU(11),*) L,SQRT(XMF12),SQRT(XMF22)
30051           WRITE(MSTU(11),*) AM2
30052           WRITE(MSTU(11),*) DI
30053           WRITE(MSTU(11),*) RT
30054           DI(1,1)=-RT(2,1)
30055           DI(2,2)=RT(1,2)
30056           DI(1,2)=-RT(2,2)
30057           DI(2,1)=RT(1,1)
30058           DO 160 I=1,2
30059             DO 150 J=1,2
30060               RT(I,J)=DI(I,J)
30061   150       CONTINUE
30062   160     CONTINUE
30063           GOTO 100
30064         ELSEIF(ABS(DI(1,2)*DI(2,1)/DI(1,1)/DI(2,2)).GT.SMALL) THEN
30065           WRITE(MSTU(11),*) ' ERROR IN DIAGONALIZATION,'//
30066      &    ' OFF DIAGONAL ELEMENTS '
30067           WRITE(MSTU(11),*) 'MASSES = ',L,SQRT(XMF12),SQRT(XMF22)
30068           WRITE(MSTU(11),*) DI
30069           WRITE(MSTU(11),*) ' ROTATION = ',RT
30070 C...STOP
30071         ELSEIF(DI(1,1).LT.0D0.OR.DI(2,2).LT.0D0) THEN
30072           WRITE(MSTU(11),*) ' ERROR IN DIAGONALIZATION,'//
30073      &    ' NEGATIVE MASSES '
30074           STOP
30075         ENDIF
30076         PMAS(PYCOMP(KSUSY1+IF),1)=SQRT(XMF12)
30077         PMAS(PYCOMP(KSUSY2+IF),1)=SQRT(XMF22)
30078         SFMIX(IF,1)=RT(1,1)
30079         SFMIX(IF,2)=RT(1,2)
30080         SFMIX(IF,3)=RT(2,1)
30081         SFMIX(IF,4)=RT(2,2)
30082   170 CONTINUE
30083  
30084       RETURN
30085       END
30086  
30087 C*********************************************************************
30088  
30089 C...PYINOM
30090 C...Finds the mass eigenstates and mixing matrices for neutralinos
30091 C...and charginos.
30092  
30093       SUBROUTINE PYINOM
30094  
30095 C...Double precision and integer declarations.
30096       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
30097       IMPLICIT INTEGER(I-N)
30098       INTEGER PYK,PYCHGE,PYCOMP
30099 C...Parameter statement to help give large particle numbers.
30100       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
30101 C...Commonblocks.
30102       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
30103       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
30104       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
30105       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
30106      &SFMIX(16,4)
30107       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
30108  
30109 C...Local variables.
30110       DOUBLE PRECISION XMW,XMZ
30111       DOUBLE PRECISION AR(4,4),WR(4),ZR(4,4)
30112       DOUBLE PRECISION ZP(4,4)
30113       DOUBLE PRECISION DETX,XI(2,2)
30114       DOUBLE PRECISION XXX,YYY,XMH,XML
30115       DOUBLE PRECISION COSW,SINW
30116       DOUBLE PRECISION XMU
30117       DOUBLE PRECISION TERMB,TERMC,DISCR,XMH2,XML2
30118       DOUBLE PRECISION TANB,AL,BE,COSA,COSB,SINA,SINB,XW
30119       DOUBLE PRECISION XM1,XM2,XM3,BETA
30120       DOUBLE PRECISION Q2,AEM,A1,A2,A3,AQ,RM1,RM2
30121       DOUBLE PRECISION ARG,X0,X1,AX0,AX1,AT,BT
30122       DOUBLE PRECISION Y0,Y1,AMGX0,AM1X0,AMGX1,AM1X1
30123       DOUBLE PRECISION ARGX0,AR1X0,ARGX1,AR1X1
30124       DOUBLE PRECISION PYALPS,PYALEM
30125       DOUBLE PRECISION PYRNM3
30126       INTEGER IERR,INDEX(4),I,J,K,L,IOPT,ILR,KFNCHI(4)
30127       DATA KFNCHI/1000022,1000023,1000025,1000035/
30128  
30129       IOPT=IMSS(2)
30130       IF(IMSS(1).EQ.2) THEN
30131         IOPT=1
30132       ENDIF
30133 C...M1, M2, AND M3 ARE INDEPENDENT
30134       IF(IOPT.EQ.0) THEN
30135         XM1=RMSS(1)
30136         XM2=RMSS(2)
30137         XM3=RMSS(3)
30138       ELSEIF(IOPT.GE.1) THEN
30139         Q2=PMAS(23,1)**2
30140         AEM=PYALEM(Q2)
30141         A2=AEM/PARU(102)
30142         A1=AEM/(1D0-PARU(102))
30143         XM1=RMSS(1)
30144         XM2=RMSS(2)
30145         IF(IMSS(1).EQ.2) XM1=RMSS(1)/RMSS(20)*A1*5D0/3D0
30146         IF(IOPT.EQ.1) THEN
30147           XM2=XM1*A2/A1*3D0/5D0
30148           RMSS(2)=XM2
30149         ELSEIF(IOPT.EQ.3) THEN
30150           XM1=XM2*5D0/3D0*A1/A2
30151           RMSS(1)=XM1
30152         ENDIF
30153         XM3=PYRNM3(XM2/A2)
30154         RMSS(3)=XM3
30155         IF(XM3.LE.0D0) THEN
30156           WRITE(MSTU(11),*) ' ERROR WITH M3 = ',XM3
30157           STOP
30158         ENDIF
30159       ENDIF
30160  
30161 C...GLUINO MASS
30162       IF(IMSS(3).EQ.1) THEN
30163         PMAS(PYCOMP(KSUSY1+21),1)=XM3
30164       ELSE
30165         AQ=0D0
30166         DO 110 I=1,4
30167           DO 100 ILR=1,2
30168             RM1=PMAS(PYCOMP(ILR*KSUSY1+I),1)**2/XM3**2
30169             AQ=AQ+0.5D0*((2D0-RM1)*(RM1*LOG(RM1)-1D0)
30170      &      +(1D0-RM1)**2*LOG(ABS(1D0-RM1)))
30171   100     CONTINUE
30172   110   CONTINUE
30173  
30174         DO 130 I=5,6
30175           DO 120 ILR=1,2
30176             RM1=PMAS(PYCOMP(ILR*KSUSY1+I),1)**2/XM3**2
30177             RM2=PMAS(I,1)**2/XM3**2
30178             ARG=(RM1-RM2-1D0)**2-4D0*RM2**2
30179             IF(ARG.GE.0D0) THEN
30180               X0=0.5D0*(1D0+RM2-RM1-SQRT(ARG))
30181               AX0=ABS(X0)
30182               X1=0.5D0*(1D0+RM2-RM1+SQRT(ARG))
30183               AX1=ABS(X1)
30184               IF(X0.EQ.1D0) THEN
30185                 AT=-1D0
30186                 BT=0.25D0
30187               ELSEIF(X0.EQ.0D0) THEN
30188                 AT=0D0
30189                 BT=-0.25D0
30190               ELSE
30191                 AT=0.5D0*LOG(ABS(1D0-X0))*(1D0-X0**2)+
30192      &          0.5D0*X0**2*LOG(AX0)
30193                 BT=(-1D0-2D0*X0)/4D0
30194               ENDIF
30195               IF(X1.EQ.1D0) THEN
30196                 AT=-1D0+AT
30197                 BT=0.25D0+BT
30198               ELSEIF(X1.EQ.0D0) THEN
30199                 AT=0D0+AT
30200                 BT=-0.25D0+BT
30201               ELSE
30202                 AT=0.5D0*LOG(ABS(1D0-X1))*(1D0-X1**2)+0.5D0*
30203      &          X1**2*LOG(AX1)+AT
30204                 BT=(-1D0-2D0*X1)/4D0+BT
30205               ENDIF
30206               AQ=AQ+AT+BT
30207             ELSE
30208               X0=0.5D0*(1D0+RM2-RM1)
30209               Y0=-0.5D0*SQRT(-ARG)
30210               AMGX0=SQRT(X0**2+Y0**2)
30211               AM1X0=SQRT((1D0-X0)**2+Y0**2)
30212               ARGX0=ATAN2(-X0,-Y0)
30213               AR1X0=ATAN2(1D0-X0,Y0)
30214               X1=X0
30215               Y1=-Y0
30216               AMGX1=AMGX0
30217               AM1X1=AM1X0
30218               ARGX1=ATAN2(-X1,-Y1)
30219               AR1X1=ATAN2(1D0-X1,Y1)
30220               AT=0.5D0*LOG(AM1X0)*(1D0-X0**2+3D0*Y0**2)
30221      &        +0.5D0*(X0**2-Y0**2)*LOG(AMGX0)
30222               BT=(-1D0-2D0*X0)/4D0+X0*Y0*( AR1X0-ARGX0 )
30223               AT=AT+0.5D0*LOG(AM1X1)*(1D0-X1**2+3D0*Y1**2)
30224      &        +0.5D0*(X1**2-Y1**2)*LOG(AMGX1)
30225               BT=BT+(-1D0-2D0*X1)/4D0+X1*Y1*( AR1X1-ARGX1 )
30226               AQ=AQ+AT+BT
30227             ENDIF
30228   120     CONTINUE
30229   130   CONTINUE
30230         PMAS(PYCOMP(KSUSY1+21),1)=XM3*(1D0+PYALPS(XM3**2)/(2D0*PARU(2))*
30231      &  (15D0+AQ))
30232       ENDIF
30233  
30234 C...NEUTRALINO MASSES
30235       XMZ=PMAS(23,1)
30236       XMW=PMAS(24,1)
30237       XMU=RMSS(4)
30238       SINW=SQRT(PARU(102))
30239       COSW=SQRT(1D0-PARU(102))
30240       TANB=RMSS(5)
30241       BETA=ATAN(TANB)
30242       COSB=COS(BETA)
30243       SINB=TANB*COSB
30244       AR(1,1) = XM1
30245       AR(2,2) = XM2
30246       AR(3,3) = 0D0
30247       AR(4,4) = 0D0
30248       AR(1,2) = 0D0
30249       AR(2,1) = 0D0
30250       AR(1,3) = -XMZ*SINW*COSB
30251       AR(3,1) = AR(1,3)
30252       AR(1,4) = XMZ*SINW*SINB
30253       AR(4,1) = AR(1,4)
30254       AR(2,3) = XMZ*COSW*COSB
30255       AR(3,2) = AR(2,3)
30256       AR(2,4) = -XMZ*COSW*SINB
30257       AR(4,2) = AR(2,4)
30258       AR(3,4) = -XMU
30259       AR(4,3) = -XMU
30260       CALL PYEIG4(AR,WR,ZR)
30261       DO 150 I=1,4
30262         SMZ(I)=WR(I)
30263         PMAS(PYCOMP(KFNCHI(I)),1)=ABS(SMZ(I))
30264         DO 140 J=1,4
30265           ZMIX(I,J)=ZR(I,J)
30266           IF(ABS(ZMIX(I,J)).LT.1D-6) ZMIX(I,J)=0D0
30267   140   CONTINUE
30268   150 CONTINUE
30269  
30270 C...CHARGINO MASSES
30271       AR(1,1) = XM2
30272       AR(2,2) = XMU
30273       AR(1,2) = SQRT(2D0)*XMW*SINB
30274       AR(2,1) = SQRT(2D0)*XMW*COSB
30275       TERMB=AR(1,1)**2+AR(2,2)**2+AR(1,2)**2+AR(2,1)**2
30276       TERMC=(AR(1,1)**2-AR(2,2)**2)**2+(AR(1,2)**2-AR(2,1)**2)**2
30277       TERMC=TERMC+2D0*(AR(1,1)**2+AR(2,2)**2)*
30278      &(AR(1,2)**2+AR(2,1)**2)+
30279      &8D0*AR(1,1)*AR(2,2)*AR(1,2)*AR(2,1)
30280       DISCR=TERMC
30281       IF(DISCR.LT.0D0) THEN
30282         WRITE(MSTU(11),*) ' PROBLEM WITH DISCR '
30283       ELSE
30284         DISCR=SQRT(DISCR)
30285       ENDIF
30286       XML2=0.5D0*(TERMB-DISCR)
30287       XMH2=0.5D0*(TERMB+DISCR)
30288       XML=SQRT(XML2)
30289       XMH=SQRT(XMH2)
30290       PMAS(PYCOMP(KSUSY1+24),1)=XML
30291       PMAS(PYCOMP(KSUSY1+37),1)=XMH
30292       SMW(1)=XML
30293       SMW(2)=XMH
30294       XXX=AR(1,1)**2+AR(2,1)**2
30295       YYY=AR(1,1)*AR(1,2)+AR(2,2)*AR(2,1)
30296       VMIX(2,2) = YYY/SQRT(YYY**2+(XML2-XXX)**2)
30297       VMIX(1,1) = SIGN(VMIX(2,2),AR(1,1)*AR(2,2)-0.5D0*AR(1,2)**2)
30298       VMIX(2,1) = -(XML2-XXX)/SQRT(YYY**2+(XML2-XXX)**2)
30299       VMIX(1,2) = -SIGN(VMIX(2,1),AR(1,1)*AR(2,2)-0.5D0*AR(1,2)**2)
30300       ZR(1,1) = XML
30301       ZR(1,2) = 0D0
30302       ZR(2,1) = 0D0
30303       ZR(2,2) = XMH
30304       DETX = AR(1,1)*AR(2,2)-AR(1,2)*AR(2,1)
30305       XI(1,1) = AR(2,2)/DETX
30306       XI(2,2) = AR(1,1)/DETX
30307       XI(1,2) = -AR(1,2)/DETX
30308       XI(2,1) = -AR(2,1)/DETX
30309       DO 190 I=1,2
30310         DO 180 J=1,2
30311           UMIX(I,J)=0D0
30312           DO 170 K=1,2
30313             DO 160 L=1,2
30314               UMIX(I,J)=UMIX(I,J)+ZR(I,K)*VMIX(K,L)*XI(L,J)
30315   160       CONTINUE
30316   170     CONTINUE
30317   180   CONTINUE
30318   190 CONTINUE
30319  
30320       RETURN
30321       END
30322  
30323  
30324  
30325 C*********************************************************************
30326  
30327 C...PYRNM3
30328 C...Calculates the running of M3, the SU(3) gluino mass parameter.
30329  
30330       FUNCTION PYRNM3(RGUT)
30331  
30332 C...Double precision and integer declarations.
30333       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
30334       IMPLICIT INTEGER(I-N)
30335       INTEGER PYK,PYCHGE,PYCOMP
30336  
30337 C...Local variables.
30338       DOUBLE PRECISION PI,R
30339       DOUBLE PRECISION TOL
30340       EXTERNAL PYALPS
30341       DOUBLE PRECISION PYALPS
30342       DATA TOL/0.001D0/
30343       DATA PI,R/3.141592654D0,0.61803399D0/
30344  
30345       C=1D0-R
30346  
30347       BX=RGUT*PYALPS(RGUT**2)
30348       AX=MIN(50D0,BX*0.5D0)
30349       CX=MAX(2000D0,2D0*BX)
30350  
30351       X0=AX
30352       X3=CX
30353       IF(ABS(CX-BX).GT.ABS(BX-AX))THEN
30354         X1=BX
30355         X2=BX+C*(CX-BX)
30356       ELSE
30357         X2=BX
30358         X1=BX-C*(BX-AX)
30359       ENDIF
30360       AS1=PYALPS(X1**2)
30361       F1=ABS(X1-RGUT*AS1)
30362       AS2=PYALPS(X2**2)
30363       F2=ABS(X2-RGUT*AS2)
30364   100 IF(ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2))) THEN
30365         IF(F2.LT.F1) THEN
30366           X0=X1
30367           X1=X2
30368           X2=R*X1+C*X3
30369           F1=F2
30370           AS2=PYALPS(X2**2)
30371           F2=ABS(X2-RGUT*AS2)
30372         ELSE
30373           X3=X2
30374           X2=X1
30375           X1=R*X2+C*X0
30376           F2=F1
30377           AS1=PYALPS(X1**2)
30378           F1=ABS(X1-RGUT*AS1)
30379         ENDIF
30380         GOTO 100
30381       ENDIF
30382       IF(F1.LT.F2) THEN
30383         PYRNM3=X1
30384         XMIN=X1
30385       ELSE
30386         PYRNM3=X2
30387         XMIN=X2
30388       ENDIF
30389  
30390       RETURN
30391       END
30392  
30393 C*********************************************************************
30394  
30395 C...PYEIG4
30396 C...Finds eigenvalues and eigenvectors to a 4 * 4 matrix.
30397 C...Specific application: mixing in neutralino sector.
30398  
30399       SUBROUTINE PYEIG4(A,W,Z)
30400
30401 C...Double precision and integer declarations.
30402       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
30403       IMPLICIT INTEGER(I-N)
30404       INTEGER PYK,PYCHGE,PYCOMP
30405  
30406 C...Arrays: in call and local.
30407       DIMENSION A(4,4),W(4),Z(4,4),X(4),D(4,4),E(4)
30408  
30409 C...Coefficients of fourth-degree equation from matrix.
30410 C...x**4 + b3 * x**3 + b2 * x**2 + b1 * x + b0 = 0.
30411       B3=-(A(1,1)+A(2,2)+A(3,3)+A(4,4))
30412       B2=0D0
30413       DO 110 I=1,3
30414         DO 100 J=I+1,4
30415           B2=B2+A(I,I)*A(J,J)-A(I,J)*A(J,I)
30416   100   CONTINUE
30417   110 CONTINUE
30418       B1=0D0
30419       B0=0D0
30420       DO 120 I=1,4
30421         I1=MOD(I,4)+1
30422         I2=MOD(I+1,4)+1
30423         I3=MOD(I+2,4)+1
30424         B1=B1+A(I,I)*(-A(I1,I1)*A(I2,I2)+A(I1,I2)*A(I2,I1)+
30425      &  A(I1,I3)*A(I3,I1)+A(I2,I3)*A(I3,I2))-
30426      &  A(I,I1)*A(I1,I2)*A(I2,I)-A(I,I2)*A(I2,I1)*A(I1,I)
30427         B0=B0+(-1D0)**(I+1)*A(1,I)*(
30428      &  A(2,I1)*(A(3,I2)*A(4,I3)-A(3,I3)*A(4,I2))+
30429      &  A(2,I2)*(A(3,I3)*A(4,I1)-A(3,I1)*A(4,I3))+
30430      &  A(2,I3)*(A(3,I1)*A(4,I2)-A(3,I2)*A(4,I1)))
30431   120 CONTINUE
30432  
30433 C...Coefficients of third-degree equation needed for
30434 C...separation into two second-degree equations.
30435 C...u**3 + c2 * u**2 + c1 * u + c0 = 0.
30436       C2=-B2
30437       C1=B1*B3-4D0*B0
30438       C0=-B1**2-B0*B3**2+4D0*B0*B2
30439       CQ=C1/3D0-C2**2/9D0
30440       CR=C1*C2/6D0-C0/2D0-C2**3/27D0
30441       CQR=CQ**3+CR**2
30442  
30443 C...Cases with one or three real roots.
30444       IF(CQR.GE.0D0) THEN
30445         S1=(CR+SQRT(CQR))**(1D0/3D0)
30446         S2=(CR-SQRT(CQR))**(1D0/3D0)
30447         U=S1+S2-C2/3D0
30448       ELSE
30449         SABS=SQRT(-CQ)
30450         THE=ACOS(CR/SABS**3)/3D0
30451         SRE=SABS*COS(THE)
30452         U=2D0*SRE-C2/3D0
30453       ENDIF
30454  
30455 C...Find and solve two second-degree equations.
30456       P1=B3/2D0-SQRT(B3**2/4D0+U-B2)
30457       P2=B3/2D0+SQRT(B3**2/4D0+U-B2)
30458       Q1=U/2D0+SQRT(U**2/4D0-B0)
30459       Q2=U/2D0-SQRT(U**2/4D0-B0)
30460       IF(ABS(P1*Q1+P2*Q2-B1).LT.ABS(P1*Q2+P2*Q1-B1)) THEN
30461         QSAV=Q1
30462         Q1=Q2
30463         Q2=QSAV
30464       ENDIF
30465       X(1)=-P1/2D0+SQRT(P1**2/4D0-Q1)
30466       X(2)=-P1/2D0-SQRT(P1**2/4D0-Q1)
30467       X(3)=-P2/2D0+SQRT(P2**2/4D0-Q2)
30468       X(4)=-P2/2D0-SQRT(P2**2/4D0-Q2)
30469  
30470 C...Order eigenvalues in asceding mass.
30471       W(1)=X(1)
30472       DO 150 I1=2,4
30473         DO 130 I2=I1-1,1,-1
30474           IF(ABS(X(I1)).GE.ABS(W(I2))) GOTO 140
30475           W(I2+1)=W(I2)
30476   130   CONTINUE
30477   140   W(I2+1)=X(I1)
30478   150 CONTINUE
30479  
30480 C...Find equation system for eigenvectors.
30481       DO 250 I=1,4
30482         DO 170 J1=1,4
30483           D(J1,J1)=A(J1,J1)-W(I)
30484           DO 160 J2=J1+1,4
30485             D(J1,J2)=A(J1,J2)
30486             D(J2,J1)=A(J2,J1)
30487   160     CONTINUE
30488   170   CONTINUE
30489  
30490 C...Find largest element in matrix.
30491         DAMAX=0D0
30492         DO 190 J1=1,4
30493           DO 180 J2=1,4
30494             IF(ABS(D(J1,J2)).LE.DAMAX) GOTO 180
30495             JA=J1
30496             JB=J2
30497             DAMAX=ABS(D(J1,J2))
30498   180     CONTINUE
30499   190   CONTINUE
30500  
30501 C...Subtract others by multiple of row selected above.
30502         DAMAX=0D0
30503         DO 210 J3=JA+1,JA+3
30504           J1=J3-4*((J3-1)/4)
30505           RL=D(J1,JB)/D(JA,JB)
30506           DO 200 J2=1,4
30507             D(J1,J2)=D(J1,J2)-RL*D(JA,J2)
30508             IF(ABS(D(J1,J2)).LE.DAMAX) GOTO 200
30509             JC=J1
30510             JD=J2
30511             DAMAX=ABS(D(J1,J2))
30512   200     CONTINUE
30513   210   CONTINUE
30514  
30515 C...Do one more subtraction of a row.
30516         DAMAX=0D0
30517         DO 230 J3=JC+1,JC+3
30518           J1=J3-4*((J3-1)/4)
30519           IF(J1.EQ.JA) GOTO 230
30520           RL=D(J1,JD)/D(JC,JD)
30521           DO 220 J2=1,4
30522             IF(J2.EQ.JB) GOTO 220
30523             D(J1,J2)=D(J1,J2)-RL*D(JC,J2)
30524             IF(ABS(D(J1,J2)).LE.DAMAX) GOTO 220
30525             JE=J1
30526             DAMAX=ABS(D(J1,J2))
30527   220     CONTINUE
30528   230   CONTINUE
30529  
30530 C...Construct unnormalized eigenvector.
30531         JF1=JD+1-4*(JD/4)
30532         JF2=JD+2-4*((JD+1)/4)
30533         IF(JF1.EQ.JB) JF1=JD+3-4*((JD+2)/4)
30534         IF(JF2.EQ.JB) JF2=JD+3-4*((JD+2)/4)
30535         E(JF1)=-D(JE,JF2)
30536         E(JF2)=D(JE,JF1)
30537         E(JD)=-(D(JC,JF1)*E(JF1)+D(JC,JF2)*E(JF2))/D(JC,JD)
30538         E(JB)=-(D(JA,JF1)*E(JF1)+D(JA,JF2)*E(JF2)+D(JA,JD)*E(JD))/
30539      &  D(JA,JB)
30540  
30541 C...Normalize and fill in final array.
30542         EA=SQRT(E(1)**2+E(2)**2+E(3)**2+E(4)**2)
30543         SGN=(-1D0)**INT(PYR(0)+0.5D0)
30544         DO 240 J=1,4
30545           Z(I,J)=SGN*E(J)/EA
30546   240   CONTINUE
30547   250 CONTINUE
30548  
30549       RETURN
30550       END
30551  
30552 C*********************************************************************
30553  
30554 C...PYHGGM
30555 C...Determines the Higgs boson mass spectrum using several inputs.
30556  
30557       SUBROUTINE PYHGGM(ALPHA)
30558  
30559 C...Double precision and integer declarations.
30560       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
30561       IMPLICIT INTEGER(I-N)
30562       INTEGER PYK,PYCHGE,PYCOMP
30563 C...Parameter statement to help give large particle numbers.
30564       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
30565 C...Commonblocks.
30566       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
30567       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
30568       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
30569       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
30570       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYMSSM/
30571  
30572 C...Local variables.
30573       DOUBLE PRECISION AT,AB,XMU,TANB,XM32,XMT2
30574       DOUBLE PRECISION ALPHA
30575       INTEGER I,J,IHOPT,II,JJ,IT
30576       DOUBLE PRECISION DMA,DTANB,DMQ,DMUR,DMTOP,DAU,DAD
30577       DOUBLE PRECISION DMU,DMH,DHM,DMHCH,DSA,DCA,DTANBA
30578       DOUBLE PRECISION DMC,DMDR,DMHP,DHMP,DAMP
30579       DOUBLE PRECISION DSTOP1,DSTOP2,DSBOT1,DSBOT2
30580  
30581       IHOPT=IMSS(4)
30582       IF(IHOPT.EQ.2) THEN
30583         ALPHA=RMSS(18)
30584         RETURN
30585       ENDIF
30586       AT=RMSS(16)
30587       AB=RMSS(15)
30588       XMU=RMSS(4)
30589       TANB=RMSS(5)
30590  
30591       DMA=RMSS(19)
30592       DTANB=TANB
30593       DMQ=RMSS(10)
30594       DMUR=RMSS(12)
30595       DMDR=RMSS(11)
30596       DMTOP=PMAS(6,1)
30597       DMC=PMAS(PYCOMP(KSUSY1+37),1)
30598       DAU=AT
30599       DAD=AB
30600       DMU=XMU
30601  
30602       IF(IHOPT.EQ.0) THEN
30603         CALL PYSUBH (DMA,DTANB,DMQ,DMUR,DMTOP,DAU,DAD,DMU,DMH,DHM,
30604      &  DMHCH,DSA,DCA,DTANBA)
30605       ELSEIF(IHOPT.EQ.1) THEN
30606         CALL PYSUBH (DMA,DTANB,DMQ,DMUR,DMTOP,DAU,DAD,DMU,DMH,DHM,
30607      &  DMHCH,DSA,DCA,DTANBA)
30608         CALL PYPOLE(3,DMC,DMA,DTANB,DMQ,DMUR,DMDR,DMTOP,DAU,DAD,DMU,
30609      &  DMH,DMHP,DHM,DHMP,DAMP,DSA,DCA,
30610      &  DSTOP1,DSTOP2,DSBOT1,DSBOT2,DTANBA)
30611         DMH=DMHP
30612         DHM=DHMP
30613         DMA=DAMP
30614         IF(ABS(PMAS(PYCOMP(1000006),1)-DSTOP2).GT.5D-1) THEN
30615          WRITE(MSTU(11),*) ' STOP1 MASS DOES NOT MATCH IN PYHGGM '
30616          WRITE(MSTU(11),*) ' STOP1 MASSES = ',
30617      & PMAS(PYCOMP(1000006),1),DSTOP2
30618         ENDIF
30619         IF(ABS(PMAS(PYCOMP(2000006),1)-DSTOP1).GT.5D-1) THEN
30620          WRITE(MSTU(11),*) ' STOP2 MASS DOES NOT MATCH IN PYHGGM '
30621          WRITE(MSTU(11),*) ' STOP2 MASSES = ',
30622      & PMAS(PYCOMP(2000006),1),DSTOP1
30623         ENDIF
30624         IF(ABS(PMAS(PYCOMP(1000005),1)-DSBOT2).GT.5D-1) THEN
30625          WRITE(MSTU(11),*) ' SBOT1 MASS DOES NOT MATCH IN PYHGGM '
30626          WRITE(MSTU(11),*) ' SBOT1 MASSES = ',
30627      & PMAS(PYCOMP(1000005),1),DSBOT2
30628         ENDIF
30629         IF(ABS(PMAS(PYCOMP(2000005),1)-DSBOT1).GT.5D-1) THEN
30630          WRITE(MSTU(11),*) ' SBOT2 MASS DOES NOT MATCH IN PYHGGM '
30631          WRITE(MSTU(11),*) ' SBOT2 MASSES = ',
30632      & PMAS(PYCOMP(2000005),1),DSBOT1
30633         ENDIF
30634  
30635       ENDIF
30636  
30637       ALPHA=ACOS(DCA)
30638  
30639       PMAS(25,1)=DMH
30640       PMAS(35,1)=DHM
30641       PMAS(36,1)=DMA
30642       PMAS(37,1)=DMHCH
30643  
30644       RETURN
30645       END
30646  
30647 C*********************************************************************
30648  
30649 C...PYSUBH
30650 C...This routine computes the renormalization group improved
30651 C...values of Higgs masses and couplings in the MSSM.
30652  
30653 C...Program based on the work by M. Carena, J.R. Espinosa,
30654 c...M. Quiros and C.E.M. Wagner, CERN-preprint CERN-TH/95-45
30655  
30656 C...Input: MA,TANB = TAN(BETA),MQ,MUR,MTOP,AU,AD,MU
30657 C...All masses in GeV units. MA is the CP-odd Higgs mass,
30658 C...MTOP is the physical top mass, MQ and MUR are the soft
30659 C...supersymmetry breaking mass parameters of left handed
30660 C...and right handed stops respectively, AU and AD are the
30661 C...stop and sbottom trilinear soft breaking terms,
30662 C...respectively,  and MU is the supersymmetric
30663 C...Higgs mass parameter. We use the  conventions from
30664 C...the physics report of Haber and Kane: left right
30665 C...stop mixing term proportional to (AU - MU/TANB)
30666 C...We use as input TANB defined at the scale MTOP
30667  
30668 C...Output: MH,HM,MHCH, SA = SIN(ALPHA), CA= COS(ALPHA), TANBA
30669 C...where MH and HM are the lightest and heaviest CP-even
30670 C...Higgs masses, MHCH is the charged Higgs mass and
30671 C...ALPHA is the Higgs mixing angle
30672 C...TANBA is the angle TANB at the CP-odd Higgs mass scale
30673  
30674 C...Range of validity:
30675 C...(STOP1**2 - STOP2**2)/(STOP2**2 + STOP1**2) < 0.5
30676 C...(SBOT1**2 - SBOT2**2)/(SBOT2**2 + SBOT2**2) < 0.5
30677 C...where STOP1, STOP2, SBOT1 and SBOT2 are the stop and
30678 C...are the sbottom  mass eigenvalues, respectively. This
30679 C...range automatically excludes the existence of tachyons.
30680 C...For the charged Higgs mass computation, the method is
30681 C...valid if
30682 C...2 * |MB * AD* TANB|  < M_SUSY**2,  2 * |MTOP * AU| < M_SUSY**2
30683 C...2 * |MB * MU * TANB| < M_SUSY**2,  2 * |MTOP * MU| < M_SUSY**2
30684 C...where M_SUSY**2 is the average of the squared stop mass
30685 C...eigenvalues, M_SUSY**2 = (STOP1**2 + STOP2**2)/2. The sbottom
30686 C...masses have been assumed to be of order of the stop ones
30687 C...M_SUSY**2 = (MQ**2 + MUR**2)*0.5 + MTOP**2
30688  
30689       SUBROUTINE PYSUBH (XMA,TANB,XMQ,XMUR,XMTOP,AU,AD,XMU,XMH,XHM,
30690      &XMHCH,SA,CA,TANBA)
30691  
30692 C...Double precision and integer declarations.
30693       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
30694       IMPLICIT INTEGER(I-N)
30695       INTEGER PYK,PYCHGE,PYCOMP
30696 C...Parameter statement to help give large particle numbers.
30697       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
30698 C...Commonblocks.
30699       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
30700       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
30701       COMMON/PYHTRI/HHH(7)
30702       SAVE /PYDAT1/,/PYDAT2/
30703  
30704 C...Local variables.
30705       DOUBLE PRECISION PYALEM,PYALPS
30706       DOUBLE PRECISION TANB,XMQ,XMUR,XMTOP,AU,AD,XMU,XMH,XHM
30707       DOUBLE PRECISION XMHCH,SA,CA
30708       DOUBLE PRECISION XMA,AEM,ALP1,ALP2,ALPH3Z,V,PI
30709       DOUBLE PRECISION Q02
30710       DOUBLE PRECISION TANBA,TANBT,XMB,ALP3
30711       DOUBLE PRECISION RMTOP,XMS,T,SINB,COSB
30712       DOUBLE PRECISION XLAM1,XLAM2,XLAM3,XLAM4,XLAM5,XLAM6
30713       DOUBLE PRECISION XLAM7,XAU,XAD,G1,G2,G3,HU,HD,HU2
30714       DOUBLE PRECISION HD2,HU4,HD4,SINBT,COSBT
30715       DOUBLE PRECISION TRM2,DETM2,XMH2,XHM2,XMHCH2
30716       DOUBLE PRECISION SINALP,COSALP,AUD,PI2,XMS2,XMS4,AD2
30717       DOUBLE PRECISION COS2BT,AU2,XMU2,XMZ,XMS3
30718  
30719       XMZ = PMAS(23,1)
30720       Q02=XMZ**2
30721       AEM=PYALEM(Q02)
30722       ALP1=AEM/(1D0-PARU(102))
30723       ALP2=AEM/PARU(102)
30724       ALPH3Z=PYALPS(Q02)
30725  
30726       ALP1 = 0.0101D0
30727       ALP2 = 0.0337D0
30728       ALPH3Z = 0.12D0
30729  
30730       V = 174.1D0
30731       PI = PARU(1)
30732       TANBA = TANB
30733       TANBT = TANB
30734  
30735 C...MBOTTOM(MTOP) = 3. GEV
30736       XMB = 3D0
30737       ALP3 = ALPH3Z/(1D0 +(11D0 - 10D0/3D0)/4D0/PI*ALPH3Z*
30738      &LOG(XMTOP**2/XMZ**2))
30739  
30740 C...RMTOP= RUNNING TOP QUARK MASS
30741       RMTOP = XMTOP/(1D0+4D0*ALP3/3D0/PI)
30742       XMS = ((XMQ**2 + XMUR**2)/2D0 + XMTOP**2)**0.5D0
30743       T = LOG(XMS**2/XMTOP**2)
30744       SINB = TANB/((1D0 + TANB**2)**0.5D0)
30745       COSB = SINB/TANB
30746 C...IF(MA.LE.XMTOP) TANBA = TANBT
30747       IF(XMA.GT.XMTOP)
30748      &TANBA = TANBT*(1D0-3D0/32D0/PI**2*
30749      &(RMTOP**2/V**2/SINB**2-XMB**2/V**2/COSB**2)*
30750      &LOG(XMA**2/XMTOP**2))
30751  
30752       SINBT = TANBT/SQRT(1D0 + TANBT**2)
30753       COSBT = 1D0/SQRT(1D0 + TANBT**2)
30754       COS2BT = (TANBT**2 - 1D0)/(TANBT**2 + 1D0)
30755       G1 = SQRT(ALP1*4D0*PI)
30756       G2 = SQRT(ALP2*4D0*PI)
30757       G3 = SQRT(ALP3*4D0*PI)
30758       HU = RMTOP/V/SINBT
30759       HD =  XMB/V/COSBT
30760       HU2=HU*HU
30761       HD2=HD*HD
30762       HU4=HU2*HU2
30763       HD4=HD2*HD2
30764       AU2=AU**2
30765       AD2=AD**2
30766       XMS2=XMS**2
30767       XMS3=XMS**3
30768       XMS4=XMS2*XMS2
30769       XMU2=XMU*XMU
30770       PI2=PI*PI
30771  
30772       XAU = (2D0*AU2/XMS2)*(1D0 - AU2/12D0/XMS2)
30773       XAD = (2D0*AD2/XMS2)*(1D0 - AD2/12D0/XMS2)
30774       AUD = (-6D0*XMU2/XMS2 - ( XMU2- AD*AU)**2/XMS4
30775      &+ 3D0*(AU + AD)**2/XMS2)/6D0
30776       XLAM1 = ((G1**2 + G2**2)/4D0)*(1D0-3D0*HD2*T/8D0/PI2)
30777      &+(3D0*HD4/8D0/PI2) * (T + XAD/2D0 + (3D0*HD2/2D0 + HU2/2D0
30778      &- 8D0*G3**2) * (XAD*T + T**2)/16D0/PI2)
30779      &-(3D0*HU4* XMU**4/96D0/PI2/XMS4) * (1+ (9D0*HU2 -5D0* HD2
30780      &-  16D0*G3**2) *T/16D0/PI2)
30781       XLAM2 = ((G1**2 + G2**2)/4D0)*(1D0-3D0*HU2*T/8D0/PI2)
30782      &+(3D0*HU4/8D0/PI2) * (T + XAU/2D0 + (3D0*HU2/2D0 + HD2/2D0
30783      &- 8D0*G3**2) * (XAU*T + T**2)/16D0/PI2)
30784      &-(3D0*HD4* XMU**4/96D0/PI2/XMS4) * (1+ (9D0*HD2 -5D0* HU2
30785      &-  16D0*G3**2) *T/16D0/PI2)
30786       XLAM3 = ((G2**2 - G1**2)/4D0)*(1D0-3D0*
30787      &(HU2 + HD2)*T/16D0/PI2)
30788      &+(6D0*HU2*HD2/16D0/PI2) * (T + AUD/2D0 + (HU2 + HD2
30789      &- 8D0*G3**2) * (AUD*T + T**2)/16D0/PI2)
30790      &+(3D0*HU4/96D0/PI2) * (3D0*XMU2/XMS2 - XMU2*AU2/
30791      &XMS4)* (1D0+ (6D0*HU2 -2D0* HD2/2D0
30792      &-  16D0*G3**2) *T/16D0/PI2)
30793      &+(3D0*HD4/96D0/PI2) * (3D0*XMU2/XMS2 - XMU2*AD2/
30794      &XMS4)*(1D0+ (6D0*HD2 -2D0* HU2
30795      &-  16D0*G3**2) *T/16D0/PI2)
30796       XLAM4 = (- G2**2/2D0)*(1D0-3D0*(HU2 + HD2)*T/16D0/PI2)
30797      &-(6D0*HU2*HD2/16D0/PI2) * (T + AUD/2D0 + (HU2 + HD2
30798      &- 8D0*G3**2) * (AUD*T + T**2)/16D0/PI2)
30799      &+(3D0*HU4/96D0/PI2) * (3D0*XMU2/XMS2 - XMU2*AU2/
30800      &XMS4)*
30801      &(1+ (6D0*HU2 -2D0* HD2
30802      &-  16D0*G3**2) *T/16D0/PI2)
30803      &+(3D0*HD4/96D0/PI2) * (3D0*XMU2/XMS2 - XMU2*AD2/
30804      &XMS4)*
30805      &(1+ (6D0*HD2 -2D0* HU2/2D0
30806      &-  16D0*G3**2) *T/16D0/PI2)
30807       XLAM5 = -(3D0*HU4* XMU2*AU2/96D0/PI2/XMS4) *
30808      &(1- (2D0*HD2 -6D0* HU2 + 16D0*G3**2) *T/16D0/PI2)
30809      &-(3D0*HD4* XMU2*AD2/96D0/PI2/XMS4) *
30810      &(1- (2D0*HU2 -6D0* HD2 + 16D0*G3**2) *T/16D0/PI2)
30811       XLAM6 = (3D0*HU4* XMU**3*AU/96D0/PI2/XMS4) *
30812      &(1- (7D0*HD2/2D0 -15D0* HU2/2D0 + 16D0*G3**2) *T/16D0/PI2)
30813      &+(3D0*HD4* XMU *(AD**3/XMS3 - 6D0*AD/XMS )/96D0/PI2/XMS) *
30814      &(1- (HU2/2D0 -9D0* HD2/2D0 + 16D0*G3**2) *T/16D0/PI2)
30815       XLAM7 = (3D0*HD4* XMU**3*AD/96D0/PI2/XMS4) *
30816      &(1- (7D0*HU2/2D0 -15D0* HD2/2D0 + 16D0*G3**2) *T/16D0/PI2)
30817      &+(3D0*HU4* XMU *(AU**3/XMS3 - 6D0*AU/XMS )/96D0/PI2/XMS) *
30818      &(1- (HD2/2D0 -9D0* HU2/2D0 + 16D0*G3**2) *T/16D0/PI2)
30819       HHH(1)=XLAM1
30820       HHH(2)=XLAM2
30821       HHH(3)=XLAM3
30822       HHH(4)=XLAM4
30823       HHH(5)=XLAM5
30824       HHH(6)=XLAM6
30825       HHH(7)=XLAM7
30826       TRM2 = XMA**2 + 2D0*V**2* (XLAM1* COSBT**2 +
30827      &2D0* XLAM6*SINBT*COSBT
30828      &+ XLAM5*SINBT**2 + XLAM2* SINBT**2 + 2D0* XLAM7*SINBT*COSBT
30829      &+ XLAM5*COSBT**2)
30830       DETM2 = 4D0*V**4*(-(SINBT*COSBT*(XLAM3 + XLAM4) +
30831      &XLAM6*COSBT**2
30832      &+ XLAM7* SINBT**2)**2 + (XLAM1* COSBT**2 +
30833      &2D0* XLAM6* COSBT*SINBT
30834      &+ XLAM5*SINBT**2)*(XLAM2* SINBT**2 +2D0* XLAM7* COSBT*SINBT
30835      &+ XLAM5*COSBT**2)) + XMA**2*2D0*V**2 *
30836      &((XLAM1* COSBT**2 +2D0*
30837      &XLAM6* COSBT*SINBT + XLAM5*SINBT**2)*COSBT**2 +
30838      &(XLAM2* SINBT**2 +2D0* XLAM7* COSBT*SINBT + XLAM5*COSBT**2)
30839      &*SINBT**2
30840      &+2D0*SINBT*COSBT* (SINBT*COSBT*(XLAM3
30841      &+ XLAM4) + XLAM6*COSBT**2
30842      &+ XLAM7* SINBT**2))
30843  
30844       XMH2 = (TRM2 - SQRT(TRM2**2 - 4D0* DETM2))/2D0
30845       XHM2 = (TRM2 + SQRT(TRM2**2 - 4D0* DETM2))/2D0
30846       XHM = SQRT(XHM2)
30847       XMH = SQRT(XMH2)
30848       XMHCH2 = XMA**2 + (XLAM5 - XLAM4)* V**2
30849       XMHCH = SQRT(XMHCH2)
30850  
30851       SINALP = SQRT(((TRM2**2 - 4D0* DETM2)**0.5D0) -
30852      &((2D0*V**2*(XLAM1* COSBT**2 + 2D0*
30853      &XLAM6* COSBT*SINBT
30854      &+ XLAM5*SINBT**2) + XMA**2*SINBT**2)
30855      &- (2D0*V**2*(XLAM2* SINBT**2 +2D0* XLAM7* COSBT*SINBT
30856      &+ XLAM5*COSBT**2) + XMA**2*COSBT**2)))/
30857      &SQRT(((TRM2**2 - 4D0* DETM2)**0.5D0))/2D0**0.5D0
30858  
30859       COSALP = (2D0*(2D0*V**2*(SINBT*COSBT*(XLAM3 + XLAM4) +
30860      &XLAM6*COSBT**2 + XLAM7* SINBT**2) -
30861      &XMA**2*SINBT*COSBT))/2D0**0.5D0/
30862      &SQRT(((TRM2**2 - 4D0* DETM2)**0.5D0)*
30863      &(((TRM2**2 - 4D0* DETM2)**0.5D0) -
30864      &((2D0*V**2*(XLAM1* COSBT**2 + 2D0*
30865      &XLAM6* COSBT*SINBT
30866      &+ XLAM5*SINBT**2) + XMA**2*SINBT**2)
30867      &- (2D0*V**2*(XLAM2* SINBT**2 +2D0* XLAM7* COSBT*SINBT
30868      &+ XLAM5*COSBT**2) + XMA**2*COSBT**2))))
30869  
30870       SA = -SINALP
30871       CA = -COSALP
30872  
30873   100 CONTINUE
30874  
30875       RETURN
30876       END
30877  
30878 C*********************************************************************
30879  
30880 C...PYPOLE
30881 C...This subroutine computes the CP-even higgs and CP-odd pole
30882 c...Higgs masses and mixing angles.
30883  
30884 C...Program based on the work by M. Carena, M. Quiros
30885 C...and C.E.M. Wagner, "Effective potential methods and
30886 C...the Higgs mass spectrum in the MSSM", CERN-TH/95-157
30887  
30888 C...Inputs: IHIGGS(explained below),MCHI,MA,TANB,MQ,MUR,MDR,MTOP,
30889 C...AT,AB,MU
30890 C...where MCHI is the largest chargino mass, MA is the running
30891 C...CP-odd higgs mass, TANB is the value of the ratio of vacuum
30892 C...expectaion values at the scale MTOP, MQ is the third generation
30893 C...left handed squark mass parameter, MUR is the third generation
30894 C...right handed stop mass parameter, MDR is the third generation
30895 C...right handed sbottom mass parameter, MTOP is the pole top quark
30896 C...mass; AT,AB are the soft supersymmetry breaking trilinear
30897 C...couplings of the stop and sbottoms, respectively, and MU is the
30898 C...supersymmetric mass parameter
30899  
30900 C...The parameter IHIGGS=0,1,2,3 corresponds to the
30901 c...number of Higgses whose pole mass is computed
30902 c...by the subroutine PYVACU(...). If IHIGGS=0 only running
30903 c...masses are given, what makes the running of the program
30904 c...much faster and it is quite generally a good approximation
30905 c...(for a theoretical discussion see ref. below).
30906 c...If IHIGGS=1, only the pole
30907 c...mass for H is computed. If IHIGGS=2, then h and H, and
30908 c...if IHIGGS=3, then h,H,A polarizations are computed
30909  
30910 C...Output: MH and MHP which are the lightest CP-even Higgs running
30911 C...and pole masses, respectively; HM and HMP are the heaviest CP-even
30912 C...Higgs running and pole masses, repectively; SA and CA are the
30913 C...SIN(ALPHA) and COS(ALPHA) where ALPHA is the Higgs mixing angle
30914 C...AMP is the CP-odd Higgs pole mass. STOP1,STOP2,SBOT1 and SBOT2
30915 C...are the stop and sbottom mass eigenvalues. Finally, TANBA is
30916 C...the value of TANB at the CP-odd Higgs mass scale
30917  
30918 C...This subroutine makes use of CERN library subroutine
30919 C...integration package, which makes the computation of the
30920 C...pole Higgs masses somewhat faster. We thank P. Janot for this
30921 C...improvement. Those who are not able to call the CERN
30922 C...libraries, please use the subroutine SUBHPOLE2.F, which
30923 C...although somewhat slower, gives identical results
30924  
30925       SUBROUTINE PYPOLE(IHIGGS,XMC,XMA,TANB,XMQ,XMUR,XMDR,XMT,AT,AB,XMU,
30926      &XMH,XMHP,HM,HMP,AMP,SA,CA,STOP1,STOP2,SBOT1,SBOT2,TANBA)
30927  
30928 C...Double precision and integer declarations.
30929       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
30930       IMPLICIT INTEGER(I-N)
30931  
30932 C...Parameters.
30933       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
30934       INTEGER PYK,PYCHGE,PYCOMP
30935  
30936 C...Local variables.
30937       DIMENSION DELTA(2,2),COUPT(2,2),T(2,2),SSTOP2(2),
30938      &SSBOT2(2),B(2,2),COUPB(2,2),
30939      &HCOUPT(2,2),HCOUPB(2,2),
30940      &ACOUPT(2,2),ACOUPB(2,2),PR(3), POLAR(3)
30941  
30942       DELTA(1,1) = 1D0
30943       DELTA(2,2) = 1D0
30944       DELTA(1,2) = 0D0
30945       DELTA(2,1) = 0D0
30946       V = 174.1D0
30947       XMZ=91.18D0
30948       PI=3.14159D0
30949       ALP3Z=0.12D0
30950       ALP3=1D0/(1D0/ALP3Z+23D0/6D0/PI*LOG(XMT/XMZ))
30951  
30952 C      RXMT = XMT/(1D0+4*ALP3/3D0/PI)
30953       RXMT = PYRNMT(XMT)
30954  
30955       HT = RXMT /V
30956       CALL PYRGHM(XMC,XMA,TANB,XMQ,XMUR,XMDR,XMT,AT,AB,
30957      &XMU,XMH,HM,SA,CA,TANBA)
30958       SINB = TANB/(TANB**2+1D0)**0.5D0
30959       COSB = 1D0/(TANB**2+1D0)**0.5D0
30960       COS2B = SINB**2 - COSB**2
30961       SINBPA = SINB*CA + COSB*SA
30962       COSBPA = COSB*CA - SINB*SA
30963       RMBOT = 3D0
30964       XMQ2 = XMQ**2
30965       XMUR2 = XMUR**2
30966       IF(XMUR.LT.0D0) XMUR2=-XMUR2
30967       XMDR2 = XMDR**2
30968       XMST11 = RXMT**2 + XMQ2  - 0.35D0*XMZ**2*COS2B
30969       XMST22 = RXMT**2 + XMUR2 - 0.15D0*XMZ**2*COS2B
30970       IF(XMST11.LT.0D0) GOTO 500
30971       IF(XMST22.LT.0D0) GOTO 500
30972       XMSB11 = RMBOT**2 + XMQ2  + 0.42D0*XMZ**2*COS2B
30973       XMSB22 = RMBOT**2 + XMDR2 + 0.08D0*XMZ**2*COS2B
30974       IF(XMSB11.LT.0D0) GOTO 500
30975       IF(XMSB22.LT.0D0) GOTO 500
30976       WMST11 = RXMT**2 + XMQ2
30977       WMST22 = RXMT**2 + XMUR2
30978       XMST12 = RXMT*(AT - XMU/TANB)
30979       XMSB12 = RMBOT*(AB - XMU*TANB)
30980  
30981 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
30982 C...STOP EIGENVALUES CALCULATION
30983 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
30984  
30985       STOP12 = 0.5D0*(XMST11+XMST22) +
30986      &0.5D0*((XMST11+XMST22)**2 -
30987      &4D0*(XMST11*XMST22 - XMST12**2))**0.5D0
30988       STOP22 = 0.5D0*(XMST11+XMST22) -
30989      &0.5D0*((XMST11+XMST22)**2 - 4D0*(XMST11*XMST22 -
30990      &XMST12**2))**0.5D0
30991  
30992       IF(STOP22.LT.0D0) GOTO 500
30993       SSTOP2(1) = STOP12
30994       SSTOP2(2) = STOP22
30995       STOP1 = STOP12**0.5D0
30996       STOP2 = STOP22**0.5D0
30997       STOP1W = STOP1
30998       STOP2W = STOP2
30999  
31000       IF(XMST12.EQ.0D0) XST11 = 1D0
31001       IF(XMST12.EQ.0D0) XST12 = 0D0
31002       IF(XMST12.EQ.0D0) XST21 = 0D0
31003       IF(XMST12.EQ.0D0) XST22 = 1D0
31004  
31005       IF(XMST12.EQ.0D0) GOTO 110
31006  
31007   100 XST11 = XMST12/(XMST12**2+(XMST11-STOP12)**2)**0.5D0
31008       XST12 = - (XMST11-STOP12)/(XMST12**2+(XMST11-STOP12)**2)**0.5D0
31009       XST21 = XMST12/(XMST12**2+(XMST11-STOP22)**2)**0.5D0
31010       XST22 = - (XMST11-STOP22)/(XMST12**2+(XMST11-STOP22)**2)**0.5D0
31011  
31012   110 T(1,1) = XST11
31013       T(2,2) = XST22
31014       T(1,2) = XST12
31015       T(2,1) = XST21
31016  
31017       SBOT12 = 0.5D0*(XMSB11+XMSB22) +
31018      &0.5D0*((XMSB11+XMSB22)**2 -
31019      &4D0*(XMSB11*XMSB22 - XMSB12**2))**0.5D0
31020       SBOT22 = 0.5D0*(XMSB11+XMSB22) -
31021      &0.5D0*((XMSB11+XMSB22)**2 - 4D0*(XMSB11*XMSB22 -
31022      &XMSB12**2))**0.5D0
31023       IF(SBOT22.LT.0D0) GOTO 500
31024       SBOT1 = SBOT12**0.5D0
31025       SBOT2 = SBOT22**0.5D0
31026  
31027       SSBOT2(1) = SBOT12
31028       SSBOT2(2) = SBOT22
31029  
31030       IF(XMSB12.EQ.0D0) XSB11 = 1D0
31031       IF(XMSB12.EQ.0D0) XSB12 = 0D0
31032       IF(XMSB12.EQ.0D0) XSB21 = 0D0
31033       IF(XMSB12.EQ.0D0) XSB22 = 1D0
31034  
31035       IF(XMSB12.EQ.0D0) GOTO 130
31036  
31037   120 XSB11 = XMSB12/(XMSB12**2+(XMSB11-SBOT12)**2)**0.5D0
31038       XSB12 = - (XMSB11-SBOT12)/(XMSB12**2+(XMSB11-SBOT12)**2)**0.5D0
31039       XSB21 = XMSB12/(XMSB12**2+(XMSB11-SBOT22)**2)**0.5D0
31040       XSB22 = - (XMSB11-SBOT22)/(XMSB12**2+(XMSB11-SBOT22)**2)**0.5D0
31041  
31042   130 B(1,1) = XSB11
31043       B(2,2) = XSB22
31044       B(1,2) = XSB12
31045       B(2,1) = XSB21
31046  
31047  
31048       SINT = 0.2320D0
31049       SQR = 2D0**0.5D0
31050       VP = 174.1D0*SQR
31051  
31052 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31053 C...STARTING OF LIGHT HIGGS
31054 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31055  
31056       IF(IHIGGS.EQ.0) GOTO 490
31057  
31058       DO 150 I = 1,2
31059         DO 140 J = 1,2
31060           COUPT(I,J) =
31061      &    SINT*XMZ**2*2D0*SQR/174.1D0/3D0*SINBPA*(DELTA(I,J) +
31062      &    (3D0 - 8D0*SINT)/4D0/SINT*T(1,I)*T(1,J))
31063      &    -RXMT**2/174.1D0**2*VP/SINB*CA*DELTA(I,J)
31064      &    -RXMT/VP/SINB*(AT*CA + XMU*SA)*(T(1,I)*T(2,J) +
31065      &    T(1,J)*T(2,I))
31066   140   CONTINUE
31067   150 CONTINUE
31068  
31069  
31070       DO 170 I = 1,2
31071         DO 160 J = 1,2
31072           COUPB(I,J) =
31073      &    -SINT*XMZ**2*2D0*SQR/174.1D0/6D0*SINBPA*(DELTA(I,J) +
31074      &    (3D0 - 4D0*SINT)/2D0/SINT*B(1,I)*B(1,J))
31075      &    +RMBOT**2/174.1D0**2*VP/COSB*SA*DELTA(I,J)
31076      &    +RMBOT/VP/COSB*(AB*SA + XMU*CA)*(B(1,I)*B(2,J) +
31077      &    B(1,J)*B(2,I))
31078   160   CONTINUE
31079   170 CONTINUE
31080  
31081       PRUN = XMH
31082       EPS = 1D-4*PRUN
31083       ITER = 0
31084   180 ITER = ITER + 1
31085       DO 230  I3 = 1,3
31086  
31087         PR(I3)=PRUN+(I3-2)*EPS/2
31088         P2=PR(I3)**2
31089         POLT = 0D0
31090         DO 200 I = 1,2
31091           DO 190 J = 1,2
31092             POLT = POLT + COUPT(I,J)**2*3D0*
31093      &      PYFINT(P2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
31094   190     CONTINUE
31095   200   CONTINUE
31096         POLB = 0D0
31097         DO 220 I = 1,2
31098           DO 210 J = 1,2
31099             POLB = POLB + COUPB(I,J)**2*3D0*
31100      &      PYFINT(P2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
31101   210     CONTINUE
31102   220   CONTINUE
31103         RXMT2 = RXMT**2
31104         XMT2=XMT**2
31105  
31106         POLTT =
31107      &  3D0*RXMT**2/8D0/PI**2/  V  **2*
31108      &  CA**2/SINB**2 *
31109      &  (-2D0*XMT**2+0.5D0*P2)*
31110      &  PYFINT(P2,XMT2,XMT2)
31111  
31112         POL = POLT + POLB + POLTT
31113         POLAR(I3) = P2 - XMH**2 - POL
31114   230 CONTINUE
31115       DERIV = (POLAR(3)-POLAR(1))/EPS
31116       DRUN = - POLAR(2)/DERIV
31117       PRUN = PRUN + DRUN
31118       P2 = PRUN**2
31119       IF( ABS(DRUN) .LT. 1D-4 .OR.ITER.GT.100 ) GOTO 240
31120       GOTO 180
31121   240 CONTINUE
31122  
31123       XMHP = P2**0.5D0
31124  
31125 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31126 C...END OF LIGHT HIGGS
31127 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31128  
31129   250 IF(IHIGGS.EQ.1) GOTO 490
31130  
31131 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31132 C... STARTING OF HEAVY HIGGS
31133 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31134  
31135       DO 270 I = 1,2
31136         DO 260 J = 1,2
31137           HCOUPT(I,J) =
31138      &    -SINT*XMZ**2*2D0*SQR/174.1D0/3D0*COSBPA*(DELTA(I,J) +
31139      &    (3D0 - 8D0*SINT)/4D0/SINT*T(1,I)*T(1,J))
31140      &    -RXMT**2/174.1D0**2*VP/SINB*SA*DELTA(I,J)
31141      &    -RXMT/VP/SINB*(AT*SA - XMU*CA)*(T(1,I)*T(2,J) +
31142      &    T(1,J)*T(2,I))
31143   260   CONTINUE
31144   270 CONTINUE
31145  
31146       DO 290 I = 1,2
31147         DO 280 J = 1,2
31148           HCOUPB(I,J) =
31149      &    SINT*XMZ**2*2D0*SQR/174.1D0/6D0*COSBPA*(DELTA(I,J) +
31150      &    (3D0 - 4D0*SINT)/2D0/SINT*B(1,I)*B(1,J))
31151      &    -RMBOT**2/174.1D0**2*VP/COSB*CA*DELTA(I,J)
31152      &    -RMBOT/VP/COSB*(AB*CA - XMU*SA)*(B(1,I)*B(2,J) +
31153      &    B(1,J)*B(2,I))
31154           HCOUPB(I,J)=0D0
31155   280   CONTINUE
31156   290 CONTINUE
31157  
31158       PRUN = HM
31159       EPS = 1D-4*PRUN
31160       ITER = 0
31161   300 ITER = ITER + 1
31162       DO 350 I3 = 1,3
31163         PR(I3)=PRUN+(I3-2)*EPS/2
31164         HP2=PR(I3)**2
31165  
31166         HPOLT = 0D0
31167         DO 320 I = 1,2
31168           DO 310 J = 1,2
31169             HPOLT = HPOLT + HCOUPT(I,J)**2*3D0*
31170      &      PYFINT(HP2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
31171   310     CONTINUE
31172   320   CONTINUE
31173  
31174         HPOLB = 0D0
31175         DO 340 I = 1,2
31176           DO 330 J = 1,2
31177             HPOLB = HPOLB + HCOUPB(I,J)**2*3D0*
31178      &      PYFINT(HP2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
31179   330     CONTINUE
31180   340   CONTINUE
31181  
31182         RXMT2 = RXMT**2
31183         XMT2  = XMT**2
31184  
31185         HPOLTT =
31186      &  3D0*RXMT**2/8D0/PI**2/  V  **2*
31187      &  SA**2/SINB**2 *
31188      &  (-2D0*XMT**2+0.5D0*HP2)*
31189      &  PYFINT(HP2,XMT2,XMT2)
31190  
31191         HPOL = HPOLT + HPOLB + HPOLTT
31192         POLAR(I3) =HP2-HM**2-HPOL
31193   350 CONTINUE
31194       DERIV = (POLAR(3)-POLAR(1))/EPS
31195       DRUN = - POLAR(2)/DERIV
31196       PRUN = PRUN + DRUN
31197       HP2 = PRUN**2
31198       IF( ABS(DRUN) .LT. 1D-4 .OR.ITER.GT.100 ) GOTO 360
31199       GOTO 300
31200   360 CONTINUE
31201  
31202  
31203   370 CONTINUE
31204       HMP = HP2**0.5D0
31205  
31206 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31207 C... END OF HEAVY HIGGS
31208 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31209  
31210       IF(IHIGGS.EQ.2) GOTO 490
31211  
31212 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31213 C...BEGINNING OF PSEUDOSCALAR HIGGS
31214 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31215  
31216       DO 390 I = 1,2
31217         DO 380 J = 1,2
31218           ACOUPT(I,J) =
31219      &    -RXMT/VP/SINB*(AT*COSB + XMU*SINB)*
31220      &    (T(1,I)*T(2,J) -T(1,J)*T(2,I))
31221   380   CONTINUE
31222   390 CONTINUE
31223       DO 410 I = 1,2
31224         DO 400 J = 1,2
31225           ACOUPB(I,J) =
31226      &    RMBOT/VP/COSB*(AB*SINB + XMU*COSB)*
31227      &    (B(1,I)*B(2,J) -B(1,J)*B(2,I))
31228   400   CONTINUE
31229   410 CONTINUE
31230  
31231       PRUN = XMA
31232       EPS = 1D-4*PRUN
31233       ITER = 0
31234   420 ITER = ITER + 1
31235       DO 470 I3 = 1,3
31236         PR(I3)=PRUN+(I3-2)*EPS/2
31237         AP2=PR(I3)**2
31238         APOLT = 0D0
31239         DO 440 I = 1,2
31240           DO 430 J = 1,2
31241             APOLT = APOLT + ACOUPT(I,J)**2*3D0*
31242      &      PYFINT(AP2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
31243   430     CONTINUE
31244   440   CONTINUE
31245         APOLB = 0D0
31246         DO 460 I = 1,2
31247           DO 450 J = 1,2
31248             APOLB = APOLB + ACOUPB(I,J)**2*3D0*
31249      &      PYFINT(AP2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
31250   450     CONTINUE
31251   460   CONTINUE
31252         RXMT2 = RXMT**2
31253         XMT2=XMT**2
31254         APOLTT =
31255      &  3D0*RXMT**2/8D0/PI**2/  V  **2*
31256      &  COSB**2/SINB**2 *
31257      &  (-0.5D0*AP2)*
31258      &  PYFINT(AP2,XMT2,XMT2)
31259         APOL = APOLT + APOLB + APOLTT
31260         POLAR(I3) = AP2 - XMA**2 -APOL
31261   470 CONTINUE
31262       DERIV = (POLAR(3)-POLAR(1))/EPS
31263       DRUN = - POLAR(2)/DERIV
31264       PRUN = PRUN + DRUN
31265       AP2 = PRUN**2
31266       IF( ABS(DRUN) .LT. 1D-4 .OR.ITER.GT.100 ) GOTO 480
31267       GOTO 420
31268   480 CONTINUE
31269  
31270       AMP = AP2**0.5D0
31271  
31272 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31273 C...END OF PSEUDOSCALAR HIGGS
31274 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31275  
31276       IF(IHIGGS.EQ.3) GOTO 490
31277  
31278   490 CONTINUE
31279       RETURN
31280   500 CONTINUE
31281       WRITE(MSTU(11),*) ' EXITING IN PYVACU '
31282       WRITE(MSTU(11),*) ' XMST11,XMST22 = ',XMST11,XMST22
31283       WRITE(MSTU(11),*) ' XMSB11,XMSB22 = ',XMSB11,XMSB22
31284       WRITE(MSTU(11),*) ' STOP22,SBOT22 = ',STOP22,SBOT22
31285       STOP
31286       END
31287  
31288 C*********************************************************************
31289  
31290 C...PYVACU
31291 C...Computes Higgs masses and mixing angles, see PYPOLE above.
31292  
31293       SUBROUTINE PYVACU(IHIGGS,XMC,XMA,TANB,XMQ,XMUR,XMDR,
31294      &XMT,AT,AB,XMU,XMH,XMHP,HM,HMP,AMP,STOP1,STOP2,
31295      &SBOT1,SBOT2,SA,CA,STOP1W,STOP2W,TANBA)
31296  
31297 C...Double precision and integer declarations.
31298       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
31299       IMPLICIT INTEGER(I-N)
31300 C...Parameters.
31301       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
31302       INTEGER PYK,PYCHGE,PYCOMP
31303  
31304 C...Local variables.
31305       DIMENSION DELTA(2,2),COUPT(2,2),T(2,2),SSTOP2(2),
31306      &SSBOT2(2),B(2,2),COUPB(2,2),
31307      &HCOUPT(2,2),HCOUPB(2,2),
31308      &ACOUPT(2,2),ACOUPB(2,2),PR(3), POLAR(3)
31309  
31310       DELTA(1,1) = 1D0
31311       DELTA(2,2) = 1D0
31312       DELTA(1,2) = 0D0
31313       DELTA(2,1) = 0D0
31314       V = 174.1D0
31315       XMZ=91.18D0
31316       PI=3.14159D0
31317       ALP3Z=0.12D0
31318       ALP3=1D0/(1D0/ALP3Z+23D0/6D0/PI*LOG(XMT/XMZ))
31319  
31320 C      RXMT = XMT/(1D0+4*ALP3/3D0/PI)
31321       RXMT = PYRNMT(XMT)
31322  
31323       HT = RXMT /V
31324       CALL PYRGHM(XMC,XMA,TANB,XMQ,XMUR,XMDR,XMT,AT,AB,
31325      &XMU,XMH,HM,SA,CA,TANBA)
31326       SINB = TANB/(TANB**2+1D0)**0.5D0
31327       COSB = 1D0/(TANB**2+1D0)**0.5D0
31328       COS2B = SINB**2 - COSB**2
31329       SINBPA = SINB*CA + COSB*SA
31330       COSBPA = COSB*CA - SINB*SA
31331       RMBOT = 3D0
31332       XMQ2 = XMQ**2
31333       XMUR2 = XMUR**2
31334       IF(XMUR.LT.0D0) XMUR2=-XMUR2
31335       XMDR2 = XMDR**2
31336       XMST11 = RXMT**2 + XMQ2  - 0.35D0*XMZ**2*COS2B
31337       XMST22 = RXMT**2 + XMUR2 - 0.15D0*XMZ**2*COS2B
31338       IF(XMST11.LT.0D0) GOTO 500
31339       IF(XMST22.LT.0D0) GOTO 500
31340       XMSB11 = RMBOT**2 + XMQ2  + 0.42D0*XMZ**2*COS2B
31341       XMSB22 = RMBOT**2 + XMDR2 + 0.08D0*XMZ**2*COS2B
31342       IF(XMSB11.LT.0D0) GOTO 500
31343       IF(XMSB22.LT.0D0) GOTO 500
31344       WMST11 = RXMT**2 + XMQ2
31345       WMST22 = RXMT**2 + XMUR2
31346       XMST12 = RXMT*(AT - XMU/TANB)
31347       XMSB12 = RMBOT*(AB - XMU*TANB)
31348  
31349 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31350 C...STOP EIGENVALUES CALCULATION
31351 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31352  
31353       STOP12 = 0.5D0*(XMST11+XMST22) +
31354      &0.5D0*((XMST11+XMST22)**2 -
31355      &4D0*(XMST11*XMST22 - XMST12**2))**0.5D0
31356       STOP22 = 0.5D0*(XMST11+XMST22) -
31357      &0.5D0*((XMST11+XMST22)**2 - 4D0*(XMST11*XMST22 -
31358      &XMST12**2))**0.5D0
31359  
31360       IF(STOP22.LT.0D0) GOTO 500
31361       SSTOP2(1) = STOP12
31362       SSTOP2(2) = STOP22
31363       STOP1 = STOP12**0.5D0
31364       STOP2 = STOP22**0.5D0
31365       STOP1W = STOP1
31366       STOP2W = STOP2
31367  
31368       IF(XMST12.EQ.0D0) XST11 = 1D0
31369       IF(XMST12.EQ.0D0) XST12 = 0D0
31370       IF(XMST12.EQ.0D0) XST21 = 0D0
31371       IF(XMST12.EQ.0D0) XST22 = 1D0
31372  
31373       IF(XMST12.EQ.0D0) GOTO 110
31374  
31375   100 XST11 = XMST12/(XMST12**2+(XMST11-STOP12)**2)**0.5D0
31376       XST12 = - (XMST11-STOP12)/(XMST12**2+(XMST11-STOP12)**2)**0.5D0
31377       XST21 = XMST12/(XMST12**2+(XMST11-STOP22)**2)**0.5D0
31378       XST22 = - (XMST11-STOP22)/(XMST12**2+(XMST11-STOP22)**2)**0.5D0
31379  
31380   110 T(1,1) = XST11
31381       T(2,2) = XST22
31382       T(1,2) = XST12
31383       T(2,1) = XST21
31384  
31385       SBOT12 = 0.5D0*(XMSB11+XMSB22) +
31386      &0.5D0*((XMSB11+XMSB22)**2 -
31387      &4D0*(XMSB11*XMSB22 - XMSB12**2))**0.5D0
31388       SBOT22 = 0.5D0*(XMSB11+XMSB22) -
31389      &0.5D0*((XMSB11+XMSB22)**2 - 4D0*(XMSB11*XMSB22 -
31390      &XMSB12**2))**0.5D0
31391       IF(SBOT22.LT.0D0) GOTO 500
31392       SBOT1 = SBOT12**0.5D0
31393       SBOT2 = SBOT22**0.5D0
31394  
31395       SSBOT2(1) = SBOT12
31396       SSBOT2(2) = SBOT22
31397  
31398       IF(XMSB12.EQ.0D0) XSB11 = 1D0
31399       IF(XMSB12.EQ.0D0) XSB12 = 0D0
31400       IF(XMSB12.EQ.0D0) XSB21 = 0D0
31401       IF(XMSB12.EQ.0D0) XSB22 = 1D0
31402  
31403       IF(XMSB12.EQ.0D0) GOTO 130
31404  
31405   120 XSB11 = XMSB12/(XMSB12**2+(XMSB11-SBOT12)**2)**0.5D0
31406       XSB12 = - (XMSB11-SBOT12)/(XMSB12**2+(XMSB11-SBOT12)**2)**0.5D0
31407       XSB21 = XMSB12/(XMSB12**2+(XMSB11-SBOT22)**2)**0.5D0
31408       XSB22 = - (XMSB11-SBOT22)/(XMSB12**2+(XMSB11-SBOT22)**2)**0.5D0
31409  
31410   130 B(1,1) = XSB11
31411       B(2,2) = XSB22
31412       B(1,2) = XSB12
31413       B(2,1) = XSB21
31414  
31415  
31416       SINT = 0.2320D0
31417       SQR = 2D0**0.5D0
31418       VP = 174.1D0*SQR
31419  
31420 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31421 C...STARTING OF LIGHT HIGGS
31422 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31423  
31424       IF(IHIGGS.EQ.0) GOTO 490
31425  
31426       DO 150 I = 1,2
31427         DO 140 J = 1,2
31428           COUPT(I,J) =
31429      &    SINT*XMZ**2*2D0*SQR/174.1D0/3D0*SINBPA*(DELTA(I,J) +
31430      &    (3D0 - 8D0*SINT)/4D0/SINT*T(1,I)*T(1,J))
31431      &    -RXMT**2/174.1D0**2*VP/SINB*CA*DELTA(I,J)
31432      &    -RXMT/VP/SINB*(AT*CA + XMU*SA)*(T(1,I)*T(2,J) +
31433      &    T(1,J)*T(2,I))
31434   140   CONTINUE
31435   150 CONTINUE
31436  
31437  
31438       DO 170 I = 1,2
31439         DO 160 J = 1,2
31440           COUPB(I,J) =
31441      &    -SINT*XMZ**2*2D0*SQR/174.1D0/6D0*SINBPA*(DELTA(I,J) +
31442      &    (3D0 - 4D0*SINT)/2D0/SINT*B(1,I)*B(1,J))
31443      &    +RMBOT**2/174.1D0**2*VP/COSB*SA*DELTA(I,J)
31444      &    +RMBOT/VP/COSB*(AB*SA + XMU*CA)*(B(1,I)*B(2,J) +
31445      &    B(1,J)*B(2,I))
31446   160   CONTINUE
31447   170 CONTINUE
31448  
31449       PRUN = XMH
31450       EPS = 1D-4*PRUN
31451       ITER = 0
31452   180 ITER = ITER + 1
31453       DO 230  I3 = 1,3
31454  
31455         PR(I3)=PRUN+(I3-2)*EPS/2
31456         P2=PR(I3)**2
31457         POLT = 0D0
31458         DO 200 I = 1,2
31459           DO 190 J = 1,2
31460             POLT = POLT + COUPT(I,J)**2*3D0*
31461      &      PYFINT(P2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
31462   190     CONTINUE
31463   200   CONTINUE
31464         POLB = 0D0
31465         DO 220 I = 1,2
31466           DO 210 J = 1,2
31467             POLB = POLB + COUPB(I,J)**2*3D0*
31468      &      PYFINT(P2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
31469   210     CONTINUE
31470   220   CONTINUE
31471         RXMT2 = RXMT**2
31472         XMT2=XMT**2
31473  
31474         POLTT =
31475      &  3D0*RXMT**2/8D0/PI**2/  V  **2*
31476      &  CA**2/SINB**2 *
31477      &  (-2D0*XMT**2+0.5D0*P2)*
31478      &  PYFINT(P2,XMT2,XMT2)
31479  
31480         POL = POLT + POLB + POLTT
31481         POLAR(I3) = P2 - XMH**2 - POL
31482   230 CONTINUE
31483       DERIV = (POLAR(3)-POLAR(1))/EPS
31484       DRUN = - POLAR(2)/DERIV
31485       PRUN = PRUN + DRUN
31486       P2 = PRUN**2
31487       IF( ABS(DRUN) .LT. 1D-4 ) GOTO 240
31488       GOTO 180
31489   240 CONTINUE
31490  
31491       XMHP = P2**0.5D0
31492  
31493 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31494 C...END OF LIGHT HIGGS
31495 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31496  
31497   250 IF(IHIGGS.EQ.1) GOTO 490
31498  
31499 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31500 C... STARTING OF HEAVY HIGGS
31501 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31502  
31503       DO 270 I = 1,2
31504         DO 260 J = 1,2
31505           HCOUPT(I,J) =
31506      &    -SINT*XMZ**2*2D0*SQR/174.1D0/3D0*COSBPA*(DELTA(I,J) +
31507      &    (3D0 - 8D0*SINT)/4D0/SINT*T(1,I)*T(1,J))
31508      &    -RXMT**2/174.1D0**2*VP/SINB*SA*DELTA(I,J)
31509      &    -RXMT/VP/SINB*(AT*SA - XMU*CA)*(T(1,I)*T(2,J) +
31510      &    T(1,J)*T(2,I))
31511   260   CONTINUE
31512   270 CONTINUE
31513  
31514       DO 290 I = 1,2
31515         DO 280 J = 1,2
31516           HCOUPB(I,J) =
31517      &    SINT*XMZ**2*2D0*SQR/174.1D0/6D0*COSBPA*(DELTA(I,J) +
31518      &    (3D0 - 4D0*SINT)/2D0/SINT*B(1,I)*B(1,J))
31519      &    -RMBOT**2/174.1D0**2*VP/COSB*CA*DELTA(I,J)
31520      &    -RMBOT/VP/COSB*(AB*CA - XMU*SA)*(B(1,I)*B(2,J) +
31521      &    B(1,J)*B(2,I))
31522           HCOUPB(I,J)=0D0
31523   280   CONTINUE
31524   290 CONTINUE
31525  
31526       PRUN = HM
31527       EPS = 1D-4*PRUN
31528       ITER = 0
31529   300 ITER = ITER + 1
31530       DO 350 I3 = 1,3
31531         PR(I3)=PRUN+(I3-2)*EPS/2
31532         HP2=PR(I3)**2
31533  
31534         HPOLT = 0D0
31535         DO 320 I = 1,2
31536           DO 310 J = 1,2
31537             HPOLT = HPOLT + HCOUPT(I,J)**2*3D0*
31538      &      PYFINT(HP2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
31539   310     CONTINUE
31540   320   CONTINUE
31541  
31542         HPOLB = 0D0
31543         DO 340 I = 1,2
31544           DO 330 J = 1,2
31545             HPOLB = HPOLB + HCOUPB(I,J)**2*3D0*
31546      &      PYFINT(HP2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
31547   330     CONTINUE
31548   340   CONTINUE
31549  
31550         RXMT2 = RXMT**2
31551         XMT2  = XMT**2
31552  
31553         HPOLTT =
31554      &  3D0*RXMT**2/8D0/PI**2/  V  **2*
31555      &  SA**2/SINB**2 *
31556      &  (-2D0*XMT**2+0.5D0*HP2)*
31557      &  PYFINT(HP2,XMT2,XMT2)
31558  
31559         HPOL = HPOLT + HPOLB + HPOLTT
31560         POLAR(I3) =HP2-HM**2-HPOL
31561   350 CONTINUE
31562       DERIV = (POLAR(3)-POLAR(1))/EPS
31563       DRUN = - POLAR(2)/DERIV
31564       PRUN = PRUN + DRUN
31565       HP2 = PRUN**2
31566       IF( ABS(DRUN) .LT. 1D-4 ) GOTO 360
31567       GOTO 300
31568   360 CONTINUE
31569  
31570  
31571   370 CONTINUE
31572       HMP = HP2**0.5D0
31573  
31574 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31575 C... END OF HEAVY HIGGS
31576 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31577  
31578       IF(IHIGGS.EQ.2) GOTO 490
31579  
31580 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31581 C...BEGINNING OF PSEUDOSCALAR HIGGS
31582 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31583  
31584       DO 390 I = 1,2
31585         DO 380 J = 1,2
31586           ACOUPT(I,J) =
31587      &    -RXMT/VP/SINB*(AT*COSB + XMU*SINB)*
31588      &    (T(1,I)*T(2,J) -T(1,J)*T(2,I))
31589   380   CONTINUE
31590   390 CONTINUE
31591       DO 410 I = 1,2
31592         DO 400 J = 1,2
31593           ACOUPB(I,J) =
31594      &    RMBOT/VP/COSB*(AB*SINB + XMU*COSB)*
31595      &    (B(1,I)*B(2,J) -B(1,J)*B(2,I))
31596   400   CONTINUE
31597   410 CONTINUE
31598  
31599       PRUN = XMA
31600       EPS = 1D-4*PRUN
31601       ITER = 0
31602   420 ITER = ITER + 1
31603       DO 470 I3 = 1,3
31604         PR(I3)=PRUN+(I3-2)*EPS/2
31605         AP2=PR(I3)**2
31606         APOLT = 0D0
31607         DO 440 I = 1,2
31608           DO 430 J = 1,2
31609             APOLT = APOLT + ACOUPT(I,J)**2*3D0*
31610      &      PYFINT(AP2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
31611   430     CONTINUE
31612   440   CONTINUE
31613         APOLB = 0D0
31614         DO 460 I = 1,2
31615           DO 450 J = 1,2
31616             APOLB = APOLB + ACOUPB(I,J)**2*3D0*
31617      &      PYFINT(AP2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
31618   450     CONTINUE
31619   460   CONTINUE
31620         RXMT2 = RXMT**2
31621         XMT2=XMT**2
31622         APOLTT =
31623      &  3D0*RXMT**2/8D0/PI**2/  V  **2*
31624      &  COSB**2/SINB**2 *
31625      &  (-0.5D0*AP2)*
31626      &  PYFINT(AP2,XMT2,XMT2)
31627         APOL = APOLT + APOLB + APOLTT
31628         POLAR(I3) = AP2 - XMA**2 -APOL
31629   470 CONTINUE
31630       DERIV = (POLAR(3)-POLAR(1))/EPS
31631       DRUN = - POLAR(2)/DERIV
31632       PRUN = PRUN + DRUN
31633       AP2 = PRUN**2
31634       IF( ABS(DRUN) .LT. 1D-4 ) GOTO 480
31635       GOTO 420
31636   480 CONTINUE
31637  
31638       AMP = AP2**0.5D0
31639  
31640 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31641 C...END OF PSEUDOSCALAR HIGGS
31642 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31643  
31644       IF(IHIGGS.EQ.3) GOTO 490
31645  
31646   490 CONTINUE
31647       RETURN
31648   500 CONTINUE
31649       WRITE(MSTU(11),*) ' EXITING IN PYVACU '
31650       WRITE(MSTU(11),*) ' XMST11,XMST22 = ',XMST11,XMST22
31651       WRITE(MSTU(11),*) ' XMSB11,XMSB22 = ',XMSB11,XMSB22
31652       WRITE(MSTU(11),*) ' STOP22,SBOT22 = ',STOP22,SBOT22
31653       STOP
31654       END
31655  
31656 C*********************************************************************
31657  
31658 C...PYRGHM
31659 C...Auxiliary routine to PYVACU for SUSY Higgs calculations.
31660  
31661       SUBROUTINE PYRGHM(XMC,XMA,TANB,XMQ,XMUR,XMDL,XMT,AU,AD,XMU,
31662      &XMHP,HMP,SA,CA,TANBA)
31663  
31664 C...Double precision and integer declarations.
31665       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
31666       IMPLICIT INTEGER(I-N)
31667       INTEGER PYK,PYCHGE,PYCOMP
31668       COMMON/PYHTRI/HHH(7)
31669  
31670 C...Local variables.
31671       DIMENSION VH(2,2),XM2(2,2),XM2P(2,2)
31672  
31673       XMZ = 91.18D0
31674       ALP1 = 0.0101D0
31675       ALP2 = 0.0337D0
31676       ALP3Z = 0.12D0
31677       V = 174.1D0
31678       PI = 3.14159D0
31679       TANBA = TANB
31680       TANBT = TANB
31681  
31682 C...MBOTTOM(XMT) = 3. GEV
31683       XMB = 3D0
31684       ALP3 = ALP3Z/(1D0 +(11D0 - 10D0/3D0)/4D0/PI*ALP3Z*
31685      &LOG(XMT**2/XMZ**2))
31686  
31687 C...RXMT= RUNNING TOP QUARK MASS
31688       RXMT = XMT/(1D0+4D0*ALP3/3D0/PI)
31689       TQ = LOG((XMQ**2+XMT**2)/XMT**2)
31690       TU = LOG((XMUR**2 + XMT**2)/XMT**2)
31691       TD = LOG((XMDL**2 + XMT**2)/XMT**2)
31692       SINB = TANB/((1D0 + TANB**2)**0.5D0)
31693       COSB = SINB/TANB
31694       IF(XMA.GT.XMT)
31695      &TANBA = TANB*(1D0-3D0/32D0/PI**2*
31696      &(RXMT**2/V**2/SINB**2-XMB**2/V**2/COSB**2)*
31697      &LOG(XMA**2/XMT**2))
31698       IF(XMA.LT.XMT.OR.XMA.EQ.XMT) TANBT = TANBA
31699       SINB = TANBT/((1D0 + TANBT**2)**0.5D0)
31700       COSB = 1D0/((1D0 + TANBT**2)**0.5D0)
31701       COS2B = (TANBT**2 - 1D0)/(TANBT**2 + 1D0)
31702       G1 = (ALP1*4D0*PI)**0.5D0
31703       G2 = (ALP2*4D0*PI)**0.5D0
31704       G3 = (ALP3*4D0*PI)**0.5D0
31705       HU = RXMT/V/SINB
31706       HD =  XMB/V/COSB
31707  
31708       CALL PYGFXX(XMA,TANBA,XMQ,XMUR,XMDL,XMT,AU,AD,
31709      &XMU,VH,STOP1,STOP2)
31710  
31711       IF(XMQ.GT.XMUR) TP = TQ - TU
31712       IF(XMQ.LT.XMUR.OR.XMQ.EQ.XMUR) TP = TU - TQ
31713       IF(XMQ.GT.XMUR) TDP = TU
31714       IF(XMQ.LT.XMUR.OR.XMQ.EQ.XMUR) TDP = TQ
31715       IF(XMQ.GT.XMDL) TPD = TQ - TD
31716       IF(XMQ.LT.XMDL.OR.XMQ.EQ.XMDL) TPD = TD - TQ
31717       IF(XMQ.GT.XMDL) TDPD = TD
31718       IF(XMQ.LT.XMDL.OR.XMQ.EQ.XMDL) TDPD = TQ
31719  
31720       IF(XMQ.GT.XMDL) DLAM1 = 6D0/96D0/PI**2*G1**2*HD**2*TPD
31721       IF(XMQ.LT.XMDL.OR.XMQ.EQ.XMDL) DLAM1 = 3D0/32D0/PI**2*
31722      &HD**2*(G1**2/3D0+G2**2)*TPD
31723  
31724       IF(XMQ.GT.XMUR) DLAM2 =12D0/96D0/PI**2*G1**2*HU**2*TP
31725       IF(XMQ.LT.XMUR.OR.XMQ.EQ.XMUR) DLAM2 = 3D0/32D0/PI**2*
31726      &HU**2*(-G1**2/3D0+G2**2)*TP
31727  
31728       DLAM3 = 0D0
31729       DLAM4 = 0D0
31730  
31731       IF(XMQ.GT.XMDL) DLAM3 = -1D0/32D0/PI**2*G1**2*HD**2*TPD
31732       IF(XMQ.LT.XMDL.OR.XMQ.EQ.XMDL) DLAM3 = 3D0/64D0/PI**2*HD**2*
31733      &(G2**2-G1**2/3D0)*TPD
31734  
31735       IF(XMQ.GT.XMUR) DLAM3 = DLAM3 -
31736      &1D0/16D0/PI**2*G1**2*HU**2*TP
31737       IF(XMQ.LT.XMUR.OR.XMQ.EQ.XMUR) DLAM3 = DLAM3 +
31738      &3D0/64D0/PI**2*HU**2*(G2**2+G1**2/3D0)*TP
31739  
31740       IF(XMQ.LT.XMUR) DLAM4 = -3D0/32D0/PI**2*G2**2*HU**2*TP
31741       IF(XMQ.LT.XMDL) DLAM4 = DLAM4 - 3D0/32D0/PI**2*G2**2*
31742      &HD**2*TPD
31743  
31744       XLAM1 = ((G1**2 + G2**2)/4D0)*
31745      &(1D0-3D0*HD**2*(TPD + TDPD)/8D0/PI**2)
31746      &+(3D0*HD**4/16D0/PI**2) *TPD*(1D0
31747      &+ (3D0*HD**2/2D0 + HU**2/2D0
31748      &- 8D0*G3**2) * (TPD + 2D0*TDPD)/16D0/PI**2)
31749      &+(3D0*HD**4/8D0/PI**2) *TDPD*(1D0  + (3D0*HD**2/2D0 + HU**2/2D0
31750      &- 8D0*G3**2) * TDPD/16D0/PI**2) + DLAM1
31751       XLAM2 = ((G1**2 + G2**2)/4D0)*(1D0-3D0*HU**2*
31752      &(TP + TDP)/8D0/PI**2)
31753      &+(3D0*HU**4/16D0/PI**2) *TP*(1D0
31754      &+ (3D0*HU**2/2D0 + HD**2/2D0
31755      &- 8D0*G3**2) * (TP + 2D0*TDP)/16D0/PI**2)
31756      &+(3D0*HU**4/8D0/PI**2) *TDP*(1D0 + (3D0*HU**2/2D0 + HD**2/2D0
31757      &- 8D0*G3**2) * TDP/16D0/PI**2) + DLAM2
31758       XLAM3 = ((G2**2 - G1**2)/4D0)*(1D0-3D0*
31759      &(HU**2)*(TP + TDP)/16D0/PI**2 -3D0*
31760      &(HD**2)*(TPD + TDPD)/16D0/PI**2) +DLAM3
31761       XLAM4 = (- G2**2/2D0)*(1D0
31762      &-3D0*(HU**2)*(TP + TDP)/16D0/PI**2
31763      &-3D0*(HD**2)*(TPD + TDPD)/16D0/PI**2) +DLAM4
31764  
31765       XLAM5 = 0D0
31766       XLAM6 = 0D0
31767       XLAM7 = 0D0
31768  
31769 C...Defined now in PYSUBH
31770 C      HHH(1)=XLAM1
31771 C      HHH(2)=XLAM2
31772 C      HHH(3)=XLAM3
31773 C      HHH(4)=XLAM4
31774 C      HHH(5)=XLAM5
31775 C      HHH(6)=XLAM6
31776 C      HHH(7)=XLAM7
31777  
31778       XM2(1,1) = 2D0*V**2*(XLAM1*COSB**2+2D0*XLAM6*
31779      &COSB*SINB + XLAM5*SINB**2) + XMA**2*SINB**2
31780  
31781       XM2(2,2) = 2D0*V**2*(XLAM5*COSB**2+2D0*XLAM7*
31782      &COSB*SINB + XLAM2*SINB**2) + XMA**2*COSB**2
31783       XM2(1,2) = 2D0*V**2*(XLAM6*COSB**2+(XLAM3+XLAM4)*
31784      &COSB*SINB + XLAM7*SINB**2) - XMA**2*SINB*COSB
31785  
31786       XM2(2,1) = XM2(1,2)
31787  
31788 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31789 C...THIS IS THE CONTRIBUTION FROM LIGHT CHARGINOS/NEUTRALINOS
31790 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31791  
31792       XMSSU=(0.5D0*(XMQ**2+XMUR**2)+XMT**2)**0.5D0
31793  
31794       IF(XMC.GT.XMSSU) GOTO 100
31795       IF(XMC.LT.XMT) XMC=XMT
31796  
31797       TCHAR=LOG(XMSSU**2/XMC**2)
31798  
31799       DEL12=(9D0/64D0/PI**2*G2**4+5D0/192D0/PI**2*G1**4)*TCHAR
31800       DEL3P4=(3D0/64D0/PI**2*G2**4+7D0/192D0/PI**2*G1**4
31801      &+4D0/32/PI**2*G1**2*G2**2)*TCHAR
31802  
31803       DEM112=2D0*DEL12*V**2*COSB**2
31804       DEM222=2D0*DEL12*V**2*SINB**2
31805       DEM122=2D0*DEL3P4*V**2*SINB*COSB
31806  
31807       XM2(1,1)=XM2(1,1)+DEM112
31808       XM2(2,2)=XM2(2,2)+DEM222
31809       XM2(1,2)=XM2(1,2)+DEM122
31810       XM2(2,1)=XM2(2,1)+DEM122
31811  
31812   100 CONTINUE
31813  
31814 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31815 C...END OF CHARGINOS/NEUTRALINOS
31816 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31817  
31818       DO 120 I = 1,2
31819         DO 110 J = 1,2
31820           XM2P(I,J) = XM2(I,J) + VH(I,J)
31821   110   CONTINUE
31822   120 CONTINUE
31823  
31824       TRM2P = XM2P(1,1) + XM2P(2,2)
31825       DETM2P = XM2P(1,1)*XM2P(2,2) - XM2P(1,2)*XM2P(2,1)
31826  
31827       XMH2P = (TRM2P - (TRM2P**2 - 4D0* DETM2P)**0.5D0)/2D0
31828       HM2P = (TRM2P + (TRM2P**2 - 4D0* DETM2P)**0.5D0)/2D0
31829       HMP = HM2P**0.5D0
31830       IF(XMH2P.LT.0D0) GOTO 130
31831       XMHP = XMH2P**0.5D0
31832       S2ALP = 2D0*XM2P(1,2)/(TRM2P**2-4D0*DETM2P)**0.5D0
31833       C2ALP = (XM2P(1,1)-XM2P(2,2))/(TRM2P**2-4D0*DETM2P)**0.5D0
31834       IF(C2ALP.GT.0D0) ALP = ASIN(S2ALP)/2D0
31835       IF(C2ALP.LT.0D0) ALP = -PI/2D0-ASIN(S2ALP)/2D0
31836       SA = SIN(ALP)
31837       CA = COS(ALP)
31838       SQBMA = (SINB*CA - COSB*SA)**2
31839   130 XIN = 1D0
31840   140 CONTINUE
31841  
31842       RETURN
31843       END
31844  
31845 C*********************************************************************
31846  
31847 C...PYGFXX
31848 C...Auxiliary routine to PYRGHM for SUSY Higgs calculations.
31849  
31850       SUBROUTINE PYGFXX(XMA,TANB,XMQ,XMUR,XMDL,XMT,AT,AB,XMU,VH,
31851      &STOP1,STOP2)
31852  
31853 C...Double precision and integer declarations.
31854       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
31855       IMPLICIT INTEGER(I-N)
31856       INTEGER PYK,PYCHGE,PYCOMP
31857  
31858 C...Local variables.
31859       DIMENSION DIAH(2),VH(2,2),VH1(2,2),VH2(2,2),
31860      &VH3T(2,2),VH3B(2,2),
31861      &HMIX(2,2),AL(2,2),XM2(2,2)
31862  
31863 C...Statement function.
31864       G(X,Y) = 2D0 - (X+Y)/(X-Y)*LOG(X/Y)
31865  
31866       IF(DABS(XMU).LT.0.000001D0) XMU = 0.000001D0
31867       XMQ2 = XMQ**2
31868       XMUR2 = XMUR**2
31869       XMDL2 = XMDL**2
31870       TANBA = TANB
31871       SINBA = TANBA/(TANBA**2+1D0)**0.5D0
31872       COSBA = SINBA/TANBA
31873  
31874       SINB = TANB/(TANB**2+1D0)**0.5D0
31875       COSB = SINB/TANB
31876       PI = 3.14159D0
31877       G2 = (0.0336D0*4D0*PI)**0.5D0
31878       G12 = (0.0101D0*4D0*PI)
31879       G1 = G12**0.5D0
31880       XMZ = 91.18D0
31881       V = 174.1D0
31882       MW = (G2**2*V**2/2D0)**0.5D0
31883       ALP3 = 0.12D0/(1D0+23/12D0/PI*0.12D0*LOG(XMT**2/XMZ**2))
31884  
31885       XMB = 3D0
31886       IF(XMQ.GT.XMUR) XMST = XMQ
31887       IF(XMUR.GT.XMQ.OR.XMUR.EQ.XMQ) XMST = XMUR
31888  
31889       XMSUT = (XMST**2  + XMT**2)**0.5D0
31890  
31891       IF(XMQ.GT.XMDL) XMSB = XMQ
31892       IF(XMDL.GT.XMQ.OR.XMDL.EQ.XMQ) XMSB = XMDL
31893  
31894       XMSUB = (XMSB**2 + XMB**2)**0.5D0
31895  
31896       TT = LOG(XMSUT**2/XMT**2)
31897       TB = LOG(XMSUB**2/XMT**2)
31898  
31899       RXMT = XMT/(1D0+4D0*ALP3/3D0/PI)
31900       HT = RXMT/(174.1D0*SINB)
31901       HTST = RXMT/174.1D0
31902       HB = XMB/174.1D0/COSB
31903       G32 = ALP3*4D0*PI
31904       BT2 = -(8D0*G32 - 9D0*HT**2/2D0 - HB**2/2D0)/(4D0*PI)**2
31905       BB2 = -(8D0*G32 - 9D0*HB**2/2D0 - HT**2/2D0)/(4D0*PI)**2
31906       AL2 = 3D0/8D0/PI**2*HT**2
31907       BT2ST = -(8D0*G32 - 9D0*HTST**2/2D0)/(4D0*PI)**2
31908       ALST = 3D0/8D0/PI**2*HTST**2
31909       AL1 = 3D0/8D0/PI**2*HB**2
31910  
31911       AL(1,1) = AL1
31912       AL(1,2) = (AL2+AL1)/2D0
31913       AL(2,1) = (AL2+AL1)/2D0
31914       AL(2,2) = AL2
31915  
31916       XMT4 = RXMT**4*(1D0+2D0*BT2*TT- AL2*TT)
31917       XMT2 = SQRT(XMT4)
31918       XMBOT4 = XMB**4*(1D0+2D0*BB2*TB - AL1*TB)
31919       XMBOT2 = SQRT(XMBOT4)
31920  
31921       IF(XMA.GT.XMT) THEN
31922         VI = 174.1D0*(1D0 + 3D0/32D0/PI**2*HTST**2*
31923      &  LOG(XMT**2/XMA**2))
31924         H1I = VI* COSBA
31925         H2I = VI*SINBA
31926         H1T = H1I*(1D0+3D0/8D0/PI**2*HB**2*LOG(XMA**2/XMSUT**2))**0.25D0
31927         H2T = H2I*(1D0+3D0/8D0/PI**2*HT**2*LOG(XMA**2/XMSUT**2))**0.25D0
31928         H1B = H1I*(1D0+3D0/8D0/PI**2*HB**2*LOG(XMA**2/XMSUB**2))**0.25D0
31929         H2B = H2I*(1D0+3D0/8D0/PI**2*HT**2*LOG(XMA**2/XMSUB**2))**0.25D0
31930       ELSE
31931         VI = 174.1D0
31932         H1I = VI*COSB
31933         H2I = VI*SINB
31934         H1T = H1I*(1D0+3D0/8D0/PI**2*HB**2*LOG(XMT**2/XMSUT**2))**0.25D0
31935         H2T = H2I*(1D0+3D0/8D0/PI**2*HT**2*LOG(XMT**2/XMSUT**2))**0.25D0
31936         H1B = H1I*(1D0+3D0/8D0/PI**2*HB**2*LOG(XMT**2/XMSUB**2))**0.25D0
31937         H2B = H2I*(1D0+3D0/8D0/PI**2*HT**2*LOG(XMT**2/XMSUB**2))**0.25D0
31938       ENDIF
31939  
31940       TANBST = H2T/H1T
31941       SINBT = TANBST/(1D0+TANBST**2)**0.5D0
31942       COSBT = SINBT/TANBST
31943  
31944       TANBSB = H2B/H1B
31945       SINBB = TANBSB/(1D0+TANBSB**2)**0.5D0
31946       COSBB = SINBB/TANBSB
31947  
31948       STOP12 = (XMQ2 + XMUR2)*0.5D0 + XMT2
31949      &+1D0/8D0*(G2**2+G1**2)*(H1T**2-H2T**2)
31950      &+(((G2**2-5D0*G1**2/3D0)/4D0*(H1T**2-H2T**2) +
31951      &XMQ2 - XMUR2)**2*0.25D0 + XMT2*(AT-XMU/TANBST)**2)**0.5D0
31952       STOP22 = (XMQ2 + XMUR2)*0.5D0 + XMT2
31953      &+1D0/8D0*(G2**2+G1**2)*(H1T**2-H2T**2)
31954      &- (((G2**2-5D0*G1**2/3D0)/4D0*(H1T**2-H2T**2) +
31955      &XMQ2 - XMUR2)**2*0.25D0
31956      &+ XMT2*(AT-XMU/TANBST)**2)**0.5D0
31957       IF(STOP22.LT.0D0) GOTO 120
31958       SBOT12 = (XMQ2 + XMDL2)*0.5D0
31959      &- 1D0/8D0*(G2**2+G1**2)*(H1B**2-H2B**2)
31960      &+ (((G1**2/3D0-G2**2)/4D0*(H1B**2-H2B**2) +
31961      &XMQ2 - XMDL2)**2*0.25D0 + XMBOT2*(AB-XMU*TANBSB)**2)**0.5D0
31962       SBOT22 = (XMQ2 + XMDL2)*0.5D0
31963      &- 1D0/8D0*(G2**2+G1**2)*(H1B**2-H2B**2)
31964      &- (((G1**2/3D0-G2**2)/4D0*(H1B**2-H2B**2) +
31965      &XMQ2 - XMDL2)**2*0.25D0 + XMBOT2*(AB-XMU*TANBSB)**2)**0.5D0
31966       IF(SBOT22.LT.0D0) GOTO 120
31967  
31968       STOP1 = STOP12**0.5D0
31969       STOP2 = STOP22**0.5D0
31970       SBOT1 = SBOT12**0.5D0
31971       SBOT2 = SBOT22**0.5D0
31972  
31973       VH1(1,1) = 1D0/TANBST
31974       VH1(2,1) = -1D0
31975       VH1(1,2) = -1D0
31976       VH1(2,2) = TANBST
31977       VH2(1,1) = TANBST
31978       VH2(1,2) = -1D0
31979       VH2(2,1) = -1D0
31980       VH2(2,2) = 1D0/TANBST
31981  
31982 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31983 C...D-TERMS
31984 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31985       STW=0.2320D0
31986  
31987       F1T=(XMQ2-XMUR2)/(STOP12-STOP22)*(0.5D0-4D0/3D0*STW)*
31988      &LOG(STOP1/STOP2)
31989      &+(0.5D0-2D0/3D0*STW)*LOG(STOP1*STOP2/(XMQ2+XMT2))
31990      &+ 2D0/3D0*STW*LOG(STOP1*STOP2/(XMUR2+XMT2))
31991  
31992       F1B=(XMQ2-XMDL2)/(SBOT12-SBOT22)*(-0.5D0+2D0/3D0*STW)*
31993      &LOG(SBOT1/SBOT2)
31994      &+(-0.5D0+1D0/3D0*STW)*LOG(SBOT1*SBOT2/(XMQ2+XMBOT2))
31995      &- 1D0/3D0*STW*LOG(SBOT1*SBOT2/(XMDL2+XMBOT2))
31996  
31997       F2T=XMT2**0.5D0*(AT-XMU/TANBST)/(STOP12-STOP22)*
31998      &(-0.5D0*LOG(STOP12/STOP22)
31999      &+(4D0/3D0*STW-0.5D0)*(XMQ2-XMUR2)/(STOP12-STOP22)*
32000      &G(STOP12,STOP22))
32001  
32002       F2B=XMBOT2**0.5D0*(AB-XMU*TANBSB)/(SBOT12-SBOT22)*
32003      &(0.5D0*LOG(SBOT12/SBOT22)
32004      &+(-2D0/3D0*STW+0.5D0)*(XMQ2-XMDL2)/(SBOT12-SBOT22)*
32005      &G(SBOT12,SBOT22))
32006  
32007       VH3B(1,1) = XMBOT4/(COSBB**2)*(LOG(SBOT1**2*SBOT2**2/
32008      &(XMQ2+XMBOT2)/(XMDL2+XMBOT2))
32009      &+ 2D0*(AB*(AB-XMU*TANBSB)/(SBOT1**2-SBOT2**2))*
32010      &LOG(SBOT1**2/SBOT2**2)) +
32011      &XMBOT4/(COSBB**2)*(AB*(AB-XMU*TANBSB)/
32012      &(SBOT1**2-SBOT2**2))**2*G(SBOT12,SBOT22)
32013  
32014       VH3T(1,1) =
32015      &XMT4/(SINBT**2)*(XMU*(-AT+XMU/TANBST)/(STOP1**2
32016      &-STOP2**2))**2*G(STOP12,STOP22)
32017  
32018       VH3B(1,1)=VH3B(1,1)+
32019      &XMZ**2*(2*XMBOT2*F1B-XMBOT2**0.5D0*AB*F2B)
32020  
32021       VH3T(1,1) = VH3T(1,1) +
32022      &XMZ**2*(XMT2**0.5D0*XMU/TANBST*F2T)
32023  
32024       VH3T(2,2) = XMT4/(SINBT**2)*(LOG(STOP1**2*STOP2**2/
32025      &(XMQ2+XMT2)/(XMUR2+XMT2))
32026      &+ 2D0*(AT*(AT-XMU/TANBST)/(STOP1**2-STOP2**2))*
32027      &LOG(STOP1**2/STOP2**2)) +
32028      &XMT4/(SINBT**2)*(AT*(AT-XMU/TANBST)/
32029      &(STOP1**2-STOP2**2))**2*G(STOP12,STOP22)
32030  
32031       VH3B(2,2) =
32032      &XMBOT4/(COSBB**2)*(XMU*(-AB+XMU*TANBSB)/(SBOT1**2
32033      &-SBOT2**2))**2*G(SBOT12,SBOT22)
32034  
32035       VH3T(2,2)=VH3T(2,2)+
32036      &XMZ**2*(-2*XMT2*F1T+XMT2**0.5D0*AT*F2T)
32037  
32038       VH3B(2,2) = VH3B(2,2) -XMZ**2*XMBOT2**0.5D0*XMU*TANBSB*F2B
32039  
32040       VH3T(1,2) = -
32041      &XMT4/(SINBT**2)*XMU*(AT-XMU/TANBST)/
32042      &(STOP1**2-STOP2**2)*(LOG(STOP1**2/STOP2**2) + AT*
32043      &(AT - XMU/TANBST)/(STOP1**2-STOP2**2)*G(STOP12,STOP22))
32044  
32045       VH3B(1,2) =
32046      &- XMBOT4/(COSBB**2)*XMU*(AT-XMU*TANBSB)/
32047      &(SBOT1**2-SBOT2**2)*(LOG(SBOT1**2/SBOT2**2) + AB*
32048      &(AB - XMU*TANBSB)/(SBOT1**2-SBOT2**2)*G(SBOT12,SBOT22))
32049  
32050       VH3T(1,2)=VH3T(1,2) +
32051      &XMZ**2*(XMT2/TANBST*F1T-XMT2**0.5D0*(AT/TANBST+XMU)/2D0*F2T)
32052  
32053       VH3B(1,2)=VH3B(1,2)
32054      &+XMZ**2*(-XMBOT2*TANBSB*F1B+XMBOT2**0.5D0*(AB*TANBSB+XMU)/2D0*F2B)
32055  
32056       VH3T(2,1) = VH3T(1,2)
32057       VH3B(2,1) = VH3B(1,2)
32058  
32059       TQ = LOG((XMQ2 + XMT2)/XMT2)
32060       TU = LOG((XMUR2+XMT2)/XMT2)
32061       TQD = LOG((XMQ2 + XMB**2)/XMB**2)
32062       TD = LOG((XMDL2+XMB**2)/XMB**2)
32063  
32064       DO 110 I = 1,2
32065         DO 100 J = 1,2
32066  
32067           VH(I,J) =
32068      &    6D0/(8D0*PI**2*(H1T**2+H2T**2))
32069      &    *VH3T(I,J)*0.5D0*(1D0-AL(I,J)*TT/2D0) +
32070      &    6D0/(8D0*PI**2*(H1B**2+H2B**2))
32071      &    *VH3B(I,J)*0.5D0*(1D0-AL(I,J)*TB/2D0)
32072  
32073   100   CONTINUE
32074   110 CONTINUE
32075  
32076       GOTO 150
32077   120 DO 140 I =1,2
32078         DO 130 J = 1,2
32079           VH(I,J) = -1D+15
32080   130   CONTINUE
32081   140 CONTINUE
32082  
32083   150 CONTINUE
32084  
32085       RETURN
32086       END
32087  
32088 C*********************************************************************
32089  
32090 C...PYFINT
32091 C...Auxiliary routine to PYVACU for SUSY Higgs calculations.
32092  
32093       FUNCTION PYFINT(A,B,C)
32094  
32095 C...Double precision and integer declarations.
32096       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
32097       IMPLICIT INTEGER(I-N)
32098       INTEGER PYK,PYCHGE,PYCOMP
32099 C...Commonblock.
32100       COMMON/PYINTS/XXM(20)
32101       SAVE/PYINTS/
32102  
32103 C...Local variables.
32104       EXTERNAL PYFISB
32105       DOUBLE PRECISION PYFISB
32106  
32107       XXM(1)=A
32108       XXM(2)=B
32109       XXM(3)=C
32110       XLO=0D0
32111       XHI=1D0
32112       PYFINT  = PYGAUS(PYFISB,XLO,XHI,1D-3)
32113  
32114       RETURN
32115       END
32116  
32117 C*********************************************************************
32118  
32119 C...PYFISB
32120 C...Auxiliary routine to PYFINT for SUSY Higgs calculations.
32121  
32122       FUNCTION PYFISB(X)
32123  
32124 C...Double precision and integer declarations.
32125       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
32126       IMPLICIT INTEGER(I-N)
32127       INTEGER PYK,PYCHGE,PYCOMP
32128 C...Commonblock.
32129       COMMON/PYINTS/XXM(20)
32130       SAVE/PYINTS/
32131  
32132       PYFISB = LOG(ABS(X*XXM(2)+(1-X)*XXM(3)-X*(1-X)*XXM(1))/
32133      &(X*(XXM(2)-XXM(3))+XXM(3)))
32134  
32135       RETURN
32136       END
32137  
32138 C*********************************************************************
32139  
32140 C...PYSFDC
32141 C...Calculates decays of sfermions.
32142  
32143       SUBROUTINE PYSFDC(KFIN,XLAM,IDLAM,IKNT)
32144  
32145 C...Double precision and integer declarations.
32146       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
32147       IMPLICIT INTEGER(I-N)
32148       INTEGER PYK,PYCHGE,PYCOMP
32149 C...Parameter statement to help give large particle numbers.
32150       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
32151 C...Commonblocks.
32152       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
32153       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
32154       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
32155       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
32156      &SFMIX(16,4)
32157       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
32158  
32159 C...Local variables.
32160       INTEGER KFIN,KCIN
32161       DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,XMZ,
32162      &XMZ2,AXMJ,AXMI
32163       DOUBLE PRECISION XMI2,XMI3,XMJ2,XMA2,XMB2,XMFP
32164       DOUBLE PRECISION PYLAMF,XL
32165       DOUBLE PRECISION TANW,XW,AEM,C1,AS
32166       DOUBLE PRECISION CA,CB,AL,AR,BL,BR,ALP,ARP,BLP,BRP
32167       DOUBLE PRECISION CH1,CH2,CH3,CH4
32168       DOUBLE PRECISION XMBOT,XMTOP
32169       DOUBLE PRECISION XLAM(0:200)
32170       INTEGER IDLAM(200,3)
32171       INTEGER LKNT,IX,IC,ILR,IDU,J,IJ,I,IKNT,IFL,IFP,II
32172       DOUBLE PRECISION SR2
32173       DOUBLE PRECISION CBETA,SBETA,GR,GL,F12K,F21K
32174       DOUBLE PRECISION CW
32175       DOUBLE PRECISION BETA,ALFA,XMU,AT,AB,ATRIT,ATRIB,ATRIL
32176       DOUBLE PRECISION COSA,SINA,TANB
32177       DOUBLE PRECISION PYALEM,PI,PYALPS,EI,PYRNMT
32178       DOUBLE PRECISION GHRR,GHLL,GHLR,CF,XMB,BLR
32179       INTEGER IG,KF1,KF2,ILR2,IDP
32180       INTEGER IGG(4),KFNCHI(4),KFCCHI(2)
32181       DATA IGG/23,25,35,36/
32182       DATA PI/3.141592654D0/
32183       DATA SR2/1.4142136D0/
32184       DATA KFNCHI/1000022,1000023,1000025,1000035/
32185       DATA KFCCHI/1000024,1000037/
32186  
32187 C...COUNT THE NUMBER OF DECAY MODES
32188       LKNT=0
32189  
32190 C...NO NU_R DECAYS
32191       IF(KFIN.EQ.KSUSY2+12.OR.KFIN.EQ.KSUSY2+14.OR.
32192      &KFIN.EQ.KSUSY2+16) RETURN
32193  
32194       XMW=PMAS(24,1)
32195       XMW2=XMW**2
32196       XMZ=PMAS(23,1)
32197       XMZ2=XMZ**2
32198       XW=PARU(102)
32199       TANW = SQRT(XW/(1D0-XW))
32200       CW=SQRT(1D0-XW)
32201  
32202 C...KCIN
32203       KCIN=PYCOMP(KFIN)
32204 C...ILR is 1 for left and 2 for right.
32205       ILR=KFIN/KSUSY1
32206 C...IFL is matching non-SUSY flavour.
32207       IFL=MOD(KFIN,KSUSY1)
32208 C...IDU is weak isospin, 1 for down and 2 for up.
32209       IDU=2-MOD(IFL,2)
32210  
32211       XMI=PMAS(KCIN,1)
32212       XMI2=XMI**2
32213       AEM=PYALEM(XMI2)
32214       AS =PYALPS(XMI2)
32215       C1=AEM/XW
32216       XMI3=XMI**3
32217       EI=KCHG(IFL,1)/3D0
32218  
32219       XMBOT=3D0
32220       XMTOP=PYRNMT(PMAS(6,1))
32221       XMBOT=0D0
32222  
32223       TANB=RMSS(5)
32224       BETA=ATAN(TANB)
32225       ALFA=RMSS(18)
32226       CBETA=COS(BETA)
32227       SBETA=TANB*CBETA
32228       SINA=SIN(ALFA)
32229       COSA=COS(ALFA)
32230       XMU=-RMSS(4)
32231       ATRIT=RMSS(16)
32232       ATRIB=RMSS(15)
32233       ATRIL=RMSS(17)
32234  
32235 C...2-BODY DECAYS OF SFERMION -> GRAVITINO + FERMION
32236  
32237       IF(IMSS(11).EQ.1) THEN
32238         XMP=RMSS(29)
32239         IDG=39+KSUSY1
32240         XMGR=PMAS(PYCOMP(IDG),1)
32241         XFAC=(XMI2/(XMP*XMGR))**2*XMI/48D0/PI
32242         IF(IFL.EQ.5) THEN
32243           XMF=XMBOT
32244         ELSEIF(IFL.EQ.6) THEN
32245           XMF=XMTOP
32246         ELSE
32247           XMF=PMAS(IFL,1)
32248         ENDIF
32249         IF(XMI.GT.XMGR+XMF) THEN
32250           LKNT=LKNT+1
32251           IDLAM(LKNT,1)=IDG
32252           IDLAM(LKNT,2)=IFL
32253           IDLAM(LKNT,3)=0
32254           XLAM(LKNT)=XFAC*(1D0-XMF**2/XMI2)**4
32255         ENDIF
32256       ENDIF
32257  
32258 C...2-BODY DECAYS OF SFERMION -> FERMION + GAUGE/GAUGINO
32259  
32260 C...CHARGED DECAYS:
32261       DO 100 IX=1,2
32262 C...DI -> U CHI1-,CHI2-
32263         IF(IDU.EQ.1) THEN
32264           XMFP=PMAS(IFL+1,1)
32265           XMF =PMAS(IFL,1)
32266 C...UI -> D CHI1+,CHI2+
32267         ELSE
32268           XMFP=PMAS(IFL-1,1)
32269           XMF =PMAS(IFL,1)
32270         ENDIF
32271         XMJ=SMW(IX)
32272         AXMJ=ABS(XMJ)
32273         IF(XMI.GE.AXMJ+XMFP) THEN
32274           XMA2=XMJ**2
32275           XMB2=XMFP**2
32276           IF(IDU.EQ.2) THEN
32277             IF(IFL.EQ.6) THEN
32278               XMFP=XMBOT
32279               XMF =XMTOP
32280             ELSEIF(IFL.LT.6) THEN
32281               XMF=0D0
32282               XMFP=0D0
32283             ENDIF
32284             BL=VMIX(IX,1)
32285             AL=-XMFP*UMIX(IX,2)/SR2/XMW/CBETA
32286             BR=-XMF*VMIX(IX,2)/SR2/XMW/SBETA
32287             AR=0D0
32288           ELSE
32289             IF(IFL.EQ.5) THEN
32290               XMF =XMBOT
32291               XMFP=XMTOP
32292             ELSEIF(IFL.LT.5) THEN
32293               XMF=0D0
32294               XMFP=0D0
32295             ENDIF
32296             BL=UMIX(IX,1)
32297             AL=-XMFP*VMIX(IX,2)/SR2/XMW/SBETA
32298             BR=-XMF*UMIX(IX,2)/SR2/XMW/CBETA
32299             AR=0D0
32300           ENDIF
32301  
32302           ALP=SFMIX(IFL,1)*AL + SFMIX(IFL,2)*AR
32303           BLP=SFMIX(IFL,1)*BL + SFMIX(IFL,2)*BR
32304           ARP=SFMIX(IFL,4)*AR + SFMIX(IFL,3)*AL
32305           BRP=SFMIX(IFL,4)*BR + SFMIX(IFL,3)*BL
32306           AL=ALP
32307           BL=BLP
32308           AR=ARP
32309           BR=BRP
32310  
32311 C...F1 -> F` CHI
32312           IF(ILR.EQ.1) THEN
32313             CA=AL
32314             CB=BL
32315 C...F2 -> F` CHI
32316           ELSE
32317             CA=AR
32318             CB=BR
32319           ENDIF
32320           LKNT=LKNT+1
32321           XL=PYLAMF(XMI2,XMA2,XMB2)
32322 C...SPIN AVERAGE = 1/1 NOT 1/2....NO COLOR ENHANCEMENT
32323           XLAM(LKNT)=2D0*C1/8D0/XMI3*SQRT(XL)*((XMI2-XMB2-XMA2)*
32324      &    (CA**2+CB**2)-4D0*CA*CB*XMJ*XMFP)
32325           IDLAM(LKNT,3)=0
32326           IF(IDU.EQ.1) THEN
32327             IDLAM(LKNT,1)=-KFCCHI(IX)
32328             IDLAM(LKNT,2)=IFL+1
32329           ELSE
32330             IDLAM(LKNT,1)=KFCCHI(IX)
32331             IDLAM(LKNT,2)=IFL-1
32332           ENDIF
32333         ENDIF
32334   100 CONTINUE
32335  
32336 C...NEUTRAL DECAYS
32337       DO 110 IX=1,4
32338 C...DI -> D CHI10
32339         XMF=PMAS(IFL,1)
32340         XMJ=SMZ(IX)
32341         AXMJ=ABS(XMJ)
32342         IF(XMI.GE.AXMJ+XMF) THEN
32343           XMA2=XMJ**2
32344           XMB2=XMF**2
32345           IF(IDU.EQ.1) THEN
32346             IF(IFL.EQ.5) THEN
32347               XMF=XMBOT
32348             ELSEIF(IFL.LT.5) THEN
32349               XMF=0D0
32350             ENDIF
32351             BL=-ZMIX(IX,2)+TANW*ZMIX(IX,1)*(2D0*EI+1)
32352             AL=XMF*ZMIX(IX,3)/XMW/CBETA
32353             AR=-2D0*EI*TANW*ZMIX(IX,1)
32354             BR=AL
32355           ELSE
32356             IF(IFL.EQ.6) THEN
32357               XMF=XMTOP
32358             ELSEIF(IFL.LT.5) THEN
32359               XMF=0D0
32360             ENDIF
32361             BL=ZMIX(IX,2)+TANW*ZMIX(IX,1)*(2D0*EI-1)
32362             AL=XMF*ZMIX(IX,4)/XMW/SBETA
32363             AR=-2D0*EI*TANW*ZMIX(IX,1)
32364             BR=AL
32365           ENDIF
32366  
32367           ALP=SFMIX(IFL,1)*AL + SFMIX(IFL,2)*AR
32368           BLP=SFMIX(IFL,1)*BL + SFMIX(IFL,2)*BR
32369           ARP=SFMIX(IFL,4)*AR + SFMIX(IFL,3)*AL
32370           BRP=SFMIX(IFL,4)*BR + SFMIX(IFL,3)*BL
32371           AL=ALP
32372           BL=BLP
32373           AR=ARP
32374           BR=BRP
32375  
32376 C...F1 -> F CHI
32377           IF(ILR.EQ.1) THEN
32378             CA=AL
32379             CB=BL
32380 C...F2 -> F CHI
32381           ELSE
32382             CA=AR
32383             CB=BR
32384           ENDIF
32385           LKNT=LKNT+1
32386           XL=PYLAMF(XMI2,XMA2,XMB2)
32387 C...SPIN AVERAGE = 1/1 NOT 1/2....NO COLOR ENHANCEMENT
32388           XLAM(LKNT)=C1/8D0/XMI3*SQRT(XL)*((XMI2-XMB2-XMA2)*
32389      &    (CA**2+CB**2)-4D0*CA*CB*XMJ*XMF)
32390           IDLAM(LKNT,1)=KFNCHI(IX)
32391           IDLAM(LKNT,2)=IFL
32392           IDLAM(LKNT,3)=0
32393         ENDIF
32394   110 CONTINUE
32395  
32396 C...2-BODY DECAYS TO SM GAUGE AND HIGGS BOSONS
32397 C...IG=23,25,35,36
32398       DO 120 II=1,4
32399         IG=IGG(II)
32400         IF(ILR.EQ.1) GOTO 120
32401         XMB=PMAS(IG,1)
32402         XMSF1=PMAS(PYCOMP(KFIN-KSUSY1),1)
32403         IF(XMI.LT.XMSF1+XMB) GOTO 120
32404         IF(IG.EQ.23) THEN
32405           BL=-SIGN(.5D0,EI)/CW+EI*XW/CW
32406           BR=EI*XW/CW
32407           BLR=0D0
32408         ELSEIF(IG.EQ.25) THEN
32409           IF(IFL.EQ.5) THEN
32410             XMF=XMBOT
32411           ELSEIF(IFL.EQ.6) THEN
32412             XMF=XMTOP
32413           ELSEIF(IFL.LT.5) THEN
32414             XMF=0D0
32415           ELSE
32416             XMF=PMAS(IFL,1)
32417           ENDIF
32418           IF(IDU.EQ.2) THEN
32419             GHLL=XMZ/CW*(0.5D0-EI*XW)*(-SIN(ALFA+BETA))+
32420      &      XMF**2/XMW*COSA/SBETA
32421             GHRR=XMZ/CW*(EI*XW)*(-SIN(ALFA+BETA))+
32422      &      XMF**2/XMW*COSA/SBETA
32423           ELSE
32424             GHLL=XMZ/CW*(0.5D0-EI*XW)*(-SIN(ALFA+BETA))+
32425      &      XMF**2/XMW*(-SINA)/CBETA
32426             GHRR=XMZ/CW*(EI*XW)*(-SIN(ALFA+BETA))+
32427      &      XMF**2/XMW*(-SINA)/CBETA
32428           ENDIF
32429           IF(IFL.EQ.5) THEN
32430             AT=ATRIB
32431           ELSEIF(IFL.EQ.6) THEN
32432             AT=ATRIT
32433           ELSEIF(IFL.EQ.15) THEN
32434             AT=ATRIL
32435           ELSE
32436             AT=0D0
32437           ENDIF
32438           IF(IDU.EQ.2) THEN
32439             GHLR=XMF/2D0/XMW/SBETA*(-XMU*SINA+
32440      &      AT*COSA)
32441           ELSE
32442             GHLR=XMF/2D0/XMW/CBETA*(XMU*COSA-
32443      &      AT*SINA)
32444           ENDIF
32445           BL=GHLL
32446           BR=GHRR
32447           BLR=-GHLR
32448         ELSEIF(IG.EQ.35) THEN
32449           IF(IFL.EQ.5) THEN
32450             XMF=XMBOT
32451           ELSEIF(IFL.EQ.6) THEN
32452             XMF=XMTOP
32453           ELSEIF(IFL.LT.5) THEN
32454             XMF=0D0
32455           ELSE
32456             XMF=PMAS(IFL,1)
32457           ENDIF
32458           IF(IDU.EQ.2) THEN
32459             GHLL=XMZ/CW*(0.5D0-EI*XW)*COS(ALFA+BETA)+
32460      &      XMF**2/XMW*SINA/SBETA
32461             GHRR=XMZ/CW*(EI*XW)*COS(ALFA+BETA)+
32462      &      XMF**2/XMW*SINA/SBETA
32463           ELSE
32464             GHLL=XMZ/CW*(0.5D0-EI*XW)*COS(ALFA+BETA)+
32465      &      XMF**2/XMW*COSA/CBETA
32466             GHRR=XMZ/CW*(EI*XW)*COS(ALFA+BETA)+
32467      &      XMF**2/XMW*COSA/CBETA
32468           ENDIF
32469           IF(IFL.EQ.5) THEN
32470             AT=ATRIB
32471           ELSEIF(IFL.EQ.6) THEN
32472             AT=ATRIT
32473           ELSEIF(IFL.EQ.15) THEN
32474             AT=ATRIL
32475           ELSE
32476             AT=0D0
32477           ENDIF
32478           IF(IDU.EQ.2) THEN
32479             GHLR=XMF/2D0/XMW/SBETA*(XMU*COSA+
32480      &      AT*SINA)
32481           ELSE
32482             GHLR=XMF/2D0/XMW/CBETA*(XMU*SINA+
32483      &      AT*COSA)
32484           ENDIF
32485           BL=GHLL
32486           BR=GHRR
32487           BLR=GHLR
32488         ELSEIF(IG.EQ.36) THEN
32489           GHLL=0D0
32490           GHRR=0D0
32491           IF(IFL.EQ.5) THEN
32492             XMF=XMBOT
32493           ELSEIF(IFL.EQ.6) THEN
32494             XMF=XMTOP
32495           ELSEIF(IFL.LT.5) THEN
32496             XMF=0D0
32497           ELSE
32498             XMF=PMAS(IFL,1)
32499           ENDIF
32500           IF(IFL.EQ.5) THEN
32501             AT=ATRIB
32502           ELSEIF(IFL.EQ.6) THEN
32503             AT=ATRIT
32504           ELSEIF(IFL.EQ.15) THEN
32505             AT=ATRIL
32506           ELSE
32507             AT=0D0
32508           ENDIF
32509           IF(IDU.EQ.2) THEN
32510             GHLR=XMF/2D0/XMW*(-XMU+AT/TANB)
32511           ELSE
32512             GHLR=XMF/2D0/XMW/(-XMU+AT*TANB)
32513           ENDIF
32514           BL=GHLL
32515           BR=GHRR
32516           BLR=GHLR
32517         ENDIF
32518         AL=SFMIX(IFL,1)*SFMIX(IFL,3)*BL+
32519      &  SFMIX(IFL,2)*SFMIX(IFL,4)*BR+
32520      &  (SFMIX(IFL,1)*SFMIX(IFL,4)+SFMIX(IFL,3)*SFMIX(IFL,2))*BLR
32521         XL=PYLAMF(XMI2,XMSF1**2,XMB**2)
32522         LKNT=LKNT+1
32523         IF(IG.EQ.23) THEN
32524           XLAM(LKNT)=C1/4D0/XMI3*XL**1.5D0/XMB**2*AL**2
32525         ELSE
32526           XLAM(LKNT)=C1/4D0/XMI3*SQRT(XL)*AL**2
32527         ENDIF
32528         IDLAM(LKNT,3)=0
32529         IDLAM(LKNT,1)=KFIN-KSUSY1
32530         IDLAM(LKNT,2)=IG
32531   120 CONTINUE
32532  
32533 C...SF -> SF' + W
32534       XMB=PMAS(24,1)
32535       IF(MOD(IFL,2).EQ.0) THEN
32536         KF1=KSUSY1+IFL-1
32537       ELSE
32538         KF1=KSUSY1+IFL+1
32539       ENDIF
32540       KF2=KF1+KSUSY1
32541       XMSF1=PMAS(PYCOMP(KF1),1)
32542       XMSF2=PMAS(PYCOMP(KF2),1)
32543       IF(XMI.GT.XMB+XMSF1) THEN
32544         IF(MOD(IFL,2).EQ.0) THEN
32545           IF(ILR.EQ.1) THEN
32546             AL=1D0/SR2*SFMIX(IFL,1)*SFMIX(IFL-1,1)
32547           ELSE
32548             AL=1D0/SR2*SFMIX(IFL,3)*SFMIX(IFL-1,1)
32549           ENDIF
32550         ELSE
32551           IF(ILR.EQ.1) THEN
32552             AL=1D0/SR2*SFMIX(IFL,1)*SFMIX(IFL+1,1)
32553           ELSE
32554             AL=1D0/SR2*SFMIX(IFL,3)*SFMIX(IFL+1,1)
32555           ENDIF
32556         ENDIF
32557         XL=PYLAMF(XMI2,XMSF1**2,XMB**2)
32558         LKNT=LKNT+1
32559         XLAM(LKNT)=C1/4D0/XMI3*XL**1.5D0/XMB**2*AL**2
32560         IDLAM(LKNT,3)=0
32561         IDLAM(LKNT,1)=KF1
32562         IDLAM(LKNT,2)=SIGN(24,KCHG(IFL,1))
32563       ENDIF
32564       IF(XMI.GT.XMB+XMSF2) THEN
32565         IF(MOD(IFL,2).EQ.0) THEN
32566           IF(ILR.EQ.1) THEN
32567             AL=1D0/SR2*SFMIX(IFL,1)*SFMIX(IFL-1,3)
32568           ELSE
32569             AL=1D0/SR2*SFMIX(IFL,3)*SFMIX(IFL-1,3)
32570           ENDIF
32571         ELSE
32572           IF(ILR.EQ.1) THEN
32573             AL=1D0/SR2*SFMIX(IFL,1)*SFMIX(IFL+1,3)
32574           ELSE
32575             AL=1D0/SR2*SFMIX(IFL,3)*SFMIX(IFL+1,3)
32576           ENDIF
32577         ENDIF
32578         XL=PYLAMF(XMI2,XMSF2**2,XMB**2)
32579         LKNT=LKNT+1
32580         XLAM(LKNT)=C1/4D0/XMI3*XL**1.5D0/XMB**2*AL**2
32581         IDLAM(LKNT,3)=0
32582         IDLAM(LKNT,1)=KF2
32583         IDLAM(LKNT,2)=SIGN(24,KCHG(IFL,1))
32584       ENDIF
32585  
32586 C...SF -> SF' + HC
32587       XMB=PMAS(37,1)
32588       IF(MOD(IFL,2).EQ.0) THEN
32589         KF1=KSUSY1+IFL-1
32590       ELSE
32591         KF1=KSUSY1+IFL+1
32592       ENDIF
32593       KF2=KF1+KSUSY1
32594       XMSF1=PMAS(PYCOMP(KF1),1)
32595       XMSF2=PMAS(PYCOMP(KF2),1)
32596       IF(XMI.GT.XMB+XMSF1) THEN
32597         XMF=0D0
32598         XMFP=0D0
32599         AT=0D0
32600         AB=0D0
32601         IF(MOD(IFL,2).EQ.0) THEN
32602 C...T1-> B1 HC
32603           IF(ILR.EQ.1) THEN
32604             CH1=-SFMIX(IFL,1)*SFMIX(IFL-1,1)
32605             CH2= SFMIX(IFL,2)*SFMIX(IFL-1,2)
32606             CH3=-SFMIX(IFL,1)*SFMIX(IFL-1,2)
32607             CH4=-SFMIX(IFL,2)*SFMIX(IFL-1,1)
32608 C...T2-> B1 HC
32609           ELSE
32610             CH1= SFMIX(IFL,3)*SFMIX(IFL-1,1)
32611             CH2=-SFMIX(IFL,4)*SFMIX(IFL-1,2)
32612             CH3= SFMIX(IFL,3)*SFMIX(IFL-1,2)
32613             CH4= SFMIX(IFL,4)*SFMIX(IFL-1,1)
32614           ENDIF
32615           IF(IFL.EQ.6) THEN
32616             XMF=XMTOP
32617             XMFP=XMBOT
32618             AT=ATRIT
32619             AB=ATRIB
32620           ENDIF
32621         ELSE
32622 C...B1 -> T1 HC
32623           IF(ILR.EQ.1) THEN
32624             CH1=-SFMIX(IFL+1,1)*SFMIX(IFL,1)
32625             CH2= SFMIX(IFL+1,2)*SFMIX(IFL,2)
32626             CH3=-SFMIX(IFL+1,1)*SFMIX(IFL,2)
32627             CH4=-SFMIX(IFL+1,2)*SFMIX(IFL,1)
32628 C...B2-> T1 HC
32629           ELSE
32630             CH1= SFMIX(IFL,3)*SFMIX(IFL+1,1)
32631             CH2=-SFMIX(IFL,4)*SFMIX(IFL+1,2)
32632             CH3= SFMIX(IFL,4)*SFMIX(IFL+1,1)
32633             CH4= SFMIX(IFL,3)*SFMIX(IFL+1,2)
32634           ENDIF
32635           IF(IFL.EQ.5) THEN
32636             XMF=XMTOP
32637             XMFP=XMBOT
32638             AT=ATRIT
32639             AB=ATRIB
32640           ENDIF
32641         ENDIF
32642         XL=PYLAMF(XMI2,XMSF1**2,XMB**2)
32643         LKNT=LKNT+1
32644         AL=CH1*(XMW2*2D0*CBETA*SBETA-XMFP**2*TANB-XMF**2/TANB)+
32645      &  CH2*2D0*XMF*XMFP/(2D0*CBETA*SBETA)+
32646      &  CH3*XMFP*(-XMU+AB*TANB)+CH4*XMF*(-XMU+AT/TANB)
32647         XLAM(LKNT)=C1/8D0/XMI3*SQRT(XL)/XMW2*AL**2
32648         IDLAM(LKNT,3)=0
32649         IDLAM(LKNT,1)=KF1
32650         IDLAM(LKNT,2)=SIGN(37,KCHG(IFL,1))
32651       ENDIF
32652       IF(XMI.GT.XMB+XMSF2) THEN
32653         XMF=0D0
32654         XMFP=0D0
32655         AT=0D0
32656         AB=0D0
32657         IF(MOD(IFL,2).EQ.0) THEN
32658 C...T1-> B2 HC
32659           IF(ILR.EQ.1) THEN
32660             CH1= SFMIX(IFL-1,3)*SFMIX(IFL,1)
32661             CH2=-SFMIX(IFL-1,4)*SFMIX(IFL,2)
32662             CH3= SFMIX(IFL-1,4)*SFMIX(IFL,1)
32663             CH4= SFMIX(IFL-1,3)*SFMIX(IFL,2)
32664 C...T2-> B2 HC
32665           ELSE
32666             CH1= -SFMIX(IFL,3)*SFMIX(IFL-1,3)
32667             CH2= SFMIX(IFL,4)*SFMIX(IFL-1,4)
32668             CH3= -SFMIX(IFL,3)*SFMIX(IFL-1,4)
32669             CH4= -SFMIX(IFL,4)*SFMIX(IFL-1,3)
32670           ENDIF
32671           IF(IFL.EQ.6) THEN
32672             XMF=XMTOP
32673             XMFP=XMBOT
32674             AT=ATRIT
32675             AB=ATRIB
32676           ENDIF
32677         ELSE
32678 C...B1 -> T2 HC
32679           IF(ILR.EQ.1) THEN
32680             CH1= SFMIX(IFL+1,3)*SFMIX(IFL,1)
32681             CH2=-SFMIX(IFL+1,4)*SFMIX(IFL,2)
32682             CH3= SFMIX(IFL+1,3)*SFMIX(IFL,2)
32683             CH4= SFMIX(IFL+1,4)*SFMIX(IFL,1)
32684 C...B2-> T2 HC
32685           ELSE
32686             CH1= -SFMIX(IFL+1,3)*SFMIX(IFL,3)
32687             CH2= SFMIX(IFL+1,4)*SFMIX(IFL,4)
32688             CH3= -SFMIX(IFL+1,3)*SFMIX(IFL,4)
32689             CH4= -SFMIX(IFL+1,4)*SFMIX(IFL,3)
32690           ENDIF
32691           IF(IFL.EQ.5) THEN
32692             XMF=XMTOP
32693             XMFP=XMBOT
32694             AT=ATRIT
32695             AB=ATRIB
32696           ENDIF
32697         ENDIF
32698         XL=PYLAMF(XMI2,XMSF1**2,XMB**2)
32699         LKNT=LKNT+1
32700         AL=CH1*(XMW2*2D0*CBETA*SBETA-XMFP**2*TANB-XMF**2/TANB)+
32701      &  CH2*2D0*XMF*XMFP/(2D0*CBETA*SBETA)+
32702      &  CH3*XMFP*(-XMU+AB*TANB)+CH4*XMF*(-XMU+AT/TANB)
32703         XLAM(LKNT)=C1/8D0/XMI3*SQRT(XL)/XMW2*AL**2
32704         IDLAM(LKNT,3)=0
32705         IDLAM(LKNT,1)=KF2
32706         IDLAM(LKNT,2)=SIGN(37,KCHG(IFL,1))
32707       ENDIF
32708  
32709 C...2-BODY DECAYS OF SQUARK -> QUARK GLUINO
32710  
32711       IF(IFL.LE.6) THEN
32712         XMFP=0D0
32713         XMF=0D0
32714         IF(IFL.EQ.6) XMF=PMAS(6,1)
32715         IF(IFL.EQ.5) XMF=PMAS(5,1)
32716         XMJ=PMAS(PYCOMP(KSUSY1+21),1)
32717         AXMJ=ABS(XMJ)
32718         IF(XMI.GE.AXMJ+XMF) THEN
32719           AL=-SFMIX(IFL,3)
32720           BL=SFMIX(IFL,1)
32721           AR=-SFMIX(IFL,4)
32722           BR=SFMIX(IFL,2)
32723 C...F1 -> F CHI
32724           IF(ILR.EQ.1) THEN
32725             CA=AL
32726             CB=BL
32727 C...F2 -> F CHI
32728           ELSE
32729             CA=AR
32730             CB=BR
32731           ENDIF
32732           LKNT=LKNT+1
32733           XMA2=XMJ**2
32734           XMB2=XMF**2
32735           XL=PYLAMF(XMI2,XMA2,XMB2)
32736           XLAM(LKNT)=4D0/3D0*AS/2D0/XMI3*SQRT(XL)*((XMI2-XMB2-XMA2)*
32737      &    (CA**2+CB**2)+4D0*CA*CB*XMJ*XMF)
32738           IDLAM(LKNT,1)=KSUSY1+21
32739           IDLAM(LKNT,2)=IFL
32740           IDLAM(LKNT,3)=0
32741         ENDIF
32742       ENDIF
32743  
32744 C...IF NOTHING ELSE FOR T1, THEN T1* -> C+CHI0
32745       IF(KFIN.EQ.KSUSY1+6.AND.PMAS(KCIN,1).GT.
32746      &PMAS(PYCOMP(KSUSY1+22),1)+PMAS(4,1)) THEN
32747 C...THIS IS A BACK-OF-THE-ENVELOPE ESTIMATE
32748 C...M = 1/(16PI**2)G**3 = G*2/(4PI) G/(4PI) = C1 * G/(4PI)
32749 C...M*M = C1**2 * G**2/(16PI**2)
32750 C...G = 1/(8PI)P/MI**2 * M*M = C1**3/(32PI**2)*LAM/(2*MI**3)
32751         LKNT=LKNT+1
32752         XL=PYLAMF(XMI2,0D0,PMAS(PYCOMP(KSUSY1+22),1)**2)
32753         XLAM(LKNT)=C1**3/64D0/PI**2/XMI3*SQRT(XL)
32754         IF(XLAM(LKNT).EQ.0) XLAM(LKNT)=1D-3
32755         IDLAM(LKNT,1)=KSUSY1+22
32756         IDLAM(LKNT,2)=4
32757         IDLAM(LKNT,3)=0
32758       ENDIF
32759  
32760       IKNT=LKNT
32761       XLAM(0)=0D0
32762       DO 130 I=1,IKNT
32763         IF(XLAM(I).LT.0D0) XLAM(I)=0D0
32764         XLAM(0)=XLAM(0)+XLAM(I)
32765   130 CONTINUE
32766       IF(XLAM(0).EQ.0D0) XLAM(0)=1D-3
32767  
32768       RETURN
32769       END
32770  
32771 C*********************************************************************
32772  
32773 C...PYGLUI
32774 C...Calculates gluino decay modes.
32775  
32776       SUBROUTINE PYGLUI(KFIN,XLAM,IDLAM,IKNT)
32777  
32778 C...Double precision and integer declarations.
32779       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
32780       IMPLICIT INTEGER(I-N)
32781       INTEGER PYK,PYCHGE,PYCOMP
32782 C...Parameter statement to help give large particle numbers.
32783       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
32784 C...Commonblocks.
32785       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
32786       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
32787       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
32788       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
32789      &SFMIX(16,4)
32790       COMMON/PYINTS/XXM(20)
32791       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/,/PYINTS/
32792  
32793 C...Local variables.
32794       INTEGER KFIN,KCIN,KF
32795       DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,
32796      &XMZ,XMZ2,AXMJ,AXMI
32797       DOUBLE PRECISION XMI2,XMI3,XMJ2,XMA2,XMB2,XMFP
32798       DOUBLE PRECISION C1L,C1R,D1L,D1R
32799       DOUBLE PRECISION C2L,C2R,D2L,D2R
32800       DOUBLE PRECISION PYLAMF,XL
32801       DOUBLE PRECISION TANW,XW,AEM,C1,AS,S12MAX,S12MIN
32802       DOUBLE PRECISION CA,CB,AL,AR,BL,BR
32803       DOUBLE PRECISION ALFA,BETA
32804       DOUBLE PRECISION SW,CW,SINB,COSB,QT,T3
32805       DOUBLE PRECISION XLAM(0:200)
32806       INTEGER IDLAM(200,3)
32807       INTEGER LKNT,IX,IC,ILR,IDU,J,IJ,I,IKNT,IFL
32808       DOUBLE PRECISION SR2
32809       DOUBLE PRECISION GAM
32810       DOUBLE PRECISION PYALEM,PI,PYALPS,EI
32811       EXTERNAL PYGAUS,PYXXZ5,PYXXW5,PYXXZ2
32812       DOUBLE PRECISION PYGAUS,PYXXZ5,PYXXW5,PYXXZ2
32813       DOUBLE PRECISION PREC
32814       INTEGER KFNCHI(4),KFCCHI(2)
32815       DATA PI/3.141592654D0/
32816       DATA SR2/1.4142136D0/
32817       DATA PREC/1D-2/
32818       DATA KFNCHI/1000022,1000023,1000025,1000035/
32819       DATA KFCCHI/1000024,1000037/
32820  
32821 C...COUNT THE NUMBER OF DECAY MODES
32822       LKNT=0
32823       IF(KFIN.NE.KSUSY1+21) RETURN
32824       KCIN=PYCOMP(KFIN)
32825  
32826       XMW=PMAS(24,1)
32827       XMW2=XMW**2
32828       XMZ=PMAS(23,1)
32829       XMZ2=XMZ**2
32830       XW=PARU(102)
32831       TANW = SQRT(XW/(1D0-XW))
32832  
32833       XMI=PMAS(KCIN,1)
32834       AXMI=ABS(XMI)
32835       XMI2=XMI**2
32836       AEM=PYALEM(XMI2)
32837       AS =PYALPS(XMI2)
32838       C1=AEM/XW
32839       XMI3=XMI**3
32840       BETA=ATAN(RMSS(5))
32841  
32842 C...2-BODY DECAYS OF GLUINO -> GRAVITINO GLUON
32843  
32844       IF(IMSS(11).EQ.1) THEN
32845         XMP=RMSS(29)
32846         IDG=39+KSUSY1
32847         XMGR=PMAS(PYCOMP(IDG),1)
32848         XFAC=(XMI2/(XMP*XMGR))**2*XMI/48D0/PI
32849         IF(AXMI.GT.XMGR) THEN
32850           LKNT=LKNT+1
32851           IDLAM(LKNT,1)=IDG
32852           IDLAM(LKNT,2)=21
32853           IDLAM(LKNT,3)=0
32854           XLAM(LKNT)=XFAC
32855         ENDIF
32856       ENDIF
32857  
32858 C...2-BODY DECAYS OF GLUINO -> QUARK SQUARK
32859  
32860       DO 110 IFL=1,6
32861         DO 100 ILR=1,2
32862           XMJ=PMAS(PYCOMP(ILR*KSUSY1+IFL),1)
32863           AXMJ=ABS(XMJ)
32864           XMF=PMAS(IFL,1)
32865           IDU=3-(1+MOD(IFL,2))
32866           IF(XMI.GE.AXMJ+XMF) THEN
32867 C...Minus sign difference from gluino-quark-squark feynman rules
32868             AL=SFMIX(IFL,1)
32869             BL=-SFMIX(IFL,3)
32870             AR=SFMIX(IFL,2)
32871             BR=-SFMIX(IFL,4)
32872 C...F1 -> F CHI
32873             IF(ILR.EQ.1) THEN
32874               CA=AL
32875               CB=BL
32876 C...F2 -> F CHI
32877             ELSE
32878               CA=AR
32879               CB=BR
32880             ENDIF
32881             LKNT=LKNT+1
32882             XMA2=XMJ**2
32883             XMB2=XMF**2
32884             XL=PYLAMF(XMI2,XMA2,XMB2)
32885             XLAM(LKNT)=4D0/8D0*AS/4D0/XMI3*SQRT(XL)*((XMI2+XMB2-XMA2)*
32886      &      (CA**2+CB**2)-4D0*CA*CB*XMI*XMF)
32887             IDLAM(LKNT,1)=ILR*KSUSY1+IFL
32888             IDLAM(LKNT,2)=-IFL
32889             IDLAM(LKNT,3)=0
32890             LKNT=LKNT+1
32891             XLAM(LKNT)=XLAM(LKNT-1)
32892             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
32893             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
32894             IDLAM(LKNT,3)=0
32895           ENDIF
32896   100   CONTINUE
32897   110 CONTINUE
32898  
32899 C...3-BODY DECAYS TO GAUGINO FERMION-FERMION
32900 C...GLUINO -> NI Q QBAR
32901       DO 160 IX=1,4
32902         XMJ=SMZ(IX)
32903         AXMJ=ABS(XMJ)
32904         IF(XMI.GE.AXMJ) THEN
32905           XXM(1)=0D0
32906           XXM(2)=XMJ
32907           XXM(3)=0D0
32908           XXM(4)=XMI
32909           XXM(5)=PMAS(PYCOMP(KSUSY1+1),1)
32910           XXM(6)=PMAS(PYCOMP(KSUSY2+1),1)
32911           XXM(7)=1D6
32912           XXM(8)=0D0
32913           XXM(9)=0D0
32914           XXM(10)=0D0
32915           S12MIN=0D0
32916           S12MAX=(XMI-AXMJ)**2
32917 C...D-TYPE QUARKS
32918           XXM(11)=0D0
32919           XXM(12)=0D0
32920           XXM(13)=1D0
32921           XXM(14)=-SR2*(-0.5D0*ZMIX(IX,2)+TANW*ZMIX(IX,1)/6D0)
32922           XXM(15)=1D0
32923           XXM(16)=SR2*(-TANW*ZMIX(IX,1)/3D0)
32924           IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 120
32925           IF(XMI.GE.AXMJ+2D0*PMAS(1,1)) THEN
32926             LKNT=LKNT+1
32927             XLAM(LKNT)=C1*AS/XMI3/(16D0*PI)*
32928      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-2)
32929             IDLAM(LKNT,1)=KFNCHI(IX)
32930             IDLAM(LKNT,2)=1
32931             IDLAM(LKNT,3)=-1
32932           ENDIF
32933           IF(XMI.GE.AXMJ+2D0*PMAS(3,1)) THEN
32934             LKNT=LKNT+1
32935             XLAM(LKNT)=XLAM(LKNT-1)
32936             IDLAM(LKNT,1)=KFNCHI(IX)
32937             IDLAM(LKNT,2)=3
32938             IDLAM(LKNT,3)=-3
32939           ENDIF
32940   120     CONTINUE
32941           IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 130
32942           IF(XMI.GE.AXMJ+2D0*PMAS(5,1)) THEN
32943             CALL PYTBBN(IX,80,-1D0/3D0,AXMI,GAM)
32944             LKNT=LKNT+1
32945             XLAM(LKNT)=GAM
32946             IDLAM(LKNT,1)=KFNCHI(IX)
32947             IDLAM(LKNT,2)=5
32948             IDLAM(LKNT,3)=-5
32949           ENDIF
32950 C...U-TYPE QUARKS
32951   130     CONTINUE
32952           XXM(5)=PMAS(PYCOMP(KSUSY1+2),1)
32953           XXM(6)=PMAS(PYCOMP(KSUSY2+2),1)
32954           XXM(13)=1D0
32955           XXM(14)=-SR2*(0.5D0*ZMIX(IX,2)+TANW*ZMIX(IX,1)/6D0)
32956           XXM(15)=1D0
32957           XXM(16)=SR2*(2D0*TANW*ZMIX(IX,1)/3D0)
32958           IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 140
32959           IF(XMI.GE.AXMJ+2D0*PMAS(2,1)) THEN
32960             LKNT=LKNT+1
32961             XLAM(LKNT)=C1*AS/XMI3/(16D0*PI)*
32962      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-2)
32963             IDLAM(LKNT,1)=KFNCHI(IX)
32964             IDLAM(LKNT,2)=2
32965             IDLAM(LKNT,3)=-2
32966           ENDIF
32967           IF(XMI.GE.AXMJ+2D0*PMAS(4,1)) THEN
32968             LKNT=LKNT+1
32969             XLAM(LKNT)=XLAM(LKNT-1)
32970             IDLAM(LKNT,1)=KFNCHI(IX)
32971             IDLAM(LKNT,2)=4
32972             IDLAM(LKNT,3)=-4
32973           ENDIF
32974   140     CONTINUE
32975 C...INCLUDE THE DECAY GLUINO -> NJ + T + T~
32976 C...IF THE DECAY GLUINO -> ST + T CANNOT OCCUR
32977           IF(XMI.GE.PMAS(PYCOMP(KSUSY1+6),1)+PMAS(6,1)) GOTO 150
32978           XMF=PMAS(6,1)
32979           IF(XMI.GE.AXMJ+2D0*XMF) THEN
32980             CALL PYTBBN(IX,80,2D0/3D0,AXMI,GAM)
32981             LKNT=LKNT+1
32982             XLAM(LKNT)=GAM
32983             IDLAM(LKNT,1)=KFNCHI(IX)
32984             IDLAM(LKNT,2)=6
32985             IDLAM(LKNT,3)=-6
32986           ENDIF
32987   150     CONTINUE
32988         ENDIF
32989   160 CONTINUE
32990  
32991 C...GLUINO -> CI Q QBAR'
32992       DO 190 IX=1,2
32993         XMJ=SMW(IX)
32994         AXMJ=ABS(XMJ)
32995         IF(XMI.GE.AXMJ) THEN
32996           S12MIN=0D0
32997           S12MAX=(AXMI-AXMJ)**2
32998           XXM(1)=0D0
32999           XXM(2)=XMJ
33000           XXM(3)=0D0
33001           XXM(4)=XMI
33002           XXM(5)=0D0
33003           XXM(6)=0D0
33004           XXM(9)=1D6
33005           XXM(10)=0D0
33006           XXM(7)=UMIX(IX,1)*SR2
33007           XXM(8)=VMIX(IX,1)*SR2
33008           XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
33009           XXM(12)=PMAS(PYCOMP(KSUSY1+2),1)
33010           IF( XXM(11).LT.AXMI .OR. XXM(12).LT.AXMI ) GOTO 170
33011           IF(XMI.GE.AXMJ+PMAS(1,1)+PMAS(2,1)) THEN
33012             LKNT=LKNT+1
33013             XLAM(LKNT)=0.5D0*C1*AS/XMI3/(16D0*PI)*
33014      &      PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
33015             IDLAM(LKNT,1)=KFCCHI(IX)
33016             IDLAM(LKNT,2)=1
33017             IDLAM(LKNT,3)=-2
33018             LKNT=LKNT+1
33019             XLAM(LKNT)=XLAM(LKNT-1)
33020             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
33021             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
33022             IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
33023           ENDIF
33024           IF(XMI.GE.AXMJ+PMAS(3,1)+PMAS(4,1)) THEN
33025             LKNT=LKNT+1
33026             XLAM(LKNT)=XLAM(LKNT-1)
33027             IDLAM(LKNT,1)=KFCCHI(IX)
33028             IDLAM(LKNT,2)=3
33029             IDLAM(LKNT,3)=-4
33030             LKNT=LKNT+1
33031             XLAM(LKNT)=XLAM(LKNT-1)
33032             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
33033             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
33034             IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
33035           ENDIF
33036   170     CONTINUE
33037  
33038           IF(XMI.GE.PMAS(PYCOMP(KSUSY1+5),1)+PMAS(5,1)) GOTO 180
33039           IF(XMI.GE.PMAS(PYCOMP(KSUSY1+6),1)+PMAS(6,1)) GOTO 180
33040           XMF=PMAS(6,1)
33041           XMFP=PMAS(5,1)
33042           IF(XMI.GE.AXMJ+XMF+XMFP) THEN
33043             CALL PYTBBC(IX,80,AXMI,GAM)
33044             LKNT=LKNT+1
33045             XLAM(LKNT)=GAM
33046             IDLAM(LKNT,1)=KFCCHI(IX)
33047             IDLAM(LKNT,2)=5
33048             IDLAM(LKNT,3)=-6
33049             LKNT=LKNT+1
33050             XLAM(LKNT)=XLAM(LKNT-1)
33051             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
33052             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
33053             IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
33054           ENDIF
33055   180     CONTINUE
33056         ENDIF
33057   190 CONTINUE
33058  
33059       IKNT=LKNT
33060       XLAM(0)=0D0
33061       DO 200 I=1,IKNT
33062         IF(XLAM(I).LT.0D0) XLAM(I)=0D0
33063         XLAM(0)=XLAM(0)+XLAM(I)
33064   200 CONTINUE
33065       IF(XLAM(0).EQ.0D0) XLAM(0)=1D-6
33066  
33067       RETURN
33068       END
33069
33070 C*********************************************************************
33071  
33072 C...PYTECM
33073 C...Finds the s-hat dependent eigenvalues of the inverse propagator
33074 C...matrix for gamma, Z, technirho, and techniomega to optimize the
33075 C...phase space generation.
33076  
33077       SUBROUTINE PYTECM(S1,S2)
33078  
33079 C...Double precision and integer declarations.
33080       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
33081       IMPLICIT INTEGER(I-N)
33082       INTEGER PYK,PYCHGE,PYCOMP
33083 C...Parameter statement to help give large particle numbers.
33084       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
33085 C...Commonblocks.
33086       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
33087       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
33088       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
33089       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/
33090  
33091 C...Local variables.
33092       DOUBLE PRECISION AR(4,4),WR(4),ZR(4,4),ZI(4,4),WORK(12,12),
33093      &AT(4,4),WI(4),FV1(4),FV2(4),FV3(4),sh,aem,tanw,ct2w,qupd,alprht,
33094      &far,fao,fzr,fzo,shr,R1,R2,S1,S2,WDTP(0:200),WDTE(0:200,0:5)
33095       INTEGER i,j,ierr
33096
33097       SH=PMAS(54,1)**2
33098       AEM=PYALEM(SH)
33099
33100       TANW=SQRT(PARU(102)/(1D0-PARU(102)))
33101       CT2W=(1D0-2D0*PARU(102))/(2D0*PARU(102)/TANW)
33102       QUPD=2D0*PARP(143)-1D0
33103
33104       ALPRHT=2.91D0*(3D0/PARP(144))
33105       FAR=SQRT(AEM/ALPRHT)
33106       FAO=FAR*QUPD
33107       FZR=FAR*CT2W
33108       FZO=-FAO*TANW
33109
33110       AR(1,1) = SH
33111       AR(2,2) = SH-PMAS(23,1)**2
33112       AR(3,3) = SH-PMAS(54,1)**2
33113       AR(4,4) = SH-PMAS(56,1)**2
33114       AR(1,2) = 0D0
33115       AR(2,1) = 0D0
33116       AR(1,3) = -SH*FAR
33117       AR(3,1) = AR(1,3)
33118       AR(1,4) = -SH*FAO
33119       AR(4,1) = AR(1,4)
33120       AR(2,3) = -SH*FZR
33121       AR(3,2) = AR(2,3)
33122       AR(2,4) = -SH*FZO
33123       AR(4,2) = AR(2,4)
33124       AR(3,4) = 0D0
33125       AR(4,3) = 0D0
33126 CCCCCCCC
33127       DO 110 I=1,4
33128         DO 100 J=1,4
33129           AT(I,J)=0D0
33130   100   CONTINUE
33131   110 CONTINUE
33132       SHR=SQRT(SH)
33133       CALL PYWIDT(23,SH,WDTP,WDTE)
33134       AT(2,2) = WDTP(0)*SHR
33135       CALL PYWIDT(54,SH,WDTP,WDTE)
33136       AT(3,3) = WDTP(0)*SHR
33137       CALL PYWIDT(56,SH,WDTP,WDTE)
33138       AT(4,4) = WDTP(0)*SHR
33139 CCCC
33140       CALL PYEICG(4,4,AR,AT,WR,WI,0,ZR,ZI,FV1,FV2,FV3,IERR)
33141       DO 120 I=1,4
33142         WI(I)=SQRT(ABS(SH-WR(I)))
33143         WR(I)=ABS(WR(I))
33144   120 CONTINUE
33145       R1=MIN(WR(1),WR(2),WR(3),WR(4))
33146       R2=1D20
33147       S1=0D0
33148       S2=0D0
33149       DO 130 I=1,4
33150         IF(ABS(WR(I)-R1).LT.1D-6) THEN
33151           S1=WI(I)
33152           GOTO 130
33153         ENDIF
33154         IF(WR(I).LE.R2) THEN
33155           R2=WR(I)
33156           S2=WI(I)
33157         ENDIF
33158   130 CONTINUE
33159       S1=S1**2
33160       S2=S2**2
33161       RETURN
33162       END
33163
33164
33165
33166 C*********************************************************************
33167
33168 C...PYEIGC
33169 C...Finds eigenvalues of a general complex matrix
33170
33171       SUBROUTINE PYEICG(NM,N,AR,AI,WR,WI,MATZ,ZR,ZI,FV1,FV2,FV3,IERR)
33172 C
33173       INTEGER N,NM,IS1,IS2,IERR,MATZ
33174       DOUBLE PRECISION AR(NM,N),AI(NM,N),WR(N),WI(N),ZR(NM,N),ZI(NM,N),
33175      X       FV1(N),FV2(N),FV3(N)
33176 C
33177 C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
33178 C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
33179 C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
33180 C     OF A COMPLEX GENERAL MATRIX.
33181 C
33182 C     ON INPUT
33183 C
33184 C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
33185 C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
33186 C        DIMENSION STATEMENT.
33187 C
33188 C        N  IS THE ORDER OF THE MATRIX  A=(AR,AI).
33189 C
33190 C        AR  AND  AI  CONTAIN THE REAL AND IMAGINARY PARTS,
33191 C        RESPECTIVELY, OF THE COMPLEX GENERAL MATRIX.
33192 C
33193 C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
33194 C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
33195 C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
33196 C
33197 C     ON OUTPUT
33198 C
33199 C        WR  AND  WI  CONTAIN THE REAL AND IMAGINARY PARTS,
33200 C        RESPECTIVELY, OF THE EIGENVALUES.
33201 C
33202 C        ZR  AND  ZI  CONTAIN THE REAL AND IMAGINARY PARTS,
33203 C        RESPECTIVELY, OF THE EIGENVECTORS IF MATZ IS NOT ZERO.
33204 C
33205 C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
33206 C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR COMQR
33207 C           AND COMQR2.  THE NORMAL COMPLETION CODE IS ZERO.
33208 C
33209 C        FV1, FV2, AND  FV3  ARE TEMPORARY STORAGE ARRAYS.
33210 C
33211 C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
33212 C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
33213 C
33214 C     THIS VERSION DATED AUGUST 1983.
33215 C
33216 C     ------------------------------------------------------------------
33217 C
33218       IF (N .LE. NM) GO TO 10
33219       IERR = 10 * N
33220       GO TO 50
33221 C
33222    10 CALL  CBAL(NM,N,AR,AI,IS1,IS2,FV1)
33223       CALL  CORTH(NM,N,IS1,IS2,AR,AI,FV2,FV3)
33224       IF (MATZ .NE. 0) GO TO 20
33225 C     .......... FIND EIGENVALUES ONLY ..........
33226       CALL  COMQR(NM,N,IS1,IS2,AR,AI,WR,WI,IERR)
33227       GO TO 50
33228 C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
33229    20 CALL  COMQR2(NM,N,IS1,IS2,FV2,FV3,AR,AI,WR,WI,ZR,ZI,IERR)
33230       IF (IERR .NE. 0) GO TO 50
33231       CALL  CBABK2(NM,N,IS1,IS2,FV1,N,ZR,ZI)
33232    50 RETURN
33233       END
33234       SUBROUTINE CBABK2(NM,N,LOW,IGH,SCALE,M,ZR,ZI)
33235 C
33236       INTEGER I,J,K,M,N,II,NM,IGH,LOW
33237       DOUBLE PRECISION SCALE(N),ZR(NM,M),ZI(NM,M)
33238       DOUBLE PRECISION S
33239 C
33240 C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE
33241 C     CBABK2, WHICH IS A COMPLEX VERSION OF BALBAK,
33242 C     NUM. MATH. 13, 293-304(1969) BY PARLETT AND REINSCH.
33243 C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 315-326(1971).
33244 C
33245 C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A COMPLEX GENERAL
33246 C     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING
33247 C     BALANCED MATRIX DETERMINED BY  CBAL.
33248 C
33249 C     ON INPUT
33250 C
33251 C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
33252 C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
33253 C          DIMENSION STATEMENT.
33254 C
33255 C        N IS THE ORDER OF THE MATRIX.
33256 C
33257 C        LOW AND IGH ARE INTEGERS DETERMINED BY  CBAL.
33258 C
33259 C        SCALE CONTAINS INFORMATION DETERMINING THE PERMUTATIONS
33260 C          AND SCALING FACTORS USED BY  CBAL.
33261 C
33262 C        M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED.
33263 C
33264 C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
33265 C          RESPECTIVELY, OF THE EIGENVECTORS TO BE
33266 C          BACK TRANSFORMED IN THEIR FIRST M COLUMNS.
33267 C
33268 C     ON OUTPUT
33269 C
33270 C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
33271 C          RESPECTIVELY, OF THE TRANSFORMED EIGENVECTORS
33272 C          IN THEIR FIRST M COLUMNS.
33273 C
33274 C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
33275 C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
33276 C
33277 C     THIS VERSION DATED AUGUST 1983.
33278 C
33279 C     ------------------------------------------------------------------
33280 C
33281       IF (M .EQ. 0) GO TO 200
33282       IF (IGH .EQ. LOW) GO TO 120
33283 C
33284       DO 110 I = LOW, IGH
33285          S = SCALE(I)
33286 C     .......... LEFT HAND EIGENVECTORS ARE BACK TRANSFORMED
33287 C                IF THE FOREGOING STATEMENT IS REPLACED BY
33288 C                S=1.0D0/SCALE(I). ..........
33289          DO 100 J = 1, M
33290             ZR(I,J) = ZR(I,J) * S
33291             ZI(I,J) = ZI(I,J) * S
33292   100    CONTINUE
33293 C
33294   110 CONTINUE
33295 C     .......... FOR I=LOW-1 STEP -1 UNTIL 1,
33296 C                IGH+1 STEP 1 UNTIL N DO -- ..........
33297   120 DO 140 II = 1, N
33298          I = II
33299          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 140
33300          IF (I .LT. LOW) I = LOW - II
33301          K = SCALE(I)
33302          IF (K .EQ. I) GO TO 140
33303 C
33304          DO 130 J = 1, M
33305             S = ZR(I,J)
33306             ZR(I,J) = ZR(K,J)
33307             ZR(K,J) = S
33308             S = ZI(I,J)
33309             ZI(I,J) = ZI(K,J)
33310             ZI(K,J) = S
33311   130    CONTINUE
33312 C
33313   140 CONTINUE
33314 C
33315   200 RETURN
33316       END
33317       SUBROUTINE CBAL(NM,N,AR,AI,LOW,IGH,SCALE)
33318 C
33319       INTEGER I,J,K,L,M,N,JJ,NM,IGH,LOW,IEXC
33320       DOUBLE PRECISION AR(NM,N),AI(NM,N),SCALE(N)
33321       DOUBLE PRECISION C,F,G,R,S,B2,RADIX
33322       LOGICAL NOCONV
33323 C
33324 C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE
33325 C     CBALANCE, WHICH IS A COMPLEX VERSION OF BALANCE,
33326 C     NUM. MATH. 13, 293-304(1969) BY PARLETT AND REINSCH.
33327 C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 315-326(1971).
33328 C
33329 C     THIS SUBROUTINE BALANCES A COMPLEX MATRIX AND ISOLATES
33330 C     EIGENVALUES WHENEVER POSSIBLE.
33331 C
33332 C     ON INPUT
33333 C
33334 C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
33335 C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
33336 C          DIMENSION STATEMENT.
33337 C
33338 C        N IS THE ORDER OF THE MATRIX.
33339 C
33340 C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
33341 C          RESPECTIVELY, OF THE COMPLEX MATRIX TO BE BALANCED.
33342 C
33343 C     ON OUTPUT
33344 C
33345 C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
33346 C          RESPECTIVELY, OF THE BALANCED MATRIX.
33347 C
33348 C        LOW AND IGH ARE TWO INTEGERS SUCH THAT AR(I,J) AND AI(I,J)
33349 C          ARE EQUAL TO ZERO IF
33350 C           (1) I IS GREATER THAN J AND
33351 C           (2) J=1,...,LOW-1 OR I=IGH+1,...,N.
33352 C
33353 C        SCALE CONTAINS INFORMATION DETERMINING THE
33354 C           PERMUTATIONS AND SCALING FACTORS USED.
33355 C
33356 C     SUPPOSE THAT THE PRINCIPAL SUBMATRIX IN ROWS LOW THROUGH IGH
33357 C     HAS BEEN BALANCED, THAT P(J) DENOTES THE INDEX INTERCHANGED
33358 C     WITH J DURING THE PERMUTATION STEP, AND THAT THE ELEMENTS
33359 C     OF THE DIAGONAL MATRIX USED ARE DENOTED BY D(I,J).  THEN
33360 C        SCALE(J) = P(J),    FOR J = 1,...,LOW-1
33361 C                 = D(J,J)       J = LOW,...,IGH
33362 C                 = P(J)         J = IGH+1,...,N.
33363 C     THE ORDER IN WHICH THE INTERCHANGES ARE MADE IS N TO IGH+1,
33364 C     THEN 1 TO LOW-1.
33365 C
33366 C     NOTE THAT 1 IS RETURNED FOR IGH IF IGH IS ZERO FORMALLY.
33367 C
33368 C     THE ALGOL PROCEDURE EXC CONTAINED IN CBALANCE APPEARS IN
33369 C     CBAL  IN LINE.  (NOTE THAT THE ALGOL ROLES OF IDENTIFIERS
33370 C     K,L HAVE BEEN REVERSED.)
33371 C
33372 C     ARITHMETIC IS REAL THROUGHOUT.
33373 C
33374 C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
33375 C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
33376 C
33377 C     THIS VERSION DATED AUGUST 1983.
33378 C
33379 C     ------------------------------------------------------------------
33380 C
33381       RADIX = 16.0D0
33382 C
33383       B2 = RADIX * RADIX
33384       K = 1
33385       L = N
33386       GO TO 100
33387 C     .......... IN-LINE PROCEDURE FOR ROW AND
33388 C                COLUMN EXCHANGE ..........
33389    20 SCALE(M) = J
33390       IF (J .EQ. M) GO TO 50
33391 C
33392       DO 30 I = 1, L
33393          F = AR(I,J)
33394          AR(I,J) = AR(I,M)
33395          AR(I,M) = F
33396          F = AI(I,J)
33397          AI(I,J) = AI(I,M)
33398          AI(I,M) = F
33399    30 CONTINUE
33400 C
33401       DO 40 I = K, N
33402          F = AR(J,I)
33403          AR(J,I) = AR(M,I)
33404          AR(M,I) = F
33405          F = AI(J,I)
33406          AI(J,I) = AI(M,I)
33407          AI(M,I) = F
33408    40 CONTINUE
33409 C
33410    50 GO TO (80,130), IEXC
33411 C     .......... SEARCH FOR ROWS ISOLATING AN EIGENVALUE
33412 C                AND PUSH THEM DOWN ..........
33413    80 IF (L .EQ. 1) GO TO 280
33414       L = L - 1
33415 C     .......... FOR J=L STEP -1 UNTIL 1 DO -- ..........
33416   100 DO 120 JJ = 1, L
33417          J = L + 1 - JJ
33418 C
33419          DO 110 I = 1, L
33420             IF (I .EQ. J) GO TO 110
33421             IF (AR(J,I) .NE. 0.0D0 .OR. AI(J,I) .NE. 0.0D0) GO TO 120
33422   110    CONTINUE
33423 C
33424          M = L
33425          IEXC = 1
33426          GO TO 20
33427   120 CONTINUE
33428 C
33429       GO TO 140
33430 C     .......... SEARCH FOR COLUMNS ISOLATING AN EIGENVALUE
33431 C                AND PUSH THEM LEFT ..........
33432   130 K = K + 1
33433 C
33434   140 DO 170 J = K, L
33435 C
33436          DO 150 I = K, L
33437             IF (I .EQ. J) GO TO 150
33438             IF (AR(I,J) .NE. 0.0D0 .OR. AI(I,J) .NE. 0.0D0) GO TO 170
33439   150    CONTINUE
33440 C
33441          M = K
33442          IEXC = 2
33443          GO TO 20
33444   170 CONTINUE
33445 C     .......... NOW BALANCE THE SUBMATRIX IN ROWS K TO L ..........
33446       DO 180 I = K, L
33447   180 SCALE(I) = 1.0D0
33448 C     .......... ITERATIVE LOOP FOR NORM REDUCTION ..........
33449   190 NOCONV = .FALSE.
33450 C
33451       DO 270 I = K, L
33452          C = 0.0D0
33453          R = 0.0D0
33454 C
33455          DO 200 J = K, L
33456             IF (J .EQ. I) GO TO 200
33457             C = C + DABS(AR(J,I)) + DABS(AI(J,I))
33458             R = R + DABS(AR(I,J)) + DABS(AI(I,J))
33459   200    CONTINUE
33460 C     .......... GUARD AGAINST ZERO C OR R DUE TO UNDERFLOW ..........
33461          IF (C .EQ. 0.0D0 .OR. R .EQ. 0.0D0) GO TO 270
33462          G = R / RADIX
33463          F = 1.0D0
33464          S = C + R
33465   210    IF (C .GE. G) GO TO 220
33466          F = F * RADIX
33467          C = C * B2
33468          GO TO 210
33469   220    G = R * RADIX
33470   230    IF (C .LT. G) GO TO 240
33471          F = F / RADIX
33472          C = C / B2
33473          GO TO 230
33474 C     .......... NOW BALANCE ..........
33475   240    IF ((C + R) / F .GE. 0.95D0 * S) GO TO 270
33476          G = 1.0D0 / F
33477          SCALE(I) = SCALE(I) * F
33478          NOCONV = .TRUE.
33479 C
33480          DO 250 J = K, N
33481             AR(I,J) = AR(I,J) * G
33482             AI(I,J) = AI(I,J) * G
33483   250    CONTINUE
33484 C
33485          DO 260 J = 1, L
33486             AR(J,I) = AR(J,I) * F
33487             AI(J,I) = AI(J,I) * F
33488   260    CONTINUE
33489 C
33490   270 CONTINUE
33491 C
33492       IF (NOCONV) GO TO 190
33493 C
33494   280 LOW = K
33495       IGH = L
33496       RETURN
33497       END
33498       SUBROUTINE CDIV(AR,AI,BR,BI,CR,CI)
33499       DOUBLE PRECISION AR,AI,BR,BI,CR,CI
33500 C
33501 C     COMPLEX DIVISION, (CR,CI) = (AR,AI)/(BR,BI)
33502 C
33503       DOUBLE PRECISION S,ARS,AIS,BRS,BIS
33504       S = DABS(BR) + DABS(BI)
33505       ARS = AR/S
33506       AIS = AI/S
33507       BRS = BR/S
33508       BIS = BI/S
33509       S = BRS**2 + BIS**2
33510       CR = (ARS*BRS + AIS*BIS)/S
33511       CI = (AIS*BRS - ARS*BIS)/S
33512       RETURN
33513       END
33514       SUBROUTINE COMQR(NM,N,LOW,IGH,HR,HI,WR,WI,IERR)
33515 C
33516       INTEGER I,J,L,N,EN,LL,NM,IGH,ITN,ITS,LOW,LP1,ENM1,IERR
33517       DOUBLE PRECISION HR(NM,N),HI(NM,N),WR(N),WI(N)
33518       DOUBLE PRECISION SI,SR,TI,TR,XI,XR,YI,YR,ZZI,ZZR,NORM,TST1,TST2,
33519      X       PYTHAG
33520 C
33521 C     THIS SUBROUTINE IS A TRANSLATION OF A UNITARY ANALOGUE OF THE
33522 C     ALGOL PROCEDURE  COMLR, NUM. MATH. 12, 369-376(1968) BY MARTIN
33523 C     AND WILKINSON.
33524 C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 396-403(1971).
33525 C     THE UNITARY ANALOGUE SUBSTITUTES THE QR ALGORITHM OF FRANCIS
33526 C     (COMP. JOUR. 4, 332-345(1962)) FOR THE LR ALGORITHM.
33527 C
33528 C     THIS SUBROUTINE FINDS THE EIGENVALUES OF A COMPLEX
33529 C     UPPER HESSENBERG MATRIX BY THE QR METHOD.
33530 C
33531 C     ON INPUT
33532 C
33533 C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
33534 C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
33535 C          DIMENSION STATEMENT.
33536 C
33537 C        N IS THE ORDER OF THE MATRIX.
33538 C
33539 C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
33540 C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
33541 C          SET LOW=1, IGH=N.
33542 C
33543 C        HR AND HI CONTAIN THE REAL AND IMAGINARY PARTS,
33544 C          RESPECTIVELY, OF THE COMPLEX UPPER HESSENBERG MATRIX.
33545 C          THEIR LOWER TRIANGLES BELOW THE SUBDIAGONAL CONTAIN
33546 C          INFORMATION ABOUT THE UNITARY TRANSFORMATIONS USED IN
33547 C          THE REDUCTION BY  CORTH, IF PERFORMED.
33548 C
33549 C     ON OUTPUT
33550 C
33551 C        THE UPPER HESSENBERG PORTIONS OF HR AND HI HAVE BEEN
33552 C          DESTROYED.  THEREFORE, THEY MUST BE SAVED BEFORE
33553 C          CALLING  COMQR  IF SUBSEQUENT CALCULATION OF
33554 C          EIGENVECTORS IS TO BE PERFORMED.
33555 C
33556 C        WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS,
33557 C          RESPECTIVELY, OF THE EIGENVALUES.  IF AN ERROR
33558 C          EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT
33559 C          FOR INDICES IERR+1,...,N.
33560 C
33561 C        IERR IS SET TO
33562 C          ZERO       FOR NORMAL RETURN,
33563 C          J          IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED
33564 C                     WHILE THE J-TH EIGENVALUE IS BEING SOUGHT.
33565 C
33566 C     CALLS CDIV FOR COMPLEX DIVISION.
33567 C     CALLS CSROOT FOR COMPLEX SQUARE ROOT.
33568 C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
33569 C
33570 C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
33571 C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
33572 C
33573 C     THIS VERSION DATED AUGUST 1983.
33574 C
33575 C     ------------------------------------------------------------------
33576 C
33577       IERR = 0
33578       IF (LOW .EQ. IGH) GO TO 180
33579 C     .......... CREATE REAL SUBDIAGONAL ELEMENTS ..........
33580       L = LOW + 1
33581 C
33582       DO 170 I = L, IGH
33583          LL = MIN0(I+1,IGH)
33584          IF (HI(I,I-1) .EQ. 0.0D0) GO TO 170
33585          NORM = PYTHAG(HR(I,I-1),HI(I,I-1))
33586          YR = HR(I,I-1) / NORM
33587          YI = HI(I,I-1) / NORM
33588          HR(I,I-1) = NORM
33589          HI(I,I-1) = 0.0D0
33590 C
33591          DO 155 J = I, IGH
33592             SI = YR * HI(I,J) - YI * HR(I,J)
33593             HR(I,J) = YR * HR(I,J) + YI * HI(I,J)
33594             HI(I,J) = SI
33595   155    CONTINUE
33596 C
33597          DO 160 J = LOW, LL
33598             SI = YR * HI(J,I) + YI * HR(J,I)
33599             HR(J,I) = YR * HR(J,I) - YI * HI(J,I)
33600             HI(J,I) = SI
33601   160    CONTINUE
33602 C
33603   170 CONTINUE
33604 C     .......... STORE ROOTS ISOLATED BY CBAL ..........
33605   180 DO 200 I = 1, N
33606          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 200
33607          WR(I) = HR(I,I)
33608          WI(I) = HI(I,I)
33609   200 CONTINUE
33610 C
33611       EN = IGH
33612       TR = 0.0D0
33613       TI = 0.0D0
33614       ITN = 30*N
33615 C     .......... SEARCH FOR NEXT EIGENVALUE ..........
33616   220 IF (EN .LT. LOW) GO TO 1001
33617       ITS = 0
33618       ENM1 = EN - 1
33619 C     .......... LOOK FOR SINGLE SMALL SUB-DIAGONAL ELEMENT
33620 C                FOR L=EN STEP -1 UNTIL LOW D0 -- ..........
33621   240 DO 260 LL = LOW, EN
33622          L = EN + LOW - LL
33623          IF (L .EQ. LOW) GO TO 300
33624          TST1 = DABS(HR(L-1,L-1)) + DABS(HI(L-1,L-1))
33625      X            + DABS(HR(L,L)) + DABS(HI(L,L))
33626          TST2 = TST1 + DABS(HR(L,L-1))
33627          IF (TST2 .EQ. TST1) GO TO 300
33628   260 CONTINUE
33629 C     .......... FORM SHIFT ..........
33630   300 IF (L .EQ. EN) GO TO 660
33631       IF (ITN .EQ. 0) GO TO 1000
33632       IF (ITS .EQ. 10 .OR. ITS .EQ. 20) GO TO 320
33633       SR = HR(EN,EN)
33634       SI = HI(EN,EN)
33635       XR = HR(ENM1,EN) * HR(EN,ENM1)
33636       XI = HI(ENM1,EN) * HR(EN,ENM1)
33637       IF (XR .EQ. 0.0D0 .AND. XI .EQ. 0.0D0) GO TO 340
33638       YR = (HR(ENM1,ENM1) - SR) / 2.0D0
33639       YI = (HI(ENM1,ENM1) - SI) / 2.0D0
33640       CALL CSROOT(YR**2-YI**2+XR,2.0D0*YR*YI+XI,ZZR,ZZI)
33641       IF (YR * ZZR + YI * ZZI .GE. 0.0D0) GO TO 310
33642       ZZR = -ZZR
33643       ZZI = -ZZI
33644   310 CALL CDIV(XR,XI,YR+ZZR,YI+ZZI,XR,XI)
33645       SR = SR - XR
33646       SI = SI - XI
33647       GO TO 340
33648 C     .......... FORM EXCEPTIONAL SHIFT ..........
33649   320 SR = DABS(HR(EN,ENM1)) + DABS(HR(ENM1,EN-2))
33650       SI = 0.0D0
33651 C
33652   340 DO 360 I = LOW, EN
33653          HR(I,I) = HR(I,I) - SR
33654          HI(I,I) = HI(I,I) - SI
33655   360 CONTINUE
33656 C
33657       TR = TR + SR
33658       TI = TI + SI
33659       ITS = ITS + 1
33660       ITN = ITN - 1
33661 C     .......... REDUCE TO TRIANGLE (ROWS) ..........
33662       LP1 = L + 1
33663 C
33664       DO 500 I = LP1, EN
33665          SR = HR(I,I-1)
33666          HR(I,I-1) = 0.0D0
33667          NORM = PYTHAG(PYTHAG(HR(I-1,I-1),HI(I-1,I-1)),SR)
33668          XR = HR(I-1,I-1) / NORM
33669          WR(I-1) = XR
33670          XI = HI(I-1,I-1) / NORM
33671          WI(I-1) = XI
33672          HR(I-1,I-1) = NORM
33673          HI(I-1,I-1) = 0.0D0
33674          HI(I,I-1) = SR / NORM
33675 C
33676          DO 490 J = I, EN
33677             YR = HR(I-1,J)
33678             YI = HI(I-1,J)
33679             ZZR = HR(I,J)
33680             ZZI = HI(I,J)
33681             HR(I-1,J) = XR * YR + XI * YI + HI(I,I-1) * ZZR
33682             HI(I-1,J) = XR * YI - XI * YR + HI(I,I-1) * ZZI
33683             HR(I,J) = XR * ZZR - XI * ZZI - HI(I,I-1) * YR
33684             HI(I,J) = XR * ZZI + XI * ZZR - HI(I,I-1) * YI
33685   490    CONTINUE
33686 C
33687   500 CONTINUE
33688 C
33689       SI = HI(EN,EN)
33690       IF (SI .EQ. 0.0D0) GO TO 540
33691       NORM = PYTHAG(HR(EN,EN),SI)
33692       SR = HR(EN,EN) / NORM
33693       SI = SI / NORM
33694       HR(EN,EN) = NORM
33695       HI(EN,EN) = 0.0D0
33696 C     .......... INVERSE OPERATION (COLUMNS) ..........
33697   540 DO 600 J = LP1, EN
33698          XR = WR(J-1)
33699          XI = WI(J-1)
33700 C
33701          DO 580 I = L, J
33702             YR = HR(I,J-1)
33703             YI = 0.0D0
33704             ZZR = HR(I,J)
33705             ZZI = HI(I,J)
33706             IF (I .EQ. J) GO TO 560
33707             YI = HI(I,J-1)
33708             HI(I,J-1) = XR * YI + XI * YR + HI(J,J-1) * ZZI
33709   560       HR(I,J-1) = XR * YR - XI * YI + HI(J,J-1) * ZZR
33710             HR(I,J) = XR * ZZR + XI * ZZI - HI(J,J-1) * YR
33711             HI(I,J) = XR * ZZI - XI * ZZR - HI(J,J-1) * YI
33712   580    CONTINUE
33713 C
33714   600 CONTINUE
33715 C
33716       IF (SI .EQ. 0.0D0) GO TO 240
33717 C
33718       DO 630 I = L, EN
33719          YR = HR(I,EN)
33720          YI = HI(I,EN)
33721          HR(I,EN) = SR * YR - SI * YI
33722          HI(I,EN) = SR * YI + SI * YR
33723   630 CONTINUE
33724 C
33725       GO TO 240
33726 C     .......... A ROOT FOUND ..........
33727   660 WR(EN) = HR(EN,EN) + TR
33728       WI(EN) = HI(EN,EN) + TI
33729       EN = ENM1
33730       GO TO 220
33731 C     .......... SET ERROR -- ALL EIGENVALUES HAVE NOT
33732 C                CONVERGED AFTER 30*N ITERATIONS ..........
33733  1000 IERR = EN
33734  1001 RETURN
33735       END
33736       SUBROUTINE COMQR2(NM,N,LOW,IGH,ORTR,ORTI,HR,HI,WR,WI,ZR,ZI,IERR)
33737 C  MESHED OVERFLOW CONTROL WITH VECTORS OF ISOLATED ROOTS (10/19/89 BSG)
33738 C  MESHED OVERFLOW CONTROL WITH TRIANGULAR MULTIPLY (10/30/89 BSG)
33739 C
33740       INTEGER I,J,K,L,M,N,EN,II,JJ,LL,NM,NN,IGH,IP1,
33741      X        ITN,ITS,LOW,LP1,ENM1,IEND,IERR
33742       DOUBLE PRECISION HR(NM,N),HI(NM,N),WR(N),WI(N),ZR(NM,N),ZI(NM,N),
33743      X       ORTR(IGH),ORTI(IGH)
33744       DOUBLE PRECISION SI,SR,TI,TR,XI,XR,YI,YR,ZZI,ZZR,NORM,TST1,TST2,
33745      X       PYTHAG
33746 C
33747 C     THIS SUBROUTINE IS A TRANSLATION OF A UNITARY ANALOGUE OF THE
33748 C     ALGOL PROCEDURE  COMLR2, NUM. MATH. 16, 181-204(1970) BY PETERS
33749 C     AND WILKINSON.
33750 C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971).
33751 C     THE UNITARY ANALOGUE SUBSTITUTES THE QR ALGORITHM OF FRANCIS
33752 C     (COMP. JOUR. 4, 332-345(1962)) FOR THE LR ALGORITHM.
33753 C
33754 C     THIS SUBROUTINE FINDS THE EIGENVALUES AND EIGENVECTORS
33755 C     OF A COMPLEX UPPER HESSENBERG MATRIX BY THE QR
33756 C     METHOD.  THE EIGENVECTORS OF A COMPLEX GENERAL MATRIX
33757 C     CAN ALSO BE FOUND IF  CORTH  HAS BEEN USED TO REDUCE
33758 C     THIS GENERAL MATRIX TO HESSENBERG FORM.
33759 C
33760 C     ON INPUT
33761 C
33762 C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
33763 C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
33764 C          DIMENSION STATEMENT.
33765 C
33766 C        N IS THE ORDER OF THE MATRIX.
33767 C
33768 C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
33769 C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
33770 C          SET LOW=1, IGH=N.
33771 C
33772 C        ORTR AND ORTI CONTAIN INFORMATION ABOUT THE UNITARY TRANS-
33773 C          FORMATIONS USED IN THE REDUCTION BY  CORTH, IF PERFORMED.
33774 C          ONLY ELEMENTS LOW THROUGH IGH ARE USED.  IF THE EIGENVECTORS
33775 C          OF THE HESSENBERG MATRIX ARE DESIRED, SET ORTR(J) AND
33776 C          ORTI(J) TO 0.0D0 FOR THESE ELEMENTS.
33777 C
33778 C        HR AND HI CONTAIN THE REAL AND IMAGINARY PARTS,
33779 C          RESPECTIVELY, OF THE COMPLEX UPPER HESSENBERG MATRIX.
33780 C          THEIR LOWER TRIANGLES BELOW THE SUBDIAGONAL CONTAIN FURTHER
33781 C          INFORMATION ABOUT THE TRANSFORMATIONS WHICH WERE USED IN THE
33782 C          REDUCTION BY  CORTH, IF PERFORMED.  IF THE EIGENVECTORS OF
33783 C          THE HESSENBERG MATRIX ARE DESIRED, THESE ELEMENTS MAY BE
33784 C          ARBITRARY.
33785 C
33786 C     ON OUTPUT
33787 C
33788 C        ORTR, ORTI, AND THE UPPER HESSENBERG PORTIONS OF HR AND HI
33789 C          HAVE BEEN DESTROYED.
33790 C
33791 C        WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS,
33792 C          RESPECTIVELY, OF THE EIGENVALUES.  IF AN ERROR
33793 C          EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT
33794 C          FOR INDICES IERR+1,...,N.
33795 C
33796 C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
33797 C          RESPECTIVELY, OF THE EIGENVECTORS.  THE EIGENVECTORS
33798 C          ARE UNNORMALIZED.  IF AN ERROR EXIT IS MADE, NONE OF
33799 C          THE EIGENVECTORS HAS BEEN FOUND.
33800 C
33801 C        IERR IS SET TO
33802 C          ZERO       FOR NORMAL RETURN,
33803 C          J          IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED
33804 C                     WHILE THE J-TH EIGENVALUE IS BEING SOUGHT.
33805 C
33806 C     CALLS CDIV FOR COMPLEX DIVISION.
33807 C     CALLS CSROOT FOR COMPLEX SQUARE ROOT.
33808 C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
33809 C
33810 C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
33811 C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
33812 C
33813 C     THIS VERSION DATED OCTOBER 1989.
33814 C
33815 C     ------------------------------------------------------------------
33816 C
33817       IERR = 0
33818 C     .......... INITIALIZE EIGENVECTOR MATRIX ..........
33819       DO 101 J = 1, N
33820 C
33821          DO 100 I = 1, N
33822             ZR(I,J) = 0.0D0
33823             ZI(I,J) = 0.0D0
33824   100    CONTINUE
33825          ZR(J,J) = 1.0D0
33826   101 CONTINUE
33827 C     .......... FORM THE MATRIX OF ACCUMULATED TRANSFORMATIONS
33828 C                FROM THE INFORMATION LEFT BY CORTH ..........
33829       IEND = IGH - LOW - 1
33830       IF (IEND) 180, 150, 105
33831 C     .......... FOR I=IGH-1 STEP -1 UNTIL LOW+1 DO -- ..........
33832   105 DO 140 II = 1, IEND
33833          I = IGH - II
33834          IF (ORTR(I) .EQ. 0.0D0 .AND. ORTI(I) .EQ. 0.0D0) GO TO 140
33835          IF (HR(I,I-1) .EQ. 0.0D0 .AND. HI(I,I-1) .EQ. 0.0D0) GO TO 140
33836 C     .......... NORM BELOW IS NEGATIVE OF H FORMED IN CORTH ..........
33837          NORM = HR(I,I-1) * ORTR(I) + HI(I,I-1) * ORTI(I)
33838          IP1 = I + 1
33839 C
33840          DO 110 K = IP1, IGH
33841             ORTR(K) = HR(K,I-1)
33842             ORTI(K) = HI(K,I-1)
33843   110    CONTINUE
33844 C
33845          DO 130 J = I, IGH
33846             SR = 0.0D0
33847             SI = 0.0D0
33848 C
33849             DO 115 K = I, IGH
33850                SR = SR + ORTR(K) * ZR(K,J) + ORTI(K) * ZI(K,J)
33851                SI = SI + ORTR(K) * ZI(K,J) - ORTI(K) * ZR(K,J)
33852   115       CONTINUE
33853 C
33854             SR = SR / NORM
33855             SI = SI / NORM
33856 C
33857             DO 120 K = I, IGH
33858                ZR(K,J) = ZR(K,J) + SR * ORTR(K) - SI * ORTI(K)
33859                ZI(K,J) = ZI(K,J) + SR * ORTI(K) + SI * ORTR(K)
33860   120       CONTINUE
33861 C
33862   130    CONTINUE
33863 C
33864   140 CONTINUE
33865 C     .......... CREATE REAL SUBDIAGONAL ELEMENTS ..........
33866   150 L = LOW + 1
33867 C
33868       DO 170 I = L, IGH
33869          LL = MIN0(I+1,IGH)
33870          IF (HI(I,I-1) .EQ. 0.0D0) GO TO 170
33871          NORM = PYTHAG(HR(I,I-1),HI(I,I-1))
33872          YR = HR(I,I-1) / NORM
33873          YI = HI(I,I-1) / NORM
33874          HR(I,I-1) = NORM
33875          HI(I,I-1) = 0.0D0
33876 C
33877          DO 155 J = I, N
33878             SI = YR * HI(I,J) - YI * HR(I,J)
33879             HR(I,J) = YR * HR(I,J) + YI * HI(I,J)
33880             HI(I,J) = SI
33881   155    CONTINUE
33882 C
33883          DO 160 J = 1, LL
33884             SI = YR * HI(J,I) + YI * HR(J,I)
33885             HR(J,I) = YR * HR(J,I) - YI * HI(J,I)
33886             HI(J,I) = SI
33887   160    CONTINUE
33888 C
33889          DO 165 J = LOW, IGH
33890             SI = YR * ZI(J,I) + YI * ZR(J,I)
33891             ZR(J,I) = YR * ZR(J,I) - YI * ZI(J,I)
33892             ZI(J,I) = SI
33893   165    CONTINUE
33894 C
33895   170 CONTINUE
33896 C     .......... STORE ROOTS ISOLATED BY CBAL ..........
33897   180 DO 200 I = 1, N
33898          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 200
33899          WR(I) = HR(I,I)
33900          WI(I) = HI(I,I)
33901   200 CONTINUE
33902 C
33903       EN = IGH
33904       TR = 0.0D0
33905       TI = 0.0D0
33906       ITN = 30*N
33907 C     .......... SEARCH FOR NEXT EIGENVALUE ..........
33908   220 IF (EN .LT. LOW) GO TO 680
33909       ITS = 0
33910       ENM1 = EN - 1
33911 C     .......... LOOK FOR SINGLE SMALL SUB-DIAGONAL ELEMENT
33912 C                FOR L=EN STEP -1 UNTIL LOW DO -- ..........
33913   240 DO 260 LL = LOW, EN
33914          L = EN + LOW - LL
33915          IF (L .EQ. LOW) GO TO 300
33916          TST1 = DABS(HR(L-1,L-1)) + DABS(HI(L-1,L-1))
33917      X            + DABS(HR(L,L)) + DABS(HI(L,L))
33918          TST2 = TST1 + DABS(HR(L,L-1))
33919          IF (TST2 .EQ. TST1) GO TO 300
33920   260 CONTINUE
33921 C     .......... FORM SHIFT ..........
33922   300 IF (L .EQ. EN) GO TO 660
33923       IF (ITN .EQ. 0) GO TO 1000
33924       IF (ITS .EQ. 10 .OR. ITS .EQ. 20) GO TO 320
33925       SR = HR(EN,EN)
33926       SI = HI(EN,EN)
33927       XR = HR(ENM1,EN) * HR(EN,ENM1)
33928       XI = HI(ENM1,EN) * HR(EN,ENM1)
33929       IF (XR .EQ. 0.0D0 .AND. XI .EQ. 0.0D0) GO TO 340
33930       YR = (HR(ENM1,ENM1) - SR) / 2.0D0
33931       YI = (HI(ENM1,ENM1) - SI) / 2.0D0
33932       CALL CSROOT(YR**2-YI**2+XR,2.0D0*YR*YI+XI,ZZR,ZZI)
33933       IF (YR * ZZR + YI * ZZI .GE. 0.0D0) GO TO 310
33934       ZZR = -ZZR
33935       ZZI = -ZZI
33936   310 CALL CDIV(XR,XI,YR+ZZR,YI+ZZI,XR,XI)
33937       SR = SR - XR
33938       SI = SI - XI
33939       GO TO 340
33940 C     .......... FORM EXCEPTIONAL SHIFT ..........
33941   320 SR = DABS(HR(EN,ENM1)) + DABS(HR(ENM1,EN-2))
33942       SI = 0.0D0
33943 C
33944   340 DO 360 I = LOW, EN
33945          HR(I,I) = HR(I,I) - SR
33946          HI(I,I) = HI(I,I) - SI
33947   360 CONTINUE
33948 C
33949       TR = TR + SR
33950       TI = TI + SI
33951       ITS = ITS + 1
33952       ITN = ITN - 1
33953 C     .......... REDUCE TO TRIANGLE (ROWS) ..........
33954       LP1 = L + 1
33955 C
33956       DO 500 I = LP1, EN
33957          SR = HR(I,I-1)
33958          HR(I,I-1) = 0.0D0
33959          NORM = PYTHAG(PYTHAG(HR(I-1,I-1),HI(I-1,I-1)),SR)
33960          XR = HR(I-1,I-1) / NORM
33961          WR(I-1) = XR
33962          XI = HI(I-1,I-1) / NORM
33963          WI(I-1) = XI
33964          HR(I-1,I-1) = NORM
33965          HI(I-1,I-1) = 0.0D0
33966          HI(I,I-1) = SR / NORM
33967 C
33968          DO 490 J = I, N
33969             YR = HR(I-1,J)
33970             YI = HI(I-1,J)
33971             ZZR = HR(I,J)
33972             ZZI = HI(I,J)
33973             HR(I-1,J) = XR * YR + XI * YI + HI(I,I-1) * ZZR
33974             HI(I-1,J) = XR * YI - XI * YR + HI(I,I-1) * ZZI
33975             HR(I,J) = XR * ZZR - XI * ZZI - HI(I,I-1) * YR
33976             HI(I,J) = XR * ZZI + XI * ZZR - HI(I,I-1) * YI
33977   490    CONTINUE
33978 C
33979   500 CONTINUE
33980 C
33981       SI = HI(EN,EN)
33982       IF (SI .EQ. 0.0D0) GO TO 540
33983       NORM = PYTHAG(HR(EN,EN),SI)
33984       SR = HR(EN,EN) / NORM
33985       SI = SI / NORM
33986       HR(EN,EN) = NORM
33987       HI(EN,EN) = 0.0D0
33988       IF (EN .EQ. N) GO TO 540
33989       IP1 = EN + 1
33990 C
33991       DO 520 J = IP1, N
33992          YR = HR(EN,J)
33993          YI = HI(EN,J)
33994          HR(EN,J) = SR * YR + SI * YI
33995          HI(EN,J) = SR * YI - SI * YR
33996   520 CONTINUE
33997 C     .......... INVERSE OPERATION (COLUMNS) ..........
33998   540 DO 600 J = LP1, EN
33999          XR = WR(J-1)
34000          XI = WI(J-1)
34001 C
34002          DO 580 I = 1, J
34003             YR = HR(I,J-1)
34004             YI = 0.0D0
34005             ZZR = HR(I,J)
34006             ZZI = HI(I,J)
34007             IF (I .EQ. J) GO TO 560
34008             YI = HI(I,J-1)
34009             HI(I,J-1) = XR * YI + XI * YR + HI(J,J-1) * ZZI
34010   560       HR(I,J-1) = XR * YR - XI * YI + HI(J,J-1) * ZZR
34011             HR(I,J) = XR * ZZR + XI * ZZI - HI(J,J-1) * YR
34012             HI(I,J) = XR * ZZI - XI * ZZR - HI(J,J-1) * YI
34013   580    CONTINUE
34014 C
34015          DO 590 I = LOW, IGH
34016             YR = ZR(I,J-1)
34017             YI = ZI(I,J-1)
34018             ZZR = ZR(I,J)
34019             ZZI = ZI(I,J)
34020             ZR(I,J-1) = XR * YR - XI * YI + HI(J,J-1) * ZZR
34021             ZI(I,J-1) = XR * YI + XI * YR + HI(J,J-1) * ZZI
34022             ZR(I,J) = XR * ZZR + XI * ZZI - HI(J,J-1) * YR
34023             ZI(I,J) = XR * ZZI - XI * ZZR - HI(J,J-1) * YI
34024   590    CONTINUE
34025 C
34026   600 CONTINUE
34027 C
34028       IF (SI .EQ. 0.0D0) GO TO 240
34029 C
34030       DO 630 I = 1, EN
34031          YR = HR(I,EN)
34032          YI = HI(I,EN)
34033          HR(I,EN) = SR * YR - SI * YI
34034          HI(I,EN) = SR * YI + SI * YR
34035   630 CONTINUE
34036 C
34037       DO 640 I = LOW, IGH
34038          YR = ZR(I,EN)
34039          YI = ZI(I,EN)
34040          ZR(I,EN) = SR * YR - SI * YI
34041          ZI(I,EN) = SR * YI + SI * YR
34042   640 CONTINUE
34043 C
34044       GO TO 240
34045 C     .......... A ROOT FOUND ..........
34046   660 HR(EN,EN) = HR(EN,EN) + TR
34047       WR(EN) = HR(EN,EN)
34048       HI(EN,EN) = HI(EN,EN) + TI
34049       WI(EN) = HI(EN,EN)
34050       EN = ENM1
34051       GO TO 220
34052 C     .......... ALL ROOTS FOUND.  BACKSUBSTITUTE TO FIND
34053 C                VECTORS OF UPPER TRIANGULAR FORM ..........
34054   680 NORM = 0.0D0
34055 C
34056       DO 720 I = 1, N
34057 C
34058          DO 720 J = I, N
34059             TR = DABS(HR(I,J)) + DABS(HI(I,J))
34060             IF (TR .GT. NORM) NORM = TR
34061   720 CONTINUE
34062 C
34063       IF (N .EQ. 1 .OR. NORM .EQ. 0.0D0) GO TO 1001
34064 C     .......... FOR EN=N STEP -1 UNTIL 2 DO -- ..........
34065       DO 800 NN = 2, N
34066          EN = N + 2 - NN
34067          XR = WR(EN)
34068          XI = WI(EN)
34069          HR(EN,EN) = 1.0D0
34070          HI(EN,EN) = 0.0D0
34071          ENM1 = EN - 1
34072 C     .......... FOR I=EN-1 STEP -1 UNTIL 1 DO -- ..........
34073          DO 780 II = 1, ENM1
34074             I = EN - II
34075             ZZR = 0.0D0
34076             ZZI = 0.0D0
34077             IP1 = I + 1
34078 C
34079             DO 740 J = IP1, EN
34080                ZZR = ZZR + HR(I,J) * HR(J,EN) - HI(I,J) * HI(J,EN)
34081                ZZI = ZZI + HR(I,J) * HI(J,EN) + HI(I,J) * HR(J,EN)
34082   740       CONTINUE
34083 C
34084             YR = XR - WR(I)
34085             YI = XI - WI(I)
34086             IF (YR .NE. 0.0D0 .OR. YI .NE. 0.0D0) GO TO 765
34087                TST1 = NORM
34088                YR = TST1
34089   760          YR = 0.01D0 * YR
34090                TST2 = NORM + YR
34091                IF (TST2 .GT. TST1) GO TO 760
34092   765       CONTINUE
34093             CALL CDIV(ZZR,ZZI,YR,YI,HR(I,EN),HI(I,EN))
34094 C     .......... OVERFLOW CONTROL ..........
34095             TR = DABS(HR(I,EN)) + DABS(HI(I,EN))
34096             IF (TR .EQ. 0.0D0) GO TO 780
34097             TST1 = TR
34098             TST2 = TST1 + 1.0D0/TST1
34099             IF (TST2 .GT. TST1) GO TO 780
34100             DO 770 J = I, EN
34101                HR(J,EN) = HR(J,EN)/TR
34102                HI(J,EN) = HI(J,EN)/TR
34103   770       CONTINUE
34104 C
34105   780    CONTINUE
34106 C
34107   800 CONTINUE
34108 C     .......... END BACKSUBSTITUTION ..........
34109 C     .......... VECTORS OF ISOLATED ROOTS ..........
34110       DO  840 I = 1, N
34111          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 840
34112 C
34113          DO 820 J = I, N
34114             ZR(I,J) = HR(I,J)
34115             ZI(I,J) = HI(I,J)
34116   820    CONTINUE
34117 C
34118   840 CONTINUE
34119 C     .......... MULTIPLY BY TRANSFORMATION MATRIX TO GIVE
34120 C                VECTORS OF ORIGINAL FULL MATRIX.
34121 C                FOR J=N STEP -1 UNTIL LOW DO -- ..........
34122       DO 880 JJ = LOW, N
34123          J = N + LOW - JJ
34124          M = MIN0(J,IGH)
34125 C
34126          DO 880 I = LOW, IGH
34127             ZZR = 0.0D0
34128             ZZI = 0.0D0
34129 C
34130             DO 860 K = LOW, M
34131                ZZR = ZZR + ZR(I,K) * HR(K,J) - ZI(I,K) * HI(K,J)
34132                ZZI = ZZI + ZR(I,K) * HI(K,J) + ZI(I,K) * HR(K,J)
34133   860       CONTINUE
34134 C
34135             ZR(I,J) = ZZR
34136             ZI(I,J) = ZZI
34137   880 CONTINUE
34138 C
34139       GO TO 1001
34140 C     .......... SET ERROR -- ALL EIGENVALUES HAVE NOT
34141 C                CONVERGED AFTER 30*N ITERATIONS ..........
34142  1000 IERR = EN
34143  1001 RETURN
34144       END
34145       SUBROUTINE CORTH(NM,N,LOW,IGH,AR,AI,ORTR,ORTI)
34146 C
34147       INTEGER I,J,M,N,II,JJ,LA,MP,NM,IGH,KP1,LOW
34148       DOUBLE PRECISION AR(NM,N),AI(NM,N),ORTR(IGH),ORTI(IGH)
34149       DOUBLE PRECISION F,G,H,FI,FR,SCALE,PYTHAG
34150 C
34151 C     THIS SUBROUTINE IS A TRANSLATION OF A COMPLEX ANALOGUE OF
34152 C     THE ALGOL PROCEDURE ORTHES, NUM. MATH. 12, 349-368(1968)
34153 C     BY MARTIN AND WILKINSON.
34154 C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971).
34155 C
34156 C     GIVEN A COMPLEX GENERAL MATRIX, THIS SUBROUTINE
34157 C     REDUCES A SUBMATRIX SITUATED IN ROWS AND COLUMNS
34158 C     LOW THROUGH IGH TO UPPER HESSENBERG FORM BY
34159 C     UNITARY SIMILARITY TRANSFORMATIONS.
34160 C
34161 C     ON INPUT
34162 C
34163 C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
34164 C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
34165 C          DIMENSION STATEMENT.
34166 C
34167 C        N IS THE ORDER OF THE MATRIX.
34168 C
34169 C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
34170 C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
34171 C          SET LOW=1, IGH=N.
34172 C
34173 C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
34174 C          RESPECTIVELY, OF THE COMPLEX INPUT MATRIX.
34175 C
34176 C     ON OUTPUT
34177 C
34178 C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
34179 C          RESPECTIVELY, OF THE HESSENBERG MATRIX.  INFORMATION
34180 C          ABOUT THE UNITARY TRANSFORMATIONS USED IN THE REDUCTION
34181 C          IS STORED IN THE REMAINING TRIANGLES UNDER THE
34182 C          HESSENBERG MATRIX.
34183 C
34184 C        ORTR AND ORTI CONTAIN FURTHER INFORMATION ABOUT THE
34185 C          TRANSFORMATIONS.  ONLY ELEMENTS LOW THROUGH IGH ARE USED.
34186 C
34187 C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
34188 C
34189 C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
34190 C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
34191 C
34192 C     THIS VERSION DATED AUGUST 1983.
34193 C
34194 C     ------------------------------------------------------------------
34195 C
34196       LA = IGH - 1
34197       KP1 = LOW + 1
34198       IF (LA .LT. KP1) GO TO 200
34199 C
34200       DO 180 M = KP1, LA
34201          H = 0.0D0
34202          ORTR(M) = 0.0D0
34203          ORTI(M) = 0.0D0
34204          SCALE = 0.0D0
34205 C     .......... SCALE COLUMN (ALGOL TOL THEN NOT NEEDED) ..........
34206          DO 90 I = M, IGH
34207    90    SCALE = SCALE + DABS(AR(I,M-1)) + DABS(AI(I,M-1))
34208 C
34209          IF (SCALE .EQ. 0.0D0) GO TO 180
34210          MP = M + IGH
34211 C     .......... FOR I=IGH STEP -1 UNTIL M DO -- ..........
34212          DO 100 II = M, IGH
34213             I = MP - II
34214             ORTR(I) = AR(I,M-1) / SCALE
34215             ORTI(I) = AI(I,M-1) / SCALE
34216             H = H + ORTR(I) * ORTR(I) + ORTI(I) * ORTI(I)
34217   100    CONTINUE
34218 C
34219          G = DSQRT(H)
34220          F = PYTHAG(ORTR(M),ORTI(M))
34221          IF (F .EQ. 0.0D0) GO TO 103
34222          H = H + F * G
34223          G = G / F
34224          ORTR(M) = (1.0D0 + G) * ORTR(M)
34225          ORTI(M) = (1.0D0 + G) * ORTI(M)
34226          GO TO 105
34227 C
34228   103    ORTR(M) = G
34229          AR(M,M-1) = SCALE
34230 C     .......... FORM (I-(U*UT)/H) * A ..........
34231   105    DO 130 J = M, N
34232             FR = 0.0D0
34233             FI = 0.0D0
34234 C     .......... FOR I=IGH STEP -1 UNTIL M DO -- ..........
34235             DO 110 II = M, IGH
34236                I = MP - II
34237                FR = FR + ORTR(I) * AR(I,J) + ORTI(I) * AI(I,J)
34238                FI = FI + ORTR(I) * AI(I,J) - ORTI(I) * AR(I,J)
34239   110       CONTINUE
34240 C
34241             FR = FR / H
34242             FI = FI / H
34243 C
34244             DO 120 I = M, IGH
34245                AR(I,J) = AR(I,J) - FR * ORTR(I) + FI * ORTI(I)
34246                AI(I,J) = AI(I,J) - FR * ORTI(I) - FI * ORTR(I)
34247   120       CONTINUE
34248 C
34249   130    CONTINUE
34250 C     .......... FORM (I-(U*UT)/H)*A*(I-(U*UT)/H) ..........
34251          DO 160 I = 1, IGH
34252             FR = 0.0D0
34253             FI = 0.0D0
34254 C     .......... FOR J=IGH STEP -1 UNTIL M DO -- ..........
34255             DO 140 JJ = M, IGH
34256                J = MP - JJ
34257                FR = FR + ORTR(J) * AR(I,J) - ORTI(J) * AI(I,J)
34258                FI = FI + ORTR(J) * AI(I,J) + ORTI(J) * AR(I,J)
34259   140       CONTINUE
34260 C
34261             FR = FR / H
34262             FI = FI / H
34263 C
34264             DO 150 J = M, IGH
34265                AR(I,J) = AR(I,J) - FR * ORTR(J) - FI * ORTI(J)
34266                AI(I,J) = AI(I,J) + FR * ORTI(J) - FI * ORTR(J)
34267   150       CONTINUE
34268 C
34269   160    CONTINUE
34270 C
34271          ORTR(M) = SCALE * ORTR(M)
34272          ORTI(M) = SCALE * ORTI(M)
34273          AR(M,M-1) = -G * AR(M,M-1)
34274          AI(M,M-1) = -G * AI(M,M-1)
34275   180 CONTINUE
34276 C
34277   200 RETURN
34278       END
34279       SUBROUTINE CSROOT(XR,XI,YR,YI)
34280       DOUBLE PRECISION XR,XI,YR,YI
34281 C
34282 C     (YR,YI) = COMPLEX DSQRT(XR,XI) 
34283 C     BRANCH CHOSEN SO THAT YR .GE. 0.0 AND SIGN(YI) .EQ. SIGN(XI)
34284 C
34285       DOUBLE PRECISION S,TR,TI,PYTHAG
34286       TR = XR
34287       TI = XI
34288       S = DSQRT(0.5D0*(PYTHAG(TR,TI) + DABS(TR)))
34289       IF (TR .GE. 0.0D0) YR = S
34290       IF (TI .LT. 0.0D0) S = -S
34291       IF (TR .LE. 0.0D0) YI = S
34292       IF (TR .LT. 0.0D0) YR = 0.5D0*(TI/YI)
34293       IF (TR .GT. 0.0D0) YI = 0.5D0*(TI/YR)
34294       RETURN
34295       END
34296       DOUBLE PRECISION FUNCTION PYTHAG(A,B)
34297       DOUBLE PRECISION A,B
34298 C
34299 C     FINDS DSQRT(A**2+B**2) WITHOUT OVERFLOW OR DESTRUCTIVE UNDERFLOW
34300 C
34301       DOUBLE PRECISION P,R,S,T,U
34302       P = DMAX1(DABS(A),DABS(B))
34303       IF (P .EQ. 0.0D0) GO TO 20
34304       R = (DMIN1(DABS(A),DABS(B))/P)**2
34305    10 CONTINUE
34306          T = 4.0D0 + R
34307          IF (T .EQ. 4.0D0) GO TO 20
34308          S = R/T
34309          U = 1.0D0 + 2.0D0*S
34310          P = U*P
34311          R = (S/U)**2 * R
34312       GO TO 10
34313    20 PYTHAG = P
34314       RETURN
34315       END
34316  
34317 C*********************************************************************
34318  
34319 C...PYTBBN
34320 C...Calculates the three-body decay of gluinos into
34321 C...neutralinos and third generation fermions.
34322  
34323       SUBROUTINE PYTBBN(I,NN,E,XMGLU,GAM)
34324  
34325 C...Double precision and integer declarations.
34326       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
34327       IMPLICIT INTEGER(I-N)
34328       INTEGER PYK,PYCHGE,PYCOMP
34329 C...Parameter statement to help give large particle numbers.
34330       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
34331 C...Commonblocks.
34332       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
34333       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
34334       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
34335       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
34336      &SFMIX(16,4)
34337       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
34338  
34339 C...Local variables.
34340       EXTERNAL PYSIMP,PYLAMF
34341       DOUBLE PRECISION PYSIMP,PYLAMF
34342       INTEGER LIN,NN
34343       DOUBLE PRECISION COSD,SIND,COSD2,SIND2,COS2D,SIN2D
34344       DOUBLE PRECISION HL,HR,FL,FR,HL2,HR2,FL2,FR2
34345       DOUBLE PRECISION XMS2(2),XM,XM2,XMG,XMG2,XMR,XMR2
34346       DOUBLE PRECISION SBAR,SMIN,SMAX,XMQA,W,GRS,G(0:6),SUMME(0:100)
34347       DOUBLE PRECISION FF,HH,HFL,HFR,HRFL,HLFR,XMQ4,XM24
34348       DOUBLE PRECISION XLN1,XLN2,B1,B2
34349       DOUBLE PRECISION E,XMGLU,GAM
34350       DOUBLE PRECISION HRB(4),HLB(4),FLB(4),FRB(4)
34351       SAVE HRB,HLB,FLB,FRB
34352       DOUBLE PRECISION ALPHAW,ALPHAS,GSU2
34353       DOUBLE PRECISION HLT(4),HRT(4),FLT(4),FRT(4)
34354       SAVE HLT,HRT,FLT,FRT
34355       DOUBLE PRECISION AMC(2),AMN(4),AN(4,4),ZN(3),FLU(4),FRU(4),
34356      &FLD(4),FRD(4)
34357       SAVE AMC,AMN,AN,ZN,FLU,FRU,FLD,FRD
34358       DOUBLE PRECISION AMBOT,AMSB(2),SINC,COSC
34359       DOUBLE PRECISION AMTOP,AMST(2),SINA,COSA
34360       SAVE AMSB,AMST
34361       DOUBLE PRECISION SINW,COSW,TANW,COSW2,SINW2
34362       DOUBLE PRECISION ROT1(4,4)
34363       LOGICAL IFIRST
34364       SAVE IFIRST
34365       DATA IFIRST/.TRUE./
34366  
34367       TANB=RMSS(5)
34368       SINB=TANB/SQRT(1D0+TANB**2)
34369       COSB=SINB/TANB
34370       XW=PARU(102)
34371       SINW=SQRT(XW)
34372       COSW=SQRT(1D0-XW)
34373       TANW=SINW/COSW
34374       AMW=PMAS(24,1)
34375       COSC=SFMIX(5,1)
34376       SINC=SFMIX(5,3)
34377       COSA=SFMIX(6,1)
34378       SINA=SFMIX(6,3)
34379       AMBOT=0D0
34380       AMTOP=PYRNMT(PMAS(6,1))
34381       W2=SQRT(2D0)
34382       FAKT1=AMBOT/W2/AMW/COSB
34383       FAKT2=AMTOP/W2/AMW/SINB
34384       IF(IFIRST) THEN
34385         DO 110 II=1,4
34386           AMN(II)=SMZ(II)
34387           DO 100 J=1,4
34388             ROT1(II,J)=0D0
34389             AN(II,J)=0D0
34390   100     CONTINUE
34391   110   CONTINUE
34392         ROT1(1,1)=COSW
34393         ROT1(1,2)=-SINW
34394         ROT1(2,1)=-ROT1(1,2)
34395         ROT1(2,2)=ROT1(1,1)
34396         ROT1(3,3)=COSB
34397         ROT1(3,4)=SINB
34398         ROT1(4,3)=-ROT1(3,4)
34399         ROT1(4,4)=ROT1(3,3)
34400         DO 140 II=1,4
34401           DO 130 J=1,4
34402             DO 120 JJ=1,4
34403               AN(II,J)=AN(II,J)+ZMIX(II,JJ)*ROT1(JJ,J)
34404   120       CONTINUE
34405   130     CONTINUE
34406   140   CONTINUE
34407         DO 150 J=1,4
34408           ZN(1)=-FAKT2*(-SINB*AN(J,3)+COSB*AN(J,4))
34409           ZN(2)=-2D0*W2/3D0*SINW*(TANW*AN(J,2)-AN(J,1))
34410           ZN(3)=-2*W2/3D0*SINW*AN(J,1)-W2*(0.5D0-2D0/3D0*
34411      &    XW)*AN(J,2)/COSW
34412           HRT(J)=ZN(1)*COSA-ZN(3)*SINA
34413           HLT(J)=ZN(1)*COSA+ZN(2)*SINA
34414           FLT(J)=ZN(3)*COSA+ZN(1)*SINA
34415           FRT(J)=ZN(2)*COSA-ZN(1)*SINA
34416           FLU(J)=ZN(3)
34417           FRU(J)=ZN(2)
34418           ZN(1)=-FAKT1*(COSB*AN(J,3)+SINB*AN(J,4))
34419           ZN(2)=W2/3D0*SINW*(TANW*AN(J,2)-AN(J,1))
34420           ZN(3)=W2/3D0*SINW*AN(J,1)+W2*(0.5D0-XW/3D0)*AN(J,2)/COSW
34421           HRB(J)=ZN(1)*COSC-ZN(3)*SINC
34422           HLB(J)=ZN(1)*COSC+ZN(2)*SINC
34423           FLB(J)=ZN(3)*COSC+ZN(1)*SINC
34424           FRB(J)=ZN(2)*COSC-ZN(1)*SINC
34425           FLD(J)=ZN(3)
34426           FRD(J)=ZN(2)
34427   150   CONTINUE
34428         AMST(1)=PMAS(PYCOMP(KSUSY1+6),1)
34429         AMST(2)=PMAS(PYCOMP(KSUSY2+6),1)
34430         AMSB(1)=PMAS(PYCOMP(KSUSY1+5),1)
34431         AMSB(2)=PMAS(PYCOMP(KSUSY2+5),1)
34432         IFIRST=.FALSE.
34433       ENDIF
34434  
34435       IF(NINT(3D0*E).EQ.2) THEN
34436         HL=HLT(I)
34437         HR=HRT(I)
34438         FL=FLT(I)
34439         FR=FRT(I)
34440         COSD=SFMIX(6,1)
34441         SIND=SFMIX(6,3)
34442         XMS2(1)=PMAS(PYCOMP(KSUSY1+6),1)**2
34443         XMS2(2)=PMAS(PYCOMP(KSUSY2+6),1)**2
34444         XM=PMAS(6,1)
34445       ELSE
34446         HL=HLB(I)
34447         HR=HRB(I)
34448         FL=FLB(I)
34449         FR=FRB(I)
34450         COSD=SFMIX(5,1)
34451         SIND=SFMIX(5,3)
34452         XMS2(1)=PMAS(PYCOMP(KSUSY1+5),1)**2
34453         XMS2(2)=PMAS(PYCOMP(KSUSY2+5),1)**2
34454         XM=PMAS(5,1)
34455       ENDIF
34456       COSD2=COSD*COSD
34457       SIND2=SIND*SIND
34458       COS2D=COSD2-SIND2
34459       SIN2D=SIND*COSD*2D0
34460       HL2=HL*HL
34461       HR2=HR*HR
34462       FL2=FL*FL
34463       FR2=FR*FR
34464       FF=FL*FR
34465       HH=HL*HR
34466       HFL=HL*FL
34467       HFR=HR*FR
34468       HRFL=HR*FL
34469       HLFR=HL*FR
34470       XM2=XM*XM
34471       XMG=XMGLU
34472       XMG2=XMG*XMG
34473       ALPHAW=PYALEM(XMG2)
34474       ALPHAS=PYALPS(XMG2)
34475       XMR=AMN(I)
34476       XMR2=XMR*XMR
34477       XMQ4=XMG*XM2*XMR
34478       XM24=(XMG2+XM2)*(XM2+XMR2)
34479       SMIN=4D0*XM2
34480       SMAX=(XMG-ABS(XMR))**2
34481       XMQA=XMG2+2D0*XM2+XMR2
34482       DO 170 LIN=1,NN-1
34483         SBAR=SMIN+DBLE(LIN)*(SMAX-SMIN)/DBLE(NN)
34484         GRS=SBAR-XMQA
34485         W=PYLAMF(XMG2,XMR2,SBAR)*(0.25D0-XM2/SBAR)
34486         W=DSQRT(W)
34487         XLN1=LOG(ABS((GRS/2D0+XMS2(1)-W)/(GRS/2D0+XMS2(1)+W)))
34488         XLN2=LOG(ABS((GRS/2D0+XMS2(2)-W)/(GRS/2D0+XMS2(2)+W)))
34489         B1=1D0/(GRS/2D0+XMS2(1)-W)-1D0/(GRS/2D0+XMS2(1)+W)
34490         B2=1D0/(GRS/2D0+XMS2(2)-W)-1D0/(GRS/2D0+XMS2(2)+W)
34491         G(0)=-2D0*(HL2+FL2+HR2+FR2+(HFR-HFL)*SIN2D
34492      &  +2D0*(FF*SIND2-HH*COSD2))*W
34493         G(1)=((HL2+FL2)*(XMQA-2D0*XMS2(1)-2D0*XM*XMG*SIN2D)
34494      &  +4D0*HFL*XM*XMR)*XLN1
34495      &  +((HL2+FL2)*((XMQA-XMS2(1))*XMS2(1)-XM24
34496      &  +2D0*XM*XMG*(XM2+XMR2-XMS2(1))*SIN2D)
34497      &  -4D0*HFL*XMR*XM*(XMG2+XM2-XMS2(1))
34498      &  +8D0*HFL*XMQ4*SIN2D)*B1
34499         G(2)=((HR2+FR2)*(XMQA-2D0*XMS2(2)+2D0*XM*XMG*SIN2D)
34500      &  +4D0*HFR*XMR*XM)*XLN2
34501      &  +((HR2+FR2)*((XMQA-XMS2(2))*XMS2(2)-XM24
34502      &  +2D0*XMG*XM*SIN2D*(XMS2(2)-XM2-XMR2))
34503      &  +4D0*HFR*XM*XMR*(XMS2(2)-XMG2-XM2)
34504      &  -8D0*HFR*XMQ4*SIN2D)*B2
34505         G(3)=(2D0*HFL*SIN2D*(XMS2(1)*(GRS+XMS2(1))+XM2*(SBAR-XMG2-XMR2)
34506      &  +XMG2*XMR2+XM2*XM2)-2D0*XMR*XMG*(HL2*SIND2+FL2*COSD2)*SBAR
34507      &  -2D0*XMG*XM*HFL*(SBAR+XMR2-XMG2)
34508      &  +XMR*XM*(HL2+FL2)*SIN2D*(SBAR+XMG2-XMR2)
34509      &  -4D0*XMQ4*(HL2-FL2)*COS2D)/(GRS+2D0*XMS2(1))*XLN1
34510         G(4)=4D0*COS2D*XM*XMG/(XMS2(1)-XMS2(2))*
34511      &  (((HLFR+HRFL)*(XM2+XMR2)+2D0*XM*XMR*(HH+FF))*(XLN1-XLN2)
34512      &  +(HLFR+HRFL)*(XMS2(2)*XLN2-XMS2(1)*XLN1))
34513         G(5)=(2D0*(HH*COSD2-FF*SIND2)
34514      &  *((XMS2(2)*(XMS2(2)+GRS)+XM2*XM2+XMG2*XMR2)*XLN2
34515      &  +(XMS2(1)*(XMS2(1)+GRS)+XM2*XM2+XMG2*XMR2)*XLN1)
34516      &  +XM*((HH-FF)*SIN2D*XMG-(HRFL-HLFR)*XMR)
34517      &  *((GRS+XMS2(1)*2D0)*XLN1-(GRS+XMS2(2)*2D0)*XLN2)
34518      &  +((HRFL-HLFR)*XMR*(SIN2D*XMG*(SBAR-4D0*XM2)
34519      &  +COS2D*XM*(SBAR+XMG2-XMR2))
34520      &  +2D0*(FF*COSD2-HH*SIND2)*XM2*(SBAR-XMG2-XMR2))
34521      &  *(XLN1+XLN2))/(GRS+XMS2(1)+XMS2(2))
34522         G(6)=(-2D0*HFR*SIN2D*(XMS2(2)*(GRS+XMS2(2))+XM2*(SBAR-XMG2-XMR2)
34523      &  +XMG2*XMR2+XM2*XM2)-2D0*XMR*XMG*(HR2*SIND2+FR2*COSD2)*SBAR
34524      &  -2D0*XMG*XM*HFR*(SBAR+XMR2-XMG2)
34525      &  -XMR*XM*(HR2+FR2)*SIN2D*(SBAR+XMG2-XMR2)
34526      &  -4D0*XMQ4*(HR2-FR2)*COS2D)/(GRS+2D0*XMS2(2))*XLN2
34527         SUMME(LIN)=0D0
34528         DO 160 J=0,6
34529           SUMME(LIN)=SUMME(LIN)+G(J)
34530   160   CONTINUE
34531   170 CONTINUE
34532       SUMME(0)=0D0
34533       SUMME(NN)=0D0
34534       GAM = ALPHAW * ALPHAS * PYSIMP(SUMME,SMIN,SMAX,NN)
34535      &/ (16D0 * PARU(1) * PARU(102) * XMGLU**3)
34536  
34537       RETURN
34538       END
34539  
34540 C*********************************************************************
34541  
34542 C...PYTBBC
34543 C...Calculates the three-body decay of gluinos into
34544 C...charginos and third generation fermions.
34545  
34546       SUBROUTINE PYTBBC(I,NN,XMGLU,GAM)
34547  
34548 C...Double precision and integer declarations.
34549       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
34550       IMPLICIT INTEGER(I-N)
34551       INTEGER PYK,PYCHGE,PYCOMP
34552 C...Parameter statement to help give large particle numbers.
34553       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
34554 C...Commonblocks.
34555       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
34556       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
34557       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
34558       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
34559      &SFMIX(16,4)
34560       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
34561  
34562 C...Local variables.
34563       EXTERNAL PYSIMP,PYLAMF
34564       DOUBLE PRECISION PYSIMP,PYLAMF
34565       INTEGER I,NN,LIN
34566       DOUBLE PRECISION XMG,XMG2,XMB,XMB2,XMR,XMR2
34567       DOUBLE PRECISION XMT,XMT2,XMST(4),XMSB(4)
34568       DOUBLE PRECISION ULR(2),VLR(2),XMQ2,XMQ4,AM,W,SBAR,SMIN,SMAX
34569       DOUBLE PRECISION SUMME(0:100),A(4,8)
34570       DOUBLE PRECISION COS2A,SIN2A,COS2C,SIN2C
34571       DOUBLE PRECISION GRS,XMQ3,XMGBTR,XMGTBR,ANT1,ANT2,ANB1,ANB2
34572       DOUBLE PRECISION XMGLU,GAM
34573       DOUBLE PRECISION XX1(2),XX2(2),AAA(2),BBB(2),CCC(2),
34574      &DDD(2),EEE(2),FFF(2)
34575       SAVE XX1,XX2,AAA,BBB,CCC,DDD,EEE,FFF
34576       DOUBLE PRECISION ALPHAW,ALPHAS,GSU2
34577       DOUBLE PRECISION AMC(2),AMN(4)
34578       SAVE AMC,AMN
34579       DOUBLE PRECISION AMBOT,AMSB(2),SINC,COSC
34580       DOUBLE PRECISION AMTOP,AMST(2),SINA,COSA
34581       SAVE AMSB,AMST
34582       DOUBLE PRECISION SINW,COSW,TANW,COSW2,SINW2
34583       LOGICAL IFIRST
34584       SAVE IFIRST
34585       DATA IFIRST/.TRUE./
34586  
34587       TANB=RMSS(5)
34588       SINB=TANB/SQRT(1D0+TANB**2)
34589       COSB=SINB/TANB
34590       XW=PARU(102)
34591       SINW=SQRT(XW)
34592       COSW=SQRT(1D0-XW)
34593       AMW=PMAS(24,1)
34594       COSC=SFMIX(5,1)
34595       SINC=SFMIX(5,3)
34596       COSA=SFMIX(6,1)
34597       SINA=SFMIX(6,3)
34598       AMBOT=0D0
34599       AMTOP=PYRNMT(PMAS(6,1))
34600       W2=SQRT(2D0)
34601       AMW=PMAS(24,1)
34602       FAKT1=AMBOT/W2/AMW/COSB
34603       FAKT2=AMTOP/W2/AMW/SINB
34604       IF(IFIRST) THEN
34605         AMC(1)=SMW(1)
34606         AMC(2)=SMW(2)
34607         DO 100 JJ=1,2
34608           CCC(JJ)=FAKT1*UMIX(JJ,2)*SINC-UMIX(JJ,1)*COSC
34609           EEE(JJ)=FAKT2*VMIX(JJ,2)*COSC
34610           DDD(JJ)=FAKT1*UMIX(JJ,2)*COSC+UMIX(JJ,1)*SINC
34611           FFF(JJ)=FAKT2*VMIX(JJ,2)*SINC
34612           XX1(JJ)=FAKT2*VMIX(JJ,2)*SINA-VMIX(JJ,1)*COSA
34613           AAA(JJ)=FAKT1*UMIX(JJ,2)*COSA
34614           XX2(JJ)=FAKT2*VMIX(JJ,2)*COSA+VMIX(JJ,1)*SINA
34615           BBB(JJ)=FAKT1*UMIX(JJ,2)*SINA
34616   100   CONTINUE
34617         AMST(1)=PMAS(PYCOMP(KSUSY1+6),1)
34618         AMST(2)=PMAS(PYCOMP(KSUSY2+6),1)
34619         AMSB(1)=PMAS(PYCOMP(KSUSY1+5),1)
34620         AMSB(2)=PMAS(PYCOMP(KSUSY2+5),1)
34621         IFIRST=.FALSE.
34622       ENDIF
34623       AMTOP=PMAS(6,1)
34624  
34625       ULR(1)=XX1(I)*XX1(I)+AAA(I)*AAA(I)
34626       ULR(2)=XX2(I)*XX2(I)+BBB(I)*BBB(I)
34627       VLR(1)=CCC(I)*CCC(I)+EEE(I)*EEE(I)
34628       VLR(2)=DDD(I)*DDD(I)+FFF(I)*FFF(I)
34629  
34630       COS2A=COSA**2-SINA**2
34631       SIN2A=SINA*COSA*2D0
34632       COS2C=COSC**2-SINC**2
34633       SIN2C=SINC*COSC*2D0
34634  
34635       XMG=XMGLU
34636       XMT=AMTOP
34637       XMB=0D0
34638       XMR=AMC(I)
34639       XMG2=XMG*XMG
34640       ALPHAW=PYALEM(XMG2)
34641       ALPHAS=PYALPS(XMG2)
34642       XMT2=XMT*XMT
34643       XMB2=XMB*XMB
34644       XMR2=XMR*XMR
34645       XMQ2=XMG2+XMT2+XMB2+XMR2
34646       XMQ4=XMG*XMT*XMB*XMR
34647       XMQ3=XMG2*XMR2+XMT2*XMB2
34648       XMGBTR=(XMG2+XMB2)*(XMT2+XMR2)
34649       XMGTBR=(XMG2+XMT2)*(XMB2+XMR2)
34650  
34651       XMST(1)=AMST(1)*AMST(1)
34652       XMST(2)=AMST(1)*AMST(1)
34653       XMST(3)=AMST(2)*AMST(2)
34654       XMST(4)=AMST(2)*AMST(2)
34655       XMSB(1)=AMSB(1)*AMSB(1)
34656       XMSB(2)=AMSB(2)*AMSB(2)
34657       XMSB(3)=AMSB(1)*AMSB(1)
34658       XMSB(4)=AMSB(2)*AMSB(2)
34659  
34660       A(1,1)=-COSA*SINC*CCC(I)*AAA(I)-SINA*COSC*EEE(I)*XX1(I)
34661       A(1,2)=XMG*XMB*(COSA*COSC*CCC(I)*AAA(I)+SINA*SINC*EEE(I)*XX1(I))
34662       A(1,3)=-XMG*XMR*(COSA*COSC*CCC(I)*XX1(I)+SINA*SINC*EEE(I)*AAA(I))
34663       A(1,4)=XMB*XMR*(COSA*SINC*CCC(I)*XX1(I)+SINA*COSC*EEE(I)*AAA(I))
34664       A(1,5)=XMG*XMT*(COSA*COSC*EEE(I)*XX1(I)+SINA*SINC*CCC(I)*AAA(I))
34665       A(1,6)=-XMT*XMB*(COSA*SINC*EEE(I)*XX1(I)+SINA*COSC*CCC(I)*AAA(I))
34666       A(1,7)=XMT*XMR*(COSA*SINC*EEE(I)*AAA(I)+SINA*COSC*CCC(I)*XX1(I))
34667       A(1,8)=-XMQ4*(COSA*COSC*EEE(I)*AAA(I)+SINA*SINC*CCC(I)*XX1(I))
34668  
34669       A(2,1)=-COSA*COSC*DDD(I)*AAA(I)-SINA*SINC*FFF(I)*XX1(I)
34670       A(2,2)=-XMG*XMB*(COSA*SINC*DDD(I)*AAA(I)+SINA*COSC*FFF(I)*XX1(I))
34671       A(2,3)=XMG*XMR*(COSA*SINC*DDD(I)*XX1(I)+SINA*COSC*FFF(I)*AAA(I))
34672       A(2,4)=XMB*XMR*(COSA*COSC*DDD(I)*XX1(I)+SINA*SINC*FFF(I)*AAA(I))
34673       A(2,5)=XMG*XMT*(COSA*SINC*FFF(I)*XX1(I)+SINA*COSC*DDD(I)*AAA(I))
34674       A(2,6)=XMT*XMB*(COSA*COSC*FFF(I)*XX1(I)+SINA*SINC*DDD(I)*AAA(I))
34675       A(2,7)=-XMT*XMR*(COSA*COSC*FFF(I)*AAA(I)+SINA*SINC*DDD(I)*XX1(I))
34676       A(2,8)=-XMQ4*(COSA*SINC*FFF(I)*AAA(I)+SINA*COSC*DDD(I)*XX1(I))
34677  
34678       A(3,1)=-COSA*COSC*EEE(I)*XX2(I)-SINA*SINC*CCC(I)*BBB(I)
34679       A(3,2)=XMG*XMB*(COSA*SINC*EEE(I)*XX2(I)+SINA*COSC*CCC(I)*BBB(I))
34680       A(3,3)=XMG*XMR*(COSA*SINC*EEE(I)*BBB(I)+SINA*COSC*CCC(I)*XX2(I))
34681       A(3,4)=-XMB*XMR*(COSA*COSC*EEE(I)*BBB(I)+SINA*SINC*CCC(I)*XX2(I))
34682       A(3,5)=-XMG*XMT*(COSA*SINC*CCC(I)*BBB(I)+SINA*COSC*EEE(I)*XX2(I))
34683       A(3,6)=XMT*XMB*(COSA*COSC*CCC(I)*BBB(I)+SINA*SINC*EEE(I)*XX2(I))
34684       A(3,7)=XMT*XMR*(COSA*COSC*CCC(I)*XX2(I)+SINA*SINC*EEE(I)*BBB(I))
34685       A(3,8)=-XMQ4*(COSA*SINC*CCC(I)*XX2(I)+SINA*COSC*EEE(I)*BBB(I))
34686  
34687       A(4,1)=-COSA*SINC*FFF(I)*XX2(I)-SINA*COSC*DDD(I)*BBB(I)
34688       A(4,2)=-XMG*XMB*(COSA*COSC*FFF(I)*XX2(I)+SINA*SINC*DDD(I)*BBB(I))
34689       A(4,3)=-XMG*XMR*(COSA*COSC*FFF(I)*BBB(I)+SINA*SINC*DDD(I)*XX2(I))
34690       A(4,4)=-XMB*XMR*(COSA*SINC*FFF(I)*BBB(I)+SINA*COSC*DDD(I)*XX2(I))
34691       A(4,5)=-XMG*XMT*(COSA*COSC*DDD(I)*BBB(I)+SINA*SINC*FFF(I)*XX2(I))
34692       A(4,6)=-XMT*XMB*(COSA*SINC*DDD(I)*BBB(I)+SINA*COSC*FFF(I)*XX2(I))
34693       A(4,7)=-XMT*XMR*(COSA*SINC*DDD(I)*XX2(I)+SINA*COSC*FFF(I)*BBB(I))
34694       A(4,8)=-XMQ4*(COSA*COSC*DDD(I)*XX2(I)+SINA*SINC*FFF(I)*BBB(I))
34695  
34696       SMAX=(XMG-ABS(XMR))**2
34697       SMIN=(XMB+XMT)**2+0.1D0
34698  
34699       DO 120 LIN=0,NN-1
34700         SBAR=SMIN+DBLE(LIN)*(SMAX-SMIN)/DBLE(NN)
34701         AM=(XMG2-XMR2)*(XMT2-XMB2)/2D0/SBAR
34702         GRS=SBAR-XMQ2
34703         W=PYLAMF(SBAR,XMB2,XMT2)*PYLAMF(SBAR,XMG2,XMR2)
34704         W=DSQRT(W)/2D0/SBAR
34705         ANT1=LOG(ABS((GRS/2D0+AM+XMST(1)-W)/(GRS/2D0+AM+XMST(1)+W)))
34706         ANT2=LOG(ABS((GRS/2D0+AM+XMST(3)-W)/(GRS/2D0+AM+XMST(3)+W)))
34707         ANB1=LOG(ABS((GRS/2D0-AM+XMSB(1)-W)/(GRS/2D0-AM+XMSB(1)+W)))
34708         ANB2=LOG(ABS((GRS/2D0-AM+XMSB(2)-W)/(GRS/2D0-AM+XMSB(2)+W)))
34709         SUMME(LIN)=-ULR(1)*W+(ULR(1)*(XMQ2/2D0-XMST(1)-XMG*XMT*SIN2A)
34710      &  +2D0*XX1(I)*AAA(I)*XMR*XMB)*ANT1
34711      &  +(ULR(1)/2D0*(XMST(1)*(XMQ2-XMST(1))-XMGTBR
34712      &  -2D0*XMG*XMT*SIN2A*(XMST(1)-XMB2-XMR2))
34713      &  +2D0*XX1(I)*AAA(I)*XMR*XMB*(XMST(1)-XMG2-XMT2)
34714      &  +4D0*SIN2A*XX1(I)*AAA(I)*XMQ4)
34715      &  *(1D0/(GRS/2D0+AM+XMST(1)-W)-1D0/(GRS/2D0+AM+XMST(1)+W))
34716         SUMME(LIN)=SUMME(LIN)-ULR(2)*W
34717      &  +(ULR(2)*(XMQ2/2D0-XMST(3)+XMG*XMT*SIN2A)
34718      &  -2D0*XX2(I)*BBB(I)*XMR*XMB)*ANT2
34719      &  +(ULR(2)/2D0*(XMST(3)*(XMQ2-XMST(3))-XMGTBR
34720      &  +2D0*XMG*XMT*SIN2A*(XMST(3)-XMB2-XMR2))
34721      &  -2D0*XX2(I)*BBB(I)*XMR*XMB*(XMST(3)-XMG2-XMT2)
34722      &  +4D0*SIN2A*XX2(I)*BBB(I)*XMQ4)
34723      &  *(1D0/(GRS/2D0+AM+XMST(3)-W)-1D0/(GRS/2D0+AM+XMST(3)+W))
34724         SUMME(LIN)=SUMME(LIN)-VLR(1)*W
34725      &  +(VLR(1)*(XMQ2/2D0-XMSB(1)-XMG*XMB*SIN2C)
34726      &  +2D0*CCC(I)*EEE(I)*XMR*XMT)*ANB1
34727      &  +(VLR(1)/2D0*(XMSB(1)*(XMQ2-XMSB(1))-XMGBTR
34728      &  -2D0*XMG*XMB*SIN2C*(XMSB(1)-XMT2-XMR2))
34729      &  +2D0*CCC(I)*EEE(I)*XMR*XMT*(XMSB(1)-XMG2-XMB2)
34730      &  +4D0*SIN2C*CCC(I)*EEE(I)*XMQ4)
34731      &  *(1D0/(GRS/2D0-AM+XMSB(1)-W)-1D0/(GRS/2D0-AM+XMSB(1)+W))
34732         SUMME(LIN)=SUMME(LIN)-VLR(2)*W
34733      &  +(VLR(2)*(XMQ2/2D0-XMSB(2)+XMG*XMB*SIN2C)
34734      &  -2D0*DDD(I)*FFF(I)*XMR*XMT)*ANB2
34735      &  +(VLR(2)/2D0*(XMSB(2)*(XMQ2-XMSB(2))-XMGBTR
34736      &  +2D0*XMG*XMB*SIN2C*(XMSB(2)-XMT2-XMR2))
34737      &  -2D0*DDD(I)*FFF(I)*XMR*XMT*(XMSB(2)-XMG2-XMB2)
34738      &  +4D0*SIN2C*DDD(I)*FFF(I)*XMQ4)
34739      &  *(1D0/(GRS/2D0-AM+XMSB(2)-W)-1D0/(GRS/2D0-AM+XMSB(2)+W))
34740         SUMME(LIN)=SUMME(LIN)+2D0*XMG*XMT*COS2A/(XMST(3)-XMST(1))
34741      &  *((AAA(I)*BBB(I)-XX1(I)*XX2(I))
34742      &  *((XMST(3)-XMB2-XMR2)*ANT2-(XMST(1)-XMB2-XMR2)*ANT1)
34743      &  +2D0*(AAA(I)*XX2(I)-XX1(I)*BBB(I))*XMB*XMR*(ANT2-ANT1))
34744         SUMME(LIN)=SUMME(LIN)+2D0*XMG*XMB*COS2C/(XMSB(2)-XMSB(1))
34745      &  *((EEE(I)*FFF(I)-CCC(I)*DDD(I))
34746      &  *((XMSB(2)-XMT2-XMR2)*ANB2-(XMSB(1)-XMT2-XMR2)*ANB1)
34747      &  +2D0*(EEE(I)*DDD(I)-CCC(I)*FFF(I))*XMT*XMR*(ANB2-ANB1))
34748         DO 110 J=1,4
34749           SUMME(LIN)=SUMME(LIN)-2D0*A(J,1)*W
34750      &    +((-A(J,1)*(XMSB(J)*(GRS+XMSB(J))+XMQ3)
34751      &    +A(J,2)*(XMSB(J)-XMT2-XMR2)+A(J,3)*(SBAR-XMB2-XMT2)
34752      &    +A(J,4)*(XMSB(J)+SBAR-XMB2-XMR2)
34753      &    -A(J,5)*(XMSB(J)+SBAR-XMG2-XMT2)+A(J,6)*(XMG2+XMR2-SBAR)
34754      &    -A(J,7)*(XMSB(J)-XMG2-XMB2)+2D0*A(J,8))
34755      &    *LOG(ABS((GRS/2D0+XMSB(J)-AM-W)/(GRS/2D0+XMSB(J)-AM+W)))
34756      &    -(A(J,1)*(XMST(J)*(GRS+XMST(J))+XMQ3)
34757      &    +A(J,2)*(XMST(J)+SBAR-XMG2-XMB2)-A(J,3)*(SBAR-XMB2-XMT2)
34758      &    +A(J,4)*(XMST(J)-XMG2-XMT2)-A(J,5)*(XMST(J)-XMR2-XMB2)
34759      &    -A(J,6)*(XMG2+XMR2-SBAR)
34760      &    -A(J,7)*(XMST(J)+SBAR-XMT2-XMR2)-2D0*A(J,8))
34761      &    *LOG(ABS((GRS/2D0+XMST(J)+AM-W)/(GRS/2D0+XMST(J)+AM+W))))
34762      &    /(GRS+XMSB(J)+XMST(J))
34763   110   CONTINUE
34764   120 CONTINUE
34765       SUMME(NN)=0D0
34766       GAM= ALPHAW * ALPHAS * PYSIMP(SUMME,SMIN,SMAX,NN)
34767      &/ (16D0 * PARU(1) * PARU(102) * XMGLU**3)
34768  
34769       RETURN
34770       END
34771  
34772 C*********************************************************************
34773  
34774 C...PYNJDC
34775 C...Calculates decay widths for the neutralinos (admixtures of
34776 C...Bino, W3-ino, Higgs1-ino, Higgs2-ino)
34777  
34778 C...Input:  KCIN = KF code for particle
34779 C...Output: XLAM = widths
34780 C...        IDLAM = KF codes for decay particles
34781 C...        IKNT = number of decay channels defined
34782 C...AUTHOR: STEPHEN MRENNA
34783 C...Last change:
34784 C...10-15-95:  force decay chi^0_2 -> chi^0_1 + gamma
34785 C...when CHIGAMMA .NE. 0
34786 C...10 FEB 96:  Calculate this decay for small tan(beta)
34787  
34788       SUBROUTINE PYNJDC(KFIN,XLAM,IDLAM,IKNT)
34789  
34790 C...Double precision and integer declarations.
34791       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
34792       IMPLICIT INTEGER(I-N)
34793       INTEGER PYK,PYCHGE,PYCOMP
34794 C...Parameter statement to help give large particle numbers.
34795       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
34796 C...Commonblocks.
34797       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
34798       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
34799       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
34800       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
34801      &SFMIX(16,4)
34802       COMMON/PYINTS/XXM(20)
34803       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/,/PYINTS/
34804  
34805 C...Local variables.
34806       INTEGER KFIN,KCIN
34807       DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,
34808      &XMZ,XMZ2,AXMJ,AXMI
34809       DOUBLE PRECISION XMFP,XMF1,XMF2,XMSL,XMG,XMK
34810       DOUBLE PRECISION S12MIN,S12MAX
34811       DOUBLE PRECISION XMI2,XMI3,XMJ2,XMH,XMH2,XMHP,XMHP2,XMA2,XMB2
34812       DOUBLE PRECISION PYLAMF,XL,QIJ,RIJ
34813       DOUBLE PRECISION TANW,XW,AEM,C1,AS,EI,T3
34814       DOUBLE PRECISION PYX2XH,PYX2XG
34815       DOUBLE PRECISION XLAM(0:200)
34816       INTEGER IDLAM(200,3)
34817       INTEGER LKNT,IX,IH,J,IJ,I,IKNT,FID
34818       INTEGER ITH(3),KF1,KF2
34819       INTEGER ITHC
34820       DOUBLE PRECISION ETAH(3),CH(3),DH(3),EH(3)
34821       DOUBLE PRECISION SR2
34822       DOUBLE PRECISION CBETA,SBETA,GR,GL,F12K,F21K
34823       DOUBLE PRECISION GAMCON,XMT1,XMT2
34824       DOUBLE PRECISION PYALEM,PI,PYALPS
34825       DOUBLE PRECISION AL,BL,AR,BR,ALP,ARP,BLP,BRP
34826       DOUBLE PRECISION RAT1,RAT2
34827       DOUBLE PRECISION T3T,CA,CB,FCOL
34828       DOUBLE PRECISION ALFA,BETA,TANB
34829       DOUBLE PRECISION PYXXGA
34830       EXTERNAL PYXXW5,PYGAUS,PYXXZ5
34831       DOUBLE PRECISION PYXXW5,PYGAUS,PYXXZ5
34832       DOUBLE PRECISION PREC
34833       INTEGER KFNCHI(4),KFCCHI(2)
34834       DATA ETAH/1D0,1D0,-1D0/
34835       DATA ITH/25,35,36/
34836       DATA ITHC/37/
34837       DATA PREC/1D-2/
34838       DATA PI/3.141592654D0/
34839       DATA SR2/1.4142136D0/
34840       DATA KFNCHI/1000022,1000023,1000025,1000035/
34841       DATA KFCCHI/1000024,1000037/
34842  
34843 C...COUNT THE NUMBER OF DECAY MODES
34844       LKNT=0
34845  
34846       XMW=PMAS(24,1)
34847       XMW2=XMW**2
34848       XMZ=PMAS(23,1)
34849       XMZ2=XMZ**2
34850       XW=1D0-XMW2/XMZ2
34851       TANW = SQRT(XW/(1D0-XW))
34852  
34853 C...IX IS 1 - 4 DEPENDING ON SEQUENCE NUMBER
34854       KCIN=PYCOMP(KFIN)
34855       IX=1
34856       IF(KFIN.EQ.KFNCHI(2)) IX=2
34857       IF(KFIN.EQ.KFNCHI(3)) IX=3
34858       IF(KFIN.EQ.KFNCHI(4)) IX=4
34859  
34860       XMI=SMZ(IX)
34861       XMI2=XMI**2
34862       AXMI=ABS(XMI)
34863       AEM=PYALEM(XMI2)
34864       AS =PYALPS(XMI2)
34865       C1=AEM/XW
34866       XMI3=ABS(XMI**3)
34867  
34868       TANB=RMSS(5)
34869       BETA=ATAN(TANB)
34870       ALFA=RMSS(18)
34871       CBETA=COS(BETA)
34872       SBETA=TANB*CBETA
34873       CALFA=COS(ALFA)
34874       SALFA=SIN(ALFA)
34875  
34876 C...CHECK ALL 2-BODY DECAYS TO GAUGE AND HIGGS BOSONS
34877       IF(IX.EQ.1.AND.IMSS(11).EQ.0) GOTO 260
34878  
34879 C...FORCE CHI0_2 -> CHI0_1 + GAMMA
34880       IF(IX.EQ.2 .AND. IMSS(10).NE.0 ) THEN
34881         XMJ=SMZ(1)
34882         AXMJ=ABS(XMJ)
34883         LKNT=LKNT+1
34884         GAMCON=AEM**3/8D0/PI/XMW2/XW
34885         XMT1=(PMAS(PYCOMP(KSUSY1+6),1)/PMAS(6,1))**2
34886         XMT2=(PMAS(PYCOMP(KSUSY2+6),1)/PMAS(6,1))**2
34887         XLAM(LKNT)=PYXXGA(GAMCON,AXMI,AXMJ,XMT1,XMT2)
34888         IDLAM(LKNT,1)=KSUSY1+22
34889         IDLAM(LKNT,2)=22
34890         IDLAM(LKNT,3)=0
34891         WRITE(MSTU(11),*) 'FORCED N2 -> N1 + GAMMA ',XLAM(LKNT)
34892         GOTO 300
34893       ENDIF
34894  
34895 C...GRAVITINO DECAY MODES
34896  
34897       IF(IMSS(11).EQ.1) THEN
34898         XMP=RMSS(29)
34899         IDG=39+KSUSY1
34900         XMGR=PMAS(PYCOMP(IDG),1)
34901         SINW=SQRT(XW)
34902         COSW=SQRT(1D0-XW)
34903         XFAC=(XMI2/(XMP*XMGR))**2*AXMI/48D0/PI
34904         IF(AXMI.GT.XMGR+PMAS(22,1)) THEN
34905           LKNT=LKNT+1
34906           IDLAM(LKNT,1)=IDG
34907           IDLAM(LKNT,2)=22
34908           IDLAM(LKNT,3)=0
34909           XLAM(LKNT)=XFAC*(ZMIX(IX,1)*COSW+ZMIX(IX,2)*SINW)**2
34910         ENDIF
34911         IF(AXMI.GT.XMGR+XMZ) THEN
34912           LKNT=LKNT+1
34913           IDLAM(LKNT,1)=IDG
34914           IDLAM(LKNT,2)=23
34915           IDLAM(LKNT,3)=0
34916           XLAM(LKNT)=XFAC*((ZMIX(IX,1)*SINW-ZMIX(IX,2)*COSW)**2 +
34917      $  .5D0*(ZMIX(IX,3)*CBETA-ZMIX(IX,4)*SBETA)**2)*(1D0-XMZ2/XMI2)**4
34918         ENDIF
34919         IF(AXMI.GT.XMGR+PMAS(25,1)) THEN
34920           LKNT=LKNT+1
34921           IDLAM(LKNT,1)=IDG
34922           IDLAM(LKNT,2)=25
34923           IDLAM(LKNT,3)=0
34924           XLAM(LKNT)=XFAC*((ZMIX(IX,3)*SALFA-ZMIX(IX,4)*CALFA)**2)*
34925      $  .5D0*(1D0-PMAS(25,1)**2/XMI2)**4
34926         ENDIF
34927         IF(AXMI.GT.XMGR+PMAS(35,1)) THEN
34928           LKNT=LKNT+1
34929           IDLAM(LKNT,1)=IDG
34930           IDLAM(LKNT,2)=35
34931           IDLAM(LKNT,3)=0
34932           XLAM(LKNT)=XFAC*((ZMIX(IX,3)*CALFA+ZMIX(IX,4)*SALFA)**2)*
34933      $  .5D0*(1D0-PMAS(35,1)**2/XMI2)**4
34934         ENDIF
34935         IF(AXMI.GT.XMGR+PMAS(36,1)) THEN
34936           LKNT=LKNT+1
34937           IDLAM(LKNT,1)=IDG
34938           IDLAM(LKNT,2)=36
34939           IDLAM(LKNT,3)=0
34940           XLAM(LKNT)=XFAC*((ZMIX(IX,3)*SBETA+ZMIX(IX,4)*CBETA)**2)*
34941      $  .5D0*(1D0-PMAS(36,1)**2/XMI2)**4
34942         ENDIF
34943         IF(IX.EQ.1) GOTO 260
34944       ENDIF
34945  
34946       DO 180 IJ=1,IX-1
34947         XMJ=SMZ(IJ)
34948         AXMJ=ABS(XMJ)
34949         XMJ2=XMJ**2
34950  
34951 C...CHI0_I -> CHI0_J + GAMMA
34952         IF(AXMI.GE.AXMJ.AND.SBETA/CBETA.LE.2D0) THEN
34953           RAT1=ZMIX(IJ,1)**2+ZMIX(IJ,2)**2
34954           RAT1=RAT1/( 1D-6+ZMIX(IX,3)**2+ZMIX(IX,4)**2 )
34955           RAT2=ZMIX(IX,1)**2+ZMIX(IX,2)**2
34956           RAT2=RAT2/( 1D-6+ZMIX(IJ,3)**2+ZMIX(IJ,4)**2 )
34957           IF((RAT1.GT. 0.90D0 .AND. RAT1.LT. 1.10D0) .OR.
34958      &    (RAT2.GT. 0.90D0 .AND. RAT2.LT. 1.10D0)) THEN
34959             LKNT=LKNT+1
34960             IDLAM(LKNT,1)=KFNCHI(IJ)
34961             IDLAM(LKNT,2)=22
34962             IDLAM(LKNT,3)=0
34963             GAMCON=AEM**3/8D0/PI/XMW2/XW
34964             XMT1=(PMAS(PYCOMP(KSUSY1+6),1)/PMAS(6,1))**2
34965             XMT2=(PMAS(PYCOMP(KSUSY2+6),1)/PMAS(6,1))**2
34966             XLAM(LKNT)=PYXXGA(GAMCON,AXMI,AXMJ,XMT1,XMT2)
34967           ENDIF
34968         ENDIF
34969  
34970 C...CHI0_I -> CHI0_J + Z0
34971         IF(AXMI.GE.AXMJ+XMZ) THEN
34972           LKNT=LKNT+1
34973           GL=-0.5D0*(ZMIX(IX,3)*ZMIX(IJ,3)-ZMIX(IX,4)*ZMIX(IJ,4))
34974           GR=-GL
34975           XLAM(LKNT)=PYX2XG(C1/XMW2,XMI,XMJ,XMZ,GL,GR)
34976           IDLAM(LKNT,1)=KFNCHI(IJ)
34977           IDLAM(LKNT,2)=23
34978           IDLAM(LKNT,3)=0
34979         ELSEIF(AXMI.GE.AXMJ) THEN
34980           FID=11
34981           EI=KCHG(FID,1)/3D0
34982           T3=-0.5D0
34983           XXM(1)=0D0
34984           XXM(2)=XMJ
34985           XXM(3)=0D0
34986           XXM(4)=XMI
34987           XXM(5)=PMAS(PYCOMP(KSUSY1+11),1)
34988           XXM(6)=PMAS(PYCOMP(KSUSY2+11),1)
34989           XXM(7)=XMZ
34990           XXM(8)=PMAS(23,2)
34991           XXM(9)=-0.5D0*(ZMIX(IX,3)*ZMIX(IJ,3)-ZMIX(IX,4)*ZMIX(IJ,4))
34992           XXM(10)=-XXM(9)
34993           XXM(11)=(T3-EI*XW)/(1D0-XW)
34994           XXM(12)=-EI*XW/(1D0-XW)
34995           XXM(13)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))
34996           XXM(14)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))
34997           XXM(15)=SR2*TANW*(EI*ZMIX(IX,1))
34998           XXM(16)=SR2*TANW*(EI*ZMIX(IJ,1))
34999           S12MIN=0D0
35000           S12MAX=(AXMI-AXMJ)**2
35001  
35002 C...CHARGED LEPTONS
35003           IF( XXM(5).LT.AXMI ) THEN
35004             XXM(5)=1D6
35005           ENDIF
35006           IF(XXM(6).LT.AXMI ) THEN
35007             XXM(6)=1D6
35008           ENDIF
35009           IF(AXMI.GE.AXMJ+2D0*PMAS(11,1)) THEN
35010             LKNT=LKNT+1
35011             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35012      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35013             IDLAM(LKNT,1)=KFNCHI(IJ)
35014             IDLAM(LKNT,2)=11
35015             IDLAM(LKNT,3)=-11
35016             IF(AXMI.GE.AXMJ+2D0*PMAS(13,1)) THEN
35017               LKNT=LKNT+1
35018               XLAM(LKNT)=XLAM(LKNT-1)
35019               IDLAM(LKNT,1)=KFNCHI(IJ)
35020               IDLAM(LKNT,2)=13
35021               IDLAM(LKNT,3)=-13
35022             ENDIF
35023           ENDIF
35024   100     CONTINUE
35025           IF(ABS(SFMIX(15,1)).GT.ABS(SFMIX(15,2))) THEN
35026             XXM(5)=PMAS(PYCOMP(KSUSY1+15),1)
35027             XXM(6)=PMAS(PYCOMP(KSUSY2+15),1)
35028           ELSE
35029             XXM(6)=PMAS(PYCOMP(KSUSY1+15),1)
35030             XXM(5)=PMAS(PYCOMP(KSUSY2+15),1)
35031           ENDIF
35032           IF( XXM(5).LT.AXMI ) THEN
35033             XXM(5)=1D6
35034           ENDIF
35035           IF(XXM(6).LT.AXMI ) THEN
35036             XXM(6)=1D6
35037           ENDIF
35038  
35039           IF(AXMI.GE.AXMJ+2D0*PMAS(15,1)) THEN
35040             LKNT=LKNT+1
35041             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35042      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35043             IDLAM(LKNT,1)=KFNCHI(IJ)
35044             IDLAM(LKNT,2)=15
35045             IDLAM(LKNT,3)=-15
35046           ENDIF
35047  
35048 C...NEUTRINOS
35049   110     CONTINUE
35050           FID=12
35051           EI=KCHG(FID,1)/3D0
35052           T3=0.5D0
35053           XXM(5)=PMAS(PYCOMP(KSUSY1+12),1)
35054           XXM(6)=1D6
35055           XXM(11)=(T3-EI*XW)/(1D0-XW)
35056           XXM(12)=-EI*XW/(1D0-XW)
35057           XXM(13)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))
35058           XXM(14)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))
35059           XXM(15)=SR2*TANW*(EI*ZMIX(IX,1))
35060           XXM(16)=SR2*TANW*(EI*ZMIX(IJ,1))
35061  
35062           IF( XXM(5).LT.AXMI ) THEN
35063             XXM(5)=1D6
35064           ENDIF
35065  
35066           LKNT=LKNT+1
35067           XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35068      &    PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35069           IDLAM(LKNT,1)=KFNCHI(IJ)
35070           IDLAM(LKNT,2)=12
35071           IDLAM(LKNT,3)=-12
35072           LKNT=LKNT+1
35073           XLAM(LKNT)=XLAM(LKNT-1)
35074           IDLAM(LKNT,1)=KFNCHI(IJ)
35075           IDLAM(LKNT,2)=14
35076           IDLAM(LKNT,3)=-14
35077   120     CONTINUE
35078           XXM(5)=PMAS(PYCOMP(KSUSY1+16),1)
35079           IF( XXM(5).LT.AXMI ) THEN
35080             XXM(5)=1D6
35081           ENDIF
35082           LKNT=LKNT+1
35083           XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35084      &    PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35085           IDLAM(LKNT,1)=KFNCHI(IJ)
35086           IDLAM(LKNT,2)=16
35087           IDLAM(LKNT,3)=-16
35088  
35089 C...D-TYPE QUARKS
35090   130     CONTINUE
35091           XXM(5)=PMAS(PYCOMP(KSUSY1+1),1)
35092           XXM(6)=PMAS(PYCOMP(KSUSY2+1),1)
35093           FID=1
35094           EI=KCHG(FID,1)/3D0
35095           T3=-0.5D0
35096  
35097           XXM(11)=(T3-EI*XW)/(1D0-XW)
35098           XXM(12)=-EI*XW/(1D0-XW)
35099           XXM(13)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))
35100           XXM(14)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))
35101           XXM(15)=SR2*TANW*(EI*ZMIX(IX,1))
35102           XXM(16)=SR2*TANW*(EI*ZMIX(IJ,1))
35103  
35104           IF( XXM(5).LT.AXMI .AND. XXM(6).LT.AXMI ) GOTO 140
35105           IF( XXM(5).LT.AXMI ) THEN
35106             XXM(5)=1D6
35107           ELSEIF( XXM(6).LT.AXMI ) THEN
35108             XXM(6)=1D6
35109           ENDIF
35110           IF(AXMI.GE.AXMJ+2D0*PMAS(1,1)) THEN
35111             LKNT=LKNT+1
35112             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35113      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)*3D0
35114             IDLAM(LKNT,1)=KFNCHI(IJ)
35115             IDLAM(LKNT,2)=1
35116             IDLAM(LKNT,3)=-1
35117             IF(AXMI.GE.AXMJ+2D0*PMAS(3,1)) THEN
35118               LKNT=LKNT+1
35119               XLAM(LKNT)=XLAM(LKNT-1)
35120               IDLAM(LKNT,1)=KFNCHI(IJ)
35121               IDLAM(LKNT,2)=3
35122               IDLAM(LKNT,3)=-3
35123             ENDIF
35124           ENDIF
35125   140     CONTINUE
35126           IF(ABS(SFMIX(5,1)).GT.ABS(SFMIX(5,2))) THEN
35127             XXM(5)=PMAS(PYCOMP(KSUSY1+5),1)
35128             XXM(6)=PMAS(PYCOMP(KSUSY2+5),1)
35129           ELSE
35130             XXM(6)=PMAS(PYCOMP(KSUSY1+5),1)
35131             XXM(5)=PMAS(PYCOMP(KSUSY2+5),1)
35132           ENDIF
35133           IF( XXM(5).LT.AXMI .AND. XXM(6).LT.AXMI ) GOTO 150
35134           IF(XXM(5).LT.AXMI) THEN
35135             XXM(5)=1D6
35136           ELSEIF(XXM(6).LT.AXMI) THEN
35137             XXM(6)=1D6
35138           ENDIF
35139           IF(AXMI.GE.AXMJ+2D0*PMAS(5,1)) THEN
35140             LKNT=LKNT+1
35141             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35142      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)*3D0
35143             IDLAM(LKNT,1)=KFNCHI(IJ)
35144             IDLAM(LKNT,2)=5
35145             IDLAM(LKNT,3)=-5
35146           ENDIF
35147  
35148 C...U-TYPE QUARKS
35149   150     CONTINUE
35150           XXM(5)=PMAS(PYCOMP(KSUSY1+2),1)
35151           XXM(6)=PMAS(PYCOMP(KSUSY2+2),1)
35152           FID=2
35153           EI=KCHG(FID,1)/3D0
35154           T3=0.5D0
35155  
35156           XXM(11)=(T3-EI*XW)/(1D0-XW)
35157           XXM(12)=-EI*XW/(1D0-XW)
35158           XXM(13)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))
35159           XXM(14)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))
35160           XXM(15)=SR2*TANW*(EI*ZMIX(IX,1))
35161           XXM(16)=SR2*TANW*(EI*ZMIX(IJ,1))
35162  
35163           IF( XXM(5).LT.AXMI .AND. XXM(6).LT.AXMI ) GOTO 160
35164           IF(XXM(5).LT.AXMI) THEN
35165             XXM(5)=1D6
35166           ELSEIF(XXM(6).LT.AXMI) THEN
35167             XXM(6)=1D6
35168           ENDIF
35169           IF(AXMI.GE.AXMJ+2D0*PMAS(2,1)) THEN
35170             LKNT=LKNT+1
35171             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35172      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)*3D0
35173             IDLAM(LKNT,1)=KFNCHI(IJ)
35174             IDLAM(LKNT,2)=2
35175             IDLAM(LKNT,3)=-2
35176             IF(AXMI.GE.AXMJ+2D0*PMAS(4,1)) THEN
35177               LKNT=LKNT+1
35178               XLAM(LKNT)=XLAM(LKNT-1)
35179               IDLAM(LKNT,1)=KFNCHI(IJ)
35180               IDLAM(LKNT,2)=4
35181               IDLAM(LKNT,3)=-4
35182             ENDIF
35183           ENDIF
35184   160     CONTINUE
35185         ENDIF
35186  
35187 C...CHI0_I -> CHI0_J + H0_K
35188         EH(1)=SIN(ALFA)
35189         EH(2)=COS(ALFA)
35190         EH(3)=-SIN(BETA)
35191         DH(1)=COS(ALFA)
35192         DH(2)=-SIN(ALFA)
35193         DH(3)=COS(BETA)
35194  
35195         QIJ=ZMIX(IX,3)*ZMIX(IJ,2)+ZMIX(IJ,3)*ZMIX(IX,2)-
35196      &  TANW*(ZMIX(IX,3)*ZMIX(IJ,1)+ZMIX(IJ,3)*ZMIX(IX,1))
35197         RIJ=ZMIX(IX,4)*ZMIX(IJ,2)+ZMIX(IJ,4)*ZMIX(IX,2)-
35198      &  TANW*(ZMIX(IX,4)*ZMIX(IJ,1)+ZMIX(IJ,4)*ZMIX(IX,1))
35199  
35200         DO 170 IH=1,3
35201           XMH=PMAS(ITH(IH),1)
35202           XMH2=XMH**2
35203           IF(AXMI.GE.AXMJ+XMH) THEN
35204             LKNT=LKNT+1
35205             XL=PYLAMF(XMI2,XMJ2,XMH2)
35206             F21K=0.5D0*(QIJ*EH(IH)+RIJ*DH(IH))
35207             F12K=F21K
35208 C...SIGN OF MASSES I,J
35209             XMK=XMJ
35210             IF(IH.EQ.3) XMK=-XMK
35211             XLAM(LKNT)=PYX2XH(C1,XMI,XMK,XMH,F12K,F21K)
35212             IDLAM(LKNT,1)=KFNCHI(IJ)
35213             IDLAM(LKNT,2)=ITH(IH)
35214             IDLAM(LKNT,3)=0
35215           ENDIF
35216   170   CONTINUE
35217   180 CONTINUE
35218  
35219 C...CHI0_I -> CHI+_J + W-
35220       DO 220 IJ=1,2
35221         XMJ=SMW(IJ)
35222         AXMJ=ABS(XMJ)
35223         XMJ2=XMJ**2
35224         IF(AXMI.GE.AXMJ+XMW) THEN
35225           LKNT=LKNT+1
35226           GL=ZMIX(IX,2)*VMIX(IJ,1)-ZMIX(IX,4)*VMIX(IJ,2)/SR2
35227           GR=ZMIX(IX,2)*UMIX(IJ,1)+ZMIX(IX,3)*UMIX(IJ,2)/SR2
35228           XLAM(LKNT)=PYX2XG(C1/XMW2,XMI,XMJ,XMW,GL,GR)
35229           IDLAM(LKNT,1)=KFCCHI(IJ)
35230           IDLAM(LKNT,2)=-24
35231           IDLAM(LKNT,3)=0
35232           LKNT=LKNT+1
35233           XLAM(LKNT)=XLAM(LKNT-1)
35234           IDLAM(LKNT,1)=-KFCCHI(IJ)
35235           IDLAM(LKNT,2)=24
35236           IDLAM(LKNT,3)=0
35237         ELSEIF(AXMI.GE.AXMJ) THEN
35238           S12MIN=0D0
35239           S12MAX=(AXMI-AXMJ)**2
35240           XXM(5)=ZMIX(IX,2)*VMIX(IJ,1)-ZMIX(IX,4)*VMIX(IJ,2)/SR2
35241           XXM(6)=ZMIX(IX,2)*UMIX(IJ,1)+ZMIX(IX,3)*UMIX(IJ,2)/SR2
35242  
35243 C...LEPTONS
35244           FID=11
35245           EI=KCHG(FID,1)/3D0
35246           T3=-0.5D0
35247           XXM(7)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))*UMIX(IJ,1)
35248           FID=12
35249           EI=KCHG(FID,1)/3D0
35250           T3=0.5D0
35251           XXM(8)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))*VMIX(IJ,1)
35252  
35253           XXM(1)=0D0
35254           XXM(2)=XMJ
35255           XXM(3)=0D0
35256           XXM(4)=XMI
35257           XXM(9)=PMAS(24,1)
35258           XXM(10)=PMAS(24,2)
35259           XXM(11)=PMAS(PYCOMP(KSUSY1+11),1)
35260           XXM(12)=PMAS(PYCOMP(KSUSY1+12),1)
35261           IF( XXM(11).LT.AXMI .AND. XXM(12).LT.AXMI ) GOTO 190
35262           IF(XXM(11).LT.AXMI) THEN
35263             XXM(11)=1D6
35264           ELSEIF(XXM(12).LT.AXMI) THEN
35265             XXM(12)=1D6
35266           ENDIF
35267           IF(AXMI.GE.AXMJ+PMAS(11,1)+PMAS(12,1)) THEN
35268             LKNT=LKNT+1
35269             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35270      &      PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35271             IDLAM(LKNT,1)=KFCCHI(IJ)
35272             IDLAM(LKNT,2)=11
35273             IDLAM(LKNT,3)=-12
35274             LKNT=LKNT+1
35275             XLAM(LKNT)=XLAM(LKNT-1)
35276             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35277             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35278             IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
35279             IF(AXMI.GE.AXMJ+PMAS(13,1)+PMAS(14,1)) THEN
35280               LKNT=LKNT+1
35281               XLAM(LKNT)=XLAM(LKNT-1)
35282               IDLAM(LKNT,1)=KFCCHI(IJ)
35283               IDLAM(LKNT,2)=13
35284               IDLAM(LKNT,3)=-14
35285               LKNT=LKNT+1
35286               XLAM(LKNT)=XLAM(LKNT-1)
35287               IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35288               IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35289               IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
35290             ENDIF
35291           ENDIF
35292   190     CONTINUE
35293           IF(ABS(SFMIX(15,1)).GT.ABS(SFMIX(15,2))) THEN
35294             XXM(11)=PMAS(PYCOMP(KSUSY1+15),1)
35295             XXM(12)=PMAS(PYCOMP(KSUSY1+16),1)
35296           ELSE
35297             XXM(11)=PMAS(PYCOMP(KSUSY2+15),1)
35298             XXM(12)=PMAS(PYCOMP(KSUSY1+16),1)
35299           ENDIF
35300  
35301           IF(XXM(11).LT.AXMI) THEN
35302             XXM(11)=1D6
35303           ENDIF
35304           IF(XXM(12).LT.AXMI) THEN
35305             XXM(12)=1D6
35306           ENDIF
35307           IF(AXMI.GE.AXMJ+PMAS(15,1)+PMAS(16,1)) THEN
35308             LKNT=LKNT+1
35309             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35310      &      PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35311             XLAM(LKNT)=XLAM(LKNT-1)
35312             IDLAM(LKNT,1)=KFCCHI(IJ)
35313             IDLAM(LKNT,2)=15
35314             IDLAM(LKNT,3)=-16
35315             LKNT=LKNT+1
35316             XLAM(LKNT)=XLAM(LKNT-1)
35317             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35318             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35319             IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
35320           ENDIF
35321  
35322 C...NOW, DO THE QUARKS
35323   200     CONTINUE
35324           FID=1
35325           EI=KCHG(FID,1)/3D0
35326           T3=-0.5D0
35327           XXM(7)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))*UMIX(IJ,1)
35328           FID=2
35329           EI=KCHG(FID,1)/3D0
35330           T3=0.5D0
35331           XXM(8)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))*VMIX(IJ,1)
35332  
35333           XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
35334           XXM(12)=PMAS(PYCOMP(KSUSY1+2),1)
35335           IF( XXM(11).LT.AXMI .AND. XXM(12).LT.AXMI ) GOTO 210
35336           IF(XXM(11).LT.AXMI) THEN
35337             XXM(11)=1D6
35338           ELSEIF(XXM(12).LT.AXMI) THEN
35339             XXM(12)=1D6
35340           ENDIF
35341           IF(AXMI.GE.AXMJ+PMAS(2,1)+PMAS(1,1)) THEN
35342             LKNT=LKNT+1
35343             XLAM(LKNT)=3D0*C1**2/XMI3/(16D0*PI)*
35344      &      PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35345             IDLAM(LKNT,1)=KFCCHI(IJ)
35346             IDLAM(LKNT,2)=1
35347             IDLAM(LKNT,3)=-2
35348             LKNT=LKNT+1
35349             XLAM(LKNT)=XLAM(LKNT-1)
35350             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35351             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35352             IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
35353             IF(AXMI.GE.AXMJ+PMAS(3,1)+PMAS(4,1)) THEN
35354               LKNT=LKNT+1
35355               XLAM(LKNT)=XLAM(LKNT-1)
35356               IDLAM(LKNT,1)=KFCCHI(IJ)
35357               IDLAM(LKNT,2)=3
35358               IDLAM(LKNT,3)=-4
35359               LKNT=LKNT+1
35360               XLAM(LKNT)=XLAM(LKNT-1)
35361               IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35362               IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35363               IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
35364             ENDIF
35365           ENDIF
35366   210     CONTINUE
35367         ENDIF
35368   220 CONTINUE
35369   230 CONTINUE
35370  
35371 C...CHI0_I -> CHI+_I + H-
35372       DO 240 IJ=1,2
35373         XMJ=SMW(IJ)
35374         AXMJ=ABS(XMJ)
35375         XMJ2=XMJ**2
35376         XMHP=PMAS(ITHC,1)
35377         XMHP2=XMHP**2
35378         IF(AXMI.GE.AXMJ+XMHP) THEN
35379           LKNT=LKNT+1
35380           GL=CBETA*(ZMIX(IX,4)*VMIX(IJ,1)+(ZMIX(IX,2)+
35381      &    ZMIX(IX,1)*TANW)*VMIX(IJ,2)/SR2)
35382           GR=SBETA*(ZMIX(IX,3)*UMIX(IJ,1)-(ZMIX(IX,2)+
35383      &    ZMIX(IX,1)*TANW)*UMIX(IJ,2)/SR2)
35384           XLAM(LKNT)=PYX2XH(C1,XMI,XMJ,XMHP,GL,GR)
35385           IDLAM(LKNT,1)=KFCCHI(IJ)
35386           IDLAM(LKNT,2)=-ITHC
35387           IDLAM(LKNT,3)=0
35388           LKNT=LKNT+1
35389           XLAM(LKNT)=XLAM(LKNT-1)
35390           IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35391           IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35392           IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
35393         ELSE
35394  
35395         ENDIF
35396   240 CONTINUE
35397  
35398 C...2-BODY DECAYS TO FERMION SFERMION
35399       DO 250 J=1,16
35400         IF(J.GE.7.AND.J.LE.10) GOTO 250
35401         KF1=KSUSY1+J
35402         KF2=KSUSY2+J
35403         XMSF1=PMAS(PYCOMP(KF1),1)
35404         XMSF2=PMAS(PYCOMP(KF2),1)
35405         XMF=PMAS(J,1)
35406         IF(J.LE.6) THEN
35407           FCOL=3D0
35408         ELSE
35409           FCOL=1D0
35410         ENDIF
35411  
35412         EI=KCHG(J,1)/3D0
35413         T3T=SIGN(1D0,EI)
35414         IF(J.EQ.12.OR.J.EQ.14.OR.J.EQ.16) T3T=1D0
35415         IF(MOD(J,2).EQ.0) THEN
35416           BL=T3T*ZMIX(IX,2)+TANW*ZMIX(IX,1)*(2D0*EI-T3T)
35417           AL=XMF*ZMIX(IX,4)/XMW/SBETA
35418           AR=-2D0*EI*TANW*ZMIX(IX,1)
35419           BR=AL
35420         ELSE
35421           BL=T3T*ZMIX(IX,2)+TANW*ZMIX(IX,1)*(2D0*EI-T3T)
35422           AL=XMF*ZMIX(IX,3)/XMW/CBETA
35423           AR=-2D0*EI*TANW*ZMIX(IX,1)
35424           BR=AL
35425         ENDIF
35426  
35427 C...D~ D_L
35428         IF(AXMI.GE.XMF+XMSF1) THEN
35429           LKNT=LKNT+1
35430           XMA2=XMSF1**2
35431           XMB2=XMF**2
35432           XL=PYLAMF(XMI2,XMA2,XMB2)
35433           CA=AL*SFMIX(J,1)+AR*SFMIX(J,2)
35434           CB=BL*SFMIX(J,1)+BR*SFMIX(J,2)
35435           XLAM(LKNT)=0.5D0*FCOL*C1/8D0/XMI3*SQRT(XL)*( (XMI2+XMB2-XMA2)*
35436      &    (CA**2+CB**2)+4D0*CA*CB*XMF*XMI)
35437           IDLAM(LKNT,1)=KF1
35438           IDLAM(LKNT,2)=-J
35439           IDLAM(LKNT,3)=0
35440           LKNT=LKNT+1
35441           XLAM(LKNT)=XLAM(LKNT-1)
35442           IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35443           IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35444           IDLAM(LKNT,3)=0
35445         ENDIF
35446  
35447 C...D~ D_R
35448         IF(AXMI.GE.XMF+XMSF2) THEN
35449           LKNT=LKNT+1
35450           XMA2=XMSF2**2
35451           XMB2=XMF**2
35452           CA=AL*SFMIX(J,3)+AR*SFMIX(J,4)
35453           CB=BL*SFMIX(J,3)+BR*SFMIX(J,4)
35454           XL=PYLAMF(XMI2,XMA2,XMB2)
35455           XLAM(LKNT)=0.5D0*FCOL*C1/8D0/XMI3*SQRT(XL)*( (XMI2+XMB2-XMA2)*
35456      &    (CA**2+CB**2)+4D0*CA*CB*XMF*XMI)
35457           IDLAM(LKNT,1)=KF2
35458           IDLAM(LKNT,2)=-J
35459           IDLAM(LKNT,3)=0
35460           LKNT=LKNT+1
35461           XLAM(LKNT)=XLAM(LKNT-1)
35462           IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35463           IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35464           IDLAM(LKNT,3)=0
35465         ENDIF
35466   250 CONTINUE
35467   260 CONTINUE
35468 C...3-BODY DECAY TO Q Q~ GLUINO
35469       XMJ=PMAS(PYCOMP(KSUSY1+21),1)
35470       IF(AXMI.GE.XMJ) THEN
35471         AXMJ=ABS(XMJ)
35472         XXM(1)=0D0
35473         XXM(2)=XMJ
35474         XXM(3)=0D0
35475         XXM(4)=XMI
35476         XXM(5)=PMAS(PYCOMP(KSUSY1+1),1)
35477         XXM(6)=PMAS(PYCOMP(KSUSY2+1),1)
35478         XXM(7)=1D6
35479         XXM(8)=0D0
35480         XXM(9)=0D0
35481         XXM(10)=0D0
35482         S12MIN=0D0
35483         S12MAX=(AXMI-AXMJ)**2
35484 C...ALL QUARKS BUT T
35485         XXM(11)=0D0
35486         XXM(12)=0D0
35487         XXM(13)=1D0
35488         XXM(14)=-SR2*(-0.5D0*ZMIX(IX,2)+TANW*ZMIX(IX,1)/6D0)
35489         XXM(15)=1D0
35490         XXM(16)=SR2*(-TANW*ZMIX(IX,1)/3D0)
35491         IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 270
35492         IF(AXMI.GE.AXMJ+2D0*PMAS(1,1)) THEN
35493           LKNT=LKNT+1
35494           XLAM(LKNT)=4D0*C1*AS/XMI3/(16D0*PI)*
35495      &    PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35496           IDLAM(LKNT,1)=KSUSY1+21
35497           IDLAM(LKNT,2)=1
35498           IDLAM(LKNT,3)=-1
35499           IF(AXMI.GE.AXMJ+2D0*PMAS(3,1)) THEN
35500             LKNT=LKNT+1
35501             XLAM(LKNT)=XLAM(LKNT-1)
35502             IDLAM(LKNT,1)=KSUSY1+21
35503             IDLAM(LKNT,2)=3
35504             IDLAM(LKNT,3)=-3
35505           ENDIF
35506         ENDIF
35507   270   CONTINUE
35508         IF(ABS(SFMIX(5,1)).GT.ABS(SFMIX(5,2))) THEN
35509           XXM(5)=PMAS(PYCOMP(KSUSY1+5),1)
35510           XXM(6)=PMAS(PYCOMP(KSUSY2+5),1)
35511         ELSE
35512           XXM(6)=PMAS(PYCOMP(KSUSY1+5),1)
35513           XXM(5)=PMAS(PYCOMP(KSUSY2+5),1)
35514         ENDIF
35515         IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 280
35516         IF(AXMI.GE.AXMJ+2D0*PMAS(5,1)) THEN
35517           LKNT=LKNT+1
35518           XLAM(LKNT)=0.5D0*C1*AS/XMI3/(16D0*PI)*
35519      &    PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35520           IDLAM(LKNT,1)=KSUSY1+21
35521           IDLAM(LKNT,2)=5
35522           IDLAM(LKNT,3)=-5
35523         ENDIF
35524 C...U-TYPE QUARKS
35525   280   CONTINUE
35526         XXM(5)=PMAS(PYCOMP(KSUSY1+2),1)
35527         XXM(6)=PMAS(PYCOMP(KSUSY2+2),1)
35528         XXM(13)=1D0
35529         XXM(14)=-SR2*(0.5D0*ZMIX(IX,2)+TANW*ZMIX(IX,1)/6D0)
35530         XXM(15)=1D0
35531         XXM(16)=SR2*(2D0*TANW*ZMIX(IX,1)/3D0)
35532         IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 290
35533         IF(AXMI.GE.AXMJ+2D0*PMAS(2,1)) THEN
35534           LKNT=LKNT+1
35535           XLAM(LKNT)=0.5D0*C1*AS/XMI3/(16D0*PI)*
35536      &    PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35537           IDLAM(LKNT,1)=KSUSY1+21
35538           IDLAM(LKNT,2)=2
35539           IDLAM(LKNT,3)=-2
35540           IF(AXMI.GE.AXMJ+2D0*PMAS(4,1)) THEN
35541             LKNT=LKNT+1
35542             XLAM(LKNT)=XLAM(LKNT-1)
35543             IDLAM(LKNT,1)=KSUSY1+21
35544             IDLAM(LKNT,2)=4
35545             IDLAM(LKNT,3)=-4
35546           ENDIF
35547         ENDIF
35548   290   CONTINUE
35549       ENDIF
35550  
35551   300 IKNT=LKNT
35552       XLAM(0)=0D0
35553       DO 310 I=1,IKNT
35554         IF(XLAM(I).LT.0D0) XLAM(I)=0D0
35555         XLAM(0)=XLAM(0)+XLAM(I)
35556   310 CONTINUE
35557       IF(XLAM(0).EQ.0D0) XLAM(0)=1D-6
35558  
35559       RETURN
35560       END
35561  
35562 C*********************************************************************
35563  
35564 C...PYCJDC
35565 C...Calculate decay widths for the charginos (admixtures of
35566 C...charged Wino and charged Higgsino.
35567  
35568 C...Input:  KCIN = KF code for particle
35569 C...Output: XLAM = widths
35570 C...        IDLAM = KF codes for decay particles
35571 C...        IKNT = number of decay channels defined
35572 C...AUTHOR: STEPHEN MRENNA
35573 C...Last change:
35574 C...10-16-95:  force decay chi^+_1 -> chi^0_1 e+ nu_e
35575 C...when CHIENU .NE. 0
35576  
35577       SUBROUTINE PYCJDC(KFIN,XLAM,IDLAM,IKNT)
35578  
35579 C...Double precision and integer declarations.
35580       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
35581       IMPLICIT INTEGER(I-N)
35582       INTEGER PYK,PYCHGE,PYCOMP
35583 C...Parameter statement to help give large particle numbers.
35584       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
35585 C...Commonblocks.
35586       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
35587       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
35588       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
35589       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
35590      &SFMIX(16,4)
35591       COMMON/PYINTS/XXM(20)
35592       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/,/PYINTS/
35593  
35594 C...Local variables.
35595       INTEGER KFIN,KCIN
35596       DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,
35597      &XMZ,XMZ2,AXMJ,AXMI
35598       DOUBLE PRECISION XMFP,XMF1,XMF2,XMSL,XMG
35599       DOUBLE PRECISION S12MIN,S12MAX
35600       DOUBLE PRECISION XMI2,XMI3,XMJ2,XMH,XMH2,XMHP,XMHP2,XMA2,XMB2,XMK
35601       DOUBLE PRECISION PYLAMF,XL
35602       DOUBLE PRECISION TANW,XW,AEM,C1,AS,EI,T3,BETA,ALFA
35603       DOUBLE PRECISION PYX2XH,PYX2XG
35604       DOUBLE PRECISION XLAM(0:200)
35605       INTEGER IDLAM(200,3)
35606       INTEGER LKNT,IX,IH,J,IJ,I,IKNT,FID
35607       INTEGER ITH(3)
35608       INTEGER ITHC
35609       DOUBLE PRECISION ETAH(3),CH(3),DH(3),EH(3)
35610       DOUBLE PRECISION SR2
35611       DOUBLE PRECISION CBETA,SBETA,GR,GL,F12K,F21K,TANB
35612  
35613       DOUBLE PRECISION PYALEM,PI,PYALPS
35614       DOUBLE PRECISION AL,BL,AR,BR,ALP,BLP,ARP,BRP
35615       DOUBLE PRECISION CA,CB,FCOL
35616       INTEGER KF1,KF2,ISF
35617       INTEGER KFNCHI(4),KFCCHI(2)
35618  
35619       DOUBLE PRECISION TEMP
35620       EXTERNAL PYGAUS,PYXXZ5,PYXXW5,PYXXZ2
35621       DOUBLE PRECISION PYGAUS,PYXXZ5,PYXXW5,PYXXZ2
35622       DOUBLE PRECISION PREC
35623       DATA ITH/25,35,36/
35624       DATA ITHC/37/
35625       DATA ETAH/1D0,1D0,-1D0/
35626       DATA SR2/1.4142136D0/
35627       DATA PI/3.141592654D0/
35628       DATA PREC/1D-2/
35629       DATA KFNCHI/1000022,1000023,1000025,1000035/
35630       DATA KFCCHI/1000024,1000037/
35631  
35632 C...COUNT THE NUMBER OF DECAY MODES
35633       LKNT=0
35634       XMW=PMAS(24,1)
35635       XMW2=XMW**2
35636       XMZ=PMAS(23,1)
35637       XMZ2=XMZ**2
35638       XW=1D0-XMW2/XMZ2
35639       TANW = SQRT(XW/(1D0-XW))
35640  
35641 C...1 OR 2 DEPENDING ON CHARGINO TYPE
35642       IX=1
35643       IF(KFIN.EQ.KFCCHI(2)) IX=2
35644       KCIN=PYCOMP(KFIN)
35645  
35646       XMI=SMW(IX)
35647       XMI2=XMI**2
35648       AXMI=ABS(XMI)
35649       AEM=PYALEM(XMI2)
35650       AS =PYALPS(XMI2)
35651       C1=AEM/XW
35652       XMI3=ABS(XMI**3)
35653       TANB=RMSS(5)
35654       BETA=ATAN(TANB)
35655       CBETA=COS(BETA)
35656       SBETA=TANB*CBETA
35657       ALFA=RMSS(18)
35658  
35659 C...GRAVITINO DECAY MODES
35660  
35661       IF(IMSS(11).EQ.1) THEN
35662         XMP=RMSS(29)
35663         IDG=39+KSUSY1
35664         XMGR=PMAS(PYCOMP(IDG),1)
35665         SINW=SQRT(XW)
35666         COSW=SQRT(1D0-XW)
35667         XFAC=(XMI2/(XMP*XMGR))**2*AXMI/48D0/PI
35668         IF(AXMI.GT.XMGR+XMW) THEN
35669           LKNT=LKNT+1
35670           IDLAM(LKNT,1)=IDG
35671           IDLAM(LKNT,2)=24
35672           IDLAM(LKNT,3)=0
35673           XLAM(LKNT)=XFAC*(.5D0*(VMIX(IX,1)**2+UMIX(IX,1)**2)+
35674      &  .5D0*((VMIX(IX,2)*SBETA)**2+(UMIX(IX,2)*CBETA)**2))*
35675      &  (1D0-XMW2/XMI2)**4
35676         ENDIF
35677         IF(AXMI.GT.XMGR+PMAS(37,1)) THEN
35678           LKNT=LKNT+1
35679           IDLAM(LKNT,1)=IDG
35680           IDLAM(LKNT,2)=37
35681           IDLAM(LKNT,3)=0
35682           XLAM(LKNT)=XFAC*(.5D0*((VMIX(IX,2)*CBETA)**2+
35683      &   (UMIX(IX,2)*SBETA)**2))
35684      &   *(1D0-PMAS(37,1)**2/XMI2)**4
35685        ENDIF
35686       ENDIF
35687  
35688 C...CHECK ALL 2-BODY DECAYS TO GAUGE AND HIGGS BOSONS
35689       IF(IX.EQ.1) GOTO 150
35690       XMJ=SMW(1)
35691       AXMJ=ABS(XMJ)
35692       XMJ2=XMJ**2
35693  
35694 C...CHI_2+ -> CHI_1+ + Z0
35695       IF(AXMI.GE.AXMJ+XMZ) THEN
35696         LKNT=LKNT+1
35697         GL=VMIX(2,1)*VMIX(1,1)+0.5D0*VMIX(2,2)*VMIX(1,2)
35698         GR=UMIX(2,1)*UMIX(1,1)+0.5D0*UMIX(2,2)*UMIX(1,2)
35699         XLAM(LKNT)=PYX2XG(C1/XMW2,XMI,XMJ,XMZ,GL,GR)
35700         IDLAM(LKNT,1)=KFCCHI(1)
35701         IDLAM(LKNT,2)=23
35702         IDLAM(LKNT,3)=0
35703  
35704 C...CHARGED LEPTONS
35705       ELSEIF(AXMI.GE.AXMJ) THEN
35706         XXM(5)=-(VMIX(2,1)*VMIX(1,1)+0.5D0*VMIX(2,2)*VMIX(1,2))
35707         XXM(6)=-(UMIX(2,1)*UMIX(1,1)+0.5D0*UMIX(2,2)*UMIX(1,2))
35708         XXM(9)=XMZ
35709         XXM(10)=PMAS(23,2)
35710         XXM(1)=0D0
35711         XXM(2)=XMJ
35712         XXM(3)=0D0
35713         XXM(4)=XMI
35714         S12MIN=0D0
35715         S12MAX=(AXMJ-AXMI)**2
35716         XXM(7)= (-0.5D0+XW)/(1D0-XW)
35717         XXM(8)= XW/(1D0-XW)
35718         XXM(11)=PMAS(PYCOMP(KSUSY1+12),1)
35719         XXM(12)=VMIX(2,1)*VMIX(1,1)
35720         IF( XXM(11).LT.AXMI ) THEN
35721           XXM(11)=1D6
35722         ENDIF
35723         IF(AXMI.GE.AXMJ+2D0*PMAS(11,1)) THEN
35724           LKNT=LKNT+1
35725           XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35726      &    PYGAUS(PYXXZ2,S12MIN,S12MAX,PREC)
35727           IDLAM(LKNT,1)=KFCCHI(1)
35728           IDLAM(LKNT,2)=11
35729           IDLAM(LKNT,3)=-11
35730           IF(AXMI.GE.AXMJ+2D0*PMAS(13,1)) THEN
35731             LKNT=LKNT+1
35732             XLAM(LKNT)=XLAM(LKNT-1)
35733             IDLAM(LKNT,1)=KFCCHI(1)
35734             IDLAM(LKNT,2)=13
35735             IDLAM(LKNT,3)=-13
35736             IF(AXMI.GE.AXMJ+2D0*PMAS(15,1)) THEN
35737               LKNT=LKNT+1
35738               XLAM(LKNT)=XLAM(LKNT-1)
35739               IDLAM(LKNT,1)=KFCCHI(1)
35740               IDLAM(LKNT,2)=15
35741               IDLAM(LKNT,3)=-15
35742             ENDIF
35743           ENDIF
35744         ENDIF
35745  
35746 C...NEUTRINOS
35747   100   CONTINUE
35748         XXM(7)= (0.5D0)/(1D0-XW)
35749         XXM(8)= 0D0
35750         XXM(11)=PMAS(PYCOMP(KSUSY1+11),1)
35751         XXM(12)=UMIX(2,1)*UMIX(1,1)
35752         IF( XXM(11).LT.AXMI ) THEN
35753           XXM(11)=1D6
35754         ENDIF
35755         IF(AXMI.GE.AXMJ+2D0*PMAS(12,1)) THEN
35756           LKNT=LKNT+1
35757           XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35758      &    PYGAUS(PYXXZ2,S12MIN,S12MAX,PREC)
35759           IDLAM(LKNT,1)=KFCCHI(1)
35760           IDLAM(LKNT,2)=12
35761           IDLAM(LKNT,3)=-12
35762           LKNT=LKNT+1
35763           XLAM(LKNT)=XLAM(LKNT-1)
35764           IDLAM(LKNT,1)=KFCCHI(1)
35765           IDLAM(LKNT,2)=14
35766           IDLAM(LKNT,3)=-14
35767           LKNT=LKNT+1
35768           XLAM(LKNT)=XLAM(LKNT-1)
35769           IDLAM(LKNT,1)=KFCCHI(1)
35770           IDLAM(LKNT,2)=16
35771           IDLAM(LKNT,3)=-16
35772         ENDIF
35773  
35774 C...D-TYPE QUARKS
35775   110   CONTINUE
35776         XXM(7)= (-0.5D0+XW/3D0)/(1D0-XW)
35777         XXM(8)= XW/3D0/(1D0-XW)
35778         XXM(11)=PMAS(PYCOMP(KSUSY1+2),1)
35779         XXM(12)=VMIX(2,1)*VMIX(1,1)
35780         IF( XXM(11).LT.AXMI ) GOTO 120
35781         IF(AXMI.GE.AXMJ+2D0*PMAS(1,1)) THEN
35782           LKNT=LKNT+1
35783           XLAM(LKNT)=3D0*C1**2/XMI3/(16D0*PI)*
35784      &    PYGAUS(PYXXZ2,S12MIN,S12MAX,PREC)
35785           IDLAM(LKNT,1)=KFCCHI(1)
35786           IDLAM(LKNT,2)=1
35787           IDLAM(LKNT,3)=-1
35788           IF(AXMI.GE.AXMJ+2D0*PMAS(3,1)) THEN
35789             LKNT=LKNT+1
35790             XLAM(LKNT)=XLAM(LKNT-1)
35791             IDLAM(LKNT,1)=KFCCHI(1)
35792             IDLAM(LKNT,2)=3
35793             IDLAM(LKNT,3)=-3
35794             IF(AXMI.GE.AXMJ+2D0*PMAS(5,1)) THEN
35795               LKNT=LKNT+1
35796               XLAM(LKNT)=XLAM(LKNT-1)
35797               IDLAM(LKNT,1)=KFCCHI(1)
35798               IDLAM(LKNT,2)=5
35799               IDLAM(LKNT,3)=-5
35800             ENDIF
35801           ENDIF
35802         ENDIF
35803  
35804 C...U-TYPE QUARKS
35805   120   CONTINUE
35806         XXM(7)= (0.5D0-2D0*XW/3D0)/(1D0-XW)
35807         XXM(8)= -2D0*XW/3D0/(1D0-XW)
35808         XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
35809         XXM(12)=UMIX(2,1)*UMIX(1,1)
35810         IF( XXM(11).LT.AXMI ) GOTO 130
35811         IF(AXMI.GE.AXMJ+2D0*PMAS(2,1)) THEN
35812           LKNT=LKNT+1
35813           XLAM(LKNT)=3D0*C1**2/XMI3/(16D0*PI)*
35814      &    PYGAUS(PYXXZ2,S12MIN,S12MAX,PREC)
35815           IDLAM(LKNT,1)=KFCCHI(1)
35816           IDLAM(LKNT,2)=2
35817           IDLAM(LKNT,3)=-2
35818           IF(AXMI.GE.AXMJ+2D0*PMAS(4,1)) THEN
35819             LKNT=LKNT+1
35820             XLAM(LKNT)=XLAM(LKNT-1)
35821             IDLAM(LKNT,1)=KFCCHI(1)
35822             IDLAM(LKNT,2)=4
35823             IDLAM(LKNT,3)=-4
35824           ENDIF
35825         ENDIF
35826   130   CONTINUE
35827       ENDIF
35828  
35829 C...CHI_2+ -> CHI_1+ + H0_K
35830       EH(2)=COS(ALFA)
35831       EH(1)=SIN(ALFA)
35832       EH(3)=-SBETA
35833       DH(2)=-SIN(ALFA)
35834       DH(1)=COS(ALFA)
35835       DH(3)=COS(BETA)
35836       DO 140 IH=1,3
35837         XMH=PMAS(ITH(IH),1)
35838         XMH2=XMH**2
35839 C...NO 3-BODY OPTION
35840         IF(AXMI.GE.AXMJ+XMH) THEN
35841           LKNT=LKNT+1
35842           XL=PYLAMF(XMI2,XMJ2,XMH2)
35843           F21K=(VMIX(2,1)*UMIX(1,2)*EH(IH) -
35844      &    VMIX(2,2)*UMIX(1,1)*DH(IH))/SR2
35845           F12K=(VMIX(1,1)*UMIX(2,2)*EH(IH) -
35846      &    VMIX(1,2)*UMIX(2,1)*DH(IH))/SR2
35847           XMK=XMJ*ETAH(IH)
35848           XLAM(LKNT)=PYX2XH(C1,XMI,XMK,XMH,F12K,F21K)
35849           IDLAM(LKNT,1)=KFCCHI(1)
35850           IDLAM(LKNT,2)=ITH(IH)
35851           IDLAM(LKNT,3)=0
35852         ENDIF
35853   140 CONTINUE
35854  
35855 C...CHI1 JUMPS TO HERE
35856   150 CONTINUE
35857  
35858 C...CHI+_I -> CHI0_J + W+
35859       DO 180 IJ=1,4
35860         XMJ=SMZ(IJ)
35861         AXMJ=ABS(XMJ)
35862         XMJ2=XMJ**2
35863         IF(AXMI.GE.AXMJ+XMW) THEN
35864           LKNT=LKNT+1
35865           GL=ZMIX(IJ,2)*VMIX(IX,1)-ZMIX(IJ,4)*VMIX(IX,2)/SR2
35866           GR=ZMIX(IJ,2)*UMIX(IX,1)+ZMIX(IJ,3)*UMIX(IX,2)/SR2
35867           XLAM(LKNT)=PYX2XG(C1/XMW2,XMI,XMJ,XMW,GL,GR)
35868           IDLAM(LKNT,1)=KFNCHI(IJ)
35869           IDLAM(LKNT,2)=24
35870           IDLAM(LKNT,3)=0
35871  
35872 C...LEPTONS
35873         ELSEIF(AXMI.GE.AXMJ) THEN
35874           XMF1=0D0
35875           XMF2=0D0
35876           S12MIN=(XMF1+XMF2)**2
35877           S12MAX=(AXMJ-AXMI)**2
35878           XXM(5)=-1D0/SR2*ZMIX(IJ,4)*VMIX(IX,2)+ZMIX(IJ,2)*VMIX(IX,1)
35879           XXM(6)= 1D0/SR2*ZMIX(IJ,3)*UMIX(IX,2)+ZMIX(IJ,2)*UMIX(IX,1)
35880           FID=11
35881           EI=KCHG(FID,1)/3D0
35882           T3=-0.5D0
35883           XXM(7)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))*UMIX(IX,1)
35884           FID=12
35885           EI=KCHG(FID,1)/3D0
35886           T3=0.5D0
35887           XXM(8)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))*VMIX(IX,1)
35888  
35889           XXM(4)=XMI
35890           XXM(1)=XMF1
35891           XXM(2)=XMJ
35892           XXM(3)=XMF2
35893           XXM(9)=PMAS(24,1)
35894           XXM(10)=PMAS(24,2)
35895           XXM(11)=PMAS(PYCOMP(KSUSY1+11),1)
35896           XXM(12)=PMAS(PYCOMP(KSUSY1+12),1)
35897  
35898 C...1/(2PI)**3*/(32*M**3)*G^4, G^2/(4*PI)= AEM/XW,
35899 C...--> 1/(16PI)/M**3*(AEM/XW)**2
35900  
35901           IF(XXM(11).LT.AXMI) THEN
35902             XXM(11)=1D6
35903           ENDIF
35904           IF(XXM(12).LT.AXMI) THEN
35905             XXM(12)=1D6
35906           ENDIF
35907           IF(AXMI.GE.AXMJ+PMAS(11,1)+PMAS(12,1)) THEN
35908             LKNT=LKNT+1
35909             TEMP=PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35910             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*TEMP
35911             IDLAM(LKNT,1)=KFNCHI(IJ)
35912             IDLAM(LKNT,2)=-11
35913             IDLAM(LKNT,3)=12
35914  
35915 C...ONLY DECAY CHI+1 -> E+ NU_E
35916             IF( IMSS(12).NE. 0 ) GOTO 220
35917             IF(AXMI.GE.AXMJ+PMAS(13,1)+PMAS(14,1)) THEN
35918               LKNT=LKNT+1
35919               XXM(11)=PMAS(PYCOMP(KSUSY1+13),1)
35920               XXM(12)=PMAS(PYCOMP(KSUSY1+14),1)
35921               IF(XXM(11).LT.AXMI) THEN
35922                 XXM(11)=1D6
35923               ELSEIF(XXM(12).LT.AXMI) THEN
35924                 XXM(12)=1D6
35925               ENDIF
35926               TEMP=PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35927               XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*TEMP
35928               IDLAM(LKNT,1)=KFNCHI(IJ)
35929               IDLAM(LKNT,2)=-13
35930               IDLAM(LKNT,3)=14
35931               IF(AXMI.GE.AXMJ+PMAS(15,1)+PMAS(16,1)) THEN
35932                 LKNT=LKNT+1
35933                 IF(ABS(SFMIX(15,1)).GT.ABS(SFMIX(15,2))) THEN
35934                   XXM(11)=PMAS(PYCOMP(KSUSY1+15),1)
35935                 ELSE
35936                   XXM(11)=PMAS(PYCOMP(KSUSY2+15),1)
35937                 ENDIF
35938                 XXM(12)=PMAS(PYCOMP(KSUSY1+16),1)
35939                 IF(XXM(11).LT.AXMI) THEN
35940                   XXM(11)=1D6
35941                 ENDIF
35942                 IF(XXM(12).LT.AXMI) THEN
35943                   XXM(12)=1D6
35944                 ENDIF
35945                 TEMP=PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35946                 XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*TEMP
35947                 IDLAM(LKNT,1)=KFNCHI(IJ)
35948                 IDLAM(LKNT,2)=-15
35949                 IDLAM(LKNT,3)=16
35950               ENDIF
35951             ENDIF
35952           ENDIF
35953  
35954 C...NOW, DO THE QUARKS
35955   160     CONTINUE
35956           FID=1
35957           EI=KCHG(FID,1)/3D0
35958           T3=-0.5D0
35959           XXM(7)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))*UMIX(IX,1)
35960           FID=1
35961           EI=KCHG(FID,1)/3D0
35962           T3=0.5D0
35963           XXM(8)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))*VMIX(IX,1)
35964  
35965           XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
35966           XXM(12)=PMAS(PYCOMP(KSUSY1+2),1)
35967           IF( XXM(11).LT.AXMI .AND. XXM(12).LT.AXMI ) GOTO 170
35968           IF(XXM(11).LT.AXMI) THEN
35969             XXM(11)=1D6
35970           ELSEIF(XXM(12).LT.AXMI) THEN
35971             XXM(12)=1D6
35972           ENDIF
35973           IF(AXMI.GE.AXMJ+PMAS(1,1)+PMAS(2,1)) THEN
35974             LKNT=LKNT+1
35975             XLAM(LKNT)=3D0*C1**2/XMI3/(16D0*PI)*
35976      &      PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35977             IDLAM(LKNT,1)=KFNCHI(IJ)
35978             IDLAM(LKNT,2)=-1
35979             IDLAM(LKNT,3)=2
35980             IF(AXMI.GE.AXMJ+PMAS(3,1)+PMAS(4,1)) THEN
35981               LKNT=LKNT+1
35982               XLAM(LKNT)=XLAM(LKNT-1)
35983               IDLAM(LKNT,1)=KFNCHI(IJ)
35984               IDLAM(LKNT,2)=-3
35985               IDLAM(LKNT,3)=4
35986             ENDIF
35987           ENDIF
35988   170     CONTINUE
35989         ENDIF
35990   180 CONTINUE
35991  
35992 C...CHI+_I -> CHI0_J + H+
35993       DO 190 IJ=1,4
35994         XMJ=SMZ(IJ)
35995         AXMJ=ABS(XMJ)
35996         XMJ2=XMJ**2
35997         XMHP=PMAS(ITHC,1)
35998         XMHP2=XMHP**2
35999         IF(AXMI.GE.AXMJ+XMHP) THEN
36000           LKNT=LKNT+1
36001           GL=CBETA*(ZMIX(IJ,4)*VMIX(IX,1)+(ZMIX(IJ,2)+
36002      &    ZMIX(IJ,1)*TANW)*VMIX(IX,2)/SR2)
36003           GR=SBETA*(ZMIX(IJ,3)*UMIX(IX,1)-(ZMIX(IJ,2)+
36004      &    ZMIX(IJ,1)*TANW)*UMIX(IX,2)/SR2)
36005           XLAM(LKNT)=PYX2XH(C1,XMI,XMJ,XMHP,GL,GR)
36006           IDLAM(LKNT,1)=KFNCHI(IJ)
36007           IDLAM(LKNT,2)=ITHC
36008           IDLAM(LKNT,3)=0
36009         ELSE
36010  
36011         ENDIF
36012   190 CONTINUE
36013  
36014 C...2-BODY DECAYS TO FERMION SFERMION
36015       DO 200 J=1,16
36016         IF(J.GE.7.AND.J.LE.10) GOTO 200
36017         IF(MOD(J,2).EQ.0) THEN
36018           KF1=KSUSY1+J-1
36019         ELSE
36020           KF1=KSUSY1+J+1
36021         ENDIF
36022         KF2=KF1+KSUSY1
36023         XMSF1=PMAS(PYCOMP(KF1),1)
36024         XMSF2=PMAS(PYCOMP(KF2),1)
36025         XMF=PMAS(J,1)
36026         IF(J.LE.6) THEN
36027           FCOL=3D0
36028         ELSE
36029           FCOL=1D0
36030         ENDIF
36031  
36032 C...U~ D_L
36033         IF(MOD(J,2).EQ.0) THEN
36034           XMFP=PMAS(J-1,1)
36035           AL=UMIX(IX,1)
36036           BL=-XMF*VMIX(IX,2)/XMW/SBETA/SR2
36037           AR=-XMFP*UMIX(IX,2)/XMW/CBETA/SR2
36038           BR=0D0
36039           ISF=J-1
36040         ELSE
36041           XMFP=PMAS(J+1,1)
36042           AL=VMIX(IX,1)
36043           BL=-XMF*UMIX(IX,2)/XMW/CBETA/SR2
36044           BR=0D0
36045           AR=-XMFP*VMIX(IX,2)/XMW/SBETA/SR2
36046           ISF=J+1
36047         ENDIF
36048  
36049 C...~U_L D
36050         IF(AXMI.GE.XMF+XMSF1) THEN
36051           LKNT=LKNT+1
36052           XMA2=XMSF1**2
36053           XMB2=XMF**2
36054           XL=PYLAMF(XMI2,XMA2,XMB2)
36055           CA=AL*SFMIX(ISF,1)+AR*SFMIX(ISF,2)
36056           CB=BL*SFMIX(ISF,1)+BR*SFMIX(ISF,2)
36057           XLAM(LKNT)=FCOL*C1/8D0/XMI3*SQRT(XL)*( (XMI2+XMB2-XMA2)*
36058      &    (CA**2+CB**2)+4D0*CA*CB*XMF*XMI)
36059           IDLAM(LKNT,3)=0
36060           IF(MOD(J,2).EQ.0) THEN
36061             IDLAM(LKNT,1)=-KF1
36062             IDLAM(LKNT,2)=J
36063           ELSE
36064             IDLAM(LKNT,1)=KF1
36065             IDLAM(LKNT,2)=-J
36066           ENDIF
36067         ENDIF
36068  
36069 C...U~ D_R
36070         IF(AXMI.GE.XMF+XMSF2) THEN
36071           LKNT=LKNT+1
36072           XMA2=XMSF2**2
36073           XMB2=XMF**2
36074           CA=AL*SFMIX(ISF,3)+AR*SFMIX(ISF,4)
36075           CB=BL*SFMIX(ISF,3)+BR*SFMIX(ISF,4)
36076           XL=PYLAMF(XMI2,XMA2,XMB2)
36077           XLAM(LKNT)=FCOL*C1/8D0/XMI3*SQRT(XL)*( (XMI2+XMB2-XMA2)*
36078      &    (CA**2+CB**2)+4D0*CA*CB*XMF*XMI)
36079           IDLAM(LKNT,3)=0
36080           IF(MOD(J,2).EQ.0) THEN
36081             IDLAM(LKNT,1)=-KF2
36082             IDLAM(LKNT,2)=J
36083           ELSE
36084             IDLAM(LKNT,1)=KF2
36085             IDLAM(LKNT,2)=-J
36086           ENDIF
36087         ENDIF
36088   200 CONTINUE
36089  
36090 C...3-BODY DECAY TO Q Q~' GLUINO, ONLY IF IT CANNOT PROCEED THROUGH
36091 C...A 2-BODY -- 2-BODY CHAIN
36092       XMJ=PMAS(PYCOMP(KSUSY1+21),1)
36093       IF(AXMI.GE.XMJ) THEN
36094         AXMJ=ABS(XMJ)
36095         S12MIN=0D0
36096         S12MAX=(AXMI-AXMJ)**2
36097         XXM(1)=0D0
36098         XXM(2)=XMJ
36099         XXM(3)=0D0
36100         XXM(4)=XMI
36101         XXM(5)=0D0
36102         XXM(6)=0D0
36103         XXM(9)=1D6
36104         XXM(10)=0D0
36105         XXM(7)=UMIX(IX,1)*SR2
36106         XXM(8)=VMIX(IX,1)*SR2
36107         XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
36108         XXM(12)=PMAS(PYCOMP(KSUSY1+2),1)
36109         IF( XXM(11).LT.AXMI .OR. XXM(12).LT.AXMI ) GOTO 210
36110         IF(AXMI.GE.AXMJ+PMAS(1,1)+PMAS(2,1)) THEN
36111           LKNT=LKNT+1
36112           XLAM(LKNT)=4D0*C1*AS/XMI3/(16D0*PI)*
36113      &    PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
36114           IDLAM(LKNT,1)=KSUSY1+21
36115           IDLAM(LKNT,2)=-1
36116           IDLAM(LKNT,3)=2
36117           IF(AXMI.GE.AXMJ+PMAS(3,1)+PMAS(4,1)) THEN
36118             LKNT=LKNT+1
36119             XLAM(LKNT)=XLAM(LKNT-1)
36120             IDLAM(LKNT,1)=KSUSY1+21
36121             IDLAM(LKNT,2)=-3
36122             IDLAM(LKNT,3)=4
36123           ENDIF
36124         ENDIF
36125   210   CONTINUE
36126       ENDIF
36127  
36128   220 IKNT=LKNT
36129       XLAM(0)=0D0
36130       DO 230 I=1,IKNT
36131         XLAM(0)=XLAM(0)+XLAM(I)
36132         IF(XLAM(I).LT.0D0) THEN
36133           WRITE(MSTU(11),*) ' XLAM(I) = ',XLAM(I),KCIN,
36134      &    (IDLAM(I,J),J=1,3)
36135           XLAM(I)=0D0
36136         ENDIF
36137   230 CONTINUE
36138       IF(XLAM(0).EQ.0D0) THEN
36139         XLAM(0)=1D-6
36140         WRITE(MSTU(11),*) ' XLAM(0) = ',XLAM(0)
36141         WRITE(MSTU(11),*) LKNT
36142         WRITE(MSTU(11),*) (XLAM(J),J=1,LKNT)
36143       ENDIF
36144  
36145       RETURN
36146       END
36147  
36148 C*********************************************************************
36149  
36150 C...PYXXZ5
36151 C...Calculates chi0 -> chi0 + f + ~f.
36152  
36153       FUNCTION PYXXZ5(X)
36154  
36155 C...Double precision and integer declarations.
36156       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36157       IMPLICIT INTEGER(I-N)
36158       INTEGER PYK,PYCHGE,PYCOMP
36159 C...Parameter statement to help give large particle numbers.
36160       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
36161 C...Commonblocks.
36162       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
36163       COMMON/PYINTS/XXM(20)
36164       SAVE /PYDAT1/,/PYINTS/
36165  
36166 C...Local variables.
36167       DOUBLE PRECISION PYXXZ5,X
36168       DOUBLE PRECISION XM12,XM22,XM32,S,S23,S13,WPROP2
36169       DOUBLE PRECISION WW,WF1,WF2,WFL1,WFL2
36170       DOUBLE PRECISION SIJ
36171       DOUBLE PRECISION SR2,OL,OR,FLD,FLU,XMV,XMG,XMSU,XMSD
36172       DOUBLE PRECISION LE,RE,LE2,RE2,OL2,OR2,FLI,FLJ,FRI,FRJ
36173       DOUBLE PRECISION S23MIN,S23MAX,S23AVE,S23DEL
36174       INTEGER I
36175       DATA SR2/1.4142136D0/
36176  
36177 C...Statement functions.
36178 C...Integral from x to y of (t-a)(b-t) dt.
36179       TINT(X,Y,A,B)=(X-Y)*(-(X**2+X*Y+Y**2)/3D0+(B+A)*(X+Y)/2D0-A*B)
36180 C...Integral from x to y of (t-a)(b-t)/(t-c) dt.
36181       TINT2(X,Y,A,B,C)=(X-Y)*(-0.5D0*(X+Y)+(B+A-C))-
36182      &LOG(ABS((X-C)/(Y-C)))*(C-B)*(C-A)
36183 C...Integral from x to y of (t-a)(b-t)/(t-c)**2 dt.
36184       TINT3(X,Y,A,B,C)=-(X-Y)+(C-A)*(C-B)*(Y-X)/(X-C)/(Y-C)+
36185      &(B+A-2D0*C)*LOG(ABS((X-C)/(Y-C)))
36186 C...Integral from x to y of (t-a)/(b-t) dt.
36187       UTINT(X,Y,A,B)=LOG(ABS((X-A)/(B-X)*(B-Y)/(Y-A)))/(B-A)
36188 C...Integral from x to y of 1/(t-a) dt.
36189       TPROP(X,Y,A)=LOG(ABS((X-A)/(Y-A)))
36190  
36191       XM12=XXM(1)**2
36192       XM22=XXM(2)**2
36193       XM32=XXM(3)**2
36194       S=XXM(4)**2
36195       S13=X
36196  
36197       S23AVE=XM22+XM32-0.5D0/X*(X+XM32-XM12)*(X+XM22-S)
36198       S23DEL=0.5D0/X*SQRT( ( (X-XM12-XM32)**2-4D0*XM12*XM32)*
36199      &( (X-XM22-S)**2  -4D0*XM22*S  ) )
36200  
36201       S23MIN=(S23AVE-S23DEL)
36202       S23MAX=(S23AVE+S23DEL)
36203  
36204       XMV=XXM(7)
36205       XMG=XXM(8)
36206       XMSD=XXM(5)**2
36207       XMSU=XXM(6)**2
36208       OL=XXM(9)
36209       OR=XXM(10)
36210       OL2=OL**2
36211       OR2=OR**2
36212       LE=XXM(11)
36213       RE=XXM(12)
36214       LE2=LE**2
36215       RE2=RE**2
36216       FLI=XXM(13)
36217       FLJ=XXM(14)
36218       FRI=XXM(15)
36219       FRJ=XXM(16)
36220  
36221       WPROP2=(S13-XMV**2)**2+(XMV*XMG)**2
36222       SIJ=2D0*XXM(2)*XXM(4)*S13
36223  
36224       IF(XMV.LE.1000D0) THEN
36225         WW=2D0*(LE2+RE2)*(OL2)*( 2D0*TINT(S23MAX,S23MIN,XM22,S)
36226      &  +SIJ*(S23MAX-S23MIN) )/WPROP2
36227         IF(XXM(5).LE.10000D0) THEN
36228           WFL1=2D0*FLI*FLJ*OL*LE*( 2D0*TINT2(S23MAX,S23MIN,XM22,S,XMSD)
36229      &    + SIJ*TPROP(S23MAX,S23MIN,XMSD) )
36230           WFL1=WFL1*(S13-XMV**2)/WPROP2
36231         ELSE
36232           WFL1=0D0
36233         ENDIF
36234         IF(XXM(6).LE.10000D0) THEN
36235           WFL2=2D0*FRI*FRJ*OR*RE*( 2D0*TINT2(S23MAX,S23MIN,XM22,S,XMSU)
36236      &    + SIJ*TPROP(S23MAX,S23MIN,XMSU) )
36237           WFL2=WFL2*(S13-XMV**2)/WPROP2
36238         ELSE
36239           WFL2=0D0
36240         ENDIF
36241       ELSE
36242         WW=0D0
36243         WFL1=0D0
36244         WFL2=0D0
36245       ENDIF
36246       IF(XXM(5).LE.10000D0) THEN
36247         WF1=0.5D0*(FLI*FLJ)**2*( 2D0*TINT3(S23MAX,S23MIN,XM22,S,XMSD)
36248      &  + SIJ*UTINT(S23MAX,S23MIN,XMSD,XM22+S-S13-XMSD) )
36249       ELSE
36250         WF1=0D0
36251       ENDIF
36252       IF(XXM(6).LE.10000D0) THEN
36253         WF2=0.5D0*(FRI*FRJ)**2*( 2D0*TINT3(S23MAX,S23MIN,XM22,S,XMSU)
36254      &  + SIJ*UTINT(S23MAX,S23MIN,XMSU,XM22+S-S13-XMSU) )
36255       ELSE
36256         WF2=0D0
36257       ENDIF
36258  
36259 C...WFL1=0.0
36260 C...WFL2=0.0
36261       PYXXZ5=(WW+WF1+WF2+WFL1+WFL2)
36262       IF(PYXXZ5.LT.0D0) THEN
36263         WRITE(MSTU(11),*) ' NEGATIVE WT IN PYXXZ5 '
36264         WRITE(MSTU(11),*) XXM(1),XXM(2),XXM(3),XXM(4)
36265         WRITE(MSTU(11),*) (XXM(I),I=5,8)
36266         WRITE(MSTU(11),*) (XXM(I),I=9,12)
36267         WRITE(MSTU(11),*) (XXM(I),I=13,16)
36268         WRITE(MSTU(11),*) WW,WF1,WF2,WFL1,WFL2
36269         WRITE(MSTU(11),*) S23MIN,S23MAX
36270         PYXXZ5=0D0
36271       ENDIF
36272  
36273       RETURN
36274       END
36275  
36276 C*********************************************************************
36277  
36278 C...PYXXW5
36279 C...Calculates chi0(+) -> chi+(0) + f + ~f'.
36280  
36281       FUNCTION PYXXW5(X)
36282  
36283 C...Double precision and integer declarations.
36284       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36285       IMPLICIT INTEGER(I-N)
36286       INTEGER PYK,PYCHGE,PYCOMP
36287 C...Parameter statement to help give large particle numbers.
36288       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
36289 C...Commonblocks.
36290       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
36291       COMMON/PYINTS/XXM(20)
36292       SAVE /PYDAT1/,/PYINTS/
36293  
36294 C...Local variables.
36295       DOUBLE PRECISION PYXXW5,X
36296       DOUBLE PRECISION XM12,XM22,XM32,S,S23,S13,S12,WPROP2
36297       DOUBLE PRECISION WW,WU,WD,WWU,WWD,WUD
36298       DOUBLE PRECISION SR2,OL,OR,FLD,FLU,XMV,XMG,XMSD,XMSU
36299       DOUBLE PRECISION SIJ
36300       DOUBLE PRECISION S23MIN,S23MAX,S23AVE,S23DEL
36301       INTEGER IK
36302       SAVE IK
36303       DATA IK/0/
36304       DATA SR2/1.4142136D0/
36305  
36306 C...Statement functions.
36307 C...Integral from x to y of (t-a)(b-t) dt.
36308       TINT(X,Y,A,B)=(X-Y)*(-(X**2+X*Y+Y**2)/3D0+(B+A)*(X+Y)/2D0-A*B)
36309 C...Integral from x to y of (t-a)(b-t)/(t-c) dt.
36310       TINT2(X,Y,A,B,C)=(X-Y)*(-0.5D0*(X+Y)+(B+A-C))-
36311      &LOG(ABS((X-C)/(Y-C)))*(C-B)*(C-A)
36312 C...Integral from x to y of (t-a)(b-t)/(t-c)**2 dt.
36313       TINT3(X,Y,A,B,C)=-(X-Y)+(C-A)*(C-B)*(Y-X)/(X-C)/(Y-C)+
36314      &(B+A-2D0*C)*LOG(ABS((X-C)/(Y-C)))
36315 C...Integral from x to y of (t-a)/(b-t) dt.
36316       UTINT(X,Y,A,B)=LOG(ABS((X-A)/(B-X)*(B-Y)/(Y-A)))/(B-A)
36317 C...Integral from x to y of 1/(t-a) dt.
36318       TPROP(X,Y,A)=LOG(ABS((X-A)/(Y-A)))
36319  
36320       XM12=XXM(1)**2
36321       XM22=XXM(2)**2
36322       XM32=XXM(3)**2
36323       S=XXM(4)**2
36324       S13=X
36325       IF(XXM(1).EQ.0.AND.XXM(3).EQ.0D0) THEN
36326         S23AVE=0.5D0*(XM22+S-S13)
36327         S23DEL=0.5D0*SQRT( (X-XM22-S)**2-4D0*XM22*S )
36328       ELSE
36329         S23AVE=XM22+XM32-0.5D0/X*(X+XM32-XM12)*(X+XM22-S)
36330         S23DEL=0.5D0/X*SQRT( ( (X-XM12-XM32)**2-4D0*XM12*XM32)*
36331      &  ( (X-XM22-S)**2  -4D0*XM22*S  ) )
36332       ENDIF
36333       S23MIN=(S23AVE-S23DEL)
36334       S23MAX=(S23AVE+S23DEL)
36335       IF(S23DEL.LT.1D-3) THEN
36336         PYXXW5=0D0
36337         RETURN
36338       ENDIF
36339       XMV=XXM(9)
36340       XMG=XXM(10)
36341       XMSD=XXM(11)**2
36342       XMSU=XXM(12)**2
36343       OL=XXM(5)
36344       OR=XXM(6)
36345       FLD=XXM(7)
36346       FLU=XXM(8)
36347  
36348       WPROP2=((S13-XMV**2)**2+(XMV*XMG)**2)
36349       SIJ=S13*XXM(2)*XXM(4)
36350       IF(XMV.LE.1000D0) THEN
36351         WW=(OR**2+OL**2)*TINT(S23MAX,S23MIN,XM22,S)
36352      &  -2D0*OL*OR*SIJ*(S23MAX-S23MIN)
36353         WW=WW/WPROP2
36354         IF(XXM(11).LE.10000D0) THEN
36355           WWD=OL*SIJ*TPROP(S23MAX,S23MIN,XMSD)
36356      &    -OR*TINT2(S23MAX,S23MIN,XM22,S,XMSD)
36357           WWD=-WWD*SR2*FLD
36358           WWD=WWD*(S13-XMV**2)/WPROP2
36359         ELSE
36360           WWD=0D0
36361         ENDIF
36362         IF(XXM(12).LE.10000D0) THEN
36363           WWU=OR*SIJ*TPROP(S23MAX,S23MIN,XMSU)
36364      &    -OL*TINT2(S23MAX,S23MIN,XM22,S,XMSU)
36365           WWU=WWU*SR2*FLU
36366           WWU=WWU*(S13-XMV**2)/WPROP2
36367         ELSE
36368           WWU=0D0
36369         ENDIF
36370       ELSE
36371         WW=0D0
36372         WWD=0D0
36373         WWU=0D0
36374       ENDIF
36375       IF(XXM(12).LE.10000D0) THEN
36376         WU=0.5D0*FLU**2*TINT3(S23MAX,S23MIN,XM22,S,XMSU)
36377       ELSE
36378         WU=0D0
36379       ENDIF
36380       IF(XXM(11).LE.10000D0) THEN
36381         WD=0.5D0*FLD**2*TINT3(S23MAX,S23MIN,XM22,S,XMSD)
36382       ELSE
36383         WD=0D0
36384       ENDIF
36385       IF(XXM(11).LE.10000D0.AND.XXM(12).LE.10000D0) THEN
36386         WUD=FLU*FLD*SIJ*UTINT(S23MAX,S23MIN,XMSD,XM22+S-S13-XMSU)
36387       ELSE
36388         WUD=0D0
36389       ENDIF
36390  
36391       PYXXW5=WW+WU+WD+WWU+WWD+WUD
36392  
36393       IF(PYXXW5.LT.0D0) THEN
36394         IF(IK.EQ.0) THEN
36395           WRITE(MSTU(11),*) ' NEGATIVE WT IN PYXXW5 '
36396           WRITE(MSTU(11),*) WW,WU,WD
36397           WRITE(MSTU(11),*) WWD,WWU,WUD
36398           WRITE(MSTU(11),*) SQRT(S13)
36399           WRITE(MSTU(11),*) TINT(S23MAX,S23MIN,XM22,S)
36400           IK=1
36401         ENDIF
36402         PYXXW5=0D0
36403       ENDIF
36404  
36405       RETURN
36406       END
36407  
36408 C*********************************************************************
36409  
36410 C...PYXXGA
36411 C...Calculates chi0_i -> chi0_j + gamma.
36412  
36413       FUNCTION PYXXGA(C0,XM1,XM2,XMTR,XMTL)
36414  
36415 C...Double precision and integer declarations.
36416       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36417       IMPLICIT INTEGER(I-N)
36418       INTEGER PYK,PYCHGE,PYCOMP
36419  
36420 C...Local variables.
36421       DOUBLE PRECISION PYXXGA,C0,XM1,XM2,XMTR,XMTL
36422       DOUBLE PRECISION F1,F2
36423  
36424       F1=(1D0+XMTR/(1D0-XMTR)*LOG(XMTR))/(1D0-XMTR)
36425       F2=(1D0+XMTL/(1D0-XMTL)*LOG(XMTL))/(1D0-XMTL)
36426       PYXXGA=C0*((XM1**2-XM2**2)/XM1)**3
36427       PYXXGA=PYXXGA*(2D0/3D0*(F1+F2)-13D0/12D0)**2
36428  
36429       RETURN
36430       END
36431  
36432 C*********************************************************************
36433  
36434 C...PYX2XG
36435 C...Calculates the decay rate for ino -> ino + gauge boson.
36436  
36437       FUNCTION PYX2XG(C1,XM1,XM2,XM3,GL,GR)
36438  
36439 C...Double precision and integer declarations.
36440       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36441       IMPLICIT INTEGER(I-N)
36442       INTEGER PYK,PYCHGE,PYCOMP
36443  
36444 C...Local variables.
36445       DOUBLE PRECISION PYX2XG,XM1,XM2,XM3,GL,GR
36446       DOUBLE PRECISION XL,PYLAMF,C1
36447       DOUBLE PRECISION XMI2,XMJ2,XMV2,XMI3
36448  
36449       XMI2=XM1**2
36450       XMI3=ABS(XM1**3)
36451       XMJ2=XM2**2
36452       XMV2=XM3**2
36453       XL=PYLAMF(XMI2,XMJ2,XMV2)
36454       PYX2XG=C1/8D0/XMI3*SQRT(XL)
36455      &*((GL**2+GR**2)*(XL+3D0*XMV2*(XMI2+XMJ2-XMV2))-
36456      &12D0*GL*GR*XM1*XM2*XMV2)
36457  
36458       RETURN
36459       END
36460  
36461 C*********************************************************************
36462  
36463 C...PYX2XH
36464 C...Calculates the decay rate for ino -> ino + H.
36465  
36466       FUNCTION PYX2XH(C1,XM1,XM2,XM3,GL,GR)
36467  
36468 C...Double precision and integer declarations.
36469       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36470       IMPLICIT INTEGER(I-N)
36471       INTEGER PYK,PYCHGE,PYCOMP
36472  
36473 C...Local variables.
36474       DOUBLE PRECISION PYX2XH,XM1,XM2,XM3,GL,GR
36475       DOUBLE PRECISION XL,PYLAMF,C1
36476       DOUBLE PRECISION XMI2,XMJ2,XMV2,XMI3
36477  
36478       XMI2=XM1**2
36479       XMI3=ABS(XM1**3)
36480       XMJ2=XM2**2
36481       XMV2=XM3**2
36482       XL=PYLAMF(XMI2,XMJ2,XMV2)
36483       PYX2XH=C1/8D0/XMI3*SQRT(XL)
36484      &*((GL**2+GR**2)*(XMI2+XMJ2-XMV2)+
36485      &4D0*GL*GR*XM1*XM2)
36486  
36487       RETURN
36488       END
36489  
36490 C*********************************************************************
36491  
36492 C...PYXXZ2
36493 C...Calculates chi+ -> chi+ + f + ~f.
36494  
36495       FUNCTION PYXXZ2(X)
36496  
36497 C...Double precision and integer declarations.
36498       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36499       IMPLICIT INTEGER(I-N)
36500       INTEGER PYK,PYCHGE,PYCOMP
36501 C...Parameter statement to help give large particle numbers.
36502       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
36503 C...Commonblocks.
36504       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
36505       COMMON/PYINTS/XXM(20)
36506       SAVE /PYDAT1/,/PYINTS/
36507  
36508 C...Local variables.
36509       DOUBLE PRECISION PYXXZ2,X
36510       DOUBLE PRECISION XM12,XM22,XM32,S,S23,S13,S12,WPROP2
36511       DOUBLE PRECISION WW,WU,WD,WWU,WWD,WUD
36512       DOUBLE PRECISION SR2,OL,OR,FLD,FLU,XMV,XMG,XMSL
36513       DOUBLE PRECISION SIJ
36514       DOUBLE PRECISION LE,RE,LE2,RE2,OL2,OR2,CT
36515       DOUBLE PRECISION S23MIN,S23MAX,S23AVE,S23DEL
36516       INTEGER I
36517       DATA SR2/1.4142136D0/
36518  
36519 C...Statement functions.
36520 C...Integral from x to y of (t-a)(b-t) dt.
36521       TINT(X,Y,A,B)=(X-Y)*(-(X**2+X*Y+Y**2)/3D0+(B+A)*(X+Y)/2D0-A*B)
36522 C...Integral from x to y of (t-a)(b-t)/(t-c) dt.
36523       TINT2(X,Y,A,B,C)=(X-Y)*(-0.5D0*(X+Y)+(B+A-C))-
36524      &LOG(ABS((X-C)/(Y-C)))*(C-B)*(C-A)
36525 C...Integral from x to y of (t-a)(b-t)/(t-c)**2 dt.
36526       TINT3(X,Y,A,B,C)=-(X-Y)+(C-A)*(C-B)*(Y-X)/(X-C)/(Y-C)+
36527      &(B+A-2D0*C)*LOG(ABS((X-C)/(Y-C)))
36528 C...Integral from x to y of 1/(t-a) dt.
36529       TPROP(X,Y,A)=LOG(ABS((X-A)/(Y-A)))
36530  
36531       XM12=XXM(1)**2
36532       XM22=XXM(2)**2
36533       XM32=XXM(3)**2
36534       S=XXM(4)**2
36535       S13=X
36536       IF(XXM(1).EQ.0.AND.XXM(3).EQ.0D0) THEN
36537         S23AVE=0.5D0*(XM22+S-S13)
36538         S23DEL=0.5D0*SQRT( (X-XM22-S)**2-4D0*XM22*S )
36539       ELSE
36540         S23AVE=XM22+XM32-0.5D0/X*(X+XM32-XM12)*(X+XM22-S)
36541         S23DEL=0.5D0/X*SQRT( ( (X-XM12-XM32)**2-4D0*XM12*XM32)*
36542      &  ( (X-XM22-S)**2  -4D0*XM22*S  ) )
36543       ENDIF
36544       S23MIN=(S23AVE-S23DEL)
36545       S23MAX=(S23AVE+S23DEL)
36546       IF(S23DEL.LT.1D-3) THEN
36547         PYXXZ2=0D0
36548         RETURN
36549       ENDIF
36550  
36551       XMV=XXM(9)
36552       XMG=XXM(10)
36553       XMSL=XXM(11)**2
36554       OL=XXM(5)
36555       OR=XXM(6)
36556       OL2=OL**2
36557       OR2=OR**2
36558       LE=XXM(7)
36559       RE=XXM(8)
36560       LE2=LE**2
36561       RE2=RE**2
36562       CT=XXM(12)
36563  
36564       WPROP2=(S13-XMV**2)**2+(XMV*XMG)**2
36565       SIJ=XXM(2)*XXM(4)*S13
36566       WW=(LE2+RE2)*(OR2+OL2)*2D0*TINT(S23MAX,S23MIN,XM22,S)
36567      &- 4D0*(LE2+RE2)*OL*OR*SIJ*(S23MAX-S23MIN)
36568       WW=WW/WPROP2
36569       IF(XMSL.GT.1D4*S) THEN
36570         WD=0D0
36571         WWD=0D0
36572       ELSE
36573         WD=0.5D0*CT**2*TINT3(S23MAX,S23MIN,XM22,S,XMSL)
36574         WWD=OL*TINT2(S23MAX,S23MIN,XM22,S,XMSL)-
36575      &  OR*SIJ*TPROP(S23MAX,S23MIN,XMSL)
36576         WWD=2D0*WWD*LE*CT*(S13-XMV**2)/WPROP2
36577       ENDIF
36578  
36579       PYXXZ2=(WW+WD+WWD)
36580       IF(PYXXZ2.LT.0D0) THEN
36581         WRITE(MSTU(11),*) ' NEGATIVE WT IN PYXXZ2 '
36582         WRITE(MSTU(11),*) WW,WD,WWD
36583         WRITE(MSTU(11),*) S23MIN,S23MAX
36584         WRITE(MSTU(11),*) (XXM(I),I=1,4)
36585         WRITE(MSTU(11),*) (XXM(I),I=5,8)
36586         WRITE(MSTU(11),*) (XXM(I),I=9,12)
36587         PYXXZ2=0D0
36588       ENDIF
36589  
36590       RETURN
36591       END
36592  
36593 C*********************************************************************
36594  
36595 C...PYHEXT
36596 C...Calculates the non-standard decay modes of the Higgs boson.
36597  
36598       SUBROUTINE PYHEXT(KFIN,XLAM,IDLAM,IKNT)
36599  
36600 C...Double precision and integer declarations.
36601       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36602       IMPLICIT INTEGER(I-N)
36603       INTEGER PYK,PYCHGE,PYCOMP
36604 C...Parameter statement to help give large particle numbers.
36605       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
36606 C...Commonblocks.
36607       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
36608       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
36609       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
36610       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
36611       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
36612      &SFMIX(16,4)
36613       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYMSSM/,/PYSSMT/
36614  
36615 C...Local variables.
36616       INTEGER KFIN
36617       DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,
36618      &XMZ,XMZ2,AXMJ,AXMI
36619       DOUBLE PRECISION XMFP,XMF1,XMF2,XMSL,XMG
36620       DOUBLE PRECISION S12MIN,S12MAX
36621       DOUBLE PRECISION XMI2,XMI3,XMJ2,XMH,XMH2,XMHP,XMHP2,XMA2,XMB2
36622       DOUBLE PRECISION PYLAMF,XL,CF,EI
36623       INTEGER IDU,IC,ILR,IFL
36624       DOUBLE PRECISION TANW,XW,AEM,C1,AS
36625       DOUBLE PRECISION PYH2XX,GHLL,GHRR,GHLR
36626       DOUBLE PRECISION XLAM(0:200)
36627       INTEGER IDLAM(200,3)
36628       INTEGER LKNT,IX,IH,J,IJ,I,IKNT,IK
36629       INTEGER ITH(4)
36630       INTEGER KFNCHI(4),KFCCHI(2)
36631       DOUBLE PRECISION ETAH(3),CH(3),DH(3),EH(3)
36632       DOUBLE PRECISION SR2
36633       DOUBLE PRECISION BETA,ALFA
36634       DOUBLE PRECISION CBETA,SBETA,GR,GL,F12K,F21K,TANB
36635       DOUBLE PRECISION PYALEM,PI,PYALPS
36636       DOUBLE PRECISION AL,BL,AR,BR,ALP,ARP,BLP,BRP,ALR
36637       DOUBLE PRECISION XMK,AXMK,XMK2,COSA,SINA,CW,XML
36638       DOUBLE PRECISION XMUZ,ATRIT,ATRIB,ATRIL
36639       DOUBLE PRECISION XMJL,XMJR,XM1,XM2
36640       DATA ITH/25,35,36,37/
36641       DATA ETAH/1D0,1D0,-1D0/
36642       DATA SR2/1.4142136D0/
36643       DATA PI/3.141592654D0/
36644       DATA KFNCHI/1000022,1000023,1000025,1000035/
36645       DATA KFCCHI/1000024,1000037/
36646  
36647 C...COUNT THE NUMBER OF DECAY MODES
36648       LKNT=IKNT
36649  
36650       XMW=PMAS(24,1)
36651       XMW2=XMW**2
36652       XMZ=PMAS(23,1)
36653       XMZ2=XMZ**2
36654       XW=PARU(102)
36655       TANW = SQRT(XW/(1D0-XW))
36656       CW=SQRT(1D0-XW)
36657  
36658 C...1 - 4 DEPENDING ON Higgs species.
36659       IH=1
36660       IF(KFIN.EQ.ITH(2)) IH=2
36661       IF(KFIN.EQ.ITH(3)) IH=3
36662       IF(KFIN.EQ.ITH(4)) IH=4
36663  
36664       XMI=PMAS(KFIN,1)
36665       XMI2=XMI**2
36666       AXMI=ABS(XMI)
36667       AEM=PYALEM(XMI2)
36668       AS =PYALPS(XMI2)
36669       C1=AEM/XW
36670       XMI3=ABS(XMI**3)
36671  
36672       TANB=RMSS(5)
36673       BETA=ATAN(TANB)
36674       CBETA=COS(BETA)
36675       SBETA=TANB*CBETA
36676       ALFA=RMSS(18)
36677       COSA=COS(ALFA)
36678       SINA=SIN(ALFA)
36679       ATRIT=RMSS(16)
36680       ATRIB=RMSS(15)
36681       ATRIL=RMSS(17)
36682       XMUZ=-RMSS(4)
36683  
36684       IF(IH.EQ.4) GOTO 180
36685  
36686 C...CHECK ALL 2-BODY DECAYS TO GAUGE AND HIGGS BOSONS
36687 C...H0_K -> CHI0_I + CHI0_J
36688       EH(1)=SINA
36689       EH(2)=COSA
36690       EH(3)=-SBETA
36691       DH(1)=COSA
36692       DH(2)=-SINA
36693       DH(3)=CBETA
36694       DO 110 IJ=1,4
36695         XMJ=SMZ(IJ)
36696         AXMJ=ABS(XMJ)
36697         DO 100 IK=1,IJ
36698           XMK=SMZ(IK)
36699           AXMK=ABS(XMK)
36700           IF(AXMI.GE.AXMJ+AXMK) THEN
36701             LKNT=LKNT+1
36702             F21K=0.5D0*
36703      &      EH(IH)*( ZMIX(IK,3)*ZMIX(IJ,2)+ZMIX(IJ,3)*ZMIX(IK,2)
36704      &      -TANW*(ZMIX(IK,3)*ZMIX(IJ,1)+ZMIX(IJ,3)*ZMIX(IK,1)) )+
36705      &      0.5D0*DH(IH)*( ZMIX(IK,4)*ZMIX(IJ,2)+ZMIX(IJ,4)*ZMIX(IK,2)
36706      &      -TANW*(ZMIX(IK,4)*ZMIX(IJ,1)+ZMIX(IJ,4)*ZMIX(IK,1)) )
36707             F12K=0.5D0*
36708      &      EH(IH)*(ZMIX(IJ,3)*ZMIX(IK,2)+ZMIX(IK,3)*ZMIX(IJ,2)
36709      &      -TANW*(ZMIX(IJ,3)*ZMIX(IK,1)+ZMIX(IK,3)*ZMIX(IJ,1)))+
36710      &      0.5D0*DH(IH)*( ZMIX(IJ,4)*ZMIX(IK,2)+ZMIX(IK,4)*ZMIX(IJ,2)
36711      &      -TANW*(ZMIX(IJ,4)*ZMIX(IK,1)+ZMIX(IK,4)*ZMIX(IJ,1)) )
36712 C...SIGN OF MASSES I,J
36713             XML=XMK*ETAH(IH)
36714             XLAM(LKNT)=PYH2XX(C1,XMI,XMJ,XML,F12K,F21K)
36715             IF(IJ.EQ.IK) XLAM(LKNT)=XLAM(LKNT)*0.5D0
36716             IDLAM(LKNT,1)=KFNCHI(IJ)
36717             IDLAM(LKNT,2)=KFNCHI(IK)
36718             IDLAM(LKNT,3)=0
36719           ENDIF
36720   100   CONTINUE
36721   110 CONTINUE
36722  
36723 C...H0_K -> CHI+_I CHI-_J
36724       DO 130 IJ=1,2
36725         XMJ=SMW(IJ)
36726         AXMJ=ABS(XMJ)
36727         DO 120 IK=1,2
36728           XMK=SMW(IK)
36729           AXMK=ABS(XMK)
36730           IF(AXMI.GE.AXMJ+AXMK) THEN
36731             LKNT=LKNT+1
36732             F21K=(VMIX(IJ,1)*UMIX(IK,2)*EH(IH) -
36733      &      VMIX(IJ,2)*UMIX(IK,1)*DH(IH))/SR2
36734             F12K=(VMIX(IK,1)*UMIX(IJ,2)*EH(IH) -
36735      &      VMIX(IK,2)*UMIX(IJ,1)*DH(IH))/SR2
36736             XML=-XMK*ETAH(IH)
36737             XLAM(LKNT)=PYH2XX(C1,XMI,XMJ,XML,F12K,F21K)
36738             IDLAM(LKNT,1)=KFCCHI(IJ)
36739             IDLAM(LKNT,2)=-KFCCHI(IK)
36740             IDLAM(LKNT,3)=0
36741           ENDIF
36742   120   CONTINUE
36743   130 CONTINUE
36744  
36745 C...HIGGS TO SFERMION SFERMION
36746       DO 160 IFL=1,16
36747         IF(IFL.GE.7.AND.IFL.LE.10) GOTO 160
36748         IJ=KSUSY1+IFL
36749         XMJL=PMAS(PYCOMP(IJ),1)
36750         XMJR=PMAS(PYCOMP(IJ+KSUSY1),1)
36751         IF(AXMI.GE.2D0*MIN(XMJL,XMJR)) THEN
36752           XMJ=XMJL
36753           XMJ2=XMJ**2
36754           XL=PYLAMF(XMI2,XMJ2,XMJ2)
36755           XMF=PMAS(IFL,1)
36756           EI=KCHG(IFL,1)/3D0
36757           IDU=2-MOD(IFL,2)
36758  
36759           IF(IH.EQ.1) THEN
36760             IF(IDU.EQ.1) THEN
36761               GHLL=-XMZ/CW*(0.5D0+EI*XW)*SIN(ALFA+BETA)+
36762      &        XMF**2/XMW*SINA/CBETA
36763               GHRR=XMZ/CW*(EI*XW)*SIN(ALFA+BETA)+
36764      &        XMF**2/XMW*SINA/CBETA
36765               IF(IFL.EQ.5) THEN
36766                 GHLR=-XMF/2D0/XMW/CBETA*(XMUZ*COSA-
36767      &          ATRIB*SINA)
36768               ELSEIF(IFL.EQ.15) THEN
36769                 GHLR=-XMF/2D0/XMW/CBETA*(XMUZ*COSA-
36770      &          ATRIL*SINA)
36771               ELSE
36772                 GHLR=0D0
36773               ENDIF
36774             ELSE
36775               GHLL=XMZ/CW*(0.5D0-EI*XW)*SIN(ALFA+BETA)-
36776      &        XMF**2/XMW*COSA/SBETA
36777               GHRR=XMZ/CW*(EI*XW)*SIN(ALFA+BETA)-
36778      &        XMF**2/XMW*COSA/SBETA
36779               IF(IFL.EQ.6) THEN
36780                 GHLR=XMF/2D0/XMW/SBETA*(XMUZ*SINA-
36781      &          ATRIT*COSA)
36782               ELSE
36783                 GHLR=0D0
36784               ENDIF
36785             ENDIF
36786  
36787           ELSEIF(IH.EQ.2) THEN
36788             IF(IDU.EQ.1) THEN
36789               GHLL=XMZ/CW*(0.5D0+EI*XW)*COS(ALFA+BETA)-
36790      &        XMF**2/XMW*COSA/CBETA
36791               GHRR=-XMZ/CW*(EI*XW)*COS(ALFA+BETA)-
36792      &        XMF**2/XMW*COSA/CBETA
36793               IF(IFL.EQ.5) THEN
36794                 GHLR=-XMF/2D0/XMW/CBETA*(XMUZ*SINA+
36795      &          ATRIB*COSA)
36796               ELSEIF(IFL.EQ.15) THEN
36797                 GHLR=-XMF/2D0/XMW/CBETA*(XMUZ*SINA+
36798      &          ATRIL*COSA)
36799               ELSE
36800                 GHLR=0D0
36801               ENDIF
36802             ELSE
36803               GHLL=-XMZ/CW*(0.5D0-EI*XW)*COS(ALFA+BETA)-
36804      &        XMF**2/XMW*SINA/SBETA
36805               GHRR=-XMZ/CW*(EI*XW)*COS(ALFA+BETA)-
36806      &        XMF**2/XMW*SINA/SBETA
36807               IF(IFL.EQ.6) THEN
36808                 GHLR=-XMF/2D0/XMW/SBETA*(XMUZ*COSA+
36809      &          ATRIT*SINA)
36810               ELSE
36811                 GHLR=0D0
36812               ENDIF
36813             ENDIF
36814  
36815           ELSEIF(IH.EQ.3) THEN
36816             GHLL=0D0
36817             GHRR=0D0
36818             GHLR=0D0
36819             IF(IDU.EQ.1) THEN
36820               IF(IFL.EQ.5) THEN
36821                 GHLR=XMF/2D0/XMW*(ATRIB*TANB-XMUZ)
36822               ELSEIF(IFL.EQ.15) THEN
36823                 GHLR=XMF/2D0/XMW*(ATRIL*TANB-XMUZ)
36824               ENDIF
36825             ELSE
36826               IF(IFL.EQ.6) THEN
36827                 GHLR=XMF/2D0/XMW*(ATRIT/TANB-XMUZ)
36828               ENDIF
36829             ENDIF
36830           ENDIF
36831           IF(IH.EQ.3) GOTO 140
36832  
36833           AL=SFMIX(IFL,1)**2
36834           AR=SFMIX(IFL,2)**2
36835           ALR=SFMIX(IFL,1)*SFMIX(IFL,2)
36836           IF(IFL.LE.6) THEN
36837             CF=3D0
36838           ELSE
36839             CF=1D0
36840           ENDIF
36841  
36842           IF(AXMI.GE.2D0*XMJ) THEN
36843             LKNT=LKNT+1
36844             XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36845      &      (GHLL*AL+GHRR*AR
36846      &      +2D0*GHLR*ALR)**2
36847             IDLAM(LKNT,1)=IJ
36848             IDLAM(LKNT,2)=-IJ
36849             IDLAM(LKNT,3)=0
36850           ENDIF
36851  
36852           IF(AXMI.GE.2D0*XMJR) THEN
36853             LKNT=LKNT+1
36854             AL=SFMIX(IFL,3)**2
36855             AR=SFMIX(IFL,4)**2
36856             ALR=SFMIX(IFL,3)*SFMIX(IFL,4)
36857             XMJ=XMJR
36858             XMJ2=XMJ**2
36859             XL=PYLAMF(XMI2,XMJ2,XMJ2)
36860             XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36861      &      (GHLL*AL+GHRR*AR
36862      &      +2D0*GHLR*ALR)**2
36863             IDLAM(LKNT,1)=IJ+KSUSY1
36864             IDLAM(LKNT,2)=-(IJ+KSUSY1)
36865             IDLAM(LKNT,3)=0
36866           ENDIF
36867   140     CONTINUE
36868  
36869           IF(AXMI.GE.XMJL+XMJR) THEN
36870             LKNT=LKNT+1
36871             AL=SFMIX(IFL,1)*SFMIX(IFL,3)
36872             AR=SFMIX(IFL,2)*SFMIX(IFL,4)
36873             ALR=SFMIX(IFL,1)*SFMIX(IFL,4)+SFMIX(IFL,2)*SFMIX(IFL,3)
36874             XMJ=XMJR
36875             XMJ2=XMJ**2
36876             XL=PYLAMF(XMI2,XMJ2,XMJL**2)
36877             XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36878      &      (GHLL*AL+GHRR*AR)**2
36879             IDLAM(LKNT,1)=IJ
36880             IDLAM(LKNT,2)=-(IJ+KSUSY1)
36881             IDLAM(LKNT,3)=0
36882             LKNT=LKNT+1
36883             IDLAM(LKNT,1)=-IJ
36884             IDLAM(LKNT,2)=IJ+KSUSY1
36885             IDLAM(LKNT,3)=0
36886             XLAM(LKNT)=XLAM(LKNT-1)
36887           ENDIF
36888         ENDIF
36889   150   CONTINUE
36890   160 CONTINUE
36891   170 CONTINUE
36892  
36893       GOTO 230
36894   180 CONTINUE
36895  
36896 C...H+ -> CHI+_I + CHI0_J
36897       DO 200 IJ=1,4
36898         XMJ=SMZ(IJ)
36899         AXMJ=ABS(XMJ)
36900         XMJ2=XMJ**2
36901         DO 190 IK=1,2
36902           XMK=SMW(IK)
36903           AXMK=ABS(XMK)
36904           XMK2=XMK**2
36905           IF(AXMI.GE.AXMJ+AXMK) THEN
36906             LKNT=LKNT+1
36907             GL=CBETA*(ZMIX(IJ,4)*VMIX(IK,1)+(ZMIX(IJ,2)+ZMIX(IJ,1)*
36908      &      TANW)*VMIX(IK,2)/SR2)
36909             GR=SBETA*(ZMIX(IJ,3)*UMIX(IK,1)-(ZMIX(IJ,2)+ZMIX(IJ,1)*
36910      &      TANW)*UMIX(IK,2)/SR2)
36911             XLAM(LKNT)=PYH2XX(C1,XMI,XMJ,-XMK,GL,GR)
36912             IDLAM(LKNT,1)=KFNCHI(IJ)
36913             IDLAM(LKNT,2)=KFCCHI(IK)
36914             IDLAM(LKNT,3)=0
36915           ENDIF
36916   190   CONTINUE
36917   200 CONTINUE
36918  
36919       GL=-XMW/SR2*(SIN(2D0*BETA)-PMAS(6,1)**2/TANB/XMW2)
36920       GR=-PMAS(6,1)/SR2/XMW*(XMUZ-ATRIT/TANB)
36921       AL=0D0
36922       AR=0D0
36923       CF=3D0
36924  
36925 C...H+ -> T_1 B_1~
36926       XM1=PMAS(PYCOMP(KSUSY1+6),1)
36927       XM2=PMAS(PYCOMP(KSUSY1+5),1)
36928       IF(XMI.GE.XM1+XM2) THEN
36929         XL=PYLAMF(XMI2,XM1**2,XM2**2)
36930         LKNT=LKNT+1
36931         XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36932      &  (GL*SFMIX(6,1)*SFMIX(5,1)+GR*SFMIX(6,2)*SFMIX(5,1))**2
36933         IDLAM(LKNT,1)=KSUSY1+6
36934         IDLAM(LKNT,2)=-(KSUSY1+5)
36935         IDLAM(LKNT,3)=0
36936       ENDIF
36937  
36938 C...H+ -> T_2 B_1~
36939       XM1=PMAS(PYCOMP(KSUSY2+6),1)
36940       XM2=PMAS(PYCOMP(KSUSY1+5),1)
36941       IF(XMI.GE.XM1+XM2) THEN
36942         XL=PYLAMF(XMI2,XM1**2,XM2**2)
36943         LKNT=LKNT+1
36944         XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36945      &  (GL*SFMIX(6,3)*SFMIX(5,1)+GR*SFMIX(6,4)*SFMIX(5,1))**2
36946         IDLAM(LKNT,1)=KSUSY2+6
36947         IDLAM(LKNT,2)=-(KSUSY1+5)
36948         IDLAM(LKNT,3)=0
36949       ENDIF
36950  
36951 C...H+ -> T_1 B_2~
36952       XM1=PMAS(PYCOMP(KSUSY1+6),1)
36953       XM2=PMAS(PYCOMP(KSUSY2+5),1)
36954       IF(XMI.GE.XM1+XM2) THEN
36955         XL=PYLAMF(XMI2,XM1**2,XM2**2)
36956         LKNT=LKNT+1
36957         XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36958      &  (GL*SFMIX(6,1)*SFMIX(5,3)+GR*SFMIX(6,2)*SFMIX(5,3))**2
36959         IDLAM(LKNT,1)=KSUSY1+6
36960         IDLAM(LKNT,2)=-(KSUSY2+5)
36961         IDLAM(LKNT,3)=0
36962       ENDIF
36963  
36964 C...H+ -> T_2 B_2~
36965       XM1=PMAS(PYCOMP(KSUSY2+6),1)
36966       XM2=PMAS(PYCOMP(KSUSY2+5),1)
36967       IF(XMI.GE.XM1+XM2) THEN
36968         XL=PYLAMF(XMI2,XM1**2,XM2**2)
36969         LKNT=LKNT+1
36970         XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36971      &  (GL*SFMIX(6,3)*SFMIX(5,3)+GR*SFMIX(6,4)*SFMIX(5,3))**2
36972         IDLAM(LKNT,1)=KSUSY2+6
36973         IDLAM(LKNT,2)=-(KSUSY2+5)
36974         IDLAM(LKNT,3)=0
36975       ENDIF
36976  
36977 C...H+ -> UL DL~
36978       GL=-XMW/SR2*SIN(2D0*BETA)
36979       DO 210 IJ=1,3,2
36980         XM1=PMAS(PYCOMP(KSUSY1+IJ),1)
36981         XM2=PMAS(PYCOMP(KSUSY1+IJ+1),1)
36982         IF(XMI.GE.XM1+XM2) THEN
36983           XL=PYLAMF(XMI2,XM1**2,XM2**2)
36984           LKNT=LKNT+1
36985           XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*(GL)**2
36986           IDLAM(LKNT,1)=-(KSUSY1+IJ)
36987           IDLAM(LKNT,2)=KSUSY1+IJ+1
36988           IDLAM(LKNT,3)=0
36989         ENDIF
36990   210 CONTINUE
36991  
36992 C...H+ -> EL~ NUL
36993       CF=1D0
36994       DO 220 IJ=11,13,2
36995         XM1=PMAS(PYCOMP(KSUSY1+IJ),1)
36996         XM2=PMAS(PYCOMP(KSUSY1+IJ+1),1)
36997         IF(XMI.GE.XM1+XM2) THEN
36998           XL=PYLAMF(XMI2,XM1**2,XM2**2)
36999           LKNT=LKNT+1
37000           XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*(GL)**2
37001           IDLAM(LKNT,1)=-(KSUSY1+IJ)
37002           IDLAM(LKNT,2)=KSUSY1+IJ+1
37003           IDLAM(LKNT,3)=0
37004         ENDIF
37005   220 CONTINUE
37006  
37007 C...H+ -> TAU1 NUTAUL
37008       XM1=PMAS(PYCOMP(KSUSY1+15),1)
37009       XM2=PMAS(PYCOMP(KSUSY1+16),1)
37010       IF(XMI.GE.XM1+XM2) THEN
37011         XL=PYLAMF(XMI2,XM1**2,XM2**2)
37012         LKNT=LKNT+1
37013         XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*(GL)**2*SFMIX(15,1)**2
37014         IDLAM(LKNT,1)=-(KSUSY1+15)
37015         IDLAM(LKNT,2)= KSUSY1+16
37016         IDLAM(LKNT,3)=0
37017       ENDIF
37018  
37019 C...H+ -> TAU2 NUTAUL
37020       XM1=PMAS(PYCOMP(KSUSY2+15),1)
37021       XM2=PMAS(PYCOMP(KSUSY1+16),1)
37022       IF(XMI.GE.XM1+XM2) THEN
37023         XL=PYLAMF(XMI2,XM1**2,XM2**2)
37024         LKNT=LKNT+1
37025         XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*(GL)**2*SFMIX(15,3)**2
37026         IDLAM(LKNT,1)=-(KSUSY2+15)
37027         IDLAM(LKNT,2)= KSUSY1+16
37028         IDLAM(LKNT,3)=0
37029       ENDIF
37030  
37031   230 CONTINUE
37032       IKNT=LKNT
37033       XLAM(0)=0D0
37034       DO 240 I=1,IKNT
37035         IF(XLAM(I).LE.0D0) XLAM(I)=0D0
37036         XLAM(0)=XLAM(0)+XLAM(I)
37037   240 CONTINUE
37038       IF(XLAM(0).EQ.0D0) XLAM(0)=1D-6
37039  
37040       RETURN
37041       END
37042  
37043 C*********************************************************************
37044  
37045 C...PYH2XX
37046 C...Calculates the decay rate for a Higgs to an ino pair.
37047  
37048       FUNCTION PYH2XX(C1,XM1,XM2,XM3,GL,GR)
37049  
37050 C...Double precision and integer declarations.
37051       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37052       IMPLICIT INTEGER(I-N)
37053       INTEGER PYK,PYCHGE,PYCOMP
37054 C...Commonblocks.
37055       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37056       SAVE /PYDAT1/
37057  
37058 C...Local variables.
37059       DOUBLE PRECISION PYH2XX,XM1,XM2,XM3,GL,GR
37060       DOUBLE PRECISION XL,PYLAMF,C1
37061       DOUBLE PRECISION XMI2,XMJ2,XMK2,XMI3
37062  
37063       XMI2=XM1**2
37064       XMI3=ABS(XM1**3)
37065       XMJ2=XM2**2
37066       XMK2=XM3**2
37067       XL=PYLAMF(XMI2,XMJ2,XMK2)
37068       PYH2XX=C1/4D0/XMI3*SQRT(XL)
37069      &*((GL**2+GR**2)*(XMI2-XMJ2-XMK2)-
37070      &4D0*GL*GR*XM3*XM2)
37071       IF(PYH2XX.LT.0D0) THEN
37072         WRITE(MSTU(11),*) ' NEGATIVE WIDTH IN PYH2XX '
37073         WRITE(MSTU(11),*) XMI2,XMJ2,XMK2,GL,GR,XM1,XM2,XM3
37074         STOP
37075       ENDIF
37076  
37077       RETURN
37078       END
37079  
37080 C*********************************************************************
37081  
37082 C...PYGAUS
37083 C...Integration by adaptive Gaussian quadrature.
37084 C...Adapted from the CERNLIB DGAUSS routine by K.S. Kolbig.
37085  
37086       FUNCTION PYGAUS(F, A, B, EPS)
37087  
37088 C...Double precision and integer declarations.
37089       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37090       IMPLICIT INTEGER(I-N)
37091       INTEGER PYK,PYCHGE,PYCOMP
37092  
37093 C...Local declarations.
37094       EXTERNAL F
37095       DOUBLE PRECISION F,W(12), X(12)
37096       DATA X( 1) /9.6028985649753623D-1/, W( 1) /1.0122853629037626D-1/
37097       DATA X( 2) /7.9666647741362674D-1/, W( 2) /2.2238103445337447D-1/
37098       DATA X( 3) /5.2553240991632899D-1/, W( 3) /3.1370664587788729D-1/
37099       DATA X( 4) /1.8343464249564980D-1/, W( 4) /3.6268378337836198D-1/
37100       DATA X( 5) /9.8940093499164993D-1/, W( 5) /2.7152459411754095D-2/
37101       DATA X( 6) /9.4457502307323258D-1/, W( 6) /6.2253523938647893D-2/
37102       DATA X( 7) /8.6563120238783174D-1/, W( 7) /9.5158511682492785D-2/
37103       DATA X( 8) /7.5540440835500303D-1/, W( 8) /1.2462897125553387D-1/
37104       DATA X( 9) /6.1787624440264375D-1/, W( 9) /1.4959598881657673D-1/
37105       DATA X(10) /4.5801677765722739D-1/, W(10) /1.6915651939500254D-1/
37106       DATA X(11) /2.8160355077925891D-1/, W(11) /1.8260341504492359D-1/
37107       DATA X(12) /9.5012509837637440D-2/, W(12) /1.8945061045506850D-1/
37108  
37109 C...The Gaussian quadrature algorithm.
37110       H = 0D0
37111       IF(B .EQ. A) GO TO 140
37112       CONST = 5D-3 / ABS(B-A)
37113       BB = A
37114   100 CONTINUE
37115       AA = BB
37116       BB = B
37117   110 CONTINUE
37118       C1 = 0.5D0*(BB+AA)
37119       C2 = 0.5D0*(BB-AA)
37120       S8 = 0D0
37121       DO 120 I = 1, 4
37122         U = C2*X(I)
37123         S8 = S8 + W(I) * (F(C1+U) + F(C1-U))
37124   120 CONTINUE
37125       S16 = 0D0
37126       DO 130 I = 5, 12
37127         U = C2*X(I)
37128         S16 = S16 + W(I) * (F(C1+U) + F(C1-U))
37129   130 CONTINUE
37130       S16 = C2*S16
37131       IF(DABS(S16-C2*S8) .LE. EPS*(1D0+DABS(S16))) THEN
37132         H = H + S16
37133         IF(BB .NE. B) GO TO 100
37134       ELSE
37135         BB = C1
37136         IF(1D0 + CONST*ABS(C2) .NE. 1D0) GO TO 110
37137         H = 0D0
37138         CALL PYERRM(18,'(PYGAUS:) too high accuracy required')
37139         GO TO 140
37140       ENDIF
37141   140 CONTINUE
37142       PYGAUS = H
37143  
37144       RETURN
37145       END
37146  
37147 C*********************************************************************
37148  
37149 C...PYSIMP
37150 C...Simpson formula for an integral.
37151  
37152       FUNCTION PYSIMP(Y,X0,X1,N)
37153  
37154 C...Double precision and integer declarations.
37155       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37156       IMPLICIT INTEGER(I-N)
37157       INTEGER PYK,PYCHGE,PYCOMP
37158  
37159 C...Local variables.
37160       DOUBLE PRECISION Y,X0,X1,H,S
37161       DIMENSION Y(0:N)
37162  
37163       S=0D0
37164       H=(X1-X0)/N
37165       DO 100 I=0,N-2,2
37166         S=S+Y(I)+4D0*Y(I+1)+Y(I+2)
37167   100 CONTINUE
37168       PYSIMP=S*H/3D0
37169  
37170       RETURN
37171       END
37172  
37173 C*********************************************************************
37174  
37175 C...PYLAMF
37176 C...The standard lambda function.
37177  
37178       FUNCTION PYLAMF(X,Y,Z)
37179  
37180 C...Double precision and integer declarations.
37181       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37182       IMPLICIT INTEGER(I-N)
37183       INTEGER PYK,PYCHGE,PYCOMP
37184  
37185 C...Local variables.
37186       DOUBLE PRECISION PYLAMF,X,Y,Z
37187  
37188       PYLAMF=(X-(Y+Z))**2-4D0*Y*Z
37189       IF(PYLAMF.LT.0D0) PYLAMF=0D0
37190  
37191       RETURN
37192       END
37193  
37194 C*********************************************************************
37195  
37196 C...PYTBDY
37197 C...Generates 3-body decays of gauginos.
37198  
37199       SUBROUTINE PYTBDY(XM)
37200  
37201 C...Double precision and integer declarations.
37202       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37203       IMPLICIT INTEGER(I-N)
37204       INTEGER PYK,PYCHGE,PYCOMP
37205 C...Parameter statement to help give large particle numbers.
37206       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
37207 C...Commonblocks.
37208       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37209       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37210       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
37211       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
37212       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
37213       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYPARS/
37214  
37215 C...Local variables.
37216       DOUBLE PRECISION XM(5)
37217       DOUBLE PRECISION S12MIN,S12MAX,YJACO1,S23AVE,S23DF1,S23DF2
37218       DOUBLE PRECISION D1,D2,D3,P1,P2,P3,CTHE1,STHE1,CTHE3,STHE3
37219       DOUBLE PRECISION CPHI1,SPHI1
37220       DOUBLE PRECISION S23DEL,EPS
37221       DOUBLE PRECISION GOLDEN,AX,BX,CX,TOL,XMIN,R,C
37222       PARAMETER (R=0.61803399D0,C=1D0-R,TOL=1D-3)
37223       DOUBLE PRECISION F1,F2,X0,X1,X2,X3
37224       DATA EPS/1D-6/
37225  
37226 C...GENERATE S12
37227       S12MIN=(XM(1)+XM(2))**2
37228       S12MAX=(XM(5)-XM(3))**2
37229       YJACO1=S12MAX-S12MIN
37230  
37231 C...FIND S12*
37232       AX=S12MIN
37233       CX=S12MAX
37234       BX=S12MIN+0.5D0*YJACO1
37235       X0=AX
37236       X3=CX
37237       IF(ABS(CX-BX).GT.ABS(BX-AX))THEN
37238         X1=BX
37239         X2=BX+C*(CX-BX)
37240       ELSE
37241         X2=BX
37242         X1=BX-C*(BX-AX)
37243       ENDIF
37244  
37245 C...SOLVE FOR F1 AND F2
37246       S23DF1=(X1-XM(2)**2-XM(1)**2)**2
37247      &-(2D0*XM(1)*XM(2))**2
37248       S23DF2=(X1-XM(3)**2-XM(5)**2)**2
37249      &-(2D0*XM(3)*XM(5))**2
37250       S23DF1=S23DF1*EPS
37251       S23DF2=S23DF2*EPS
37252       S23DEL=SQRT(S23DF1*S23DF2)/(2D0*X1)
37253       F1=-2D0*S23DEL/EPS
37254       S23DF1=(X2-XM(2)**2-XM(1)**2)**2
37255      &-(2D0*XM(1)*XM(2))**2
37256       S23DF2=(X2-XM(3)**2-XM(5)**2)**2
37257      &-(2D0*XM(3)*XM(5))**2
37258       S23DF1=S23DF1*EPS
37259       S23DF2=S23DF2*EPS
37260       S23DEL=SQRT(S23DF1*S23DF2)/(2D0*X2)
37261       F2=-2D0*S23DEL/EPS
37262  
37263   100 IF(ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2)))THEN
37264         IF(F2.LT.F1)THEN
37265           X0=X1
37266           X1=X2
37267           X2=R*X1+C*X3
37268           F1=F2
37269           S23DF1=(X2-XM(2)**2-XM(1)**2)**2
37270      &    -(2D0*XM(1)*XM(2))**2
37271           S23DF2=(X2-XM(3)**2-XM(5)**2)**2
37272      &    -(2D0*XM(3)*XM(5))**2
37273           S23DF1=S23DF1*EPS
37274           S23DF2=S23DF2*EPS
37275           S23DEL=SQRT(S23DF1*S23DF2)/(2D0*X2)
37276           F2=-2D0*S23DEL/EPS
37277         ELSE
37278           X3=X2
37279           X2=X1
37280           X1=R*X2+C*X0
37281           F2=F1
37282           S23DF1=(X1-XM(2)**2-XM(1)**2)**2
37283      &    -(2D0*XM(1)*XM(2))**2
37284           S23DF2=(X1-XM(3)**2-XM(5)**2)**2
37285      &    -(2D0*XM(3)*XM(5))**2
37286           S23DF1=S23DF1*EPS
37287           S23DF2=S23DF2*EPS
37288           S23DEL=SQRT(S23DF1*S23DF2)/(2D0*X1)
37289           F1=-2D0*S23DEL/EPS
37290         ENDIF
37291         GOTO 100
37292       ENDIF
37293 C...WE WANT THE MAXIMUM, NOT THE MINIMUM
37294       IF(F1.LT.F2)THEN
37295         GOLDEN=-F1
37296         XMIN=X1
37297       ELSE
37298         GOLDEN=-F2
37299         XMIN=X2
37300       ENDIF
37301  
37302       IKNT=0
37303   110 S12=S12MIN+PYR(0)*YJACO1
37304       IKNT=IKNT+1
37305 C...GENERATE S23
37306       S23AVE=XM(2)**2+XM(3)**2-(S12+XM(2)**2-XM(1)**2)
37307      &*(S12+XM(3)**2-XM(5)**2)/(2D0*S12)
37308       S23DF1=(S12-XM(2)**2-XM(1)**2)**2
37309      &-(2D0*XM(1)*XM(2))**2
37310       S23DF2=(S12-XM(3)**2-XM(5)**2)**2
37311      &-(2D0*XM(3)*XM(5))**2
37312       S23DF1=S23DF1*EPS
37313       S23DF2=S23DF2*EPS
37314       S23DEL=SQRT(S23DF1*S23DF2)/(2D0*S12)
37315       S23DEL=S23DEL/EPS
37316       S23MIN=S23AVE-S23DEL
37317       S23MAX=S23AVE+S23DEL
37318       YJACO2=S23MAX-S23MIN
37319       S23=S23MIN+PYR(0)*YJACO2
37320  
37321 C...CHECK THE SAMPLING
37322       IF(IKNT.GT.100) THEN
37323         WRITE(MSTU(11),*) ' IKNT > 100 IN PYTBDY '
37324         GOTO 120
37325       ENDIF
37326       IF(YJACO2.LT.PYR(0)*GOLDEN) GOTO 110
37327   120 D3=(XM(5)**2+XM(3)**2-S12)/(2D0*XM(5))
37328       D1=(XM(5)**2+XM(1)**2-S23)/(2D0*XM(5))
37329       D2=XM(5)-D1-D3
37330       P1=SQRT(D1*D1-XM(1)**2)
37331       P2=SQRT(D2*D2-XM(2)**2)
37332       P3=SQRT(D3*D3-XM(3)**2)
37333       CTHE1=2D0*PYR(0)-1D0
37334       ANG1=2D0*PYR(0)*PARU(1)
37335       CPHI1=COS(ANG1)
37336       SPHI1=SIN(ANG1)
37337       ARG=1D0-CTHE1**2
37338       IF(ARG.LT.0D0.AND.ARG.GT.-1D-3) ARG=0D0
37339       STHE1=SQRT(ARG)
37340       P(N+1,1)=P1*STHE1*CPHI1
37341       P(N+1,2)=P1*STHE1*SPHI1
37342       P(N+1,3)=P1*CTHE1
37343       P(N+1,4)=D1
37344  
37345 C...GET CPHI3
37346       ANG3=2D0*PYR(0)*PARU(1)
37347       CPHI3=COS(ANG3)
37348       SPHI3=SIN(ANG3)
37349       CTHE3=(P2**2-P1**2-P3**2)/2D0/P1/P3
37350       ARG=1D0-CTHE3**2
37351       IF(ARG.LT.0D0.AND.ARG.GT.-1D-3) ARG=0D0
37352       STHE3=SQRT(ARG)
37353       P(N+3,1)=-P3*STHE3*CPHI3*CTHE1*CPHI1
37354      &+P3*STHE3*SPHI3*SPHI1
37355      &+P3*CTHE3*STHE1*CPHI1
37356       P(N+3,2)=-P3*STHE3*CPHI3*CTHE1*SPHI1
37357      &-P3*STHE3*SPHI3*CPHI1
37358      &+P3*CTHE3*STHE1*SPHI1
37359       P(N+3,3)=P3*STHE3*CPHI3*STHE1
37360      &+P3*CTHE3*CTHE1
37361       P(N+3,4)=D3
37362  
37363       DO 130 I=1,3
37364         P(N+2,I)=-P(N+1,I)-P(N+3,I)
37365   130 CONTINUE
37366       P(N+2,4)=D2
37367  
37368       RETURN
37369       END
37370  
37371 C*********************************************************************
37372  
37373 C...PY1ENT
37374 C...Stores one parton/particle in commonblock PYJETS.
37375  
37376       SUBROUTINE PY1ENT(IP,KF,PE,THE,PHI)
37377  
37378 C...Double precision and integer declarations.
37379       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37380       IMPLICIT INTEGER(I-N)
37381       INTEGER PYK,PYCHGE,PYCOMP
37382 C...Commonblocks.
37383       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37384       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37385       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
37386       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
37387  
37388 C...Standard checks.
37389       MSTU(28)=0
37390       IF(MSTU(12).GE.1) CALL PYLIST(0)
37391       IPA=MAX(1,IABS(IP))
37392       IF(IPA.GT.MSTU(4)) CALL PYERRM(21,
37393      &'(PY1ENT:) writing outside PYJETS memory')
37394       KC=PYCOMP(KF)
37395       IF(KC.EQ.0) CALL PYERRM(12,'(PY1ENT:) unknown flavour code')
37396  
37397 C...Find mass. Reset K, P and V vectors.
37398       PM=0D0
37399       IF(MSTU(10).EQ.1) PM=P(IPA,5)
37400       IF(MSTU(10).GE.2) PM=PYMASS(KF)
37401       DO 100 J=1,5
37402         K(IPA,J)=0
37403         P(IPA,J)=0D0
37404         V(IPA,J)=0D0
37405   100 CONTINUE
37406  
37407 C...Store parton/particle in K and P vectors.
37408       K(IPA,1)=1
37409       IF(IP.LT.0) K(IPA,1)=2
37410       K(IPA,2)=KF
37411       P(IPA,5)=PM
37412       P(IPA,4)=MAX(PE,PM)
37413       PA=SQRT(P(IPA,4)**2-P(IPA,5)**2)
37414       P(IPA,1)=PA*SIN(THE)*COS(PHI)
37415       P(IPA,2)=PA*SIN(THE)*SIN(PHI)
37416       P(IPA,3)=PA*COS(THE)
37417  
37418 C...Set N. Optionally fragment/decay.
37419       N=IPA
37420       IF(IP.EQ.0) CALL PYEXEC
37421  
37422       RETURN
37423       END
37424  
37425 C*********************************************************************
37426  
37427 C...PY2ENT
37428 C...Stores two partons/particles in their CM frame,
37429 C...with the first along the +z axis.
37430  
37431       SUBROUTINE PY2ENT(IP,KF1,KF2,PECM)
37432  
37433 C...Double precision and integer declarations.
37434       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37435       IMPLICIT INTEGER(I-N)
37436       INTEGER PYK,PYCHGE,PYCOMP
37437 C...Commonblocks.
37438       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37439       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37440       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
37441       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
37442  
37443 C...Standard checks.
37444       MSTU(28)=0
37445       IF(MSTU(12).GE.1) CALL PYLIST(0)
37446       IPA=MAX(1,IABS(IP))
37447       IF(IPA.GT.MSTU(4)-1) CALL PYERRM(21,
37448      &'(PY2ENT:) writing outside PYJETS memory')
37449       KC1=PYCOMP(KF1)
37450       KC2=PYCOMP(KF2)
37451       IF(KC1.EQ.0.OR.KC2.EQ.0) CALL PYERRM(12,
37452      &'(PY2ENT:) unknown flavour code')
37453  
37454 C...Find masses. Reset K, P and V vectors.
37455       PM1=0D0
37456       IF(MSTU(10).EQ.1) PM1=P(IPA,5)
37457       IF(MSTU(10).GE.2) PM1=PYMASS(KF1)
37458       PM2=0D0
37459       IF(MSTU(10).EQ.1) PM2=P(IPA+1,5)
37460       IF(MSTU(10).GE.2) PM2=PYMASS(KF2)
37461       DO 110 I=IPA,IPA+1
37462         DO 100 J=1,5
37463           K(I,J)=0
37464           P(I,J)=0D0
37465           V(I,J)=0D0
37466   100   CONTINUE
37467   110 CONTINUE
37468  
37469 C...Check flavours.
37470       KQ1=KCHG(KC1,2)*ISIGN(1,KF1)
37471       KQ2=KCHG(KC2,2)*ISIGN(1,KF2)
37472       IF(MSTU(19).EQ.1) THEN
37473         MSTU(19)=0
37474       ELSE
37475         IF(KQ1+KQ2.NE.0.AND.KQ1+KQ2.NE.4) CALL PYERRM(2,
37476      &  '(PY2ENT:) unphysical flavour combination')
37477       ENDIF
37478       K(IPA,2)=KF1
37479       K(IPA+1,2)=KF2
37480  
37481 C...Store partons/particles in K vectors for normal case.
37482       IF(IP.GE.0) THEN
37483         K(IPA,1)=1
37484         IF(KQ1.NE.0.AND.KQ2.NE.0) K(IPA,1)=2
37485         K(IPA+1,1)=1
37486  
37487 C...Store partons in K vectors for parton shower evolution.
37488       ELSE
37489         K(IPA,1)=3
37490         K(IPA+1,1)=3
37491         K(IPA,4)=MSTU(5)*(IPA+1)
37492         K(IPA,5)=K(IPA,4)
37493         K(IPA+1,4)=MSTU(5)*IPA
37494         K(IPA+1,5)=K(IPA+1,4)
37495       ENDIF
37496  
37497 C...Check kinematics and store partons/particles in P vectors.
37498       IF(PECM.LE.PM1+PM2) CALL PYERRM(13,
37499      &'(PY2ENT:) energy smaller than sum of masses')
37500       PA=SQRT(MAX(0D0,(PECM**2-PM1**2-PM2**2)**2-(2D0*PM1*PM2)**2))/
37501      &(2D0*PECM)
37502       P(IPA,3)=PA
37503       P(IPA,4)=SQRT(PM1**2+PA**2)
37504       P(IPA,5)=PM1
37505       P(IPA+1,3)=-PA
37506       P(IPA+1,4)=SQRT(PM2**2+PA**2)
37507       P(IPA+1,5)=PM2
37508  
37509 C...Set N. Optionally fragment/decay.
37510       N=IPA+1
37511       IF(IP.EQ.0) CALL PYEXEC
37512  
37513       RETURN
37514       END
37515  
37516 C*********************************************************************
37517  
37518 C...PY3ENT
37519 C...Stores three partons or particles in their CM frame,
37520 C...with the first along the +z axis and the third in the (x,z)
37521 C...plane with x > 0.
37522  
37523       SUBROUTINE PY3ENT(IP,KF1,KF2,KF3,PECM,X1,X3)
37524  
37525 C...Double precision and integer declarations.
37526       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37527       IMPLICIT INTEGER(I-N)
37528       INTEGER PYK,PYCHGE,PYCOMP
37529 C...Commonblocks.
37530       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37531       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37532       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
37533       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
37534  
37535 C...Standard checks.
37536       MSTU(28)=0
37537       IF(MSTU(12).GE.1) CALL PYLIST(0)
37538       IPA=MAX(1,IABS(IP))
37539       IF(IPA.GT.MSTU(4)-2) CALL PYERRM(21,
37540      &'(PY3ENT:) writing outside PYJETS memory')
37541       KC1=PYCOMP(KF1)
37542       KC2=PYCOMP(KF2)
37543       KC3=PYCOMP(KF3)
37544       IF(KC1.EQ.0.OR.KC2.EQ.0.OR.KC3.EQ.0) CALL PYERRM(12,
37545      &'(PY3ENT:) unknown flavour code')
37546  
37547 C...Find masses. Reset K, P and V vectors.
37548       PM1=0D0
37549       IF(MSTU(10).EQ.1) PM1=P(IPA,5)
37550       IF(MSTU(10).GE.2) PM1=PYMASS(KF1)
37551       PM2=0D0
37552       IF(MSTU(10).EQ.1) PM2=P(IPA+1,5)
37553       IF(MSTU(10).GE.2) PM2=PYMASS(KF2)
37554       PM3=0D0
37555       IF(MSTU(10).EQ.1) PM3=P(IPA+2,5)
37556       IF(MSTU(10).GE.2) PM3=PYMASS(KF3)
37557       DO 110 I=IPA,IPA+2
37558         DO 100 J=1,5
37559           K(I,J)=0
37560           P(I,J)=0D0
37561           V(I,J)=0D0
37562   100   CONTINUE
37563   110 CONTINUE
37564  
37565 C...Check flavours.
37566       KQ1=KCHG(KC1,2)*ISIGN(1,KF1)
37567       KQ2=KCHG(KC2,2)*ISIGN(1,KF2)
37568       KQ3=KCHG(KC3,2)*ISIGN(1,KF3)
37569       IF(MSTU(19).EQ.1) THEN
37570         MSTU(19)=0
37571       ELSEIF(KQ1.EQ.0.AND.KQ2.EQ.0.AND.KQ3.EQ.0) THEN
37572       ELSEIF(KQ1.NE.0.AND.KQ2.EQ.2.AND.(KQ1+KQ3.EQ.0.OR.
37573      &  KQ1+KQ3.EQ.4)) THEN
37574       ELSE
37575         CALL PYERRM(2,'(PY3ENT:) unphysical flavour combination')
37576       ENDIF
37577       K(IPA,2)=KF1
37578       K(IPA+1,2)=KF2
37579       K(IPA+2,2)=KF3
37580  
37581 C...Store partons/particles in K vectors for normal case.
37582       IF(IP.GE.0) THEN
37583         K(IPA,1)=1
37584         IF(KQ1.NE.0.AND.(KQ2.NE.0.OR.KQ3.NE.0)) K(IPA,1)=2
37585         K(IPA+1,1)=1
37586         IF(KQ2.NE.0.AND.KQ3.NE.0) K(IPA+1,1)=2
37587         K(IPA+2,1)=1
37588  
37589 C...Store partons in K vectors for parton shower evolution.
37590       ELSE
37591         K(IPA,1)=3
37592         K(IPA+1,1)=3
37593         K(IPA+2,1)=3
37594         KCS=4
37595         IF(KQ1.EQ.-1) KCS=5
37596         K(IPA,KCS)=MSTU(5)*(IPA+1)
37597         K(IPA,9-KCS)=MSTU(5)*(IPA+2)
37598         K(IPA+1,KCS)=MSTU(5)*(IPA+2)
37599         K(IPA+1,9-KCS)=MSTU(5)*IPA
37600         K(IPA+2,KCS)=MSTU(5)*IPA
37601         K(IPA+2,9-KCS)=MSTU(5)*(IPA+1)
37602       ENDIF
37603  
37604 C...Check kinematics.
37605       MKERR=0
37606       IF(0.5D0*X1*PECM.LE.PM1.OR.0.5D0*(2D0-X1-X3)*PECM.LE.PM2.OR.
37607      &0.5D0*X3*PECM.LE.PM3) MKERR=1
37608       PA1=SQRT(MAX(1D-10,(0.5D0*X1*PECM)**2-PM1**2))
37609       PA2=SQRT(MAX(1D-10,(0.5D0*(2D0-X1-X3)*PECM)**2-PM2**2))
37610       PA3=SQRT(MAX(1D-10,(0.5D0*X3*PECM)**2-PM3**2))
37611       CTHE2=(PA3**2-PA1**2-PA2**2)/(2D0*PA1*PA2)
37612       CTHE3=(PA2**2-PA1**2-PA3**2)/(2D0*PA1*PA3)
37613       IF(ABS(CTHE2).GE.1.001D0.OR.ABS(CTHE3).GE.1.001D0) MKERR=1
37614       CTHE3=MAX(-1D0,MIN(1D0,CTHE3))
37615       IF(MKERR.NE.0) CALL PYERRM(13,
37616      &'(PY3ENT:) unphysical kinematical variable setup')
37617  
37618 C...Store partons/particles in P vectors.
37619       P(IPA,3)=PA1
37620       P(IPA,4)=SQRT(PA1**2+PM1**2)
37621       P(IPA,5)=PM1
37622       P(IPA+2,1)=PA3*SQRT(1D0-CTHE3**2)
37623       P(IPA+2,3)=PA3*CTHE3
37624       P(IPA+2,4)=SQRT(PA3**2+PM3**2)
37625       P(IPA+2,5)=PM3
37626       P(IPA+1,1)=-P(IPA+2,1)
37627       P(IPA+1,3)=-P(IPA,3)-P(IPA+2,3)
37628       P(IPA+1,4)=SQRT(P(IPA+1,1)**2+P(IPA+1,3)**2+PM2**2)
37629       P(IPA+1,5)=PM2
37630  
37631 C...Set N. Optionally fragment/decay.
37632       N=IPA+2
37633       IF(IP.EQ.0) CALL PYEXEC
37634  
37635       RETURN
37636       END
37637  
37638 C*********************************************************************
37639  
37640 C...PY4ENT
37641 C...Stores four partons or particles in their CM frame, with
37642 C...the first along the +z axis, the last in the xz plane with x > 0
37643 C...and the second having y < 0 and y > 0 with equal probability.
37644  
37645       SUBROUTINE PY4ENT(IP,KF1,KF2,KF3,KF4,PECM,X1,X2,X4,X12,X14)
37646  
37647 C...Double precision and integer declarations.
37648       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37649       IMPLICIT INTEGER(I-N)
37650       INTEGER PYK,PYCHGE,PYCOMP
37651 C...Commonblocks.
37652       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37653       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37654       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
37655       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
37656  
37657 C...Standard checks.
37658       MSTU(28)=0
37659       IF(MSTU(12).GE.1) CALL PYLIST(0)
37660       IPA=MAX(1,IABS(IP))
37661       IF(IPA.GT.MSTU(4)-3) CALL PYERRM(21,
37662      &'(PY4ENT:) writing outside PYJETS momory')
37663       KC1=PYCOMP(KF1)
37664       KC2=PYCOMP(KF2)
37665       KC3=PYCOMP(KF3)
37666       KC4=PYCOMP(KF4)
37667       IF(KC1.EQ.0.OR.KC2.EQ.0.OR.KC3.EQ.0.OR.KC4.EQ.0) CALL PYERRM(12,
37668      &'(PY4ENT:) unknown flavour code')
37669  
37670 C...Find masses. Reset K, P and V vectors.
37671       PM1=0D0
37672       IF(MSTU(10).EQ.1) PM1=P(IPA,5)
37673       IF(MSTU(10).GE.2) PM1=PYMASS(KF1)
37674       PM2=0D0
37675       IF(MSTU(10).EQ.1) PM2=P(IPA+1,5)
37676       IF(MSTU(10).GE.2) PM2=PYMASS(KF2)
37677       PM3=0D0
37678       IF(MSTU(10).EQ.1) PM3=P(IPA+2,5)
37679       IF(MSTU(10).GE.2) PM3=PYMASS(KF3)
37680       PM4=0D0
37681       IF(MSTU(10).EQ.1) PM4=P(IPA+3,5)
37682       IF(MSTU(10).GE.2) PM4=PYMASS(KF4)
37683       DO 110 I=IPA,IPA+3
37684         DO 100 J=1,5
37685           K(I,J)=0
37686           P(I,J)=0D0
37687           V(I,J)=0D0
37688   100   CONTINUE
37689   110 CONTINUE
37690  
37691 C...Check flavours.
37692       KQ1=KCHG(KC1,2)*ISIGN(1,KF1)
37693       KQ2=KCHG(KC2,2)*ISIGN(1,KF2)
37694       KQ3=KCHG(KC3,2)*ISIGN(1,KF3)
37695       KQ4=KCHG(KC4,2)*ISIGN(1,KF4)
37696       IF(MSTU(19).EQ.1) THEN
37697         MSTU(19)=0
37698       ELSEIF(KQ1.EQ.0.AND.KQ2.EQ.0.AND.KQ3.EQ.0.AND.KQ4.EQ.0) THEN
37699       ELSEIF(KQ1.NE.0.AND.KQ2.EQ.2.AND.KQ3.EQ.2.AND.(KQ1+KQ4.EQ.0.OR.
37700      &  KQ1+KQ4.EQ.4)) THEN
37701       ELSEIF(KQ1.NE.0.AND.KQ1+KQ2.EQ.0.AND.KQ3.NE.0.AND.KQ3+KQ4.EQ.0D0)
37702      &  THEN
37703       ELSE
37704         CALL PYERRM(2,'(PY4ENT:) unphysical flavour combination')
37705       ENDIF
37706       K(IPA,2)=KF1
37707       K(IPA+1,2)=KF2
37708       K(IPA+2,2)=KF3
37709       K(IPA+3,2)=KF4
37710  
37711 C...Store partons/particles in K vectors for normal case.
37712       IF(IP.GE.0) THEN
37713         K(IPA,1)=1
37714         IF(KQ1.NE.0.AND.(KQ2.NE.0.OR.KQ3.NE.0.OR.KQ4.NE.0)) K(IPA,1)=2
37715         K(IPA+1,1)=1
37716         IF(KQ2.NE.0.AND.KQ1+KQ2.NE.0.AND.(KQ3.NE.0.OR.KQ4.NE.0))
37717      &  K(IPA+1,1)=2
37718         K(IPA+2,1)=1
37719         IF(KQ3.NE.0.AND.KQ4.NE.0) K(IPA+2,1)=2
37720         K(IPA+3,1)=1
37721  
37722 C...Store partons for parton shower evolution from q-g-g-qbar or
37723 C...g-g-g-g event.
37724       ELSEIF(KQ1+KQ2.NE.0) THEN
37725         K(IPA,1)=3
37726         K(IPA+1,1)=3
37727         K(IPA+2,1)=3
37728         K(IPA+3,1)=3
37729         KCS=4
37730         IF(KQ1.EQ.-1) KCS=5
37731         K(IPA,KCS)=MSTU(5)*(IPA+1)
37732         K(IPA,9-KCS)=MSTU(5)*(IPA+3)
37733         K(IPA+1,KCS)=MSTU(5)*(IPA+2)
37734         K(IPA+1,9-KCS)=MSTU(5)*IPA
37735         K(IPA+2,KCS)=MSTU(5)*(IPA+3)
37736         K(IPA+2,9-KCS)=MSTU(5)*(IPA+1)
37737         K(IPA+3,KCS)=MSTU(5)*IPA
37738         K(IPA+3,9-KCS)=MSTU(5)*(IPA+2)
37739  
37740 C...Store partons for parton shower evolution from q-qbar-q-qbar event.
37741       ELSE
37742         K(IPA,1)=3
37743         K(IPA+1,1)=3
37744         K(IPA+2,1)=3
37745         K(IPA+3,1)=3
37746         K(IPA,4)=MSTU(5)*(IPA+1)
37747         K(IPA,5)=K(IPA,4)
37748         K(IPA+1,4)=MSTU(5)*IPA
37749         K(IPA+1,5)=K(IPA+1,4)
37750         K(IPA+2,4)=MSTU(5)*(IPA+3)
37751         K(IPA+2,5)=K(IPA+2,4)
37752         K(IPA+3,4)=MSTU(5)*(IPA+2)
37753         K(IPA+3,5)=K(IPA+3,4)
37754       ENDIF
37755  
37756 C...Check kinematics.
37757       MKERR=0
37758       IF(0.5D0*X1*PECM.LE.PM1.OR.0.5D0*X2*PECM.LE.PM2.OR.
37759      &0.5D0*(2D0-X1-X2-X4)*PECM.LE.PM3.OR.0.5D0*X4*PECM.LE.PM4)
37760      &MKERR=1
37761       PA1=SQRT(MAX(1D-10,(0.5D0*X1*PECM)**2-PM1**2))
37762       PA2=SQRT(MAX(1D-10,(0.5D0*X2*PECM)**2-PM2**2))
37763       PA4=SQRT(MAX(1D-10,(0.5D0*X4*PECM)**2-PM4**2))
37764       X24=X1+X2+X4-1D0-X12-X14+(PM3**2-PM1**2-PM2**2-PM4**2)/PECM**2
37765       CTHE4=(X1*X4-2D0*X14)*PECM**2/(4D0*PA1*PA4)
37766       IF(ABS(CTHE4).GE.1.002D0) MKERR=1
37767       CTHE4=MAX(-1D0,MIN(1D0,CTHE4))
37768       STHE4=SQRT(1D0-CTHE4**2)
37769       CTHE2=(X1*X2-2D0*X12)*PECM**2/(4D0*PA1*PA2)
37770       IF(ABS(CTHE2).GE.1.002D0) MKERR=1
37771       CTHE2=MAX(-1D0,MIN(1D0,CTHE2))
37772       STHE2=SQRT(1D0-CTHE2**2)
37773       CPHI2=((X2*X4-2D0*X24)*PECM**2-4D0*PA2*CTHE2*PA4*CTHE4)/
37774      &MAX(1D-8*PECM**2,4D0*PA2*STHE2*PA4*STHE4)
37775       IF(ABS(CPHI2).GE.1.05D0) MKERR=1
37776       CPHI2=MAX(-1D0,MIN(1D0,CPHI2))
37777       IF(MKERR.EQ.1) CALL PYERRM(13,
37778      &'(PY4ENT:) unphysical kinematical variable setup')
37779  
37780 C...Store partons/particles in P vectors.
37781       P(IPA,3)=PA1
37782       P(IPA,4)=SQRT(PA1**2+PM1**2)
37783       P(IPA,5)=PM1
37784       P(IPA+3,1)=PA4*STHE4
37785       P(IPA+3,3)=PA4*CTHE4
37786       P(IPA+3,4)=SQRT(PA4**2+PM4**2)
37787       P(IPA+3,5)=PM4
37788       P(IPA+1,1)=PA2*STHE2*CPHI2
37789       P(IPA+1,2)=PA2*STHE2*SQRT(1D0-CPHI2**2)*(-1D0)**INT(PYR(0)+0.5D0)
37790       P(IPA+1,3)=PA2*CTHE2
37791       P(IPA+1,4)=SQRT(PA2**2+PM2**2)
37792       P(IPA+1,5)=PM2
37793       P(IPA+2,1)=-P(IPA+1,1)-P(IPA+3,1)
37794       P(IPA+2,2)=-P(IPA+1,2)
37795       P(IPA+2,3)=-P(IPA,3)-P(IPA+1,3)-P(IPA+3,3)
37796       P(IPA+2,4)=SQRT(P(IPA+2,1)**2+P(IPA+2,2)**2+P(IPA+2,3)**2+PM3**2)
37797       P(IPA+2,5)=PM3
37798  
37799 C...Set N. Optionally fragment/decay.
37800       N=IPA+3
37801       IF(IP.EQ.0) CALL PYEXEC
37802  
37803       RETURN
37804       END
37805
37806 C*********************************************************************
37807  
37808 C...PY2FRM
37809 C...An interface from a two-fermion generator to include
37810 C...parton showers and hadronization.
37811  
37812       SUBROUTINE PY2FRM(IRAD,ITAU,ICOM)
37813
37814 C...Double precision and integer declarations.
37815       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37816       IMPLICIT INTEGER(I-N)
37817       INTEGER PYK,PYCHGE,PYCOMP
37818 C...Commonblocks.
37819       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37820       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37821       SAVE /PYJETS/,/PYDAT1/
37822 C...Local arrays.
37823       DIMENSION IJOIN(2),INTAU(2)
37824  
37825 C...Call PYHEPC to convert input from HEPEVT to PYJETS common.
37826       IF(ICOM.EQ.0) THEN 
37827         MSTU(28)=0
37828         CALL PYHEPC(2)
37829       ENDIF
37830  
37831 C...Loop through entries and pick up all final fermions/antifermions.
37832       I1=0
37833       I2=0
37834       DO 100 I=1,N
37835       IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
37836       KFA=IABS(K(I,2))
37837       IF((KFA.GE.1.AND.KFA.LE.6).OR.(KFA.GE.11.AND.KFA.LE.16)) THEN
37838         IF(K(I,2).GT.0) THEN
37839           IF(I1.EQ.0) THEN
37840             I1=I
37841           ELSE
37842             CALL PYERRM(16,'(PY2FRM:) more than one fermion')
37843           ENDIF
37844         ELSE
37845           IF(I2.EQ.0) THEN
37846             I2=I
37847           ELSE
37848             CALL PYERRM(16,'(PY2FRM:) more than one antifermion')
37849           ENDIF
37850         ENDIF
37851       ENDIF
37852   100 CONTINUE
37853  
37854 C...Check that event is arranged according to conventions.
37855       IF(I1.EQ.0.OR.I2.EQ.0) THEN
37856         CALL PYERRM(16,'(PY2FRM:) event contains too few fermions')
37857       ENDIF
37858       IF(I2.LT.I1) THEN
37859         CALL PYERRM(6,'(PY2FRM:) fermions arranged in wrong order')
37860       ENDIF
37861  
37862 C...Check whether fermion pair is quarks or leptons.
37863       IF(IABS(K(I1,2)).LT.10.AND.IABS(K(I2,2)).LT.10) THEN
37864         IQL12=1
37865       ELSEIF(IABS(K(I1,2)).GT.10.AND.IABS(K(I2,2)).GT.10) THEN
37866         IQL12=2
37867       ELSE
37868         CALL PYERRM(16,'(PY2FRM:) fermion pair inconsistent')
37869       ENDIF
37870  
37871 C...Decide whether to allow or not photon radiation in showers.
37872       MSTJ(41)=2
37873       IF(IRAD.EQ.0) MSTJ(41)=1
37874  
37875 C...Do colour joining and parton showers.
37876       IP1=I1
37877       IP2=I2 
37878       IF(IQL12.EQ.1) THEN 
37879         IJOIN(1)=IP1
37880         IJOIN(2)=IP2
37881         CALL PYJOIN(2,IJOIN)
37882       ENDIF
37883       IF(IQL12.EQ.1.OR.IRAD.EQ.1) THEN
37884         PM12S=(P(IP1,4)+P(IP2,4))**2-(P(IP1,1)+P(IP2,1))**2-
37885      &  (P(IP1,2)+P(IP2,2))**2-(P(IP1,3)+P(IP2,3))**2
37886         CALL PYSHOW(IP1,IP2,SQRT(MAX(0D0,PM12S)))
37887       ENDIF
37888  
37889 C...Do fragmentation and decays. Possibly except tau decay.
37890       IF(ITAU.EQ.0) THEN
37891         NTAU=0
37892         DO 110 I=1,N
37893         IF(IABS(K(I,2)).EQ.15.AND.K(I,1).EQ.1) THEN
37894           NTAU=NTAU+1
37895           INTAU(NTAU)=I
37896           K(I,1)=11
37897         ENDIF
37898   110   CONTINUE
37899       ENDIF       
37900       CALL PYEXEC
37901       IF(ITAU.EQ.0) THEN
37902         DO 120 I=1,NTAU
37903         K(INTAU(I),1)=1
37904   120   CONTINUE
37905       ENDIF       
37906  
37907 C...Call PYHEPC to convert output from PYJETS to HEPEVT common.
37908       IF(ICOM.EQ.0) THEN 
37909         MSTU(28)=0
37910         CALL PYHEPC(1)
37911       ENDIF
37912  
37913       END
37914  
37915 C*********************************************************************
37916  
37917 C...PY4FRM
37918 C...An interface from a four-fermion generator to include
37919 C...parton showers and hadronization.
37920  
37921       SUBROUTINE PY4FRM(ATOTSQ,A1SQ,A2SQ,ISTRAT,IRAD,ITAU,ICOM)
37922
37923 C...Double precision and integer declarations.
37924       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37925       IMPLICIT INTEGER(I-N)
37926       INTEGER PYK,PYCHGE,PYCOMP
37927 C...Commonblocks.
37928       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37929       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37930       SAVE /PYJETS/,/PYDAT1/
37931 C...Local arrays.
37932       DIMENSION IJOIN(2),INTAU(4)
37933  
37934 C...Call PYHEPC to convert input from HEPEVT to PYJETS common.
37935       IF(ICOM.EQ.0) THEN 
37936         MSTU(28)=0
37937         CALL PYHEPC(2)
37938       ENDIF
37939  
37940 C...Loop through entries and pick up all final fermions/antifermions.
37941       I1=0
37942       I2=0
37943       I3=0
37944       I4=0
37945       DO 100 I=1,N
37946       IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
37947       KFA=IABS(K(I,2))
37948       IF((KFA.GE.1.AND.KFA.LE.6).OR.(KFA.GE.11.AND.KFA.LE.16)) THEN
37949         IF(K(I,2).GT.0) THEN
37950           IF(I1.EQ.0) THEN
37951             I1=I
37952           ELSEIF(I3.EQ.0) THEN
37953             I3=I
37954           ELSE
37955             CALL PYERRM(16,'(PY4FRM:) more than two fermions')
37956           ENDIF
37957         ELSE
37958           IF(I2.EQ.0) THEN
37959             I2=I
37960           ELSEIF(I4.EQ.0) THEN
37961             I4=I
37962           ELSE
37963             CALL PYERRM(16,'(PY4FRM:) more than two antifermions')
37964           ENDIF
37965         ENDIF
37966       ENDIF
37967   100 CONTINUE
37968  
37969 C...Check that event is arranged according to conventions.
37970       IF(I3.EQ.0.OR.I4.EQ.0) THEN
37971         CALL PYERRM(16,'(PY4FRM:) event contains too few fermions')
37972       ENDIF
37973       IF(I2.LT.I1.OR.I3.LT.I2.OR.I4.LT.I3) THEN
37974         CALL PYERRM(6,'(PY4FRM:) fermions arranged in wrong order')
37975       ENDIF
37976  
37977 C...Check which fermion pairs are quarks and which leptons.
37978       IF(IABS(K(I1,2)).LT.10.AND.IABS(K(I2,2)).LT.10) THEN
37979         IQL12=1
37980       ELSEIF(IABS(K(I1,2)).GT.10.AND.IABS(K(I2,2)).GT.10) THEN
37981         IQL12=2
37982       ELSE
37983         CALL PYERRM(16,'(PY4FRM:) first fermion pair inconsistent')
37984       ENDIF
37985       IF(IABS(K(I3,2)).LT.10.AND.IABS(K(I4,2)).LT.10) THEN
37986         IQL34=1
37987       ELSEIF(IABS(K(I3,2)).GT.10.AND.IABS(K(I4,2)).GT.10) THEN
37988         IQL34=2
37989       ELSE
37990         CALL PYERRM(16,'(PY4FRM:) second fermion pair inconsistent')
37991       ENDIF
37992  
37993 C...Decide whether to allow or not photon radiation in showers.
37994       MSTJ(41)=2
37995       IF(IRAD.EQ.0) MSTJ(41)=1
37996  
37997 C...Decide on dipole pairing.
37998       IP1=I1
37999       IP2=I2
38000       IP3=I3
38001       IP4=I4
38002       IF(IQL12.EQ.IQL34) THEN
38003         R1SQ=A1SQ
38004         R2SQ=A2SQ
38005         DELTA=ATOTSQ-A1SQ-A2SQ
38006         IF(ISTRAT.EQ.1) THEN
38007           IF(DELTA.GT.0D0) R1SQ=R1SQ+DELTA
38008           IF(DELTA.LT.0D0) R2SQ=MAX(0D0,R2SQ+DELTA)
38009         ELSEIF(ISTRAT.EQ.2) THEN
38010           IF(DELTA.GT.0D0) R2SQ=R2SQ+DELTA
38011           IF(DELTA.LT.0D0) R1SQ=MAX(0D0,R1SQ+DELTA)
38012         ENDIF
38013         IF(R2SQ.GT.PYR(0)*(R1SQ+R2SQ)) THEN
38014           IP2=I4
38015           IP4=I2
38016         ENDIF
38017       ENDIF
38018  
38019 C...Do colour joinings and parton showers.
38020       IF(IQL12.EQ.1) THEN 
38021         IJOIN(1)=IP1
38022         IJOIN(2)=IP2
38023         CALL PYJOIN(2,IJOIN)
38024       ENDIF
38025       IF(IQL12.EQ.1.OR.IRAD.EQ.1) THEN
38026         PM12S=(P(IP1,4)+P(IP2,4))**2-(P(IP1,1)+P(IP2,1))**2-
38027      &  (P(IP1,2)+P(IP2,2))**2-(P(IP1,3)+P(IP2,3))**2
38028         CALL PYSHOW(IP1,IP2,SQRT(MAX(0D0,PM12S)))
38029       ENDIF
38030       IF(IQL34.EQ.1) THEN
38031         IJOIN(1)=IP3
38032         IJOIN(2)=IP4
38033         CALL PYJOIN(2,IJOIN)
38034       ENDIF
38035       IF(IQL34.EQ.1.OR.IRAD.EQ.1) THEN        
38036         PM34S=(P(IP3,4)+P(IP4,4))**2-(P(IP3,1)+P(IP4,1))**2-
38037      &  (P(IP3,2)+P(IP4,2))**2-(P(IP3,3)+P(IP4,3))**2
38038         CALL PYSHOW(IP3,IP4,SQRT(MAX(0D0,PM34S)))
38039       ENDIF
38040  
38041 C...Do fragmentation and decays. Possibly except tau decay.
38042       IF(ITAU.EQ.0) THEN
38043         NTAU=0
38044         DO 110 I=1,N
38045         IF(IABS(K(I,2)).EQ.15.AND.K(I,1).EQ.1) THEN
38046           NTAU=NTAU+1
38047           INTAU(NTAU)=I
38048           K(I,1)=11
38049         ENDIF
38050   110   CONTINUE
38051       ENDIF       
38052       CALL PYEXEC
38053       IF(ITAU.EQ.0) THEN
38054         DO 120 I=1,NTAU
38055         K(INTAU(I),1)=1
38056   120   CONTINUE
38057       ENDIF       
38058  
38059 C...Call PYHEPC to convert output from PYJETS to HEPEVT common.
38060       IF(ICOM.EQ.0) THEN 
38061         MSTU(28)=0
38062         CALL PYHEPC(1)
38063       ENDIF
38064  
38065       END
38066   
38067 C*********************************************************************
38068  
38069 C...PY6FRM
38070 C...An interface from a six-fermion generator to include
38071 C...parton showers and hadronization.
38072  
38073       SUBROUTINE PY6FRM(P12,P13,P21,P23,P31,P32,PTOP,IRAD,ITAU,ICOM)
38074
38075 C...Double precision and integer declarations.
38076       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
38077       IMPLICIT INTEGER(I-N)
38078       INTEGER PYK,PYCHGE,PYCOMP
38079 C...Commonblocks.
38080       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
38081       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
38082       SAVE /PYJETS/,/PYDAT1/
38083 C...Local arrays.
38084       DIMENSION IJOIN(2),INTAU(6),BETA(3),BETAO(3),BETAN(3)
38085  
38086 C...Call PYHEPC to convert input from HEPEVT to PYJETS common.
38087       IF(ICOM.EQ.0) THEN
38088         MSTU(28)=0
38089         CALL PYHEPC(2)
38090       ENDIF
38091  
38092 C...Loop through entries and pick up all final fermions/antifermions.
38093       I1=0
38094       I2=0
38095       I3=0
38096       I4=0
38097       I5=0
38098       I6=0
38099       DO 100 I=1,N
38100       IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
38101       KFA=IABS(K(I,2))
38102       IF((KFA.GE.1.AND.KFA.LE.6).OR.(KFA.GE.11.AND.KFA.LE.16)) THEN
38103         IF(K(I,2).GT.0) THEN
38104           IF(I1.EQ.0) THEN
38105             I1=I
38106           ELSEIF(I3.EQ.0) THEN
38107             I3=I
38108           ELSEIF(I5.EQ.0) THEN
38109             I5=I
38110           ELSE
38111             CALL PYERRM(16,'(PY6FRM:) more than three fermions')
38112           ENDIF
38113         ELSE
38114           IF(I2.EQ.0) THEN
38115             I2=I
38116           ELSEIF(I4.EQ.0) THEN
38117             I4=I
38118           ELSEIF(I6.EQ.0) THEN
38119             I6=I
38120           ELSE
38121             CALL PYERRM(16,'(PY6FRM:) more than three antifermions')
38122           ENDIF
38123         ENDIF
38124       ENDIF
38125   100 CONTINUE
38126  
38127 C...Check that event is arranged according to conventions.
38128       IF(I5.EQ.0.OR.I6.EQ.0) THEN
38129         CALL PYERRM(16,'(PY6FRM:) event contains too few fermions')
38130       ENDIF
38131       IF(I2.LT.I1.OR.I3.LT.I2.OR.I4.LT.I3.OR.I5.LT.I4.OR.I6.LT.I5) THEN
38132         CALL PYERRM(6,'(PY6FRM:) fermions arranged in wrong order')
38133       ENDIF
38134  
38135 C...Check which fermion pairs are quarks and which leptons.
38136       IF(IABS(K(I1,2)).LT.10.AND.IABS(K(I2,2)).LT.10) THEN
38137         IQL12=1
38138       ELSEIF(IABS(K(I1,2)).GT.10.AND.IABS(K(I2,2)).GT.10) THEN
38139         IQL12=2
38140       ELSE
38141         CALL PYERRM(16,'(PY6FRM:) first fermion pair inconsistent')
38142       ENDIF
38143       IF(IABS(K(I3,2)).LT.10.AND.IABS(K(I4,2)).LT.10) THEN
38144         IQL34=1
38145       ELSEIF(IABS(K(I3,2)).GT.10.AND.IABS(K(I4,2)).GT.10) THEN
38146         IQL34=2
38147       ELSE
38148         CALL PYERRM(16,'(PY6FRM:) second fermion pair inconsistent')
38149       ENDIF
38150       IF(IABS(K(I5,2)).LT.10.AND.IABS(K(I6,2)).LT.10) THEN
38151         IQL56=1
38152       ELSEIF(IABS(K(I5,2)).GT.10.AND.IABS(K(I6,2)).GT.10) THEN
38153         IQL56=2
38154       ELSE
38155         CALL PYERRM(16,'(PY6FRM:) third fermion pair inconsistent')
38156       ENDIF
38157  
38158 C...Decide whether to allow or not photon radiation in showers.
38159       MSTJ(41)=2
38160       IF(IRAD.EQ.0) MSTJ(41)=1
38161  
38162 C...Allow dipole pairings only among leptons and quarks separately.
38163       P12D=P12
38164       P13D=0D0
38165       IF(IQL34.EQ.IQL56) P13D=P13
38166       P21D=0D0
38167       IF(IQL12.EQ.IQL34) P21D=P21
38168       P23D=0D0
38169       IF(IQL12.EQ.IQL34.AND.IQL12.EQ.IQL56) P23D=P23
38170       P31D=0D0
38171       IF(IQL12.EQ.IQL34.AND.IQL12.EQ.IQL56) P31D=P31
38172       P32D=0D0
38173       IF(IQL12.EQ.IQL56) P32D=P32
38174  
38175 C...Decide whether t+tbar.
38176       ITOP=0
38177       IF(PYR(0).LT.PTOP) THEN
38178         ITOP=1
38179  
38180 C...If t+tbar: reconstruct t's.
38181         IT=N+1
38182         ITB=N+2
38183         DO 110 J=1,5
38184           K(IT,J)=0
38185           K(ITB,J)=0
38186           P(IT,J)=P(I1,J)+P(I3,J)+P(I4,J)
38187           P(ITB,J)=P(I2,J)+P(I5,J)+P(I6,J)
38188           V(IT,J)=0D0
38189           V(ITB,J)=0D0
38190   110   CONTINUE
38191         K(IT,1)=1
38192         K(ITB,1)=1
38193         K(IT,2)=6
38194         K(ITB,2)=-6
38195         P(IT,5)=SQRT(MAX(0D0,P(IT,4)**2-P(IT,1)**2-P(IT,2)**2-
38196      &  P(IT,3)**2))
38197         P(ITB,5)=SQRT(MAX(0D0,P(ITB,4)**2-P(ITB,1)**2-P(ITB,2)**2-
38198      &  P(ITB,3)**2))
38199         N=N+2
38200  
38201 C...If t+tbar: colour join t's and let them shower.
38202         IJOIN(1)=IT
38203         IJOIN(2)=ITB
38204         CALL PYJOIN(2,IJOIN)
38205         PMTTS=(P(IT,4)+P(ITB,4))**2-(P(IT,1)+P(ITB,1))**2-
38206      &  (P(IT,2)+P(ITB,2))**2-(P(IT,3)+P(ITB,3))**2
38207         CALL PYSHOW(IT,ITB,SQRT(MAX(0D0,PMTTS)))
38208  
38209 C...If t+tbar: pick up the t's after shower.
38210         ITNEW=IT
38211         ITBNEW=ITB
38212         DO 120 I=ITB+1,N
38213           IF(K(I,2).EQ.6) ITNEW=I
38214           IF(K(I,2).EQ.-6) ITBNEW=I
38215   120   CONTINUE
38216  
38217 C...If t+tbar: loop over two top systems.
38218         DO 200 IT1=1,2
38219           IF(IT1.EQ.1) THEN
38220             ITO=IT
38221             ITN=ITNEW
38222             IBO=I1
38223             IW1=I3
38224             IW2=I4
38225           ELSE
38226             ITO=ITB
38227             ITN=ITBNEW
38228             IBO=I2
38229             IW1=I5
38230             IW2=I6
38231           ENDIF
38232           IF(IABS(K(IBO,2)).NE.5) CALL PYERRM(6,
38233      &    '(PY6FRM:) not b in t decay')
38234  
38235 C...If t+tbar: find boost from original to new top frame.
38236           DO 130 J=1,3
38237             BETAO(J)=P(ITO,J)/P(ITO,4)
38238             BETAN(J)=P(ITN,J)/P(ITN,4)
38239   130     CONTINUE
38240  
38241 C...If t+tbar: boost copy of b by t shower and connect it in colour.
38242           N=N+1
38243           IB=N
38244           K(IB,1)=3
38245           K(IB,2)=K(IBO,2)
38246           K(IB,3)=ITN
38247           DO 140 J=1,5
38248             P(IB,J)=P(IBO,J)
38249             V(IB,J)=0D0
38250   140     CONTINUE
38251           CALL PYROBO(IB,IB,0D0,0D0,-BETAO(1),-BETAO(2),-BETAO(3))
38252           CALL PYROBO(IB,IB,0D0,0D0,BETAN(1),BETAN(2),BETAN(3))
38253           K(IB,4)=MSTU(5)*ITN
38254           K(IB,5)=MSTU(5)*ITN
38255           K(ITN,4)=K(ITN,4)+IB
38256           K(ITN,5)=K(ITN,5)+IB
38257           K(ITN,1)=K(ITN,1)+10
38258           K(IBO,1)=K(IBO,1)+10
38259  
38260 C...If t+tbar: construct W recoiling against b.
38261           N=N+1
38262           IW=N
38263           DO 150 J=1,5
38264             K(IW,J)=0
38265             V(IW,J)=0D0
38266   150     CONTINUE
38267           K(IW,1)=1
38268           KCHW=PYCHGE(K(IW1,2))+PYCHGE(K(IW2,2))
38269           IF(IABS(KCHW).EQ.3) THEN
38270             K(IW,2)=ISIGN(24,KCHW)
38271           ELSE
38272             CALL PYERRM(16,'(PY6FRM:) fermion pair inconsistent with W')
38273           ENDIF
38274           K(IW,3)=IW1
38275  
38276 C...If t+tbar: construct W momentum, including boost by t shower.
38277           DO 160 J=1,4
38278             P(IW,J)=P(IW1,J)+P(IW2,J)
38279   160     CONTINUE
38280           P(IW,5)=SQRT(MAX(0D0,P(IW,4)**2-P(IW,1)**2-P(IW,2)**2-
38281      &    P(IW,3)**2))
38282           CALL PYROBO(IW,IW,0D0,0D0,-BETAO(1),-BETAO(2),-BETAO(3))
38283           CALL PYROBO(IW,IW,0D0,0D0,BETAN(1),BETAN(2),BETAN(3))
38284  
38285 C...If t+tbar: boost b and W to top rest frame.
38286           DO 170 J=1,3
38287             BETA(J)=(P(IB,J)+P(IW,J))/(P(IB,4)+P(IW,4))
38288   170     CONTINUE
38289           CALL PYROBO(IB,IB,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38290           CALL PYROBO(IW,IW,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38291  
38292 C...If t+tbar: let b shower and pick up modified W.
38293           PMTS=(P(IB,4)+P(IW,4))**2-(P(IB,1)+P(IW,1))**2-
38294      &    (P(IB,2)+P(IW,2))**2-(P(IB,3)+P(IW,3))**2
38295           CALL PYSHOW(IB,IW,SQRT(MAX(0D0,PMTS)))
38296           DO 180 I=IW,N
38297             IF(IABS(K(I,2)).EQ.24) IWM=I
38298   180     CONTINUE
38299  
38300 C...If t+tbar: take copy of W decay products.
38301           DO 190 J=1,5
38302             K(N+1,J)=K(IW1,J)
38303             P(N+1,J)=P(IW1,J)
38304             V(N+1,J)=V(IW1,J)
38305             K(N+2,J)=K(IW2,J)
38306             P(N+2,J)=P(IW2,J)
38307             V(N+2,J)=V(IW2,J)
38308   190     CONTINUE
38309           K(IW1,1)=K(IW1,1)+10
38310           K(IW2,1)=K(IW2,1)+10
38311           K(IWM,1)=K(IWM,1)+10
38312           K(IWM,4)=N+1
38313           K(IWM,5)=N+2
38314           K(N+1,3)=IWM
38315           K(N+2,3)=IWM
38316           IF(IT1.EQ.1) THEN
38317             I3=N+1
38318             I4=N+2
38319           ELSE
38320             I5=N+1
38321             I6=N+2
38322           ENDIF
38323           N=N+2
38324  
38325 C...If t+tbar: boost W decay products, first by effects of t shower,
38326 C...then by those of b shower. b and its shower simple boost back.
38327           CALL PYROBO(N-1,N,0D0,0D0,-BETAO(1),-BETAO(2),-BETAO(3))
38328           CALL PYROBO(N-1,N,0D0,0D0,BETAN(1),BETAN(2),BETAN(3))
38329           CALL PYROBO(N-1,N,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38330           CALL PYROBO(N-1,N,0D0,0D0,-P(IW,1)/P(IW,4),
38331      &    -P(IW,2)/P(IW,4),-P(IW,3)/P(IW,4))
38332           CALL PYROBO(N-1,N,0D0,0D0,P(IWM,1)/P(IWM,4),
38333      &    P(IWM,2)/P(IWM,4),P(IWM,3)/P(IWM,4))
38334           CALL PYROBO(IB,IB,0D0,0D0,BETA(1),BETA(2),BETA(3))
38335           CALL PYROBO(IW,N,0D0,0D0,BETA(1),BETA(2),BETA(3))
38336   200   CONTINUE
38337       ENDIF
38338  
38339 C...Decide on dipole pairing.
38340       IP1=I1
38341       IP3=I3
38342       IP5=I5
38343       PRN=PYR(0)*(P12D+P13D+P21D+P23D+P31D+P32D)
38344       IF(ITOP.EQ.1.OR.PRN.LT.P12D) THEN
38345         IP2=I2
38346         IP4=I4
38347         IP6=I6
38348       ELSEIF(PRN.LT.P12D+P13D) THEN
38349         IP2=I2
38350         IP4=I6
38351         IP6=I4
38352       ELSEIF(PRN.LT.P12D+P13D+P21D) THEN
38353         IP2=I4
38354         IP4=I2
38355         IP6=I6
38356       ELSEIF(PRN.LT.P12D+P13D+P21D+P23D) THEN
38357         IP2=I4
38358         IP4=I6
38359         IP6=I2
38360       ELSEIF(PRN.LT.P12D+P13D+P21D+P23D+P31D) THEN
38361         IP2=I6
38362         IP4=I2
38363         IP6=I4
38364       ELSE
38365         IP2=I6
38366         IP4=I4
38367         IP6=I2
38368       ENDIF
38369  
38370 C...Do colour joinings and parton showers
38371 C...(except ones already made for t+tbar).
38372       IF(ITOP.EQ.0) THEN
38373         IF(IQL12.EQ.1) THEN
38374           IJOIN(1)=IP1
38375           IJOIN(2)=IP2
38376           CALL PYJOIN(2,IJOIN)
38377         ENDIF
38378         IF(IQL12.EQ.1.OR.IRAD.EQ.1) THEN
38379           PM12S=(P(IP1,4)+P(IP2,4))**2-(P(IP1,1)+P(IP2,1))**2-
38380      &    (P(IP1,2)+P(IP2,2))**2-(P(IP1,3)+P(IP2,3))**2
38381           CALL PYSHOW(IP1,IP2,SQRT(MAX(0D0,PM12S)))
38382         ENDIF
38383       ENDIF
38384       IF(IQL34.EQ.1) THEN
38385         IJOIN(1)=IP3
38386         IJOIN(2)=IP4
38387         CALL PYJOIN(2,IJOIN)
38388       ENDIF
38389       IF(IQL34.EQ.1.OR.IRAD.EQ.1) THEN
38390         PM34S=(P(IP3,4)+P(IP4,4))**2-(P(IP3,1)+P(IP4,1))**2-
38391      &  (P(IP3,2)+P(IP4,2))**2-(P(IP3,3)+P(IP4,3))**2
38392         CALL PYSHOW(IP3,IP4,SQRT(MAX(0D0,PM34S)))
38393       ENDIF
38394       IF(IQL56.EQ.1) THEN
38395         IJOIN(1)=IP5
38396         IJOIN(2)=IP6
38397         CALL PYJOIN(2,IJOIN)
38398       ENDIF
38399       IF(IQL56.EQ.1.OR.IRAD.EQ.1) THEN
38400         PM56S=(P(IP5,4)+P(IP6,4))**2-(P(IP5,1)+P(IP6,1))**2-
38401      &  (P(IP5,2)+P(IP6,2))**2-(P(IP5,3)+P(IP6,3))**2
38402         CALL PYSHOW(IP5,IP6,SQRT(MAX(0D0,PM56S)))
38403       ENDIF
38404  
38405 C...Do fragmentation and decays. Possibly except tau decay.
38406       IF(ITAU.EQ.0) THEN
38407         NTAU=0
38408         DO 210 I=1,N
38409         IF(IABS(K(I,2)).EQ.15.AND.K(I,1).EQ.1) THEN
38410           NTAU=NTAU+1
38411           INTAU(NTAU)=I
38412           K(I,1)=11
38413         ENDIF
38414   210   CONTINUE
38415       ENDIF
38416       CALL PYEXEC
38417       IF(ITAU.EQ.0) THEN
38418         DO 220 I=1,NTAU
38419         K(INTAU(I),1)=1
38420   220   CONTINUE
38421       ENDIF
38422  
38423 C...Call PYHEPC to convert output from PYJETS to HEPEVT common.
38424       IF(ICOM.EQ.0) THEN
38425         MSTU(28)=0
38426         CALL PYHEPC(1)
38427       ENDIF
38428  
38429       END
38430   
38431 C*********************************************************************
38432
38433 C...PY4JET
38434 C...An interface from a four-parton generator to include
38435 C...parton showers and hadronization.
38436  
38437       SUBROUTINE PY4JET(PMAX,IRAD,ICOM)
38438
38439 C...Double precision and integer declarations.
38440       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
38441       IMPLICIT INTEGER(I-N)
38442       INTEGER PYK,PYCHGE,PYCOMP
38443 C...Commonblocks.
38444       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
38445       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
38446       SAVE /PYJETS/,/PYDAT1/
38447 C...Local arrays.
38448       DIMENSION IJOIN(2),PTOT(4),BETA(3)
38449  
38450 C...Call PYHEPC to convert input from HEPEVT to PYJETS common.
38451       IF(ICOM.EQ.0) THEN 
38452         MSTU(28)=0
38453         CALL PYHEPC(2)
38454       ENDIF
38455  
38456 C...Loop through entries and pick up all final partons.
38457       I1=0
38458       I2=0
38459       I3=0
38460       I4=0
38461       DO 100 I=1,N
38462       IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
38463       KFA=IABS(K(I,2))
38464       IF((KFA.GE.1.AND.KFA.LE.6).OR.KFA.EQ.21) THEN
38465         IF(K(I,2).GT.0.AND.K(I,2).LE.6) THEN
38466           IF(I1.EQ.0) THEN
38467             I1=I
38468           ELSEIF(I3.EQ.0) THEN
38469             I3=I
38470           ELSE
38471             CALL PYERRM(16,'(PY4JET:) more than two quarks')
38472           ENDIF
38473         ELSEIF(K(I,2).LT.0) THEN
38474           IF(I2.EQ.0) THEN
38475             I2=I
38476           ELSEIF(I4.EQ.0) THEN
38477             I4=I
38478           ELSE
38479             CALL PYERRM(16,'(PY4JET:) more than two antiquarks')
38480           ENDIF
38481         ELSE
38482           IF(I3.EQ.0) THEN
38483             I3=I
38484           ELSEIF(I4.EQ.0) THEN
38485             I4=I
38486           ELSE
38487             CALL PYERRM(16,'(PY4JET:) more than two gluons')
38488           ENDIF
38489         ENDIF
38490       ENDIF
38491   100 CONTINUE
38492  
38493 C...Check that event is arranged according to conventions.
38494       IF(I1.EQ.0.OR.I2.EQ.0.OR.I3.EQ.0.OR.I4.EQ.0) THEN
38495         CALL PYERRM(16,'(PY4JET:) event contains too few partons')
38496       ENDIF
38497       IF(I2.LT.I1.OR.I3.LT.I2.OR.I4.LT.I3) THEN
38498         CALL PYERRM(6,'(PY4JET:) partons arranged in wrong order')
38499       ENDIF
38500  
38501 C...Check whether second pair are quarks or gluons.
38502       IF(IABS(K(I3,2)).LT.10.AND.IABS(K(I4,2)).LT.10) THEN
38503         IQG34=1
38504       ELSEIF(K(I3,2).EQ.21.AND.K(I4,2).EQ.21) THEN
38505         IQG34=2
38506       ELSE
38507         CALL PYERRM(16,'(PY4JET:) second parton pair inconsistent')
38508       ENDIF
38509
38510 C...Boost partons to their cm frame.
38511       DO 110 J=1,4
38512         PTOT(J)=P(I1,J)+P(I2,J)+P(I3,J)+P(I4,J)
38513   110 CONTINUE
38514       ECM=SQRT(MAX(0D0,PTOT(4)**2-PTOT(1)**2-PTOT(2)**2-PTOT(3)**2))
38515       DO 120 J=1,3
38516         BETA(J)=PTOT(J)/PTOT(4)
38517   120 CONTINUE
38518       CALL PYROBO(I1,I1,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38519       CALL PYROBO(I2,I2,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38520       CALL PYROBO(I3,I3,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38521       CALL PYROBO(I4,I4,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38522       NSAV=N
38523  
38524 C...Decide and set up shower history for q qbar q' qbar' events.
38525       IF(IQG34.EQ.1) THEN
38526         W1=PY4JTW(0,I1,I3,I4)        
38527         W2=PY4JTW(0,I2,I3,I4)
38528         IF(W1.GT.PYR(0)*(W1+W2)) THEN
38529           CALL PY4JTS(0,I1,I3,I4,I2,QMAX)
38530         ELSE
38531           CALL PY4JTS(0,I2,I3,I4,I1,QMAX)
38532         ENDIF
38533
38534 C...Decide and set up shower history for q qbar g g events.
38535       ELSE
38536         W1=PY4JTW(I1,I3,I2,I4)        
38537         W2=PY4JTW(I1,I4,I2,I3)
38538         W3=PY4JTW(0,I3,I1,I4)        
38539         W4=PY4JTW(0,I4,I1,I3)        
38540         W5=PY4JTW(0,I3,I2,I4)        
38541         W6=PY4JTW(0,I4,I2,I3)        
38542         W7=PY4JTW(0,I1,I3,I4)        
38543         W8=PY4JTW(0,I2,I3,I4)
38544         WR=(W1+W2+W3+W4+W5+W6+W7+W8)*PYR(0)
38545         IF(W1.GT.WR) THEN
38546           CALL PY4JTS(I1,I3,I2,I4,0,QMAX)
38547         ELSEIF(W1+W2.GT.WR) THEN
38548           CALL PY4JTS(I1,I4,I2,I3,0,QMAX) 
38549         ELSEIF(W1+W2+W3.GT.WR) THEN
38550           CALL PY4JTS(0,I3,I1,I4,I2,QMAX) 
38551         ELSEIF(W1+W2+W3+W4.GT.WR) THEN
38552           CALL PY4JTS(0,I4,I1,I3,I2,QMAX) 
38553         ELSEIF(W1+W2+W3+W4+W5.GT.WR) THEN
38554           CALL PY4JTS(0,I3,I2,I4,I1,QMAX) 
38555         ELSEIF(W1+W2+W3+W4+W5+W6.GT.WR) THEN
38556           CALL PY4JTS(0,I4,I2,I3,I1,QMAX) 
38557         ELSEIF(W1+W2+W3+W4+W5+W6+W7.GT.WR) THEN
38558           CALL PY4JTS(0,I1,I3,I4,I2,QMAX) 
38559         ELSE
38560           CALL PY4JTS(0,I2,I3,I4,I1,QMAX)
38561         ENDIF
38562       ENDIF 
38563
38564 C...Boost back original partons and mark them as deleted.
38565       CALL PYROBO(I1,I1,0D0,0D0,BETA(1),BETA(2),BETA(3))
38566       CALL PYROBO(I2,I2,0D0,0D0,BETA(1),BETA(2),BETA(3))
38567       CALL PYROBO(I3,I3,0D0,0D0,BETA(1),BETA(2),BETA(3))
38568       CALL PYROBO(I4,I4,0D0,0D0,BETA(1),BETA(2),BETA(3))
38569       K(I1,1)=K(I1,1)+10 
38570       K(I2,1)=K(I2,1)+10 
38571       K(I3,1)=K(I3,1)+10 
38572       K(I4,1)=K(I4,1)+10 
38573
38574 C...Rotate shower initiating partons to be along z axis.
38575       PHI=PYANGL(P(NSAV+1,1),P(NSAV+1,2)) 
38576       CALL PYROBO(NSAV+1,NSAV+6,0D0,-PHI,0D0,0D0,0D0)
38577       THE=PYANGL(P(NSAV+1,3),P(NSAV+1,1)) 
38578       CALL PYROBO(NSAV+1,NSAV+6,-THE,0D0,0D0,0D0,0D0)
38579
38580 C...Set up copy of shower initiating partons as on mass shell.
38581       DO 140 I=N+1,N+2
38582         DO 130 J=1,5
38583           K(I,J)=0
38584           P(I,J)=0D0
38585           V(I,J)=V(I1,J) 
38586   130   CONTINUE 
38587         K(I,1)=1
38588         K(I,2)=K(I-6,2)  
38589   140 CONTINUE   
38590       IF(K(NSAV+1,2).EQ.K(I1,2)) THEN
38591         K(N+1,3)=I1
38592         P(N+1,5)=P(I1,5)
38593         K(N+2,3)=I2
38594         P(N+2,5)=P(I2,5)
38595       ELSE
38596         K(N+1,3)=I2
38597         P(N+1,5)=P(I2,5)
38598         K(N+2,3)=I1
38599         P(N+2,5)=P(I1,5)
38600       ENDIF
38601       PABS=SQRT(MAX(0D0,(ECM**2-P(N+1,5)**2-P(N+2,5)**2)**2-
38602      &(2D0*P(N+1,5)*P(N+2,5))**2))/(2D0*ECM)
38603       P(N+1,3)=PABS
38604       P(N+1,4)=SQRT(PABS**2+P(N+1,5)**2)
38605       P(N+2,3)=-PABS
38606       P(N+2,4)=SQRT(PABS**2+P(N+2,5)**2)
38607       N=N+2
38608   
38609 C...Decide whether to allow or not photon radiation in showers.
38610 C...Connect up colours.
38611       MSTJ(41)=2
38612       IF(IRAD.EQ.0) MSTJ(41)=1
38613       IJOIN(1)=N-1
38614       IJOIN(2)=N
38615       CALL PYJOIN(2,IJOIN)
38616
38617 C...Decide on maximum virtuality and do parton shower.
38618       IF(PMAX.LT.PARJ(82)) THEN
38619         PQMAX=QMAX
38620       ELSE
38621         PQMAX=PMAX
38622       ENDIF  
38623       CALL PYSHOW(NSAV+1,-8,PQMAX)
38624
38625 C...Rotate and boost back system.
38626       CALL PYROBO(NSAV+1,N,THE,PHI,BETA(1),BETA(2),BETA(3))
38627  
38628 C...Do fragmentation and decays. 
38629       CALL PYEXEC
38630  
38631 C...Call PYHEPC to convert output from PYJETS to HEPEVT common.
38632       IF(ICOM.EQ.0) THEN 
38633         MSTU(28)=0
38634         CALL PYHEPC(1)
38635       ENDIF
38636  
38637       RETURN
38638       END
38639  
38640 C*********************************************************************
38641  
38642 C...PY4JTW
38643 C...Auxiliary to PY4JET, to evaluate weight of configuration.
38644  
38645       FUNCTION PY4JTW(IA1,IA2,IA3,IA4)
38646
38647 C...Double precision and integer declarations.
38648       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
38649       IMPLICIT INTEGER(I-N)
38650       INTEGER PYK,PYCHGE,PYCOMP
38651 C...Commonblocks.
38652       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
38653       SAVE /PYJETS/
38654
38655 C...First case: when both original partons radiate.
38656 C...IA1 /= 0: N+1 -> IA1 + IA2, N+2 -> IA3 + IA4.
38657       IF(IA1.NE.0) THEN
38658         DO 100 J=1,4
38659           P(N+1,J)=P(IA1,J)+P(IA2,J)
38660           P(N+2,J)=P(IA3,J)+P(IA4,J)
38661   100   CONTINUE   
38662         P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
38663      &  P(N+1,3)**2))
38664         P(N+2,5)=SQRT(MAX(0D0,P(N+2,4)**2-P(N+2,1)**2-P(N+2,2)**2-
38665      &  P(N+2,3)**2))
38666         Z1=P(IA1,4)/P(N+1,4) 
38667         WT1=(4D0/3D0)*((1D0+Z1**2)/(1D0-Z1))/(P(N+1,5)**2-P(IA1,5)**2)
38668         Z2=P(IA3,4)/P(N+2,4)
38669         WT2=(4D0/3D0)*((1D0+Z2**2)/(1D0-Z2))/(P(N+2,5)**2-P(IA3,5)**2)
38670
38671 C...Second case: when one original parton radiates to three.
38672 C...IA1  = 0: N+1 -> IA2 + N+2, N+2 -> IA3 + IA4.
38673       ELSE
38674         DO 110 J=1,4
38675           P(N+2,J)=P(IA3,J)+P(IA4,J)
38676           P(N+1,J)=P(N+2,J)+P(IA2,J)
38677   110   CONTINUE   
38678         P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
38679      &  P(N+1,3)**2))
38680         P(N+2,5)=SQRT(MAX(0D0,P(N+2,4)**2-P(N+2,1)**2-P(N+2,2)**2-
38681      &  P(N+2,3)**2))
38682         IF(K(IA2,2).EQ.21) THEN
38683           Z1=P(N+2,4)/P(N+1,4)
38684           WT1=(4D0/3D0)*((1D0+Z1**2)/(1D0-Z1))/(P(N+1,5)**2-
38685      &    P(IA3,5)**2)
38686         ELSE
38687           Z1=P(IA2,4)/P(N+1,4)
38688           WT1=(4D0/3D0)*((1D0+Z1**2)/(1D0-Z1))/(P(N+1,5)**2-
38689      &    P(IA2,5)**2)
38690         ENDIF           
38691         Z2=P(IA3,4)/P(N+2,4)
38692         IF(K(IA2,2).EQ.21) THEN
38693           WT2=(4D0/3D0)*((1D0+Z2**2)/(1D0-Z2))/(P(N+2,5)**2-
38694      &    P(IA3,5)**2)
38695         ELSEIF(K(IA3,2).EQ.21) THEN
38696           WT2=3D0*((1D0-Z2*(1D0-Z2))**2/(Z2*(1D0-Z2)))/P(N+2,5)**2
38697         ELSE
38698           WT2=0.5D0*(Z2**2+(1D0-Z2)**2)
38699         ENDIF 
38700       ENDIF 
38701  
38702 C...Total weight.
38703       PY4JTW=WT1*WT2
38704
38705       RETURN
38706       END 
38707  
38708 C*********************************************************************
38709  
38710 C...PY4JTS
38711 C...Auxiliary to PY4JET, to set up chosen configuration.
38712  
38713       SUBROUTINE PY4JTS(IA1,IA2,IA3,IA4,IA5,QMAX)
38714
38715 C...Double precision and integer declarations.
38716       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
38717       IMPLICIT INTEGER(I-N)
38718       INTEGER PYK,PYCHGE,PYCOMP
38719 C...Commonblocks.
38720       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
38721       SAVE /PYJETS/
38722
38723 C...Reset info.
38724       DO 110 I=N+1,N+6
38725         DO 100 J=1,5
38726           K(I,J)=0
38727           V(I,J)=V(IA2,J) 
38728   100   CONTINUE
38729         K(I,1)=16   
38730   110 CONTINUE   
38731           
38732 C...First case: when both original partons radiate.
38733 C...N+1 -> (IA1=N+3) + (IA2=N+4), N+2 -> (IA3=N+5) + (IA4=N+6).
38734       IF(IA1.NE.0) THEN
38735
38736 C...Set up flavour and history pointers for new partons.
38737         K(N+1,2)=K(IA1,2)
38738         K(N+2,2)=K(IA3,2)
38739         K(N+3,2)=K(IA1,2)
38740         K(N+4,2)=K(IA2,2)
38741         K(N+5,2)=K(IA3,2)
38742         K(N+6,2)=K(IA4,2)
38743         K(N+1,3)=IA1
38744         K(N+1,4)=N+3
38745         K(N+1,5)=N+4
38746         K(N+2,3)=IA3
38747         K(N+2,4)=N+5
38748         K(N+2,5)=N+6
38749         K(N+3,3)=N+1
38750         K(N+4,3)=N+1
38751         K(N+5,3)=N+2
38752         K(N+6,3)=N+2
38753
38754 C...Set up momenta for new partons.
38755         DO 120 J=1,5
38756           P(N+1,J)=P(IA1,J)+P(IA2,J)
38757           P(N+2,J)=P(IA3,J)+P(IA4,J)
38758           P(N+3,J)=P(IA1,J)
38759           P(N+4,J)=P(IA2,J) 
38760           P(N+5,J)=P(IA3,J)
38761           P(N+6,J)=P(IA4,J) 
38762   120   CONTINUE   
38763         P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
38764      &  P(N+1,3)**2))
38765         P(N+2,5)=SQRT(MAX(0D0,P(N+2,4)**2-P(N+2,1)**2-P(N+2,2)**2-
38766      &  P(N+2,3)**2))
38767         QMAX=MIN(P(N+1,5),P(N+2,5))
38768           
38769 C...Second case: q radiates twice.
38770 C...N+1 -> (IA2=N+4) + N+3, N+3 -> (IA3=N+5) + (IA4=N+6),
38771 C...IA5=N+2 does not radiate.
38772       ELSEIF(K(IA2,2).EQ.21) THEN
38773
38774 C...Set up flavour and history pointers for new partons.
38775         K(N+1,2)=K(IA3,2)
38776         K(N+2,2)=K(IA5,2)
38777         K(N+3,2)=K(IA3,2)
38778         K(N+4,2)=K(IA2,2)
38779         K(N+5,2)=K(IA3,2)
38780         K(N+6,2)=K(IA4,2)
38781         K(N+1,3)=IA3
38782         K(N+1,4)=N+3
38783         K(N+1,5)=N+4
38784         K(N+2,3)=IA5
38785         K(N+3,3)=N+1
38786         K(N+3,4)=N+5
38787         K(N+3,5)=N+6
38788         K(N+4,3)=N+1
38789         K(N+5,3)=N+3
38790         K(N+6,3)=N+3
38791
38792 C...Set up momenta for new partons.
38793         DO 130 J=1,5
38794           P(N+1,J)=P(IA2,J)+P(IA3,J)+P(IA4,J)
38795           P(N+2,J)=P(IA5,J)
38796           P(N+3,J)=P(IA3,J)+P(IA4,J)
38797           P(N+4,J)=P(IA2,J) 
38798           P(N+5,J)=P(IA3,J)
38799           P(N+6,J)=P(IA4,J) 
38800   130   CONTINUE   
38801         P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
38802      &  P(N+1,3)**2))
38803         P(N+3,5)=SQRT(MAX(0D0,P(N+3,4)**2-P(N+3,1)**2-P(N+3,2)**2-
38804      &  P(N+3,3)**2))
38805         QMAX=P(N+3,5)
38806           
38807 C...Third case: q radiates g, g branches.
38808 C...N+1 -> (IA2=N+3) + N+4, N+4 -> (IA3=N+5) + (IA4=N+6),
38809 C...IA5=N+2 does not radiate.
38810       ELSE
38811
38812 C...Set up flavour and history pointers for new partons.
38813         K(N+1,2)=K(IA2,2) 
38814         K(N+2,2)=K(IA5,2)
38815         K(N+3,2)=K(IA2,2) 
38816         K(N+4,2)=21 
38817         K(N+5,2)=K(IA3,2)
38818         K(N+6,2)=K(IA4,2)
38819         K(N+1,3)=IA2 
38820         K(N+1,4)=N+3
38821         K(N+1,5)=N+4
38822         K(N+2,3)=IA5
38823         K(N+3,3)=N+1
38824         K(N+4,3)=N+1 
38825         K(N+4,4)=N+5
38826         K(N+4,5)=N+6
38827         K(N+5,3)=N+4  
38828         K(N+6,3)=N+4  
38829
38830 C...Set up momenta for new partons.
38831         DO 140 J=1,5
38832           P(N+1,J)=P(IA2,J)+P(IA3,J)+P(IA4,J)
38833           P(N+2,J)=P(IA5,J)
38834           P(N+3,J)=P(IA2,J) 
38835           P(N+4,J)=P(IA3,J)+P(IA4,J) 
38836           P(N+5,J)=P(IA3,J)
38837           P(N+6,J)=P(IA4,J) 
38838   140   CONTINUE  
38839         P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
38840      &  P(N+1,3)**2))
38841         P(N+4,5)=SQRT(MAX(0D0,P(N+4,4)**2-P(N+4,1)**2-P(N+4,2)**2-
38842      &  P(N+4,3)**2))
38843         QMAX=P(N+4,5)
38844
38845       ENDIF 
38846       N=N+6
38847
38848       RETURN
38849       END
38850   
38851 C*********************************************************************
38852  
38853 C...PYJOIN
38854 C...Connects a sequence of partons with colour flow indices,
38855 C...as required for subsequent shower evolution (or other operations).
38856  
38857       SUBROUTINE PYJOIN(NJOIN,IJOIN)
38858  
38859 C...Double precision and integer declarations.
38860       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
38861       IMPLICIT INTEGER(I-N)
38862       INTEGER PYK,PYCHGE,PYCOMP
38863 C...Commonblocks.
38864       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
38865       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
38866       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
38867       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
38868 C...Local array.
38869       DIMENSION IJOIN(*)
38870  
38871 C...Check that partons are of right types to be connected.
38872       IF(NJOIN.LT.2) GOTO 120
38873       KQSUM=0
38874       DO 100 IJN=1,NJOIN
38875         I=IJOIN(IJN)
38876         IF(I.LE.0.OR.I.GT.N) GOTO 120
38877         IF(K(I,1).LT.1.OR.K(I,1).GT.3) GOTO 120
38878         KC=PYCOMP(K(I,2))
38879         IF(KC.EQ.0) GOTO 120
38880         KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
38881         IF(KQ.EQ.0) GOTO 120
38882         IF(IJN.NE.1.AND.IJN.NE.NJOIN.AND.KQ.NE.2) GOTO 120
38883         IF(KQ.NE.2) KQSUM=KQSUM+KQ
38884         IF(IJN.EQ.1) KQS=KQ
38885   100 CONTINUE
38886       IF(KQSUM.NE.0) GOTO 120
38887  
38888 C...Connect the partons sequentially (closing for gluon loop).
38889       KCS=(9-KQS)/2
38890       IF(KQS.EQ.2) KCS=INT(4.5D0+PYR(0))
38891       DO 110 IJN=1,NJOIN
38892         I=IJOIN(IJN)
38893         K(I,1)=3
38894         IF(IJN.NE.1) IP=IJOIN(IJN-1)
38895         IF(IJN.EQ.1) IP=IJOIN(NJOIN)
38896         IF(IJN.NE.NJOIN) IN=IJOIN(IJN+1)
38897         IF(IJN.EQ.NJOIN) IN=IJOIN(1)
38898         K(I,KCS)=MSTU(5)*IN
38899         K(I,9-KCS)=MSTU(5)*IP
38900         IF(IJN.EQ.1.AND.KQS.NE.2) K(I,9-KCS)=0
38901         IF(IJN.EQ.NJOIN.AND.KQS.NE.2) K(I,KCS)=0
38902   110 CONTINUE
38903  
38904 C...Error exit: no action taken.
38905       RETURN
38906   120 CALL PYERRM(12,
38907      &'(PYJOIN:) given entries can not be joined by one string')
38908  
38909       RETURN
38910       END
38911  
38912 C*********************************************************************
38913  
38914 C...PYGIVE
38915 C...Sets values of commonblock variables.
38916  
38917       SUBROUTINE PYGIVE(CHIN)
38918  
38919 C...Double precision and integer declarations.
38920       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
38921       IMPLICIT INTEGER(I-N)
38922       INTEGER PYK,PYCHGE,PYCOMP
38923 C...Commonblocks.
38924       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
38925       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
38926       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
38927       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
38928       COMMON/PYDAT4/CHAF(500,2)
38929       CHARACTER CHAF*16
38930       COMMON/PYDATR/MRPY(6),RRPY(100)
38931       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
38932       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
38933       COMMON/PYINT1/MINT(400),VINT(400)
38934       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
38935       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
38936       COMMON/PYINT4/MWID(500),WIDS(500,5)
38937       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
38938       COMMON/PYINT6/PROC(0:500)
38939       CHARACTER PROC*28
38940       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
38941       COMMON/PYINT8/XPVMD(-6:6),XPANL(-6:6),XPANH(-6:6),XPBEH(-6:6),
38942      &XPDIR(-6:6)
38943       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
38944       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYDATR/,
38945      &/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,
38946      &/PYINT5/,/PYINT6/,/PYINT7/,/PYINT8/,/PYMSSM/
38947 C...Local arrays and character variables.
38948       CHARACTER CHIN*(*),CHFIX*104,CHBIT*104,CHOLD*8,CHNEW*8,CHOLD2*28,
38949      &CHNEW2*28,CHNAM*6,CHVAR(49)*6,CHALP(2)*26,CHIND*8,CHINI*10,
38950      &CHINR*16
38951       DIMENSION MSVAR(49,8)
38952  
38953 C...For each variable to be translated give: name,
38954 C...integer/real/character, no. of indices, lower&upper index bounds.
38955       DATA CHVAR/'N','K','P','V','MSTU','PARU','MSTJ','PARJ','KCHG',
38956      &'PMAS','PARF','VCKM','MDCY','MDME','BRAT','KFDP','CHAF','MRPY',
38957      &'RRPY','MSEL','MSUB','KFIN','CKIN','MSTP','PARP','MSTI','PARI',
38958      &'MINT','VINT','ISET','KFPR','COEF','ICOL','XSFX','ISIG','SIGH',
38959      &'MWID','WIDS','NGEN','XSEC','PROC','SIGT','XPVMD','XPANL',
38960      &'XPANH','XPBEH','XPDIR','IMSS','RMSS'/
38961       DATA ((MSVAR(I,J),J=1,8),I=1,49)/ 1,7*0,  1,2,1,4000,1,5,2*0,
38962      &2,2,1,4000,1,5,2*0,  2,2,1,4000,1,5,2*0,  1,1,1,200,4*0,
38963      &2,1,1,200,4*0,  1,1,1,200,4*0,  2,1,1,200,4*0,
38964      &1,2,1,500,1,4,2*0,  2,2,1,500,1,4,2*0,  2,1,1,2000,4*0,
38965      &2,2,1,4,1,4,2*0,  1,2,1,500,1,3,2*0,  1,2,1,4000,1,2,2*0,
38966      &2,1,1,4000,4*0,  1,2,1,4000,1,5,2*0,  3,2,1,500,1,2,2*0,
38967      &1,1,1,6,4*0,  2,1,1,100,4*0,
38968      &1,7*0,  1,1,1,500,4*0,  1,2,1,2,-40,40,2*0,  2,1,1,200,4*0,
38969      &1,1,1,200,4*0,  2,1,1,200,4*0,  1,1,1,200,4*0,  2,1,1,200,4*0,
38970      &1,1,1,400,4*0,  2,1,1,400,4*0,  1,1,1,500,4*0,
38971      &1,2,1,500,1,2,2*0,  2,2,1,500,1,20,2*0,  1,3,1,40,1,4,1,2,
38972      &2,2,1,2,-40,40,2*0,  1,2,1,1000,1,3,2*0,  2,1,1,1000,4*0,
38973      &1,1,1,500,4*0,   2,2,1,500,1,5,2*0,   1,2,0,500,1,3,2*0,
38974      &2,2,0,500,1,3,2*0,   4,1,0,500,4*0,   2,3,0,6,0,6,0,5,
38975      &2,1,-6,6,4*0,     2,1,-6,6,4*0,    2,1,-6,6,4*0,
38976      &2,1,-6,6,4*0,  2,1,-6,6,4*0,  1,1,0,99,4*0,  2,1,0,99,4*0/
38977       DATA CHALP/'abcdefghijklmnopqrstuvwxyz',
38978      &'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
38979  
38980 C...Length of character variable. Subdivide it into instructions.
38981       IF(MSTU(12).GE.1) CALL PYLIST(0)
38982       CHBIT=CHIN//' '
38983       LBIT=101
38984   100 LBIT=LBIT-1
38985       IF(CHBIT(LBIT:LBIT).EQ.' ') GOTO 100
38986       LTOT=0
38987       DO 110 LCOM=1,LBIT
38988         IF(CHBIT(LCOM:LCOM).EQ.' ') GOTO 110
38989         LTOT=LTOT+1
38990         CHFIX(LTOT:LTOT)=CHBIT(LCOM:LCOM)
38991   110 CONTINUE
38992       LLOW=0
38993   120 LHIG=LLOW+1
38994   130 LHIG=LHIG+1
38995       IF(LHIG.LE.LTOT.AND.CHFIX(LHIG:LHIG).NE.';') GOTO 130
38996       LBIT=LHIG-LLOW-1
38997       CHBIT(1:LBIT)=CHFIX(LLOW+1:LHIG-1)
38998  
38999 C...Identify commonblock variable.
39000       LNAM=1
39001   140 LNAM=LNAM+1
39002       IF(CHBIT(LNAM:LNAM).NE.'('.AND.CHBIT(LNAM:LNAM).NE.'='.AND.
39003      &LNAM.LE.6) GOTO 140
39004       CHNAM=CHBIT(1:LNAM-1)//' '
39005       DO 160 LCOM=1,LNAM-1
39006         DO 150 LALP=1,26
39007           IF(CHNAM(LCOM:LCOM).EQ.CHALP(1)(LALP:LALP)) CHNAM(LCOM:LCOM)=
39008      &    CHALP(2)(LALP:LALP)
39009   150   CONTINUE
39010   160 CONTINUE
39011       IVAR=0
39012       DO 170 IV=1,49
39013         IF(CHNAM.EQ.CHVAR(IV)) IVAR=IV
39014   170 CONTINUE
39015       IF(IVAR.EQ.0) THEN
39016         CALL PYERRM(18,'(PYGIVE:) do not recognize variable '//CHNAM)
39017         LLOW=LHIG
39018         IF(LLOW.LT.LTOT) GOTO 120
39019         RETURN
39020       ENDIF
39021  
39022 C...Identify any indices.
39023       I1=0
39024       I2=0
39025       I3=0
39026       NINDX=0
39027       IF(CHBIT(LNAM:LNAM).EQ.'(') THEN
39028         LIND=LNAM
39029   180   LIND=LIND+1
39030         IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 180
39031         CHIND=' '
39032         IF((CHBIT(LNAM+1:LNAM+1).EQ.'C'.OR.CHBIT(LNAM+1:LNAM+1).EQ.'c')
39033      &  .AND.(IVAR.EQ.9.OR.IVAR.EQ.10.OR.IVAR.EQ.13.OR.IVAR.EQ.17))
39034      &  THEN
39035           CHIND(LNAM-LIND+11:8)=CHBIT(LNAM+2:LIND-1)
39036           READ(CHIND,'(I8)') KF
39037           I1=PYCOMP(KF)
39038         ELSEIF(CHBIT(LNAM+1:LNAM+1).EQ.'C'.OR.CHBIT(LNAM+1:LNAM+1).EQ.
39039      &    'c') THEN
39040           CALL PYERRM(18,'(PYGIVE:) not allowed to use C index for '//
39041      &    CHNAM)
39042           LLOW=LHIG
39043           IF(LLOW.LT.LTOT) GOTO 120
39044           RETURN
39045         ELSE
39046           CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
39047           READ(CHIND,'(I8)') I1
39048         ENDIF
39049         LNAM=LIND
39050         IF(CHBIT(LNAM:LNAM).EQ.')') LNAM=LNAM+1
39051         NINDX=1
39052       ENDIF
39053       IF(CHBIT(LNAM:LNAM).EQ.',') THEN
39054         LIND=LNAM
39055   190   LIND=LIND+1
39056         IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 190
39057         CHIND=' '
39058         CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
39059         READ(CHIND,'(I8)') I2
39060         LNAM=LIND
39061         IF(CHBIT(LNAM:LNAM).EQ.')') LNAM=LNAM+1
39062         NINDX=2
39063       ENDIF
39064       IF(CHBIT(LNAM:LNAM).EQ.',') THEN
39065         LIND=LNAM
39066   200   LIND=LIND+1
39067         IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 200
39068         CHIND=' '
39069         CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
39070         READ(CHIND,'(I8)') I3
39071         LNAM=LIND+1
39072         NINDX=3
39073       ENDIF
39074  
39075 C...Check that indices allowed.
39076       IERR=0
39077       IF(NINDX.NE.MSVAR(IVAR,2)) IERR=1
39078       IF(NINDX.GE.1.AND.(I1.LT.MSVAR(IVAR,3).OR.I1.GT.MSVAR(IVAR,4)))
39079      &IERR=2
39080       IF(NINDX.GE.2.AND.(I2.LT.MSVAR(IVAR,5).OR.I2.GT.MSVAR(IVAR,6)))
39081      &IERR=3
39082       IF(NINDX.EQ.3.AND.(I3.LT.MSVAR(IVAR,7).OR.I3.GT.MSVAR(IVAR,8)))
39083      &IERR=4
39084       IF(CHBIT(LNAM:LNAM).NE.'=') IERR=5
39085       IF(IERR.GE.1) THEN
39086         CALL PYERRM(18,'(PYGIVE:) unallowed indices for '//
39087      &  CHBIT(1:LNAM-1))
39088         LLOW=LHIG
39089         IF(LLOW.LT.LTOT) GOTO 120
39090         RETURN
39091       ENDIF
39092  
39093 C...Save old value of variable.
39094       IF(IVAR.EQ.1) THEN
39095         IOLD=N
39096       ELSEIF(IVAR.EQ.2) THEN
39097         IOLD=K(I1,I2)
39098       ELSEIF(IVAR.EQ.3) THEN
39099         ROLD=P(I1,I2)
39100       ELSEIF(IVAR.EQ.4) THEN
39101         ROLD=V(I1,I2)
39102       ELSEIF(IVAR.EQ.5) THEN
39103         IOLD=MSTU(I1)
39104       ELSEIF(IVAR.EQ.6) THEN
39105         ROLD=PARU(I1)
39106       ELSEIF(IVAR.EQ.7) THEN
39107         IOLD=MSTJ(I1)
39108       ELSEIF(IVAR.EQ.8) THEN
39109         ROLD=PARJ(I1)
39110       ELSEIF(IVAR.EQ.9) THEN
39111         IOLD=KCHG(I1,I2)
39112       ELSEIF(IVAR.EQ.10) THEN
39113         ROLD=PMAS(I1,I2)
39114       ELSEIF(IVAR.EQ.11) THEN
39115         ROLD=PARF(I1)
39116       ELSEIF(IVAR.EQ.12) THEN
39117         ROLD=VCKM(I1,I2)
39118       ELSEIF(IVAR.EQ.13) THEN
39119         IOLD=MDCY(I1,I2)
39120       ELSEIF(IVAR.EQ.14) THEN
39121         IOLD=MDME(I1,I2)
39122       ELSEIF(IVAR.EQ.15) THEN
39123         ROLD=BRAT(I1)
39124       ELSEIF(IVAR.EQ.16) THEN
39125         IOLD=KFDP(I1,I2)
39126       ELSEIF(IVAR.EQ.17) THEN
39127         CHOLD=CHAF(I1,I2)
39128       ELSEIF(IVAR.EQ.18) THEN
39129         IOLD=MRPY(I1)
39130       ELSEIF(IVAR.EQ.19) THEN
39131         ROLD=RRPY(I1)
39132       ELSEIF(IVAR.EQ.20) THEN
39133         IOLD=MSEL
39134       ELSEIF(IVAR.EQ.21) THEN
39135         IOLD=MSUB(I1)
39136       ELSEIF(IVAR.EQ.22) THEN
39137         IOLD=KFIN(I1,I2)
39138       ELSEIF(IVAR.EQ.23) THEN
39139         ROLD=CKIN(I1)
39140       ELSEIF(IVAR.EQ.24) THEN
39141         IOLD=MSTP(I1)
39142       ELSEIF(IVAR.EQ.25) THEN
39143         ROLD=PARP(I1)
39144       ELSEIF(IVAR.EQ.26) THEN
39145         IOLD=MSTI(I1)
39146       ELSEIF(IVAR.EQ.27) THEN
39147         ROLD=PARI(I1)
39148       ELSEIF(IVAR.EQ.28) THEN
39149         IOLD=MINT(I1)
39150       ELSEIF(IVAR.EQ.29) THEN
39151         ROLD=VINT(I1)
39152       ELSEIF(IVAR.EQ.30) THEN
39153         IOLD=ISET(I1)
39154       ELSEIF(IVAR.EQ.31) THEN
39155         IOLD=KFPR(I1,I2)
39156       ELSEIF(IVAR.EQ.32) THEN
39157         ROLD=COEF(I1,I2)
39158       ELSEIF(IVAR.EQ.33) THEN
39159         IOLD=ICOL(I1,I2,I3)
39160       ELSEIF(IVAR.EQ.34) THEN
39161         ROLD=XSFX(I1,I2)
39162       ELSEIF(IVAR.EQ.35) THEN
39163         IOLD=ISIG(I1,I2)
39164       ELSEIF(IVAR.EQ.36) THEN
39165         ROLD=SIGH(I1)
39166       ELSEIF(IVAR.EQ.37) THEN
39167         IOLD=MWID(I1)
39168       ELSEIF(IVAR.EQ.38) THEN
39169         ROLD=WIDS(I1,I2)
39170       ELSEIF(IVAR.EQ.39) THEN
39171         IOLD=NGEN(I1,I2)
39172       ELSEIF(IVAR.EQ.40) THEN
39173         ROLD=XSEC(I1,I2)
39174       ELSEIF(IVAR.EQ.41) THEN
39175         CHOLD2=PROC(I1)
39176       ELSEIF(IVAR.EQ.42) THEN
39177         ROLD=SIGT(I1,I2,I3)
39178       ELSEIF(IVAR.EQ.43) THEN
39179         ROLD=XPVMD(I1)
39180       ELSEIF(IVAR.EQ.44) THEN
39181         ROLD=XPANL(I1)
39182       ELSEIF(IVAR.EQ.45) THEN
39183         ROLD=XPANH(I1)
39184       ELSEIF(IVAR.EQ.46) THEN
39185         ROLD=XPBEH(I1)
39186       ELSEIF(IVAR.EQ.47) THEN
39187         ROLD=XPDIR(I1)
39188       ELSEIF(IVAR.EQ.48) THEN
39189         IOLD=IMSS(I1)
39190       ELSEIF(IVAR.EQ.49) THEN
39191         ROLD=RMSS(I1)
39192       ENDIF
39193  
39194 C...Print current value of variable. Loop back.
39195       IF(LNAM.GE.LBIT) THEN
39196         CHBIT(LNAM:14)=' '
39197         CHBIT(15:60)=' has the value                                '
39198         IF(MSVAR(IVAR,1).EQ.1) THEN
39199           WRITE(CHBIT(51:60),'(I10)') IOLD
39200         ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
39201           WRITE(CHBIT(47:60),'(F14.5)') ROLD
39202         ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
39203           CHBIT(53:60)=CHOLD
39204         ELSE
39205           CHBIT(33:60)=CHOLD
39206         ENDIF
39207         IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
39208         LLOW=LHIG
39209         IF(LLOW.LT.LTOT) GOTO 120
39210         RETURN
39211       ENDIF
39212  
39213 C...Read in new variable value.
39214       IF(MSVAR(IVAR,1).EQ.1) THEN
39215         CHINI=' '
39216         CHINI(LNAM-LBIT+11:10)=CHBIT(LNAM+1:LBIT)
39217         READ(CHINI,'(I10)') INEW
39218       ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
39219         CHINR=' '
39220         CHINR(LNAM-LBIT+17:16)=CHBIT(LNAM+1:LBIT)
39221         READ(CHINR,*) RNEW
39222       ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
39223         CHNEW=CHBIT(LNAM+1:LBIT)//' '
39224       ELSE
39225         CHNEW2=CHBIT(LNAM+1:LBIT)//' '
39226       ENDIF
39227  
39228 C...Store new variable value.
39229       IF(IVAR.EQ.1) THEN
39230         N=INEW
39231       ELSEIF(IVAR.EQ.2) THEN
39232         K(I1,I2)=INEW
39233       ELSEIF(IVAR.EQ.3) THEN
39234         P(I1,I2)=RNEW
39235       ELSEIF(IVAR.EQ.4) THEN
39236         V(I1,I2)=RNEW
39237       ELSEIF(IVAR.EQ.5) THEN
39238         MSTU(I1)=INEW
39239       ELSEIF(IVAR.EQ.6) THEN
39240         PARU(I1)=RNEW
39241       ELSEIF(IVAR.EQ.7) THEN
39242         MSTJ(I1)=INEW
39243       ELSEIF(IVAR.EQ.8) THEN
39244         PARJ(I1)=RNEW
39245       ELSEIF(IVAR.EQ.9) THEN
39246         KCHG(I1,I2)=INEW
39247       ELSEIF(IVAR.EQ.10) THEN
39248         PMAS(I1,I2)=RNEW
39249       ELSEIF(IVAR.EQ.11) THEN
39250         PARF(I1)=RNEW
39251       ELSEIF(IVAR.EQ.12) THEN
39252         VCKM(I1,I2)=RNEW
39253       ELSEIF(IVAR.EQ.13) THEN
39254         MDCY(I1,I2)=INEW
39255       ELSEIF(IVAR.EQ.14) THEN
39256         MDME(I1,I2)=INEW
39257       ELSEIF(IVAR.EQ.15) THEN
39258         BRAT(I1)=RNEW
39259       ELSEIF(IVAR.EQ.16) THEN
39260         KFDP(I1,I2)=INEW
39261       ELSEIF(IVAR.EQ.17) THEN
39262         CHAF(I1,I2)=CHNEW
39263       ELSEIF(IVAR.EQ.18) THEN
39264         MRPY(I1)=INEW
39265       ELSEIF(IVAR.EQ.19) THEN
39266         RRPY(I1)=RNEW
39267       ELSEIF(IVAR.EQ.20) THEN
39268         MSEL=INEW
39269       ELSEIF(IVAR.EQ.21) THEN
39270         MSUB(I1)=INEW
39271       ELSEIF(IVAR.EQ.22) THEN
39272         KFIN(I1,I2)=INEW
39273       ELSEIF(IVAR.EQ.23) THEN
39274         CKIN(I1)=RNEW
39275       ELSEIF(IVAR.EQ.24) THEN
39276         MSTP(I1)=INEW
39277       ELSEIF(IVAR.EQ.25) THEN
39278         PARP(I1)=RNEW
39279       ELSEIF(IVAR.EQ.26) THEN
39280         MSTI(I1)=INEW
39281       ELSEIF(IVAR.EQ.27) THEN
39282         PARI(I1)=RNEW
39283       ELSEIF(IVAR.EQ.28) THEN
39284         MINT(I1)=INEW
39285       ELSEIF(IVAR.EQ.29) THEN
39286         VINT(I1)=RNEW
39287       ELSEIF(IVAR.EQ.30) THEN
39288         ISET(I1)=INEW
39289       ELSEIF(IVAR.EQ.31) THEN
39290         KFPR(I1,I2)=INEW
39291       ELSEIF(IVAR.EQ.32) THEN
39292         COEF(I1,I2)=RNEW
39293       ELSEIF(IVAR.EQ.33) THEN
39294         ICOL(I1,I2,I3)=INEW
39295       ELSEIF(IVAR.EQ.34) THEN
39296         XSFX(I1,I2)=RNEW
39297       ELSEIF(IVAR.EQ.35) THEN
39298         ISIG(I1,I2)=INEW
39299       ELSEIF(IVAR.EQ.36) THEN
39300         SIGH(I1)=RNEW
39301       ELSEIF(IVAR.EQ.37) THEN
39302         MWID(I1)=INEW
39303       ELSEIF(IVAR.EQ.38) THEN
39304         WIDS(I1,I2)=RNEW
39305       ELSEIF(IVAR.EQ.39) THEN
39306         NGEN(I1,I2)=INEW
39307       ELSEIF(IVAR.EQ.40) THEN
39308         XSEC(I1,I2)=RNEW
39309       ELSEIF(IVAR.EQ.41) THEN
39310         PROC(I1)=CHNEW2
39311       ELSEIF(IVAR.EQ.42) THEN
39312         SIGT(I1,I2,I3)=RNEW
39313       ELSEIF(IVAR.EQ.43) THEN
39314         XPVMD(I1)=RNEW
39315       ELSEIF(IVAR.EQ.44) THEN
39316         XPANL(I1)=RNEW
39317       ELSEIF(IVAR.EQ.45) THEN
39318         XPANH(I1)=RNEW
39319       ELSEIF(IVAR.EQ.46) THEN
39320         XPBEH(I1)=RNEW
39321       ELSEIF(IVAR.EQ.47) THEN
39322         XPDIR(I1)=RNEW
39323       ELSEIF(IVAR.EQ.48) THEN
39324         IMSS(I1)=INEW
39325       ELSEIF(IVAR.EQ.49) THEN
39326         RMSS(I1)=RNEW
39327       ENDIF
39328  
39329 C...Write old and new value. Loop back.
39330       CHBIT(LNAM:14)=' '
39331       CHBIT(15:60)=' changed from                to               '
39332       IF(MSVAR(IVAR,1).EQ.1) THEN
39333         WRITE(CHBIT(33:42),'(I10)') IOLD
39334         WRITE(CHBIT(51:60),'(I10)') INEW
39335         IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
39336       ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
39337         WRITE(CHBIT(29:42),'(F14.5)') ROLD
39338         WRITE(CHBIT(47:60),'(F14.5)') RNEW
39339         IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
39340       ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
39341         CHBIT(35:42)=CHOLD
39342         CHBIT(53:60)=CHNEW
39343         IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
39344       ELSE
39345         CHBIT(15:88)=' changed from '//CHOLD2//' to '//CHNEW2
39346         IF(MSTU(13).GE.1) WRITE(MSTU(11),5100) CHBIT(1:88)
39347       ENDIF
39348       LLOW=LHIG
39349       IF(LLOW.LT.LTOT) GOTO 120
39350  
39351 C...Format statement for output on unit MSTU(11) (by default 6).
39352  5000 FORMAT(5X,A60)
39353  5100 FORMAT(5X,A88)
39354  
39355       RETURN
39356       END
39357  
39358 C*********************************************************************
39359  
39360 C...PYEXEC
39361 C...Administrates the fragmentation and decay chain.
39362  
39363       SUBROUTINE PYEXEC
39364  
39365 C...Double precision and integer declarations.
39366       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
39367       IMPLICIT INTEGER(I-N)
39368       INTEGER PYK,PYCHGE,PYCOMP
39369 C...Commonblocks.
39370       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
39371       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
39372       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
39373       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
39374       COMMON/PYINT4/MWID(500),WIDS(500,5)
39375       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYINT4/
39376 C...Local array.
39377       DIMENSION PS(2,6),IJOIN(100)
39378  
39379 C...Initialize and reset.
39380       MSTU(24)=0
39381       IF(MSTU(12).GE.1) CALL PYLIST(0)
39382       MSTU(31)=MSTU(31)+1
39383       MSTU(1)=0
39384       MSTU(2)=0
39385       MSTU(3)=0
39386       IF(MSTU(17).LE.0) MSTU(90)=0
39387       MCONS=1
39388  
39389 C...Sum up momentum, energy and charge for starting entries.
39390       NSAV=N
39391       DO 110 I=1,2
39392         DO 100 J=1,6
39393           PS(I,J)=0D0
39394   100   CONTINUE
39395   110 CONTINUE
39396       DO 130 I=1,N
39397         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 130
39398         DO 120 J=1,4
39399           PS(1,J)=PS(1,J)+P(I,J)
39400   120   CONTINUE
39401         PS(1,6)=PS(1,6)+PYCHGE(K(I,2))
39402   130 CONTINUE
39403       PARU(21)=PS(1,4)
39404  
39405 C...Prepare system for subsequent fragmentation/decay.
39406       CALL PYPREP(0)
39407  
39408 C...Loop through jet fragmentation and particle decays.
39409       MBE=0
39410   140 MBE=MBE+1
39411       IP=0
39412   150 IP=IP+1
39413       KC=0
39414       IF(K(IP,1).GT.0.AND.K(IP,1).LE.10) KC=PYCOMP(K(IP,2))
39415       IF(KC.EQ.0) THEN
39416  
39417 C...Deal with any remaining undecayed resonance
39418 C...(normally the task of PYEVNT, so seldom used).
39419       ELSEIF(MWID(KC).NE.0) THEN
39420         IBEG=IP
39421         IF(KCHG(KC,2).NE.0.AND.K(I,1).NE.3) THEN
39422           IBEG=IP+1
39423   160     IBEG=IBEG-1
39424           IF(IBEG.GE.2.AND.K(IBEG,1).EQ.2) GOTO 160
39425           IF(K(IBEG,1).NE.2) IBEG=IBEG+1
39426           IEND=IP-1
39427   170     IEND=IEND+1
39428           IF(IEND.LT.N.AND.K(IEND,1).EQ.2) GOTO 170
39429           IF(IEND.LT.N.AND.KCHG(PYCOMP(K(IEND,2)),2).EQ.0) GOTO 170
39430           NJOIN=0
39431           DO 180 I=IBEG,IEND
39432             IF(KCHG(PYCOMP(K(IEND,2)),2).NE.0) THEN
39433               NJOIN=NJOIN+1
39434               IJOIN(NJOIN)=I
39435             ENDIF
39436   180     CONTINUE
39437         ENDIF
39438         CALL PYRESD(IP)
39439         CALL PYPREP(IBEG)
39440  
39441 C...Particle decay if unstable and allowed. Save long-lived particle
39442 C...decays until second pass after Bose-Einstein effects.
39443       ELSEIF(KCHG(KC,2).EQ.0) THEN
39444         IF(MSTJ(21).GE.1.AND.MDCY(KC,1).GE.1.AND.(MSTJ(51).LE.0.OR.MBE
39445      &  .EQ.2.OR.PMAS(KC,2).GE.PARJ(91).OR.IABS(K(IP,2)).EQ.311))
39446      &  CALL PYDECY(IP)
39447  
39448 C...Decay products may develop a shower.
39449         IF(MSTJ(92).GT.0) THEN
39450           IP1=MSTJ(92)
39451           QMAX=SQRT(MAX(0D0,(P(IP1,4)+P(IP1+1,4))**2-(P(IP1,1)+P(IP1+1,
39452      &    1))**2-(P(IP1,2)+P(IP1+1,2))**2-(P(IP1,3)+P(IP1+1,3))**2))
39453           CALL PYSHOW(IP1,IP1+1,QMAX)
39454           CALL PYPREP(IP1)
39455           MSTJ(92)=0
39456         ELSEIF(MSTJ(92).LT.0) THEN
39457           IP1=-MSTJ(92)
39458           CALL PYSHOW(IP1,-3,P(IP,5))
39459           CALL PYPREP(IP1)
39460           MSTJ(92)=0
39461         ENDIF
39462  
39463 C...Jet fragmentation: string or independent fragmentation.
39464       ELSEIF(K(IP,1).EQ.1.OR.K(IP,1).EQ.2) THEN
39465         MFRAG=MSTJ(1)
39466         IF(MFRAG.GE.1.AND.K(IP,1).EQ.1) MFRAG=2
39467         IF(MSTJ(21).GE.2.AND.K(IP,1).EQ.2.AND.N.GT.IP) THEN
39468           IF(K(IP+1,1).EQ.1.AND.K(IP+1,3).EQ.K(IP,3).AND.
39469      &    K(IP,3).GT.0.AND.K(IP,3).LT.IP) THEN
39470             IF(KCHG(PYCOMP(K(K(IP,3),2)),2).EQ.0) MFRAG=MIN(1,MFRAG)
39471           ENDIF
39472         ENDIF
39473         IF(MFRAG.EQ.1) CALL PYSTRF(IP)
39474         IF(MFRAG.EQ.2) CALL PYINDF(IP)
39475         IF(MFRAG.EQ.2.AND.K(IP,1).EQ.1) MCONS=0
39476         IF(MFRAG.EQ.2.AND.(MSTJ(3).LE.0.OR.MOD(MSTJ(3),5).EQ.0)) MCONS=0
39477       ENDIF
39478  
39479 C...Loop back if enough space left in PYJETS and no error abort.
39480       IF(MSTU(24).NE.0.AND.MSTU(21).GE.2) THEN
39481       ELSEIF(IP.LT.N.AND.N.LT.MSTU(4)-20-MSTU(32)) THEN
39482         GOTO 150
39483       ELSEIF(IP.LT.N) THEN
39484         CALL PYERRM(11,'(PYEXEC:) no more memory left in PYJETS')
39485       ENDIF
39486  
39487 C...Include simple Bose-Einstein effect parametrization if desired.
39488       IF(MBE.EQ.1.AND.MSTJ(51).GE.1) THEN
39489         CALL PYBOEI(NSAV)
39490         GOTO 140
39491       ENDIF
39492  
39493 C...Check that momentum, energy and charge were conserved.
39494       DO 200 I=1,N
39495         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 200
39496         DO 190 J=1,4
39497           PS(2,J)=PS(2,J)+P(I,J)
39498   190   CONTINUE
39499         PS(2,6)=PS(2,6)+PYCHGE(K(I,2))
39500   200 CONTINUE
39501       PDEV=(ABS(PS(2,1)-PS(1,1))+ABS(PS(2,2)-PS(1,2))+ABS(PS(2,3)-
39502      &PS(1,3))+ABS(PS(2,4)-PS(1,4)))/(1D0+ABS(PS(2,4))+ABS(PS(1,4)))
39503       IF(MCONS.EQ.1.AND.PDEV.GT.PARU(11)) CALL PYERRM(15,
39504      &'(PYEXEC:) four-momentum was not conserved')
39505       IF(MCONS.EQ.1.AND.ABS(PS(2,6)-PS(1,6)).GT.0.1D0) CALL PYERRM(15,
39506      &'(PYEXEC:) charge was not conserved')
39507  
39508       RETURN
39509       END
39510  
39511 C*********************************************************************
39512
39513 C...PYPREP
39514 C...Rearranges partons along strings. 
39515 C...Allows small systems to collapse into one or two particles. 
39516 C...Checks flavours and colour singlet invarient masses.
39517  
39518       SUBROUTINE PYPREP(IP)
39519  
39520 C...Double precision and integer declarations.
39521       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
39522       INTEGER PYK,PYCHGE,PYCOMP
39523 C...Commonblocks.
39524       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
39525       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
39526       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
39527       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
39528       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/
39529 C...Local arrays.
39530       DIMENSION DPS(5),DPC(5),UE(3),PG(5),
39531      &E1(3),E2(3),E3(3),E4(3),ECL(3)
39532  
39533 C...Function to give four-product.
39534       FOUR(I,J)=P(I,4)*P(J,4)-P(I,1)*P(J,1)-P(I,2)*P(J,2)-P(I,3)*P(J,3)
39535  
39536 C...Rearrange parton shower product listing along strings: begin loop.
39537       I1=N
39538       DO 130 MQGST=1,2
39539         DO 120 I=MAX(1,IP),N
39540           IF(K(I,1).NE.3) GOTO 120
39541           KC=PYCOMP(K(I,2))
39542           IF(KC.EQ.0) GOTO 120
39543           KQ=KCHG(KC,2)
39544           IF(KQ.EQ.0.OR.(MQGST.EQ.1.AND.KQ.EQ.2)) GOTO 120
39545  
39546 C...Pick up loose string end.
39547           KCS=4
39548           IF(KQ*ISIGN(1,K(I,2)).LT.0) KCS=5
39549           IA=I
39550           NSTP=0
39551   100     NSTP=NSTP+1
39552           IF(NSTP.GT.4*N) THEN
39553             CALL PYERRM(14,'(PYPREP:) caught in infinite loop')
39554             RETURN
39555           ENDIF
39556  
39557 C...Copy undecayed parton.
39558           IF(K(IA,1).EQ.3) THEN
39559             IF(I1.GE.MSTU(4)-MSTU(32)-5) THEN
39560               CALL PYERRM(11,'(PYPREP:) no more memory left in PYJETS')
39561               RETURN
39562             ENDIF
39563             I1=I1+1
39564             K(I1,1)=2
39565             IF(NSTP.GE.2.AND.KCHG(PYCOMP(K(IA,2)),2).NE.2) K(I1,1)=1
39566             K(I1,2)=K(IA,2)
39567             K(I1,3)=IA
39568             K(I1,4)=0
39569             K(I1,5)=0
39570             DO 110 J=1,5
39571               P(I1,J)=P(IA,J)
39572               V(I1,J)=V(IA,J)
39573   110       CONTINUE
39574             K(IA,1)=K(IA,1)+10
39575             IF(K(I1,1).EQ.1) GOTO 120
39576           ENDIF
39577  
39578 C...Go to next parton in colour space.
39579           IB=IA
39580           IF(MOD(K(IB,KCS)/MSTU(5)**2,2).EQ.0.AND.MOD(K(IB,KCS),MSTU(5))
39581      &    .NE.0) THEN
39582             IA=MOD(K(IB,KCS),MSTU(5))
39583             K(IB,KCS)=K(IB,KCS)+MSTU(5)**2
39584             MREV=0
39585           ELSE
39586             IF(K(IB,KCS).GE.2*MSTU(5)**2.OR.MOD(K(IB,KCS)/MSTU(5),
39587      &      MSTU(5)).EQ.0) KCS=9-KCS
39588             IA=MOD(K(IB,KCS)/MSTU(5),MSTU(5))
39589             K(IB,KCS)=K(IB,KCS)+2*MSTU(5)**2
39590             MREV=1
39591           ENDIF
39592           IF(IA.LE.0.OR.IA.GT.N) THEN
39593             CALL PYERRM(12,'(PYPREP:) colour rearrangement failed')
39594             RETURN
39595           ENDIF
39596           IF(MOD(K(IA,4)/MSTU(5),MSTU(5)).EQ.IB.OR.MOD(K(IA,5)/MSTU(5),
39597      &    MSTU(5)).EQ.IB) THEN
39598             IF(MREV.EQ.1) KCS=9-KCS
39599             IF(MOD(K(IA,KCS)/MSTU(5),MSTU(5)).NE.IB) KCS=9-KCS
39600             K(IA,KCS)=K(IA,KCS)+2*MSTU(5)**2
39601           ELSE
39602             IF(MREV.EQ.0) KCS=9-KCS
39603             IF(MOD(K(IA,KCS),MSTU(5)).NE.IB) KCS=9-KCS
39604             K(IA,KCS)=K(IA,KCS)+MSTU(5)**2
39605           ENDIF
39606           IF(IA.NE.I) GOTO 100
39607           K(I1,1)=1
39608   120   CONTINUE
39609   130 CONTINUE
39610       N=I1
39611  
39612 C...Done if no checks on small-mass systems.
39613       IF(MSTJ(14).LT.0) RETURN
39614       IF(MSTJ(14).EQ.0) GOTO 540
39615  
39616 C...Find lowest-mass colour singlet jet system.
39617       NS=N
39618   140 NSIN=N-NS
39619       PDMIN=1D0+PARJ(32)
39620       IC=0
39621       DO 190 I=MAX(1,IP),N
39622         IF(K(I,1).NE.1.AND.K(I,1).NE.2) THEN
39623         ELSEIF(K(I,1).EQ.2.AND.IC.EQ.0) THEN
39624           NSIN=NSIN+1
39625           IC=I
39626           DO 150 J=1,4
39627             DPS(J)=P(I,J)
39628   150     CONTINUE
39629           MSTJ(93)=1
39630           DPS(5)=PYMASS(K(I,2))
39631         ELSEIF(K(I,1).EQ.2) THEN
39632           DO 160 J=1,4
39633             DPS(J)=DPS(J)+P(I,J)
39634   160     CONTINUE
39635         ELSEIF(IC.NE.0.AND.KCHG(PYCOMP(K(I,2)),2).NE.0) THEN
39636           DO 170 J=1,4
39637             DPS(J)=DPS(J)+P(I,J)
39638   170     CONTINUE
39639           MSTJ(93)=1
39640           DPS(5)=DPS(5)+PYMASS(K(I,2))
39641           PD=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))-
39642      &    DPS(5)
39643           IF(PD.LT.PDMIN) THEN
39644             PDMIN=PD
39645             DO 180 J=1,5
39646               DPC(J)=DPS(J)
39647   180       CONTINUE
39648             IC1=IC
39649             IC2=I
39650           ENDIF
39651           IC=0
39652         ELSE
39653           NSIN=NSIN+1
39654         ENDIF
39655   190 CONTINUE
39656  
39657 C...Done if lowest-mass system above threshold for string frag.
39658       IF(PDMIN.GE.PARJ(32)) GOTO 540
39659  
39660 C...Fill small-mass system as cluster.
39661       NSAV=N
39662       PECM=SQRT(MAX(0D0,DPC(4)**2-DPC(1)**2-DPC(2)**2-DPC(3)**2))
39663       K(N+1,1)=11
39664       K(N+1,2)=91
39665       K(N+1,3)=IC1
39666       P(N+1,1)=DPC(1)
39667       P(N+1,2)=DPC(2)
39668       P(N+1,3)=DPC(3)
39669       P(N+1,4)=DPC(4)
39670       P(N+1,5)=PECM
39671  
39672 C...Set up history, assuming cluster -> 2 hadrons.
39673       NBODY=2
39674       K(N+1,4)=N+2
39675       K(N+1,5)=N+3
39676       K(N+2,1)=1
39677       K(N+3,1)=1
39678       IF(MSTU(16).NE.2) THEN
39679         K(N+2,3)=N+1
39680         K(N+3,3)=N+1
39681       ELSE
39682         K(N+2,3)=IC1
39683         K(N+3,3)=IC2
39684       ENDIF
39685       K(N+2,4)=0
39686       K(N+3,4)=0
39687       K(N+2,5)=0
39688       K(N+3,5)=0
39689       V(N+1,5)=0D0
39690       V(N+2,5)=0D0
39691       V(N+3,5)=0D0
39692  
39693 C...Form two particles from flavours of lowest-mass system, if feasible.
39694       NTRY = 0
39695   200 NTRY = NTRY + 1
39696 C...Open string.
39697       IF(IABS(K(IC1,2)).NE.21) THEN
39698         KC1=PYCOMP(K(IC1,2))
39699         KC2=PYCOMP(K(IC2,2))
39700         IF(KC1.EQ.0.OR.KC2.EQ.0) GOTO 540
39701         KQ1=KCHG(KC1,2)*ISIGN(1,K(IC1,2))
39702         KQ2=KCHG(KC2,2)*ISIGN(1,K(IC2,2))
39703         IF(KQ1+KQ2.NE.0) GOTO 540
39704 C...Start with qq, if there is one. Only allow for rank 1 popcorn meson
39705   210   K1=K(IC1,2)
39706         IF(IABS(K(IC2,2)).GT.10) K1=K(IC2,2)
39707         MSTU(125)=0
39708         CALL PYDCYK(K1,0,KFLN,K(N+2,2))
39709         CALL PYDCYK(K(IC1,2)+K(IC2,2)-K1,-KFLN,KFLDMP,K(N+3,2))
39710         IF(K(N+2,2).EQ.0.OR.K(N+3,2).EQ.0) GOTO 210
39711 C...Closed string.
39712       ELSE
39713         IF(IABS(K(IC2,2)).NE.21) GOTO 540
39714 C...No room for popcorn mesons in closed string -> 2 hadrons.
39715         MSTU(125)=0
39716   220   CALL PYDCYK(1+INT((2D0+PARJ(2))*PYR(0)),0,KFLN,KFDMP)
39717         CALL PYDCYK(KFLN,0,KFLM,K(N+2,2))
39718         CALL PYDCYK(-KFLN,-KFLM,KFLDMP,K(N+3,2))
39719         IF(K(N+2,2).EQ.0.OR.K(N+3,2).EQ.0) GOTO 220
39720       ENDIF
39721       P(N+2,5)=PYMASS(K(N+2,2))
39722       P(N+3,5)=PYMASS(K(N+3,2))
39723  
39724 C...If it does not work: try again (a number of times), give up
39725 C...(if no place to shuffle momentum), or form one hadron.
39726       IF(P(N+2,5)+P(N+3,5)+PARJ(64).GE.PECM) THEN
39727         IF(NTRY.LT.MSTJ(17)) THEN
39728           GOTO 200
39729         ELSEIF(NSIN.EQ.1) THEN
39730           GOTO 540
39731         ELSE
39732           GOTO 290
39733         END IF
39734       END IF
39735  
39736 C...Perform two-particle decay of jet system.
39737 C...First step: find reference axis in decaying system rest frame.
39738 C...(Borrow slot N+2 for temporary direction.)
39739       DO 230 J=1,4
39740         P(N+2,J)=P(IC1,J)
39741   230 CONTINUE
39742       DO 250 I=IC1+1,IC2-1
39743         IF((K(I,1).EQ.1.OR.K(I,1).EQ.2).AND.
39744      &  KCHG(PYCOMP(K(I,2)),2).NE.0) THEN
39745           FRAC1=FOUR(IC2,I)/(FOUR(IC1,I)+FOUR(IC2,I))
39746           DO 240 J=1,4
39747             P(N+2,J)=P(N+2,J)+FRAC1*P(I,J)
39748   240     CONTINUE
39749         ENDIF
39750   250 CONTINUE
39751       CALL PYROBO(N+2,N+2,0D0,0D0,-DPC(1)/DPC(4),-DPC(2)/DPC(4),
39752      &-DPC(3)/DPC(4))
39753       THE1=PYANGL(P(N+2,3),SQRT(P(N+2,1)**2+P(N+2,2)**2))
39754       PHI1=PYANGL(P(N+2,1),P(N+2,2))
39755  
39756 C...Second step: generate isotropic/anisotropic decay.
39757       PA=SQRT((PECM**2-(P(N+2,5)+P(N+3,5))**2)*(PECM**2-
39758      &(P(N+2,5)-P(N+3,5))**2))/(2D0*PECM)
39759   260 UE(3)=PYR(0)
39760       PT2=(1D0-UE(3)**2)*PA**2
39761       IF(MSTJ(16).LE.0) THEN
39762         PREV=0.5D0
39763       ELSE
39764         IF(EXP(-PT2/(2D0*PARJ(21)**2)).LT.PYR(0)) GOTO 260
39765         PR1=P(N+2,5)**2+PT2
39766         PR2=P(N+3,5)**2+PT2
39767         ALAMBD=SQRT(MAX(0D0,(PECM**2-PR1-PR2)**2-4D0*PR1*PR2))
39768         PREVCF=PARJ(42)
39769         IF(MSTJ(11).EQ.2) PREVCF=PARJ(39)
39770         PREV=1D0/(1D0+EXP(MIN(50D0,PREVCF*ALAMBD)))
39771       ENDIF
39772       IF(PYR(0).LT.PREV) UE(3)=-UE(3)
39773       PHI=PARU(2)*PYR(0)
39774       UE(1)=SQRT(1D0-UE(3)**2)*COS(PHI)
39775       UE(2)=SQRT(1D0-UE(3)**2)*SIN(PHI)
39776       DO 270 J=1,3
39777         P(N+2,J)=PA*UE(J)
39778         P(N+3,J)=-PA*UE(J)
39779   270 CONTINUE
39780       P(N+2,4)=SQRT(PA**2+P(N+2,5)**2)
39781       P(N+3,4)=SQRT(PA**2+P(N+3,5)**2)
39782  
39783 C...Third step: move back to event frame and set production vertex.
39784       CALL PYROBO(N+2,N+3,THE1,PHI1,DPC(1)/DPC(4),DPC(2)/DPC(4),
39785      &DPC(3)/DPC(4))
39786       DO 280 J=1,4
39787         V(N+1,J)=V(IC1,J)
39788         V(N+2,J)=V(IC1,J)
39789         V(N+3,J)=V(IC2,J)
39790   280 CONTINUE
39791       N=N+3
39792       GOTO 520
39793  
39794 C...Else form one particle, if possible.
39795   290 NBODY=1
39796       K(N+1,5)=N+2
39797       DO 300 J=1,4
39798         V(N+1,J)=V(IC1,J)
39799         V(N+2,J)=V(IC1,J)
39800   300 CONTINUE
39801  
39802 C...Select hadron flavour from available quark flavours.
39803   310 IF(IABS(K(IC1,2)).GT.100.AND.IABS(K(IC2,2)).GT.100) THEN
39804         GOTO 540
39805       ELSEIF(IABS(K(IC1,2)).NE.21) THEN
39806         CALL PYKFDI(K(IC1,2),K(IC2,2),KFLDMP,K(N+2,2))
39807       ELSE
39808         KFLN=1+INT((2D0+PARJ(2))*PYR(0))
39809         CALL PYKFDI(KFLN,-KFLN,KFLDMP,K(N+2,2))
39810       ENDIF
39811       IF(K(N+2,2).EQ.0) GOTO 310
39812       P(N+2,5)=PYMASS(K(N+2,2))
39813  
39814 C...Use old algorithm for E/p conservation? (EN)
39815       IF (MSTJ(16).LE.0) GOTO 480
39816  
39817 C...Find the string piece closest to the cluster by a loop
39818 C...over the undecayed partons not in present cluster. (EN)
39819       DGLOMI=1D30
39820       IBEG=0
39821       I0=0
39822       DO 340 I1=MAX(1,IP),N-1
39823         IF(I1.GE.IC1-1.AND.I1.LE.IC2) THEN
39824           I0=0
39825         ELSEIF(K(I1,1).EQ.2) THEN
39826           IF(I0.EQ.0) I0=I1
39827           I2=I1
39828   320     I2=I2+1
39829           IF(KCHG(PYCOMP(K(I2,2)),2).EQ.0) GOTO 320
39830  
39831 C...Define velocity vectors e1, e2, ecl and differences e3, e4.
39832           DO 330 J=1,3
39833             E1(J)=P(I1,J)/P(I1,4)
39834             E2(J)=P(I2,J)/P(I2,4)
39835             ECL(J)=P(N+1,J)/P(N+1,4)
39836             E3(J)=E2(J)-E1(J)
39837             E4(J)=ECL(J)-E1(J)
39838   330     CONTINUE
39839  
39840 C...Calculate minimal D=(e4-alpha*e3)**2 for 0<alpha<1.
39841           E3S=E3(1)**2+E3(2)**2+E3(3)**2
39842           E4S=E4(1)**2+E4(2)**2+E4(3)**2
39843           E34=E3(1)*E4(1)+E3(2)*E4(2)+E3(3)*E4(3)
39844           IF(E34.LE.0D0) THEN
39845             DDMIN=E4S
39846           ELSEIF(E34.LT.E3S) THEN
39847             DDMIN=E4S-E34**2/E3S
39848           ELSE
39849             DDMIN=E4S-2D0*E34+E3S
39850           ENDIF
39851  
39852 C...Is this the smallest so far?
39853           IF(DDMIN.LT.DGLOMI) THEN
39854             DGLOMI=DDMIN
39855             IBEG=I0
39856             IPCS=I1
39857           ENDIF
39858         ELSEIF(K(I1,1).EQ.1.AND.KCHG(PYCOMP(K(I1,2)),2).NE.0) THEN
39859           I0=0
39860         ENDIF
39861   340 CONTINUE
39862  
39863 C... Check if there are any strings to connect to the new gluon. (EN)
39864       IF (IBEG.EQ.0) GOTO 480
39865  
39866 C...Delta_m = m_clus - m_had > 0: emit a 'gluon' (EN)
39867       IF (P(N+1,5).GE.P(N+2,5)) THEN
39868  
39869 C...Construct 'gluon' that is needed to put hadron on the mass shell.
39870         FRAC=P(N+2,5)/P(N+1,5)
39871         DO 350 J=1,5
39872           P(N+2,J)=FRAC*P(N+1,J)
39873           PG(J)=(1D0-FRAC)*P(N+1,J)
39874   350   CONTINUE
39875  
39876 C... Copy string with new gluon put in.
39877         N=N+2
39878         I=IBEG-1
39879   360   I=I+1
39880         IF(K(I,1).NE.1.AND.K(I,1).NE.2) GOTO 360
39881         IF(KCHG(PYCOMP(K(I,2)),2).EQ.0) GOTO 360
39882         N=N+1
39883         DO 370 J=1,5
39884           K(N,J)=K(I,J)
39885           P(N,J)=P(I,J)
39886           V(N,J)=V(I,J)
39887   370   CONTINUE
39888         K(I,1)=K(I,1)+10
39889         K(I,4)=N
39890         K(I,5)=N
39891         K(N,3)=I
39892         IF(I.EQ.IPCS) THEN
39893           N=N+1
39894           DO 380 J=1,5
39895             K(N,J)=K(N-1,J)
39896             P(N,J)=PG(J)
39897             V(N,J)=V(N-1,J)
39898   380     CONTINUE
39899           K(N,2)=21
39900           K(N,3)=NSAV+1
39901         ENDIF
39902         IF(K(I,1).EQ.12) GOTO 360
39903         GOTO 520
39904  
39905 C...Delta_m = m_clus - m_had < 0: have to absorb a 'gluon' instead,
39906 C...from string piece endpoints.
39907       ELSE
39908  
39909 C...Begin by copying string that should give energy to cluster.
39910         N=N+2
39911         I=IBEG-1
39912   390   I=I+1
39913         IF(K(I,1).NE.1.AND.K(I,1).NE.2) GOTO 390
39914         IF(KCHG(PYCOMP(K(I,2)),2).EQ.0) GOTO 390
39915         N=N+1
39916         DO 400 J=1,5
39917           K(N,J)=K(I,J)
39918           P(N,J)=P(I,J)
39919           V(N,J)=V(I,J)
39920   400   CONTINUE
39921         K(I,1)=K(I,1)+10
39922         K(I,4)=N
39923         K(I,5)=N
39924         K(N,3)=I
39925         IF(I.EQ.IPCS) I1=N
39926         IF(K(I,1).EQ.12) GOTO 390
39927         I2=I1+1
39928  
39929 C...Set initial Phad.
39930         DO 410 J=1,4
39931           P(NSAV+2,J)=P(NSAV+1,J)
39932   410   CONTINUE
39933  
39934 C...Calculate Pg, a part of which will be added to Phad later. (EN)
39935   420   IF(MSTJ(16).EQ.1) THEN
39936           ALPHA=1D0
39937           BETA=1D0
39938         ELSE
39939           ALPHA=FOUR(NSAV+1,I2)/FOUR(I1,I2)
39940           BETA=FOUR(NSAV+1,I1)/FOUR(I1,I2)
39941         ENDIF
39942         DO 430 J=1,4
39943           PG(J)=ALPHA*P(I1,J)+BETA*P(I2,J)
39944   430   CONTINUE
39945         PG(5)=SQRT(MAX(1D-20,PG(4)**2-PG(1)**2-PG(2)**2-PG(3)**2))
39946  
39947 C..Solve 2nd order equation, use the best (smallest) solution. (EN)
39948         PMSCOL=P(NSAV+2,4)**2-P(NSAV+2,1)**2-P(NSAV+2,2)**2-
39949      &  P(NSAV+2,3)**2
39950         PCLPG=(P(NSAV+2,4)*PG(4)-P(NSAV+2,1)*PG(1)-
39951      &  P(NSAV+2,2)*PG(2)-P(NSAV+2,3)*PG(3))/PG(5)**2
39952         DELTA=SQRT(PCLPG**2+(P(NSAV+2,5)**2-PMSCOL)/PG(5)**2)-PCLPG
39953  
39954 C...If all gluon energy eaten, zero it and take a step back.
39955         ITER=0
39956         IF(DELTA*ALPHA.GT.1D0.AND.I1.GT.NSAV+3) THEN
39957           ITER=1
39958           DO 440 J=1,4
39959             P(NSAV+2,J)=P(NSAV+2,J)+P(I1,J)
39960             P(I1,J)=0D0
39961   440     CONTINUE
39962           P(I1,5)=0D0
39963           I1=I1-1
39964         ENDIF
39965         IF(DELTA*BETA.GT.1D0.AND.I2.LT.N) THEN
39966           ITER=1
39967           DO 450 J=1,4
39968             P(NSAV+2,J)=P(NSAV+2,J)+P(I2,J)
39969             P(I2,J)=0D0
39970   450     CONTINUE
39971           P(I2,5)=0D0
39972           I2=I2+1
39973         ENDIF
39974         IF(ITER.EQ.1) GOTO 420
39975  
39976 C...If also all endpoint energy eaten, revert to old procedure.
39977         IF((1D0-DELTA*ALPHA)*P(I1,4).LT.P(I1,5).OR.
39978      &  (1D0-DELTA*BETA)*P(I2,4).LT.P(I2,5)) THEN
39979           DO 460 I=NSAV+3,N
39980             IM=K(I,3)
39981             K(IM,1)=K(IM,1)-10
39982             K(IM,4)=0
39983             K(IM,5)=0
39984   460     CONTINUE
39985           N=NSAV
39986           GOTO 480
39987         ENDIF
39988  
39989 C... Construct the collapsed hadron and modified string partons.
39990         DO 470 J=1,4
39991           P(NSAV+2,J)=P(NSAV+2,J)+DELTA*PG(J)
39992           P(I1,J)=(1D0-DELTA*ALPHA)*P(I1,J)
39993           P(I2,J)=(1D0-DELTA*BETA)*P(I2,J)
39994   470   CONTINUE
39995           P(I1,5)=(1D0-DELTA*ALPHA)*P(I1,5)
39996           P(I2,5)=(1D0-DELTA*BETA)*P(I2,5)
39997  
39998 C...Finished with string collapse in new scheme.
39999         GOTO 520
40000       ENDIF
40001  
40002 C... Use old algorithm; by choice or when in trouble.
40003   480 CONTINUE
40004 C...Find parton/particle which combines to largest extra mass.
40005       IR=0
40006       HA=0D0
40007       HSM=0D0
40008       DO 500 MCOMB=1,3
40009         IF(IR.NE.0) GOTO 500
40010         DO 490 I=MAX(1,IP),N
40011           IF(K(I,1).LE.0.OR.K(I,1).GT.10.OR.(I.GE.IC1.AND.I.LE.IC2
40012      &    .AND.K(I,1).GE.1.AND.K(I,1).LE.2)) GOTO 490
40013           IF(MCOMB.EQ.1) KCI=PYCOMP(K(I,2))
40014           IF(MCOMB.EQ.1.AND.KCI.EQ.0) GOTO 490
40015           IF(MCOMB.EQ.1.AND.KCHG(KCI,2).EQ.0.AND.I.LE.NS) GOTO 490
40016           IF(MCOMB.EQ.2.AND.IABS(K(I,2)).GT.10.AND.IABS(K(I,2)).LE.100)
40017      &    GOTO 490
40018           HCR=DPC(4)*P(I,4)-DPC(1)*P(I,1)-DPC(2)*P(I,2)-DPC(3)*P(I,3)
40019           HSR=2D0*HCR+PECM**2-P(N+2,5)**2-2D0*P(N+2,5)*P(I,5)
40020           IF(HSR.GT.HSM) THEN
40021             IR=I
40022             HA=HCR
40023             HSM=HSR
40024           ENDIF
40025   490   CONTINUE
40026   500 CONTINUE
40027  
40028 C...Shuffle energy and momentum to put new particle on mass shell.
40029       IF(IR.NE.0) THEN
40030         HB=PECM**2+HA
40031         HC=P(N+2,5)**2+HA
40032         HD=P(IR,5)**2+HA
40033         HK2=0.5D0*(HB*SQRT(MAX(0D0,((HB+HC)**2-4D0*(HB+HD)*P(N+2,5)**2)/
40034      &  (HA**2-(PECM*P(IR,5))**2)))-(HB+HC))/(HB+HD)
40035         HK1=(0.5D0*(P(N+2,5)**2-PECM**2)+HD*HK2)/HB
40036         DO 510 J=1,4
40037           P(N+2,J)=(1D0+HK1)*DPC(J)-HK2*P(IR,J)
40038           P(IR,J)=(1D0+HK2)*P(IR,J)-HK1*DPC(J)
40039   510   CONTINUE
40040         N=N+2
40041       ELSE
40042         CALL PYERRM(3,'(PYPREP:) no match for collapsing cluster')
40043         RETURN
40044       ENDIF
40045  
40046 C...Mark collapsed system and store daughter pointers. Iterate.
40047   520 DO 530 I=IC1,IC2
40048         IF((K(I,1).EQ.1.OR.K(I,1).EQ.2).AND.
40049      &  KCHG(PYCOMP(K(I,2)),2).NE.0) THEN
40050           K(I,1)=K(I,1)+10
40051           IF(MSTU(16).NE.2) THEN
40052             K(I,4)=NSAV+1
40053             K(I,5)=NSAV+1
40054           ELSE
40055             K(I,4)=NSAV+2
40056             K(I,5)=NSAV+1+NBODY
40057           ENDIF
40058         ENDIF
40059   530 CONTINUE
40060       IF(N.LT.MSTU(4)-MSTU(32)-5) GOTO 140
40061  
40062 C...Check flavours and invariant masses in parton systems.
40063   540 NP=0
40064       KFN=0
40065       KQS=0
40066       DO 550 J=1,5
40067         DPS(J)=0D0
40068   550 CONTINUE
40069       DO 580 I=MAX(1,IP),N
40070         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 580
40071         KC=PYCOMP(K(I,2))
40072         IF(KC.EQ.0) GOTO 580
40073         KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
40074         IF(KQ.EQ.0) GOTO 580
40075         NP=NP+1
40076         IF(KQ.NE.2) THEN
40077           KFN=KFN+1
40078           KQS=KQS+KQ
40079           MSTJ(93)=1
40080           DPS(5)=DPS(5)+PYMASS(K(I,2))
40081         ENDIF
40082         DO 560 J=1,4
40083           DPS(J)=DPS(J)+P(I,J)
40084   560   CONTINUE
40085         IF(K(I,1).EQ.1) THEN
40086           IF(NP.NE.1.AND.(KFN.EQ.1.OR.KFN.GE.3.OR.KQS.NE.0)) CALL
40087      &    PYERRM(2,'(PYPREP:) unphysical flavour combination')
40088           IF(NP.NE.1.AND.DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2.LT.
40089      &    (0.9D0*PARJ(32)+DPS(5))**2) THEN
40090             CALL PYERRM(3,'(PYPREP:) too small mass in jet system')
40091           END IF
40092           NP=0
40093           KFN=0
40094           KQS=0
40095           DO 570 J=1,5
40096             DPS(J)=0D0
40097   570     CONTINUE
40098         ENDIF
40099   580 CONTINUE
40100  
40101       RETURN
40102       END
40103  
40104 C*********************************************************************
40105  
40106 C...PYSTRF
40107 C...Handles the fragmentation of an arbitrary colour singlet
40108 C...jet system according to the Lund string fragmentation model.
40109  
40110       SUBROUTINE PYSTRF(IP)
40111  
40112 C...Double precision and integer declarations.
40113       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
40114       IMPLICIT INTEGER(I-N)
40115       INTEGER PYK,PYCHGE,PYCOMP
40116 C...Commonblocks.
40117       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
40118       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
40119       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
40120       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
40121 C...Local arrays. All MOPS variables ends with MO
40122       DIMENSION DPS(5),KFL(3),PMQ(3),PX(3),PY(3),GAM(3),IE(2),PR(2),
40123      &IN(9),DHM(4),DHG(4),DP(5,5),IRANK(2),MJU(4),IJU(3),PJU(5,5),
40124      &TJU(5),KFJH(2),NJS(2),KFJS(2),PJS(4,5),MSTU9T(8),PARU9T(8),
40125      &INMO(9),PM2QMO(2),XTMO(2)
40126  
40127 C...Function: four-product of two vectors.
40128       FOUR(I,J)=P(I,4)*P(J,4)-P(I,1)*P(J,1)-P(I,2)*P(J,2)-P(I,3)*P(J,3)
40129       DFOUR(I,J)=DP(I,4)*DP(J,4)-DP(I,1)*DP(J,1)-DP(I,2)*DP(J,2)-
40130      &DP(I,3)*DP(J,3)
40131  
40132 C...Reset counters. Identify parton system.
40133       MSTJ(91)=0
40134       NSAV=N
40135       MSTU90=MSTU(90)
40136       NP=0
40137       KQSUM=0
40138       DO 100 J=1,5
40139         DPS(J)=0D0
40140   100 CONTINUE
40141       MJU(1)=0
40142       MJU(2)=0
40143       I=IP-1
40144   110 I=I+1
40145       IF(I.GT.MIN(N,MSTU(4)-MSTU(32))) THEN
40146         CALL PYERRM(12,'(PYSTRF:) failed to reconstruct jet system')
40147         IF(MSTU(21).GE.1) RETURN
40148       ENDIF
40149       IF(K(I,1).NE.1.AND.K(I,1).NE.2.AND.K(I,1).NE.41) GOTO 110
40150       KC=PYCOMP(K(I,2))
40151       IF(KC.EQ.0) GOTO 110
40152       KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
40153       IF(KQ.EQ.0) GOTO 110
40154       IF(N+5*NP+11.GT.MSTU(4)-MSTU(32)-5) THEN
40155         CALL PYERRM(11,'(PYSTRF:) no more memory left in PYJETS')
40156         IF(MSTU(21).GE.1) RETURN
40157       ENDIF
40158  
40159 C...Take copy of partons to be considered. Check flavour sum.
40160       NP=NP+1
40161       DO 120 J=1,5
40162         K(N+NP,J)=K(I,J)
40163         P(N+NP,J)=P(I,J)
40164         IF(J.NE.4) DPS(J)=DPS(J)+P(I,J)
40165   120 CONTINUE
40166       DPS(4)=DPS(4)+SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
40167       K(N+NP,3)=I
40168       IF(KQ.NE.2) KQSUM=KQSUM+KQ
40169       IF(K(I,1).EQ.41) THEN
40170         KQSUM=KQSUM+2*KQ
40171         IF(KQSUM.EQ.KQ) MJU(1)=N+NP
40172         IF(KQSUM.NE.KQ) MJU(2)=N+NP
40173       ENDIF
40174       IF(K(I,1).EQ.2.OR.K(I,1).EQ.41) GOTO 110
40175       IF(KQSUM.NE.0) THEN
40176         CALL PYERRM(12,'(PYSTRF:) unphysical flavour combination')
40177         IF(MSTU(21).GE.1) RETURN
40178       ENDIF
40179  
40180 C...Boost copied system to CM frame (for better numerical precision).
40181       IF(ABS(DPS(3)).LT.0.99D0*DPS(4)) THEN
40182         MBST=0
40183         MSTU(33)=1
40184         CALL PYROBO(N+1,N+NP,0D0,0D0,-DPS(1)/DPS(4),-DPS(2)/DPS(4),
40185      &  -DPS(3)/DPS(4))
40186       ELSE
40187         MBST=1
40188         HHBZ=SQRT(MAX(1D-6,DPS(4)+DPS(3))/MAX(1D-6,DPS(4)-DPS(3)))
40189         DO 130 I=N+1,N+NP
40190           HHPMT=P(I,1)**2+P(I,2)**2+P(I,5)**2
40191           IF(P(I,3).GT.0D0) THEN
40192             HHPEZ=MAX(1D-10,(P(I,4)+P(I,3))/HHBZ)
40193             P(I,3)=0.5D0*(HHPEZ-HHPMT/HHPEZ)
40194             P(I,4)=0.5D0*(HHPEZ+HHPMT/HHPEZ)
40195           ELSE
40196             HHPEZ=MAX(1D-10,(P(I,4)-P(I,3))*HHBZ)
40197             P(I,3)=-0.5D0*(HHPEZ-HHPMT/HHPEZ)
40198             P(I,4)=0.5D0*(HHPEZ+HHPMT/HHPEZ)
40199           ENDIF
40200   130   CONTINUE
40201       ENDIF
40202  
40203 C...Search for very nearby partons that may be recombined.
40204       NTRYR=0
40205       PARU12=PARU(12)
40206       PARU13=PARU(13)
40207       MJU(3)=MJU(1)
40208       MJU(4)=MJU(2)
40209       NR=NP
40210   140 IF(NR.GE.3) THEN
40211         PDRMIN=2D0*PARU12
40212         DO 150 I=N+1,N+NR
40213           IF(I.EQ.N+NR.AND.IABS(K(N+1,2)).NE.21) GOTO 150
40214           I1=I+1
40215           IF(I.EQ.N+NR) I1=N+1
40216           IF(K(I,1).EQ.41.OR.K(I1,1).EQ.41) GOTO 150
40217           IF(MJU(1).NE.0.AND.I1.LT.MJU(1).AND.IABS(K(I1,2)).NE.21)
40218      &    GOTO 150
40219           IF(MJU(2).NE.0.AND.I.GT.MJU(2).AND.IABS(K(I,2)).NE.21)
40220      &    GOTO 150
40221           PAP=SQRT((P(I,1)**2+P(I,2)**2+P(I,3)**2)*(P(I1,1)**2+
40222      &    P(I1,2)**2+P(I1,3)**2))
40223           PVP=P(I,1)*P(I1,1)+P(I,2)*P(I1,2)+P(I,3)*P(I1,3)
40224           PDR=4D0*(PAP-PVP)**2/MAX(1D-6,PARU13**2*PAP+2D0*(PAP-PVP))
40225           IF(PDR.LT.PDRMIN) THEN
40226             IR=I
40227             PDRMIN=PDR
40228           ENDIF
40229   150   CONTINUE
40230  
40231 C...Recombine very nearby partons to avoid machine precision problems.
40232         IF(PDRMIN.LT.PARU12.AND.IR.EQ.N+NR) THEN
40233           DO 160 J=1,4
40234             P(N+1,J)=P(N+1,J)+P(N+NR,J)
40235   160     CONTINUE
40236           P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
40237      &    P(N+1,3)**2))
40238           NR=NR-1
40239           GOTO 140
40240         ELSEIF(PDRMIN.LT.PARU12) THEN
40241           DO 170 J=1,4
40242             P(IR,J)=P(IR,J)+P(IR+1,J)
40243   170     CONTINUE
40244           P(IR,5)=SQRT(MAX(0D0,P(IR,4)**2-P(IR,1)**2-P(IR,2)**2-
40245      &    P(IR,3)**2))
40246           DO 190 I=IR+1,N+NR-1
40247             K(I,2)=K(I+1,2)
40248             DO 180 J=1,5
40249               P(I,J)=P(I+1,J)
40250   180       CONTINUE
40251   190     CONTINUE
40252           IF(IR.EQ.N+NR-1) K(IR,2)=K(N+NR,2)
40253           NR=NR-1
40254           IF(MJU(1).GT.IR) MJU(1)=MJU(1)-1
40255           IF(MJU(2).GT.IR) MJU(2)=MJU(2)-1
40256           GOTO 140
40257         ENDIF
40258       ENDIF
40259       NTRYR=NTRYR+1
40260  
40261 C...Reset particle counter. Skip ahead if no junctions are present;
40262 C...this is usually the case!
40263       NRS=MAX(5*NR+11,NP)
40264       NTRY=0
40265   200 NTRY=NTRY+1
40266       IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
40267         PARU12=4D0*PARU12
40268         PARU13=2D0*PARU13
40269         GOTO 140
40270       ELSEIF(NTRY.GT.100) THEN
40271         CALL PYERRM(14,'(PYSTRF:) caught in infinite loop')
40272         IF(MSTU(21).GE.1) RETURN
40273       ENDIF
40274       I=N+NRS
40275       MSTU(90)=MSTU90
40276       IF(MJU(1).EQ.0.AND.MJU(2).EQ.0) GOTO 580
40277       IF(MSTJ(12).GE.4) CALL PYERRM(29,'(PYSTRF:) sorry,'//
40278      &     ' junction strings not handled by MSTJ(12)>3 options')
40279       DO 570 JT=1,2
40280         NJS(JT)=0
40281         IF(MJU(JT).EQ.0) GOTO 570
40282         JS=3-2*JT
40283  
40284 C...Find and sum up momentum on three sides of junction. Check flavours.
40285         DO 220 IU=1,3
40286           IJU(IU)=0
40287           DO 210 J=1,5
40288             PJU(IU,J)=0D0
40289   210     CONTINUE
40290   220   CONTINUE
40291         IU=0
40292         DO 240 I1=N+1+(JT-1)*(NR-1),N+NR+(JT-1)*(1-NR),JS
40293           IF(K(I1,2).NE.21.AND.IU.LE.2) THEN
40294             IU=IU+1
40295             IJU(IU)=I1
40296           ENDIF
40297           DO 230 J=1,4
40298             PJU(IU,J)=PJU(IU,J)+P(I1,J)
40299   230     CONTINUE
40300   240   CONTINUE
40301         DO 250 IU=1,3
40302           PJU(IU,5)=SQRT(PJU(IU,1)**2+PJU(IU,2)**2+PJU(IU,3)**2)
40303   250   CONTINUE
40304         IF(K(IJU(3),2)/100.NE.10*K(IJU(1),2)+K(IJU(2),2).AND.
40305      &  K(IJU(3),2)/100.NE.10*K(IJU(2),2)+K(IJU(1),2)) THEN
40306           CALL PYERRM(12,'(PYSTRF:) unphysical flavour combination')
40307           IF(MSTU(21).GE.1) RETURN
40308         ENDIF
40309  
40310 C...Calculate (approximate) boost to rest frame of junction.
40311         T12=(PJU(1,1)*PJU(2,1)+PJU(1,2)*PJU(2,2)+PJU(1,3)*PJU(2,3))/
40312      &  (PJU(1,5)*PJU(2,5))
40313         T13=(PJU(1,1)*PJU(3,1)+PJU(1,2)*PJU(3,2)+PJU(1,3)*PJU(3,3))/
40314      &  (PJU(1,5)*PJU(3,5))
40315         T23=(PJU(2,1)*PJU(3,1)+PJU(2,2)*PJU(3,2)+PJU(2,3)*PJU(3,3))/
40316      &  (PJU(2,5)*PJU(3,5))
40317         T11=SQRT((2D0/3D0)*(1D0-T12)*(1D0-T13)/(1D0-T23))
40318         T22=SQRT((2D0/3D0)*(1D0-T12)*(1D0-T23)/(1D0-T13))
40319         TSQ=SQRT((2D0*T11*T22+T12-1D0)*(1D0+T12))
40320         T1F=(TSQ-T22*(1D0+T12))/(1D0-T12**2)
40321         T2F=(TSQ-T11*(1D0+T12))/(1D0-T12**2)
40322         DO 260 J=1,3
40323           TJU(J)=-(T1F*PJU(1,J)/PJU(1,5)+T2F*PJU(2,J)/PJU(2,5))
40324   260   CONTINUE
40325         TJU(4)=SQRT(1D0+TJU(1)**2+TJU(2)**2+TJU(3)**2)
40326         DO 270 IU=1,3
40327           PJU(IU,5)=TJU(4)*PJU(IU,4)-TJU(1)*PJU(IU,1)-TJU(2)*PJU(IU,2)-
40328      &    TJU(3)*PJU(IU,3)
40329   270   CONTINUE
40330  
40331 C...Put junction at rest if motion could give inconsistencies.
40332         IF(PJU(1,5)+PJU(2,5).GT.PJU(1,4)+PJU(2,4)) THEN
40333           DO 280 J=1,3
40334             TJU(J)=0D0
40335   280     CONTINUE
40336           TJU(4)=1D0
40337           PJU(1,5)=PJU(1,4)
40338           PJU(2,5)=PJU(2,4)
40339           PJU(3,5)=PJU(3,4)
40340         ENDIF
40341  
40342 C...Start preparing for fragmentation of two strings from junction.
40343         ISTA=I
40344         DO 550 IU=1,2
40345           NS=IJU(IU+1)-IJU(IU)
40346  
40347 C...Junction strings: find longitudinal string directions.
40348           DO 310 IS=1,NS
40349             IS1=IJU(IU)+IS-1
40350             IS2=IJU(IU)+IS
40351             DO 290 J=1,5
40352               DP(1,J)=0.5D0*P(IS1,J)
40353               IF(IS.EQ.1) DP(1,J)=P(IS1,J)
40354               DP(2,J)=0.5D0*P(IS2,J)
40355               IF(IS.EQ.NS) DP(2,J)=-PJU(IU,J)
40356   290       CONTINUE
40357             IF(IS.EQ.NS) DP(2,4)=SQRT(PJU(IU,1)**2+PJU(IU,2)**2+
40358      &      PJU(IU,3)**2)
40359             IF(IS.EQ.NS) DP(2,5)=0D0
40360             DP(3,5)=DFOUR(1,1)
40361             DP(4,5)=DFOUR(2,2)
40362             DHKC=DFOUR(1,2)
40363             IF(DP(3,5)+2D0*DHKC+DP(4,5).LE.0D0) THEN
40364               DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
40365               DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
40366               DP(3,5)=0D0
40367               DP(4,5)=0D0
40368               DHKC=DFOUR(1,2)
40369             ENDIF
40370             DHKS=SQRT(DHKC**2-DP(3,5)*DP(4,5))
40371             DHK1=0.5D0*((DP(4,5)+DHKC)/DHKS-1D0)
40372             DHK2=0.5D0*((DP(3,5)+DHKC)/DHKS-1D0)
40373             IN1=N+NR+4*IS-3
40374             P(IN1,5)=SQRT(DP(3,5)+2D0*DHKC+DP(4,5))
40375             DO 300 J=1,4
40376               P(IN1,J)=(1D0+DHK1)*DP(1,J)-DHK2*DP(2,J)
40377               P(IN1+1,J)=(1D0+DHK2)*DP(2,J)-DHK1*DP(1,J)
40378   300       CONTINUE
40379   310     CONTINUE
40380  
40381 C...Junction strings: initialize flavour, momentum and starting pos.
40382           ISAV=I
40383           MSTU91=MSTU(90)
40384   320     NTRY=NTRY+1
40385           IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
40386             PARU12=4D0*PARU12
40387             PARU13=2D0*PARU13
40388             GOTO 140
40389           ELSEIF(NTRY.GT.100) THEN
40390             CALL PYERRM(14,'(PYSTRF:) caught in infinite loop')
40391             IF(MSTU(21).GE.1) RETURN
40392           ENDIF
40393           I=ISAV
40394           MSTU(90)=MSTU91
40395           IRANKJ=0
40396           IE(1)=K(N+1+(JT/2)*(NP-1),3)
40397           IN(4)=N+NR+1
40398           IN(5)=IN(4)+1
40399           IN(6)=N+NR+4*NS+1
40400           DO 340 JQ=1,2
40401             DO 330 IN1=N+NR+2+JQ,N+NR+4*NS-2+JQ,4
40402               P(IN1,1)=2-JQ
40403               P(IN1,2)=JQ-1
40404               P(IN1,3)=1D0
40405   330       CONTINUE
40406   340     CONTINUE
40407           KFL(1)=K(IJU(IU),2)
40408           PX(1)=0D0
40409           PY(1)=0D0
40410           GAM(1)=0D0
40411           DO 350 J=1,5
40412             PJU(IU+3,J)=0D0
40413   350     CONTINUE
40414  
40415 C...Junction strings: find initial transverse directions.
40416           DO 360 J=1,4
40417             DP(1,J)=P(IN(4),J)
40418             DP(2,J)=P(IN(4)+1,J)
40419             DP(3,J)=0D0
40420             DP(4,J)=0D0
40421   360     CONTINUE
40422           DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
40423           DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
40424           DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
40425           DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
40426           DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
40427           IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1D0
40428           IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1D0
40429           IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1D0
40430           IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1D0
40431           DHC12=DFOUR(1,2)
40432           DHCX1=DFOUR(3,1)/DHC12
40433           DHCX2=DFOUR(3,2)/DHC12
40434           DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
40435           DHCY1=DFOUR(4,1)/DHC12
40436           DHCY2=DFOUR(4,2)/DHC12
40437           DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
40438           DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
40439           DO 370 J=1,4
40440             DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
40441             P(IN(6),J)=DP(3,J)
40442             P(IN(6)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
40443      &      DHCYX*DP(3,J))
40444   370     CONTINUE
40445  
40446 C...Junction strings: produce new particle, origin.
40447   380     I=I+1
40448           IF(2*I-NSAV.GE.MSTU(4)-MSTU(32)-5) THEN
40449             CALL PYERRM(11,'(PYSTRF:) no more memory left in PYJETS')
40450             IF(MSTU(21).GE.1) RETURN
40451           ENDIF
40452           IRANKJ=IRANKJ+1
40453           K(I,1)=1
40454           K(I,3)=IE(1)
40455           K(I,4)=0
40456           K(I,5)=0
40457  
40458 C...Junction strings: generate flavour, hadron, pT, z and Gamma.
40459   390     CALL PYKFDI(KFL(1),0,KFL(3),K(I,2))
40460           IF(K(I,2).EQ.0) GOTO 320
40461           IF(IRANKJ.EQ.1.AND.IABS(KFL(1)).LE.10.AND.
40462      &    IABS(KFL(3)).GT.10) THEN
40463             IF(PYR(0).GT.PARJ(19)) GOTO 390
40464           ENDIF
40465           P(I,5)=PYMASS(K(I,2))
40466           CALL PYPTDI(KFL(1),PX(3),PY(3))
40467           PR(1)=P(I,5)**2+(PX(1)+PX(3))**2+(PY(1)+PY(3))**2
40468           CALL PYZDIS(KFL(1),KFL(3),PR(1),Z)
40469           IF(IABS(KFL(1)).GE.4.AND.IABS(KFL(1)).LE.8.AND.
40470      &    MSTU(90).LT.8) THEN
40471             MSTU(90)=MSTU(90)+1
40472             MSTU(90+MSTU(90))=I
40473             PARU(90+MSTU(90))=Z
40474           ENDIF
40475           GAM(3)=(1D0-Z)*(GAM(1)+PR(1)/Z)
40476           DO 400 J=1,3
40477             IN(J)=IN(3+J)
40478   400     CONTINUE
40479  
40480 C...Junction strings: stepping within or from 'low' string region easy.
40481           IF(IN(1)+1.EQ.IN(2).AND.Z*P(IN(1)+2,3)*P(IN(2)+2,3)*
40482      &    P(IN(1),5)**2.GE.PR(1)) THEN
40483             P(IN(1)+2,4)=Z*P(IN(1)+2,3)
40484             P(IN(2)+2,4)=PR(1)/(P(IN(1)+2,4)*P(IN(1),5)**2)
40485             DO 410 J=1,4
40486               P(I,J)=(PX(1)+PX(3))*P(IN(3),J)+(PY(1)+PY(3))*P(IN(3)+1,J)
40487   410       CONTINUE
40488             GOTO 500
40489           ELSEIF(IN(1)+1.EQ.IN(2)) THEN
40490             P(IN(2)+2,4)=P(IN(2)+2,3)
40491             P(IN(2)+2,1)=1D0
40492             IN(2)=IN(2)+4
40493             IF(IN(2).GT.N+NR+4*NS) GOTO 320
40494             IF(FOUR(IN(1),IN(2)).LE.1D-2) THEN
40495               P(IN(1)+2,4)=P(IN(1)+2,3)
40496               P(IN(1)+2,1)=0D0
40497               IN(1)=IN(1)+4
40498             ENDIF
40499           ENDIF
40500  
40501 C...Junction strings: find new transverse directions.
40502   420     IF(IN(1).GT.N+NR+4*NS.OR.IN(2).GT.N+NR+4*NS.OR.
40503      &    IN(1).GT.IN(2)) GOTO 320
40504           IF(IN(1).NE.IN(4).OR.IN(2).NE.IN(5)) THEN
40505             DO 430 J=1,4
40506               DP(1,J)=P(IN(1),J)
40507               DP(2,J)=P(IN(2),J)
40508               DP(3,J)=0D0
40509               DP(4,J)=0D0
40510   430       CONTINUE
40511             DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
40512             DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
40513             DHC12=DFOUR(1,2)
40514             IF(DHC12.LE.1D-2) THEN
40515               P(IN(1)+2,4)=P(IN(1)+2,3)
40516               P(IN(1)+2,1)=0D0
40517               IN(1)=IN(1)+4
40518               GOTO 420
40519             ENDIF
40520             IN(3)=N+NR+4*NS+5
40521             DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
40522             DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
40523             DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
40524             IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1D0
40525             IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1D0
40526             IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1D0
40527             IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1D0
40528             DHCX1=DFOUR(3,1)/DHC12
40529             DHCX2=DFOUR(3,2)/DHC12
40530             DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
40531             DHCY1=DFOUR(4,1)/DHC12
40532             DHCY2=DFOUR(4,2)/DHC12
40533             DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
40534             DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
40535             DO 440 J=1,4
40536               DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
40537               P(IN(3),J)=DP(3,J)
40538               P(IN(3)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
40539      &        DHCYX*DP(3,J))
40540   440       CONTINUE
40541 C...Express pT with respect to new axes, if sensible.
40542             PXP=-(PX(3)*FOUR(IN(6),IN(3))+PY(3)*FOUR(IN(6)+1,IN(3)))
40543             PYP=-(PX(3)*FOUR(IN(6),IN(3)+1)+PY(3)*FOUR(IN(6)+1,IN(3)+1))
40544             IF(ABS(PXP**2+PYP**2-PX(3)**2-PY(3)**2).LT.0.01D0) THEN
40545               PX(3)=PXP
40546               PY(3)=PYP
40547             ENDIF
40548           ENDIF
40549  
40550 C...Junction strings: sum up known four-momentum, coefficients for m2.
40551           DO 470 J=1,4
40552             DHG(J)=0D0
40553             P(I,J)=PX(1)*P(IN(6),J)+PY(1)*P(IN(6)+1,J)+PX(3)*P(IN(3),J)+
40554      &      PY(3)*P(IN(3)+1,J)
40555             DO 450 IN1=IN(4),IN(1)-4,4
40556               P(I,J)=P(I,J)+P(IN1+2,3)*P(IN1,J)
40557   450       CONTINUE
40558             DO 460 IN2=IN(5),IN(2)-4,4
40559               P(I,J)=P(I,J)+P(IN2+2,3)*P(IN2,J)
40560   460       CONTINUE
40561   470     CONTINUE
40562           DHM(1)=FOUR(I,I)
40563           DHM(2)=2D0*FOUR(I,IN(1))
40564           DHM(3)=2D0*FOUR(I,IN(2))
40565           DHM(4)=2D0*FOUR(IN(1),IN(2))
40566  
40567 C...Junction strings: find coefficients for Gamma expression.
40568           DO 490 IN2=IN(1)+1,IN(2),4
40569             DO 480 IN1=IN(1),IN2-1,4
40570               DHC=2D0*FOUR(IN1,IN2)
40571               DHG(1)=DHG(1)+P(IN1+2,1)*P(IN2+2,1)*DHC
40572               IF(IN1.EQ.IN(1)) DHG(2)=DHG(2)-P(IN2+2,1)*DHC
40573               IF(IN2.EQ.IN(2)) DHG(3)=DHG(3)+P(IN1+2,1)*DHC
40574               IF(IN1.EQ.IN(1).AND.IN2.EQ.IN(2)) DHG(4)=DHG(4)-DHC
40575   480       CONTINUE
40576   490     CONTINUE
40577  
40578 C...Junction strings: solve (m2, Gamma) equation system for energies.
40579           DHS1=DHM(3)*DHG(4)-DHM(4)*DHG(3)
40580           IF(ABS(DHS1).LT.1D-4) GOTO 320
40581           DHS2=DHM(4)*(GAM(3)-DHG(1))-DHM(2)*DHG(3)-DHG(4)*
40582      &    (P(I,5)**2-DHM(1))+DHG(2)*DHM(3)
40583           DHS3=DHM(2)*(GAM(3)-DHG(1))-DHG(2)*(P(I,5)**2-DHM(1))
40584           P(IN(2)+2,4)=0.5D0*(SQRT(MAX(0D0,DHS2**2-4D0*DHS1*DHS3))/
40585      &    ABS(DHS1)-DHS2/DHS1)
40586           IF(DHM(2)+DHM(4)*P(IN(2)+2,4).LE.0D0) GOTO 320
40587           P(IN(1)+2,4)=(P(I,5)**2-DHM(1)-DHM(3)*P(IN(2)+2,4))/
40588      &    (DHM(2)+DHM(4)*P(IN(2)+2,4))
40589  
40590 C...Junction strings: step to new region if necessary.
40591           IF(P(IN(2)+2,4).GT.P(IN(2)+2,3)) THEN
40592             P(IN(2)+2,4)=P(IN(2)+2,3)
40593             P(IN(2)+2,1)=1D0
40594             IN(2)=IN(2)+4
40595             IF(IN(2).GT.N+NR+4*NS) GOTO 320
40596             IF(FOUR(IN(1),IN(2)).LE.1D-2) THEN
40597               P(IN(1)+2,4)=P(IN(1)+2,3)
40598               P(IN(1)+2,1)=0D0
40599               IN(1)=IN(1)+4
40600             ENDIF
40601             GOTO 420
40602           ELSEIF(P(IN(1)+2,4).GT.P(IN(1)+2,3)) THEN
40603             P(IN(1)+2,4)=P(IN(1)+2,3)
40604             P(IN(1)+2,1)=0D0
40605             IN(1)=IN(1)+JS
40606             GOTO 890
40607           ENDIF
40608  
40609 C...Junction strings: particle four-momentum, remainder, loop back.
40610   500     DO 510 J=1,4
40611             P(I,J)=P(I,J)+P(IN(1)+2,4)*P(IN(1),J)+
40612      &      P(IN(2)+2,4)*P(IN(2),J)
40613             PJU(IU+3,J)=PJU(IU+3,J)+P(I,J)
40614   510     CONTINUE
40615           IF(P(I,4).LT.P(I,5)) GOTO 320
40616           PJU(IU+3,5)=TJU(4)*PJU(IU+3,4)-TJU(1)*PJU(IU+3,1)-
40617      &    TJU(2)*PJU(IU+3,2)-TJU(3)*PJU(IU+3,3)
40618           IF(PJU(IU+3,5).LT.PJU(IU,5)) THEN
40619             KFL(1)=-KFL(3)
40620             PX(1)=-PX(3)
40621             PY(1)=-PY(3)
40622             GAM(1)=GAM(3)
40623             IF(IN(3).NE.IN(6)) THEN
40624               DO 520 J=1,4
40625                 P(IN(6),J)=P(IN(3),J)
40626                 P(IN(6)+1,J)=P(IN(3)+1,J)
40627   520         CONTINUE
40628             ENDIF
40629             DO 530 JQ=1,2
40630               IN(3+JQ)=IN(JQ)
40631               P(IN(JQ)+2,3)=P(IN(JQ)+2,3)-P(IN(JQ)+2,4)
40632               P(IN(JQ)+2,1)=P(IN(JQ)+2,1)-(3-2*JQ)*P(IN(JQ)+2,4)
40633   530       CONTINUE
40634             GOTO 380
40635           ENDIF
40636  
40637 C...Junction strings: save quantities left after each string.
40638           IF(IABS(KFL(1)).GT.10) GOTO 320
40639           I=I-1
40640           KFJH(IU)=KFL(1)
40641           DO 540 J=1,4
40642             PJU(IU+3,J)=PJU(IU+3,J)-P(I+1,J)
40643   540     CONTINUE
40644   550   CONTINUE
40645  
40646 C...Junction strings: put together to new effective string endpoint.
40647         NJS(JT)=I-ISTA
40648         KFJS(JT)=K(K(MJU(JT+2),3),2)
40649         KFLS=2*INT(PYR(0)+3D0*PARJ(4)/(1D0+3D0*PARJ(4)))+1
40650         IF(KFJH(1).EQ.KFJH(2)) KFLS=3
40651         IF(ISTA.NE.I) KFJS(JT)=ISIGN(1000*MAX(IABS(KFJH(1)),
40652      &  IABS(KFJH(2)))+100*MIN(IABS(KFJH(1)),IABS(KFJH(2)))+
40653      &  KFLS,KFJH(1))
40654         DO 560 J=1,4
40655           PJS(JT,J)=PJU(1,J)+PJU(2,J)+P(MJU(JT),J)
40656           PJS(JT+2,J)=PJU(4,J)+PJU(5,J)
40657   560   CONTINUE
40658         PJS(JT,5)=SQRT(MAX(0D0,PJS(JT,4)**2-PJS(JT,1)**2-PJS(JT,2)**2-
40659      &  PJS(JT,3)**2))
40660   570 CONTINUE
40661  
40662 C...Open versus closed strings. Choose breakup region for latter.
40663   580 IF(MJU(1).NE.0.AND.MJU(2).NE.0) THEN
40664         NS=MJU(2)-MJU(1)
40665         NB=MJU(1)-N
40666       ELSEIF(MJU(1).NE.0) THEN
40667         NS=N+NR-MJU(1)
40668         NB=MJU(1)-N
40669       ELSEIF(MJU(2).NE.0) THEN
40670         NS=MJU(2)-N
40671         NB=1
40672       ELSEIF(IABS(K(N+1,2)).NE.21) THEN
40673         NS=NR-1
40674         NB=1
40675       ELSE
40676         NS=NR+1
40677         W2SUM=0D0
40678         DO 590 IS=1,NR
40679           P(N+NR+IS,1)=0.5D0*FOUR(N+IS,N+IS+1-NR*(IS/NR))
40680           W2SUM=W2SUM+P(N+NR+IS,1)
40681   590   CONTINUE
40682         W2RAN=PYR(0)*W2SUM
40683         NB=0
40684   600   NB=NB+1
40685         W2SUM=W2SUM-P(N+NR+NB,1)
40686         IF(W2SUM.GT.W2RAN.AND.NB.LT.NR) GOTO 600
40687       ENDIF
40688  
40689 C...Find longitudinal string directions (i.e. lightlike four-vectors).
40690       DO 630 IS=1,NS
40691         IS1=N+IS+NB-1-NR*((IS+NB-2)/NR)
40692         IS2=N+IS+NB-NR*((IS+NB-1)/NR)
40693         DO 610 J=1,5
40694           DP(1,J)=P(IS1,J)
40695           IF(IABS(K(IS1,2)).EQ.21) DP(1,J)=0.5D0*DP(1,J)
40696           IF(IS1.EQ.MJU(1)) DP(1,J)=PJS(1,J)-PJS(3,J)
40697           DP(2,J)=P(IS2,J)
40698           IF(IABS(K(IS2,2)).EQ.21) DP(2,J)=0.5D0*DP(2,J)
40699           IF(IS2.EQ.MJU(2)) DP(2,J)=PJS(2,J)-PJS(4,J)
40700   610   CONTINUE
40701         DP(3,5)=DFOUR(1,1)
40702         DP(4,5)=DFOUR(2,2)
40703         DHKC=DFOUR(1,2)
40704         IF(DP(3,5)+2D0*DHKC+DP(4,5).LE.0D0) THEN
40705           DP(3,5)=DP(1,5)**2
40706           DP(4,5)=DP(2,5)**2
40707           DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2+DP(1,5)**2)
40708           DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2+DP(2,5)**2)
40709           DHKC=DFOUR(1,2)
40710         ENDIF
40711         DHKS=SQRT(DHKC**2-DP(3,5)*DP(4,5))
40712         DHK1=0.5D0*((DP(4,5)+DHKC)/DHKS-1D0)
40713         DHK2=0.5D0*((DP(3,5)+DHKC)/DHKS-1D0)
40714         IN1=N+NR+4*IS-3
40715         P(IN1,5)=SQRT(DP(3,5)+2D0*DHKC+DP(4,5))
40716         DO 620 J=1,4
40717           P(IN1,J)=(1D0+DHK1)*DP(1,J)-DHK2*DP(2,J)
40718           P(IN1+1,J)=(1D0+DHK2)*DP(2,J)-DHK1*DP(1,J)
40719   620   CONTINUE
40720   630 CONTINUE
40721  
40722 C...Begin initialization: sum up energy, set starting position.
40723       ISAV=I
40724       MSTU91=MSTU(90)
40725   640 NTRY=NTRY+1
40726       IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
40727         PARU12=4D0*PARU12
40728         PARU13=2D0*PARU13
40729         GOTO 140
40730       ELSEIF(NTRY.GT.100) THEN
40731         CALL PYERRM(14,'(PYSTRF:) caught in infinite loop')
40732         IF(MSTU(21).GE.1) RETURN
40733       ENDIF
40734       I=ISAV
40735       MSTU(90)=MSTU91
40736       DO 660 J=1,4
40737         P(N+NRS,J)=0D0
40738         DO 650 IS=1,NR
40739           P(N+NRS,J)=P(N+NRS,J)+P(N+IS,J)
40740   650   CONTINUE
40741   660 CONTINUE
40742       DO 680 JT=1,2
40743         IRANK(JT)=0
40744         IF(MJU(JT).NE.0) IRANK(JT)=NJS(JT)
40745         IF(NS.GT.NR) IRANK(JT)=1
40746         IE(JT)=K(N+1+(JT/2)*(NP-1),3)
40747         IN(3*JT+1)=N+NR+1+4*(JT/2)*(NS-1)
40748         IN(3*JT+2)=IN(3*JT+1)+1
40749         IN(3*JT+3)=N+NR+4*NS+2*JT-1
40750         DO 670 IN1=N+NR+2+JT,N+NR+4*NS-2+JT,4
40751           P(IN1,1)=2-JT
40752           P(IN1,2)=JT-1
40753           P(IN1,3)=1D0
40754   670   CONTINUE
40755   680 CONTINUE
40756 C.. MOPS variables and switches
40757       NRVMO=0
40758       XBMO=1D0
40759       MSTU(121)=0
40760       MSTU(122)=0
40761  
40762 C...Initialize flavour and pT variables for open string.
40763       IF(NS.LT.NR) THEN
40764         PX(1)=0D0
40765         PY(1)=0D0
40766         IF(NS.EQ.1.AND.MJU(1)+MJU(2).EQ.0) CALL PYPTDI(0,PX(1),PY(1))
40767         PX(2)=-PX(1)
40768         PY(2)=-PY(1)
40769         DO 690 JT=1,2
40770           KFL(JT)=K(IE(JT),2)
40771           IF(MJU(JT).NE.0) KFL(JT)=KFJS(JT)
40772           MSTJ(93)=1
40773           PMQ(JT)=PYMASS(KFL(JT))
40774           GAM(JT)=0D0
40775   690   CONTINUE
40776  
40777 C...Closed string: random initial breakup flavour, pT and vertex.
40778       ELSE
40779         KFL(3)=INT(1D0+(2D0+PARJ(2))*PYR(0))*(-1)**INT(PYR(0)+0.5D0)
40780         IBMO=0
40781   700   CALL PYKFDI(KFL(3),0,KFL(1),KDUMP)
40782 C.. Closed string: first vertex diq attempt => enforced second
40783 C.. vertex diq
40784         IF(IABS(KFL(1)).GT.10)THEN
40785            IBMO=1
40786            MSTU(121)=0
40787            GOTO 700
40788         ENDIF
40789         IF(IBMO.EQ.1) MSTU(121)=-1
40790         KFL(2)=-KFL(1)
40791         CALL PYPTDI(KFL(1),PX(1),PY(1))
40792         PX(2)=-PX(1)
40793         PY(2)=-PY(1)
40794         PR3=MIN(25D0,0.1D0*P(N+NR+1,5)**2)
40795   710   CALL PYZDIS(KFL(1),KFL(2),PR3,Z)
40796         ZR=PR3/(Z*P(N+NR+1,5)**2)
40797         IF(ZR.GE.1D0) GOTO 710
40798         DO 720 JT=1,2
40799           MSTJ(93)=1
40800           PMQ(JT)=PYMASS(KFL(JT))
40801           GAM(JT)=PR3*(1D0-Z)/Z
40802           IN1=N+NR+3+4*(JT/2)*(NS-1)
40803           P(IN1,JT)=1D0-Z
40804           P(IN1,3-JT)=JT-1
40805           P(IN1,3)=(2-JT)*(1D0-Z)+(JT-1)*Z
40806           P(IN1+1,JT)=ZR
40807           P(IN1+1,3-JT)=2-JT
40808           P(IN1+1,3)=(2-JT)*(1D0-ZR)+(JT-1)*ZR
40809   720   CONTINUE
40810       ENDIF
40811 C.. MOPS variables
40812       DO 730 JT=1,2
40813          XTMO(JT)=1D0
40814          PM2QMO(JT)=PMQ(JT)**2
40815          IF(IABS(KFL(JT)).GT.10) PM2QMO(JT)=0D0
40816   730 CONTINUE
40817  
40818 C...Find initial transverse directions (i.e. spacelike four-vectors).
40819       DO 770 JT=1,2
40820         IF(JT.EQ.1.OR.NS.EQ.NR-1) THEN
40821           IN1=IN(3*JT+1)
40822           IN3=IN(3*JT+3)
40823           DO 740 J=1,4
40824             DP(1,J)=P(IN1,J)
40825             DP(2,J)=P(IN1+1,J)
40826             DP(3,J)=0D0
40827             DP(4,J)=0D0
40828   740     CONTINUE
40829           DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
40830           DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
40831           DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
40832           DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
40833           DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
40834           IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1D0
40835           IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1D0
40836           IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1D0
40837           IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1D0
40838           DHC12=DFOUR(1,2)
40839           DHCX1=DFOUR(3,1)/DHC12
40840           DHCX2=DFOUR(3,2)/DHC12
40841           DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
40842           DHCY1=DFOUR(4,1)/DHC12
40843           DHCY2=DFOUR(4,2)/DHC12
40844           DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
40845           DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
40846           DO 750 J=1,4
40847             DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
40848             P(IN3,J)=DP(3,J)
40849             P(IN3+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
40850      &      DHCYX*DP(3,J))
40851   750     CONTINUE
40852         ELSE
40853           DO 760 J=1,4
40854             P(IN3+2,J)=P(IN3,J)
40855             P(IN3+3,J)=P(IN3+1,J)
40856   760     CONTINUE
40857         ENDIF
40858   770 CONTINUE
40859  
40860 C...Remove energy used up in junction string fragmentation.
40861       IF(MJU(1)+MJU(2).GT.0) THEN
40862         DO 790 JT=1,2
40863           IF(NJS(JT).EQ.0) GOTO 790
40864           DO 780 J=1,4
40865             P(N+NRS,J)=P(N+NRS,J)-PJS(JT+2,J)
40866   780     CONTINUE
40867   790   CONTINUE
40868       ENDIF
40869  
40870 C...Produce new particle: side, origin.
40871   800 I=I+1
40872       IF(2*I-NSAV.GE.MSTU(4)-MSTU(32)-5) THEN
40873         CALL PYERRM(11,'(PYSTRF:) no more memory left in PYJETS')
40874         IF(MSTU(21).GE.1) RETURN
40875       ENDIF
40876 C.. New side priority for popcorn systems
40877       IF(MSTU(121).LE.0)THEN
40878          JT=1.5D0+PYR(0)
40879          IF(IABS(KFL(3-JT)).GT.10) JT=3-JT
40880          IF(IABS(KFL(3-JT)).GE.4.AND.IABS(KFL(3-JT)).LE.8) JT=3-JT
40881       ENDIF
40882       JR=3-JT
40883       JS=3-2*JT
40884       IRANK(JT)=IRANK(JT)+1
40885       K(I,1)=1
40886       K(I,3)=IE(JT)
40887       K(I,4)=0
40888       K(I,5)=0
40889  
40890 C...Generate flavour, hadron and pT.
40891   810 CONTINUE
40892       CALL PYKFDI(KFL(JT),0,KFL(3),K(I,2))
40893       IF(K(I,2).EQ.0) GOTO 640
40894       MU90MO=MSTU(90)
40895       IF(MSTU(121).EQ.-1) GOTO 840
40896       IF(IRANK(JT).EQ.1.AND.IABS(KFL(JT)).LE.10.AND.
40897      &IABS(KFL(3)).GT.10) THEN
40898         IF(PYR(0).GT.PARJ(19)) GOTO 810
40899       ENDIF
40900       P(I,5)=PYMASS(K(I,2))
40901       CALL PYPTDI(KFL(JT),PX(3),PY(3))
40902       PR(JT)=P(I,5)**2+(PX(JT)+PX(3))**2+(PY(JT)+PY(3))**2
40903  
40904 C...Final hadrons for small invariant mass.
40905       MSTJ(93)=1
40906       PMQ(3)=PYMASS(KFL(3))
40907       PARJST=PARJ(33)
40908       IF(MSTJ(11).EQ.2) PARJST=PARJ(34)
40909       WMIN=PARJST+PMQ(1)+PMQ(2)+PARJ(36)*PMQ(3)
40910       IF(IABS(KFL(JT)).GT.10.AND.IABS(KFL(3)).GT.10) WMIN=
40911      &WMIN-0.5D0*PARJ(36)*PMQ(3)
40912       WREM2=FOUR(N+NRS,N+NRS)
40913       IF(WREM2.LT.0.10D0) GOTO 640
40914       IF(WREM2.LT.MAX(WMIN*(1D0+(2D0*PYR(0)-1D0)*PARJ(37)),
40915      &PARJ(32)+PMQ(1)+PMQ(2))**2) GOTO 1010
40916  
40917 C...Choose z, which gives Gamma. Shift z for heavy flavours.
40918       CALL PYZDIS(KFL(JT),KFL(3),PR(JT),Z)
40919       IF(IABS(KFL(JT)).GE.4.AND.IABS(KFL(JT)).LE.8.AND.
40920      &MSTU(90).LT.8) THEN
40921         MSTU(90)=MSTU(90)+1
40922         MSTU(90+MSTU(90))=I
40923         PARU(90+MSTU(90))=Z
40924       ENDIF
40925       KFL1A=IABS(KFL(1))
40926       KFL2A=IABS(KFL(2))
40927       IF(MAX(MOD(KFL1A,10),MOD(KFL1A/1000,10),MOD(KFL2A,10),
40928      &MOD(KFL2A/1000,10)).GE.4) THEN
40929         PR(JR)=(PMQ(JR)+PMQ(3))**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
40930         PW12=SQRT(MAX(0D0,(WREM2-PR(1)-PR(2))**2-4D0*PR(1)*PR(2)))
40931         Z=(WREM2+PR(JT)-PR(JR)+PW12*(2D0*Z-1D0))/(2D0*WREM2)
40932         PR(JR)=(PMQ(JR)+PARJST)**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
40933         IF((1D0-Z)*(WREM2-PR(JT)/Z).LT.PR(JR)) GOTO 1010
40934       ENDIF
40935       GAM(3)=(1D0-Z)*(GAM(JT)+PR(JT)/Z)
40936  
40937 C.. MOPS baryon model modification
40938       XTMO3=(1D0-Z)*XTMO(JT)
40939       IF(IABS(KFL(3)).LE.10) NRVMO=0
40940       IF(IABS(KFL(3)).GT.10.AND.MSTJ(12).GE.4) THEN
40941          GTSTMO=1D0
40942          PTSTMO=1D0
40943          RTSTMO=PYR(0)
40944          IF(IABS(KFL(JT)).LE.10)THEN
40945             XBMO=MIN(XTMO3,1D0-(2D-10))
40946             GBMO=GAM(3)
40947             PMMO=0D0
40948             PGMO=GBMO+LOG(1D0-XBMO)*PM2QMO(JT)
40949             GTSTMO=1D0-PARF(192)**PGMO
40950          ELSE
40951             IF(IRANK(JT).EQ.1) THEN
40952                GBMO=GAM(JT)
40953                PMMO=0D0
40954                XBMO=1D0
40955             ENDIF
40956             IF(XBMO.LT.1D0-(1D-10))THEN
40957                PGNMO=GBMO*XTMO3/XBMO+PM2QMO(JT)*LOG(1D0-XTMO3)
40958                GTSTMO=(1D0-PARF(192)**PGNMO)/(1D0-PARF(192)**PGMO)
40959                PGMO=PGNMO
40960             ENDIF
40961             IF(MSTJ(12).GE.5)THEN
40962                PMNMO=SQRT((XBMO-XTMO3)*(GAM(3)/XTMO3-GBMO/XBMO))
40963                PMMO=PMMO+PMAS(PYCOMP(K(I,2)),1)-PMAS(PYCOMP(K(I,2)),3)
40964                PTSTMO=EXP((PMMO-PMNMO)*PARF(193))
40965                PMMO=PMNMO
40966             ENDIF
40967          ENDIF
40968  
40969 C.. MOPS Accepting popcorn system hadron.
40970          IF(PTSTMO*GTSTMO.GT.RTSTMO) THEN
40971             IF(IRANK(JT).EQ.1.OR.IABS(KFL(JT)).LE.10) THEN
40972                NRVMO=I-N-NR
40973                IF(I+NRVMO.GT.MSTU(4)-MSTU(32)-5) THEN
40974                   CALL PYERRM(11,
40975      &                 '(PYSTRF:) no more memory left in PYJETS')
40976                   IF(MSTU(21).GE.1) RETURN
40977                ENDIF
40978                IMO=I
40979                KFLMO=KFL(JT)
40980                PMQMO=PMQ(JT)
40981                PXMO=PX(JT)
40982                PYMO=PY(JT)
40983                GAMMO=GAM(JT)
40984                IRMO=IRANK(JT)
40985                XMO=XTMO(JT)
40986                DO 830 J=1,9
40987                   IF(J.LE.5) THEN
40988                      DO 820 LINE=1,I-N-NR
40989                         P(MSTU(4)-MSTU(32)-LINE,J)=P(N+NR+LINE,J)
40990                         K(MSTU(4)-MSTU(32)-LINE,J)=K(N+NR+LINE,J)
40991   820                CONTINUE
40992                   ENDIF
40993                   INMO(J)=IN(J)
40994   830          CONTINUE
40995             ENDIF
40996          ELSE
40997 C..Reject popcorn system, flag=-1 if enforcing new one
40998             MSTU(121)=-1
40999             IF(PTSTMO.GT.RTSTMO) MSTU(121)=-2
41000          ENDIF
41001       ENDIF
41002  
41003  
41004 C..Lift restoring string outside MOPS block
41005   840 IF(MSTU(121).LT.0) THEN
41006          IF(MSTU(121).EQ.-2) MSTU(121)=0
41007          MSTU(90)=MU90MO
41008          NRVMO=0
41009          IF(IRANK(JT).EQ.1.OR.IABS(KFL(JT)).LE.10) GOTO 810
41010          I=IMO
41011          KFL(JT)=KFLMO
41012          PMQ(JT)=PMQMO
41013          PX(JT)=PXMO
41014          PY(JT)=PYMO
41015          GAM(JT)=GAMMO
41016          IRANK(JT)=IRMO
41017          XTMO(JT)=XMO
41018          DO 860 J=1,9
41019             IF(J.LE.5) THEN
41020                DO 850 LINE=1,I-N-NR
41021                   P(N+NR+LINE,J)=P(MSTU(4)-MSTU(32)-LINE,J)
41022                   K(N+NR+LINE,J)=K(MSTU(4)-MSTU(32)-LINE,J)
41023   850          CONTINUE
41024             ENDIF
41025             IN(J)=INMO(J)
41026   860    CONTINUE
41027          GOTO 810
41028       ENDIF
41029       XTMO(JT)=XTMO3
41030 C.. MOPS end of modification
41031  
41032       DO 870 J=1,3
41033         IN(J)=IN(3*JT+J)
41034   870 CONTINUE
41035  
41036 C...Stepping within or from 'low' string region easy.
41037       IF(IN(1)+1.EQ.IN(2).AND.Z*P(IN(1)+2,3)*P(IN(2)+2,3)*
41038      &P(IN(1),5)**2.GE.PR(JT)) THEN
41039         P(IN(JT)+2,4)=Z*P(IN(JT)+2,3)
41040         P(IN(JR)+2,4)=PR(JT)/(P(IN(JT)+2,4)*P(IN(1),5)**2)
41041         DO 880 J=1,4
41042           P(I,J)=(PX(JT)+PX(3))*P(IN(3),J)+(PY(JT)+PY(3))*P(IN(3)+1,J)
41043   880   CONTINUE
41044         GOTO 970
41045       ELSEIF(IN(1)+1.EQ.IN(2)) THEN
41046         P(IN(JR)+2,4)=P(IN(JR)+2,3)
41047         P(IN(JR)+2,JT)=1D0
41048         IN(JR)=IN(JR)+4*JS
41049         IF(JS*IN(JR).GT.JS*IN(4*JR)) GOTO 640
41050         IF(FOUR(IN(1),IN(2)).LE.1D-2) THEN
41051           P(IN(JT)+2,4)=P(IN(JT)+2,3)
41052           P(IN(JT)+2,JT)=0D0
41053           IN(JT)=IN(JT)+4*JS
41054         ENDIF
41055       ENDIF
41056  
41057 C...Find new transverse directions (i.e. spacelike string vectors).
41058   890 IF(JS*IN(1).GT.JS*IN(3*JR+1).OR.JS*IN(2).GT.JS*IN(3*JR+2).OR.
41059      &IN(1).GT.IN(2)) GOTO 640
41060       IF(IN(1).NE.IN(3*JT+1).OR.IN(2).NE.IN(3*JT+2)) THEN
41061         DO 900 J=1,4
41062           DP(1,J)=P(IN(1),J)
41063           DP(2,J)=P(IN(2),J)
41064           DP(3,J)=0D0
41065           DP(4,J)=0D0
41066   900   CONTINUE
41067         DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
41068         DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
41069         DHC12=DFOUR(1,2)
41070         IF(DHC12.LE.1D-2) THEN
41071           P(IN(JT)+2,4)=P(IN(JT)+2,3)
41072           P(IN(JT)+2,JT)=0D0
41073           IN(JT)=IN(JT)+4*JS
41074           GOTO 890
41075         ENDIF
41076         IN(3)=N+NR+4*NS+5
41077         DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
41078         DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
41079         DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
41080         IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1D0
41081         IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1D0
41082         IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1D0
41083         IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1D0
41084         DHCX1=DFOUR(3,1)/DHC12
41085         DHCX2=DFOUR(3,2)/DHC12
41086         DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
41087         DHCY1=DFOUR(4,1)/DHC12
41088         DHCY2=DFOUR(4,2)/DHC12
41089         DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
41090         DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
41091         DO 910 J=1,4
41092           DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
41093           P(IN(3),J)=DP(3,J)
41094           P(IN(3)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
41095      &    DHCYX*DP(3,J))
41096   910   CONTINUE
41097 C...Express pT with respect to new axes, if sensible.
41098         PXP=-(PX(3)*FOUR(IN(3*JT+3),IN(3))+PY(3)*
41099      &  FOUR(IN(3*JT+3)+1,IN(3)))
41100         PYP=-(PX(3)*FOUR(IN(3*JT+3),IN(3)+1)+PY(3)*
41101      &  FOUR(IN(3*JT+3)+1,IN(3)+1))
41102         IF(ABS(PXP**2+PYP**2-PX(3)**2-PY(3)**2).LT.0.01D0) THEN
41103           PX(3)=PXP
41104           PY(3)=PYP
41105         ENDIF
41106       ENDIF
41107  
41108 C...Sum up known four-momentum. Gives coefficients for m2 expression.
41109       DO 940 J=1,4
41110         DHG(J)=0D0
41111         P(I,J)=PX(JT)*P(IN(3*JT+3),J)+PY(JT)*P(IN(3*JT+3)+1,J)+
41112      &  PX(3)*P(IN(3),J)+PY(3)*P(IN(3)+1,J)
41113         DO 920 IN1=IN(3*JT+1),IN(1)-4*JS,4*JS
41114           P(I,J)=P(I,J)+P(IN1+2,3)*P(IN1,J)
41115   920   CONTINUE
41116         DO 930 IN2=IN(3*JT+2),IN(2)-4*JS,4*JS
41117           P(I,J)=P(I,J)+P(IN2+2,3)*P(IN2,J)
41118   930   CONTINUE
41119   940 CONTINUE
41120       DHM(1)=FOUR(I,I)
41121       DHM(2)=2D0*FOUR(I,IN(1))
41122       DHM(3)=2D0*FOUR(I,IN(2))
41123       DHM(4)=2D0*FOUR(IN(1),IN(2))
41124  
41125 C...Find coefficients for Gamma expression.
41126       DO 960 IN2=IN(1)+1,IN(2),4
41127         DO 950 IN1=IN(1),IN2-1,4
41128           DHC=2D0*FOUR(IN1,IN2)
41129           DHG(1)=DHG(1)+P(IN1+2,JT)*P(IN2+2,JT)*DHC
41130           IF(IN1.EQ.IN(1)) DHG(2)=DHG(2)-JS*P(IN2+2,JT)*DHC
41131           IF(IN2.EQ.IN(2)) DHG(3)=DHG(3)+JS*P(IN1+2,JT)*DHC
41132           IF(IN1.EQ.IN(1).AND.IN2.EQ.IN(2)) DHG(4)=DHG(4)-DHC
41133   950   CONTINUE
41134   960 CONTINUE
41135  
41136 C...Solve (m2, Gamma) equation system for energies taken.
41137       DHS1=DHM(JR+1)*DHG(4)-DHM(4)*DHG(JR+1)
41138       IF(ABS(DHS1).LT.1D-4) GOTO 640
41139       DHS2=DHM(4)*(GAM(3)-DHG(1))-DHM(JT+1)*DHG(JR+1)-DHG(4)*
41140      &(P(I,5)**2-DHM(1))+DHG(JT+1)*DHM(JR+1)
41141       DHS3=DHM(JT+1)*(GAM(3)-DHG(1))-DHG(JT+1)*(P(I,5)**2-DHM(1))
41142       P(IN(JR)+2,4)=0.5D0*(SQRT(MAX(0D0,DHS2**2-4D0*DHS1*DHS3))/
41143      &ABS(DHS1)-DHS2/DHS1)
41144       IF(DHM(JT+1)+DHM(4)*P(IN(JR)+2,4).LE.0D0) GOTO 640
41145       P(IN(JT)+2,4)=(P(I,5)**2-DHM(1)-DHM(JR+1)*P(IN(JR)+2,4))/
41146      &(DHM(JT+1)+DHM(4)*P(IN(JR)+2,4))
41147  
41148 C...Step to new region if necessary.
41149       IF(P(IN(JR)+2,4).GT.P(IN(JR)+2,3)) THEN
41150         P(IN(JR)+2,4)=P(IN(JR)+2,3)
41151         P(IN(JR)+2,JT)=1D0
41152         IN(JR)=IN(JR)+4*JS
41153         IF(JS*IN(JR).GT.JS*IN(4*JR)) GOTO 640
41154         IF(FOUR(IN(1),IN(2)).LE.1D-2) THEN
41155           P(IN(JT)+2,4)=P(IN(JT)+2,3)
41156           P(IN(JT)+2,JT)=0D0
41157           IN(JT)=IN(JT)+4*JS
41158         ENDIF
41159         GOTO 890
41160       ELSEIF(P(IN(JT)+2,4).GT.P(IN(JT)+2,3)) THEN
41161         P(IN(JT)+2,4)=P(IN(JT)+2,3)
41162         P(IN(JT)+2,JT)=0D0
41163         IN(JT)=IN(JT)+4*JS
41164         GOTO 890
41165       ENDIF
41166  
41167 C...Four-momentum of particle. Remaining quantities. Loop back.
41168   970 DO 980 J=1,4
41169         P(I,J)=P(I,J)+P(IN(1)+2,4)*P(IN(1),J)+P(IN(2)+2,4)*P(IN(2),J)
41170         P(N+NRS,J)=P(N+NRS,J)-P(I,J)
41171   980 CONTINUE
41172       IF(P(I,4).LT.P(I,5)) GOTO 640
41173       KFL(JT)=-KFL(3)
41174       PMQ(JT)=PMQ(3)
41175       PX(JT)=-PX(3)
41176       PY(JT)=-PY(3)
41177       GAM(JT)=GAM(3)
41178       IF(IN(3).NE.IN(3*JT+3)) THEN
41179         DO 990 J=1,4
41180           P(IN(3*JT+3),J)=P(IN(3),J)
41181           P(IN(3*JT+3)+1,J)=P(IN(3)+1,J)
41182   990   CONTINUE
41183       ENDIF
41184       DO 1000 JQ=1,2
41185         IN(3*JT+JQ)=IN(JQ)
41186         P(IN(JQ)+2,3)=P(IN(JQ)+2,3)-P(IN(JQ)+2,4)
41187         P(IN(JQ)+2,JT)=P(IN(JQ)+2,JT)-JS*(3-2*JQ)*P(IN(JQ)+2,4)
41188  1000 CONTINUE
41189       GOTO 800
41190  
41191 C...Final hadron: side, flavour, hadron, mass.
41192  1010 I=I+1
41193       K(I,1)=1
41194       K(I,3)=IE(JR)
41195       K(I,4)=0
41196       K(I,5)=0
41197       CALL PYKFDI(KFL(JR),-KFL(3),KFLDMP,K(I,2))
41198       IF(K(I,2).EQ.0) GOTO 640
41199       P(I,5)=PYMASS(K(I,2))
41200       PR(JR)=P(I,5)**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
41201  
41202 C...Final two hadrons: find common setup of four-vectors.
41203       JQ=1
41204       IF(P(IN(4)+2,3)*P(IN(5)+2,3)*FOUR(IN(4),IN(5)).LT.
41205      &P(IN(7)+2,3)*P(IN(8)+2,3)*FOUR(IN(7),IN(8))) JQ=2
41206       DHC12=FOUR(IN(3*JQ+1),IN(3*JQ+2))
41207       DHR1=FOUR(N+NRS,IN(3*JQ+2))/DHC12
41208       DHR2=FOUR(N+NRS,IN(3*JQ+1))/DHC12
41209       IF(IN(4).NE.IN(7).OR.IN(5).NE.IN(8)) THEN
41210         PX(3-JQ)=-FOUR(N+NRS,IN(3*JQ+3))-PX(JQ)
41211         PY(3-JQ)=-FOUR(N+NRS,IN(3*JQ+3)+1)-PY(JQ)
41212         PR(3-JQ)=P(I+(JT+JQ-3)**2-1,5)**2+(PX(3-JQ)+(2*JQ-3)*JS*
41213      &  PX(3))**2+(PY(3-JQ)+(2*JQ-3)*JS*PY(3))**2
41214       ENDIF
41215  
41216 C...Solve kinematics for final two hadrons, if possible.
41217       WREM2=WREM2+(PX(1)+PX(2))**2+(PY(1)+PY(2))**2
41218       FD=(SQRT(PR(1))+SQRT(PR(2)))/SQRT(WREM2)
41219       IF(MJU(1)+MJU(2).NE.0.AND.I.EQ.ISAV+2.AND.FD.GE.1D0) GOTO 200
41220       IF(FD.GE.1D0) GOTO 640
41221       FA=WREM2+PR(JT)-PR(JR)
41222       FB=SQRT(MAX(0D0,FA**2-4D0*WREM2*PR(JT)))
41223       PREVCF=PARJ(42)
41224       IF(MSTJ(11).EQ.2) PREVCF=PARJ(39)
41225       PREV=1D0/(1D0+EXP(MIN(50D0,PREVCF*FB)))
41226       FB=SIGN(FB,JS*(PYR(0)-PREV))
41227       KFL1A=IABS(KFL(1))
41228       KFL2A=IABS(KFL(2))
41229       IF(MAX(MOD(KFL1A,10),MOD(KFL1A/1000,10),MOD(KFL2A,10),
41230      &MOD(KFL2A/1000,10)).GE.6) FB=SIGN(SQRT(MAX(0D0,FA**2-
41231      &4D0*WREM2*PR(JT))),DBLE(JS))
41232       DO 1020 J=1,4
41233         P(I-1,J)=(PX(JT)+PX(3))*P(IN(3*JQ+3),J)+(PY(JT)+PY(3))*
41234      &  P(IN(3*JQ+3)+1,J)+0.5D0*(DHR1*(FA+FB)*P(IN(3*JQ+1),J)+
41235      &  DHR2*(FA-FB)*P(IN(3*JQ+2),J))/WREM2
41236         P(I,J)=P(N+NRS,J)-P(I-1,J)
41237  1020 CONTINUE
41238       IF(P(I-1,4).LT.P(I-1,5).OR.P(I,4).LT.P(I,5)) GOTO 640
41239  
41240 C...Mark jets as fragmented and give daughter pointers.
41241       N=I-NRS+1
41242       DO 1030 I=NSAV+1,NSAV+NP
41243         IM=K(I,3)
41244         K(IM,1)=K(IM,1)+10
41245         IF(MSTU(16).NE.2) THEN
41246           K(IM,4)=NSAV+1
41247           K(IM,5)=NSAV+1
41248         ELSE
41249           K(IM,4)=NSAV+2
41250           K(IM,5)=N
41251         ENDIF
41252  1030 CONTINUE
41253  
41254 C...Document string system. Move up particles.
41255       NSAV=NSAV+1
41256       K(NSAV,1)=11
41257       K(NSAV,2)=92
41258       K(NSAV,3)=IP
41259       K(NSAV,4)=NSAV+1
41260       K(NSAV,5)=N
41261       DO 1040 J=1,4
41262         P(NSAV,J)=DPS(J)
41263         V(NSAV,J)=V(IP,J)
41264  1040 CONTINUE
41265       P(NSAV,5)=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))
41266       V(NSAV,5)=0D0
41267       DO 1060 I=NSAV+1,N
41268         DO 1050 J=1,5
41269           K(I,J)=K(I+NRS-1,J)
41270           P(I,J)=P(I+NRS-1,J)
41271           V(I,J)=0D0
41272  1050   CONTINUE
41273  1060 CONTINUE
41274       MSTU91=MSTU(90)
41275       DO 1070 IZ=MSTU90+1,MSTU91
41276         MSTU9T(IZ)=MSTU(90+IZ)-NRS+1-NSAV+N
41277         PARU9T(IZ)=PARU(90+IZ)
41278  1070 CONTINUE
41279       MSTU(90)=MSTU90
41280  
41281 C...Order particles in rank along the chain. Update mother pointer.
41282       DO 1090 I=NSAV+1,N
41283         DO 1080 J=1,5
41284           K(I-NSAV+N,J)=K(I,J)
41285           P(I-NSAV+N,J)=P(I,J)
41286  1080   CONTINUE
41287  1090 CONTINUE
41288       I1=NSAV
41289       DO 1120 I=N+1,2*N-NSAV
41290         IF(K(I,3).NE.IE(1)) GOTO 1120
41291         I1=I1+1
41292         DO 1100 J=1,5
41293           K(I1,J)=K(I,J)
41294           P(I1,J)=P(I,J)
41295  1100   CONTINUE
41296         IF(MSTU(16).NE.2) K(I1,3)=NSAV
41297         DO 1110 IZ=MSTU90+1,MSTU91
41298           IF(MSTU9T(IZ).EQ.I) THEN
41299             MSTU(90)=MSTU(90)+1
41300             MSTU(90+MSTU(90))=I1
41301             PARU(90+MSTU(90))=PARU9T(IZ)
41302           ENDIF
41303  1110   CONTINUE
41304  1120 CONTINUE
41305       DO 1150 I=2*N-NSAV,N+1,-1
41306         IF(K(I,3).EQ.IE(1)) GOTO 1150
41307         I1=I1+1
41308         DO 1130 J=1,5
41309           K(I1,J)=K(I,J)
41310           P(I1,J)=P(I,J)
41311  1130   CONTINUE
41312         IF(MSTU(16).NE.2) K(I1,3)=NSAV
41313         DO 1140 IZ=MSTU90+1,MSTU91
41314           IF(MSTU9T(IZ).EQ.I) THEN
41315             MSTU(90)=MSTU(90)+1
41316             MSTU(90+MSTU(90))=I1
41317             PARU(90+MSTU(90))=PARU9T(IZ)
41318           ENDIF
41319  1140   CONTINUE
41320  1150 CONTINUE
41321  
41322 C...Boost back particle system. Set production vertices.
41323       IF(MBST.EQ.0) THEN
41324         MSTU(33)=1
41325         CALL PYROBO(NSAV+1,N,0D0,0D0,DPS(1)/DPS(4),DPS(2)/DPS(4),
41326      &  DPS(3)/DPS(4))
41327       ELSE
41328         DO 1160 I=NSAV+1,N
41329           HHPMT=P(I,1)**2+P(I,2)**2+P(I,5)**2
41330           IF(P(I,3).GT.0D0) THEN
41331             HHPEZ=(P(I,4)+P(I,3))*HHBZ
41332             P(I,3)=0.5D0*(HHPEZ-HHPMT/HHPEZ)
41333             P(I,4)=0.5D0*(HHPEZ+HHPMT/HHPEZ)
41334           ELSE
41335             HHPEZ=(P(I,4)-P(I,3))/HHBZ
41336             P(I,3)=-0.5D0*(HHPEZ-HHPMT/HHPEZ)
41337             P(I,4)=0.5D0*(HHPEZ+HHPMT/HHPEZ)
41338           ENDIF
41339  1160   CONTINUE
41340       ENDIF
41341       DO 1180 I=NSAV+1,N
41342         DO 1170 J=1,4
41343           V(I,J)=V(IP,J)
41344  1170   CONTINUE
41345  1180 CONTINUE
41346  
41347       RETURN
41348       END
41349  
41350 C*********************************************************************
41351  
41352 C...PYINDF
41353 C...Handles the fragmentation of a jet system (or a single
41354 C...jet) according to independent fragmentation models.
41355  
41356       SUBROUTINE PYINDF(IP)
41357  
41358 C...Double precision and integer declarations.
41359       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
41360       IMPLICIT INTEGER(I-N)
41361       INTEGER PYK,PYCHGE,PYCOMP
41362 C...Commonblocks.
41363       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
41364       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
41365       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
41366       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
41367 C...Local arrays.
41368       DIMENSION DPS(5),PSI(4),NFI(3),NFL(3),IFET(3),KFLF(3),
41369      &KFLO(2),PXO(2),PYO(2),WO(2)
41370  
41371 C.. MOPS error message
41372       IF(MSTJ(12).GT.3) CALL PYERRM(9,'(PYINDF:) MSTJ(12)>3 options'//
41373      &' are not treated as expected in independent fragmentation')
41374  
41375 C...Reset counters. Identify parton system and take copy. Check flavour.
41376       NSAV=N
41377       MSTU90=MSTU(90)
41378       NJET=0
41379       KQSUM=0
41380       DO 100 J=1,5
41381         DPS(J)=0D0
41382   100 CONTINUE
41383       I=IP-1
41384   110 I=I+1
41385       IF(I.GT.MIN(N,MSTU(4)-MSTU(32))) THEN
41386         CALL PYERRM(12,'(PYINDF:) failed to reconstruct jet system')
41387         IF(MSTU(21).GE.1) RETURN
41388       ENDIF
41389       IF(K(I,1).NE.1.AND.K(I,1).NE.2) GOTO 110
41390       KC=PYCOMP(K(I,2))
41391       IF(KC.EQ.0) GOTO 110
41392       KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
41393       IF(KQ.EQ.0) GOTO 110
41394       NJET=NJET+1
41395       IF(KQ.NE.2) KQSUM=KQSUM+KQ
41396       DO 120 J=1,5
41397         K(NSAV+NJET,J)=K(I,J)
41398         P(NSAV+NJET,J)=P(I,J)
41399         DPS(J)=DPS(J)+P(I,J)
41400   120 CONTINUE
41401       K(NSAV+NJET,3)=I
41402       IF(K(I,1).EQ.2.OR.(MSTJ(3).LE.5.AND.N.GT.I.AND.
41403      &K(I+1,1).EQ.2)) GOTO 110
41404       IF(NJET.NE.1.AND.KQSUM.NE.0) THEN
41405         CALL PYERRM(12,'(PYINDF:) unphysical flavour combination')
41406         IF(MSTU(21).GE.1) RETURN
41407       ENDIF
41408  
41409 C...Boost copied system to CM frame. Find CM energy and sum flavours.
41410       IF(NJET.NE.1) THEN
41411         MSTU(33)=1
41412         CALL PYROBO(NSAV+1,NSAV+NJET,0D0,0D0,-DPS(1)/DPS(4),
41413      &  -DPS(2)/DPS(4),-DPS(3)/DPS(4))
41414       ENDIF
41415       PECM=0D0
41416       DO 130 J=1,3
41417         NFI(J)=0
41418   130 CONTINUE
41419       DO 140 I=NSAV+1,NSAV+NJET
41420         PECM=PECM+P(I,4)
41421         KFA=IABS(K(I,2))
41422         IF(KFA.LE.3) THEN
41423           NFI(KFA)=NFI(KFA)+ISIGN(1,K(I,2))
41424         ELSEIF(KFA.GT.1000) THEN
41425           KFLA=MOD(KFA/1000,10)
41426           KFLB=MOD(KFA/100,10)
41427           IF(KFLA.LE.3) NFI(KFLA)=NFI(KFLA)+ISIGN(1,K(I,2))
41428           IF(KFLB.LE.3) NFI(KFLB)=NFI(KFLB)+ISIGN(1,K(I,2))
41429         ENDIF
41430   140 CONTINUE
41431  
41432 C...Loop over attempts made. Reset counters.
41433       NTRY=0
41434   150 NTRY=NTRY+1
41435       IF(NTRY.GT.200) THEN
41436         CALL PYERRM(14,'(PYINDF:) caught in infinite loop')
41437         IF(MSTU(21).GE.1) RETURN
41438       ENDIF
41439       N=NSAV+NJET
41440       MSTU(90)=MSTU90
41441       DO 160 J=1,3
41442         NFL(J)=NFI(J)
41443         IFET(J)=0
41444         KFLF(J)=0
41445   160 CONTINUE
41446  
41447 C...Loop over jets to be fragmented.
41448       DO 230 IP1=NSAV+1,NSAV+NJET
41449         MSTJ(91)=0
41450         NSAV1=N
41451         MSTU91=MSTU(90)
41452  
41453 C...Initial flavour and momentum values. Jet along +z axis.
41454         KFLH=IABS(K(IP1,2))
41455         IF(KFLH.GT.10) KFLH=MOD(KFLH/1000,10)
41456         KFLO(2)=0
41457         WF=P(IP1,4)+SQRT(P(IP1,1)**2+P(IP1,2)**2+P(IP1,3)**2)
41458  
41459 C...Initial values for quark or diquark jet.
41460   170   IF(IABS(K(IP1,2)).NE.21) THEN
41461           NSTR=1
41462           KFLO(1)=K(IP1,2)
41463           CALL PYPTDI(0,PXO(1),PYO(1))
41464           WO(1)=WF
41465  
41466 C...Initial values for gluon treated like random quark jet.
41467         ELSEIF(MSTJ(2).LE.2) THEN
41468           NSTR=1
41469           IF(MSTJ(2).EQ.2) MSTJ(91)=1
41470           KFLO(1)=INT(1D0+(2D0+PARJ(2))*PYR(0))*(-1)**INT(PYR(0)+0.5D0)
41471           CALL PYPTDI(0,PXO(1),PYO(1))
41472           WO(1)=WF
41473  
41474 C...Initial values for gluon treated like quark-antiquark jet pair,
41475 C...sharing energy according to Altarelli-Parisi splitting function.
41476         ELSE
41477           NSTR=2
41478           IF(MSTJ(2).EQ.4) MSTJ(91)=1
41479           KFLO(1)=INT(1D0+(2D0+PARJ(2))*PYR(0))*(-1)**INT(PYR(0)+0.5D0)
41480           KFLO(2)=-KFLO(1)
41481           CALL PYPTDI(0,PXO(1),PYO(1))
41482           PXO(2)=-PXO(1)
41483           PYO(2)=-PYO(1)
41484           WO(1)=WF*PYR(0)**(1D0/3D0)
41485           WO(2)=WF-WO(1)
41486         ENDIF
41487  
41488 C...Initial values for rank, flavour, pT and W+.
41489         DO 220 ISTR=1,NSTR
41490   180     I=N
41491           MSTU(90)=MSTU91
41492           IRANK=0
41493           KFL1=KFLO(ISTR)
41494           PX1=PXO(ISTR)
41495           PY1=PYO(ISTR)
41496           W=WO(ISTR)
41497  
41498 C...New hadron. Generate flavour and hadron species.
41499   190     I=I+1
41500           IF(I.GE.MSTU(4)-MSTU(32)-NJET-5) THEN
41501             CALL PYERRM(11,'(PYINDF:) no more memory left in PYJETS')
41502             IF(MSTU(21).GE.1) RETURN
41503           ENDIF
41504           IRANK=IRANK+1
41505           K(I,1)=1
41506           K(I,3)=IP1
41507           K(I,4)=0
41508           K(I,5)=0
41509   200     CALL PYKFDI(KFL1,0,KFL2,K(I,2))
41510           IF(K(I,2).EQ.0) GOTO 180
41511           IF(IRANK.EQ.1.AND.IABS(KFL1).LE.10.AND.IABS(KFL2).GT.10) THEN
41512             IF(PYR(0).GT.PARJ(19)) GOTO 200
41513           ENDIF
41514  
41515 C...Find hadron mass. Generate four-momentum.
41516           P(I,5)=PYMASS(K(I,2))
41517           CALL PYPTDI(KFL1,PX2,PY2)
41518           P(I,1)=PX1+PX2
41519           P(I,2)=PY1+PY2
41520           PR=P(I,5)**2+P(I,1)**2+P(I,2)**2
41521           CALL PYZDIS(KFL1,KFL2,PR,Z)
41522           MZSAV=0
41523           IF(IABS(KFL1).GE.4.AND.IABS(KFL1).LE.8.AND.MSTU(90).LT.8) THEN
41524             MZSAV=1
41525             MSTU(90)=MSTU(90)+1
41526             MSTU(90+MSTU(90))=I
41527             PARU(90+MSTU(90))=Z
41528           ENDIF
41529           P(I,3)=0.5D0*(Z*W-PR/MAX(1D-4,Z*W))
41530           P(I,4)=0.5D0*(Z*W+PR/MAX(1D-4,Z*W))
41531           IF(MSTJ(3).GE.1.AND.IRANK.EQ.1.AND.KFLH.GE.4.AND.
41532      &    P(I,3).LE.0.001D0) THEN
41533             IF(W.GE.P(I,5)+0.5D0*PARJ(32)) GOTO 180
41534             P(I,3)=0.0001D0
41535             P(I,4)=SQRT(PR)
41536             Z=P(I,4)/W
41537           ENDIF
41538  
41539 C...Remaining flavour and momentum.
41540           KFL1=-KFL2
41541           PX1=-PX2
41542           PY1=-PY2
41543           W=(1D0-Z)*W
41544           DO 210 J=1,5
41545             V(I,J)=0D0
41546   210     CONTINUE
41547  
41548 C...Check if pL acceptable. Go back for new hadron if enough energy.
41549           IF(MSTJ(3).GE.0.AND.P(I,3).LT.0D0) THEN
41550             I=I-1
41551             IF(MZSAV.EQ.1) MSTU(90)=MSTU(90)-1
41552           ENDIF
41553           IF(W.GT.PARJ(31)) GOTO 190
41554           N=I
41555   220   CONTINUE
41556         IF(MOD(MSTJ(3),5).EQ.4.AND.N.EQ.NSAV1) WF=WF+0.1D0*PARJ(32)
41557         IF(MOD(MSTJ(3),5).EQ.4.AND.N.EQ.NSAV1) GOTO 170
41558  
41559 C...Rotate jet to new direction.
41560         THE=PYANGL(P(IP1,3),SQRT(P(IP1,1)**2+P(IP1,2)**2))
41561         PHI=PYANGL(P(IP1,1),P(IP1,2))
41562         MSTU(33)=1
41563         CALL PYROBO(NSAV1+1,N,THE,PHI,0D0,0D0,0D0)
41564         K(K(IP1,3),4)=NSAV1+1
41565         K(K(IP1,3),5)=N
41566  
41567 C...End of jet generation loop. Skip conservation in some cases.
41568   230 CONTINUE
41569       IF(NJET.EQ.1.OR.MSTJ(3).LE.0) GOTO 490
41570       IF(MOD(MSTJ(3),5).NE.0.AND.N-NSAV-NJET.LT.2) GOTO 150
41571  
41572 C...Subtract off produced hadron flavours, finished if zero.
41573       DO 240 I=NSAV+NJET+1,N
41574         KFA=IABS(K(I,2))
41575         KFLA=MOD(KFA/1000,10)
41576         KFLB=MOD(KFA/100,10)
41577         KFLC=MOD(KFA/10,10)
41578         IF(KFLA.EQ.0) THEN
41579           IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)-ISIGN(1,K(I,2))*(-1)**KFLB
41580           IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)+ISIGN(1,K(I,2))*(-1)**KFLB
41581         ELSE
41582           IF(KFLA.LE.3) NFL(KFLA)=NFL(KFLA)-ISIGN(1,K(I,2))
41583           IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)-ISIGN(1,K(I,2))
41584           IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)-ISIGN(1,K(I,2))
41585         ENDIF
41586   240 CONTINUE
41587       NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
41588      &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
41589       IF(NREQ.EQ.0) GOTO 320
41590  
41591 C...Take away flavour of low-momentum particles until enough freedom.
41592       NREM=0
41593   250 IREM=0
41594       P2MIN=PECM**2
41595       DO 260 I=NSAV+NJET+1,N
41596         P2=P(I,1)**2+P(I,2)**2+P(I,3)**2
41597         IF(K(I,1).EQ.1.AND.P2.LT.P2MIN) IREM=I
41598         IF(K(I,1).EQ.1.AND.P2.LT.P2MIN) P2MIN=P2
41599   260 CONTINUE
41600       IF(IREM.EQ.0) GOTO 150
41601       K(IREM,1)=7
41602       KFA=IABS(K(IREM,2))
41603       KFLA=MOD(KFA/1000,10)
41604       KFLB=MOD(KFA/100,10)
41605       KFLC=MOD(KFA/10,10)
41606       IF(KFLA.GE.4.OR.KFLB.GE.4) K(IREM,1)=8
41607       IF(K(IREM,1).EQ.8) GOTO 250
41608       IF(KFLA.EQ.0) THEN
41609         ISGN=ISIGN(1,K(IREM,2))*(-1)**KFLB
41610         IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)+ISGN
41611         IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)-ISGN
41612       ELSE
41613         IF(KFLA.LE.3) NFL(KFLA)=NFL(KFLA)+ISIGN(1,K(IREM,2))
41614         IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)+ISIGN(1,K(IREM,2))
41615         IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)+ISIGN(1,K(IREM,2))
41616       ENDIF
41617       NREM=NREM+1
41618       NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
41619      &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
41620       IF(NREQ.GT.NREM) GOTO 250
41621       DO 270 I=NSAV+NJET+1,N
41622         IF(K(I,1).EQ.8) K(I,1)=1
41623   270 CONTINUE
41624  
41625 C...Find combination of existing and new flavours for hadron.
41626   280 NFET=2
41627       IF(NFL(1)+NFL(2)+NFL(3).NE.0) NFET=3
41628       IF(NREQ.LT.NREM) NFET=1
41629       IF(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3)).EQ.0) NFET=0
41630       DO 290 J=1,NFET
41631         IFET(J)=1+(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3)))*PYR(0)
41632         KFLF(J)=ISIGN(1,NFL(1))
41633         IF(IFET(J).GT.IABS(NFL(1))) KFLF(J)=ISIGN(2,NFL(2))
41634         IF(IFET(J).GT.IABS(NFL(1))+IABS(NFL(2))) KFLF(J)=ISIGN(3,NFL(3))
41635   290 CONTINUE
41636       IF(NFET.EQ.2.AND.(IFET(1).EQ.IFET(2).OR.KFLF(1)*KFLF(2).GT.0))
41637      &GOTO 280
41638       IF(NFET.EQ.3.AND.(IFET(1).EQ.IFET(2).OR.IFET(1).EQ.IFET(3).OR.
41639      &IFET(2).EQ.IFET(3).OR.KFLF(1)*KFLF(2).LT.0.OR.KFLF(1)*KFLF(3)
41640      &.LT.0.OR.KFLF(1)*(NFL(1)+NFL(2)+NFL(3)).LT.0)) GOTO 280
41641       IF(NFET.EQ.0) KFLF(1)=1+INT((2D0+PARJ(2))*PYR(0))
41642       IF(NFET.EQ.0) KFLF(2)=-KFLF(1)
41643       IF(NFET.EQ.1) KFLF(2)=ISIGN(1+INT((2D0+PARJ(2))*PYR(0)),-KFLF(1))
41644       IF(NFET.LE.2) KFLF(3)=0
41645       IF(KFLF(3).NE.0) THEN
41646         KFLFC=ISIGN(1000*MAX(IABS(KFLF(1)),IABS(KFLF(3)))+
41647      &  100*MIN(IABS(KFLF(1)),IABS(KFLF(3)))+1,KFLF(1))
41648         IF(KFLF(1).EQ.KFLF(3).OR.(1D0+3D0*PARJ(4))*PYR(0).GT.1D0)
41649      &  KFLFC=KFLFC+ISIGN(2,KFLFC)
41650       ELSE
41651         KFLFC=KFLF(1)
41652       ENDIF
41653       CALL PYKFDI(KFLFC,KFLF(2),KFLDMP,KF)
41654       IF(KF.EQ.0) GOTO 280
41655       DO 300 J=1,MAX(2,NFET)
41656         NFL(IABS(KFLF(J)))=NFL(IABS(KFLF(J)))-ISIGN(1,KFLF(J))
41657   300 CONTINUE
41658  
41659 C...Store hadron at random among free positions.
41660       NPOS=MIN(1+INT(PYR(0)*NREM),NREM)
41661       DO 310 I=NSAV+NJET+1,N
41662         IF(K(I,1).EQ.7) NPOS=NPOS-1
41663         IF(K(I,1).EQ.1.OR.NPOS.NE.0) GOTO 310
41664         K(I,1)=1
41665         K(I,2)=KF
41666         P(I,5)=PYMASS(K(I,2))
41667         P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
41668   310 CONTINUE
41669       NREM=NREM-1
41670       NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
41671      &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
41672       IF(NREM.GT.0) GOTO 280
41673  
41674 C...Compensate for missing momentum in global scheme (3 options).
41675   320 IF(MOD(MSTJ(3),5).NE.0.AND.MOD(MSTJ(3),5).NE.4) THEN
41676         DO 340 J=1,3
41677           PSI(J)=0D0
41678           DO 330 I=NSAV+NJET+1,N
41679             PSI(J)=PSI(J)+P(I,J)
41680   330     CONTINUE
41681   340   CONTINUE
41682         PSI(4)=PSI(1)**2+PSI(2)**2+PSI(3)**2
41683         PWS=0D0
41684         DO 350 I=NSAV+NJET+1,N
41685           IF(MOD(MSTJ(3),5).EQ.1) PWS=PWS+P(I,4)
41686           IF(MOD(MSTJ(3),5).EQ.2) PWS=PWS+SQRT(P(I,5)**2+(PSI(1)*P(I,1)+
41687      &    PSI(2)*P(I,2)+PSI(3)*P(I,3))**2/PSI(4))
41688           IF(MOD(MSTJ(3),5).EQ.3) PWS=PWS+1D0
41689   350   CONTINUE
41690         DO 370 I=NSAV+NJET+1,N
41691           IF(MOD(MSTJ(3),5).EQ.1) PW=P(I,4)
41692           IF(MOD(MSTJ(3),5).EQ.2) PW=SQRT(P(I,5)**2+(PSI(1)*P(I,1)+
41693      &    PSI(2)*P(I,2)+PSI(3)*P(I,3))**2/PSI(4))
41694           IF(MOD(MSTJ(3),5).EQ.3) PW=1D0
41695           DO 360 J=1,3
41696             P(I,J)=P(I,J)-PSI(J)*PW/PWS
41697   360     CONTINUE
41698           P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
41699   370   CONTINUE
41700  
41701 C...Compensate for missing momentum withing each jet separately.
41702       ELSEIF(MOD(MSTJ(3),5).EQ.4) THEN
41703         DO 390 I=N+1,N+NJET
41704           K(I,1)=0
41705           DO 380 J=1,5
41706             P(I,J)=0D0
41707   380     CONTINUE
41708   390   CONTINUE
41709         DO 410 I=NSAV+NJET+1,N
41710           IR1=K(I,3)
41711           IR2=N+IR1-NSAV
41712           K(IR2,1)=K(IR2,1)+1
41713           PLS=(P(I,1)*P(IR1,1)+P(I,2)*P(IR1,2)+P(I,3)*P(IR1,3))/
41714      &    (P(IR1,1)**2+P(IR1,2)**2+P(IR1,3)**2)
41715           DO 400 J=1,3
41716             P(IR2,J)=P(IR2,J)+P(I,J)-PLS*P(IR1,J)
41717   400     CONTINUE
41718           P(IR2,4)=P(IR2,4)+P(I,4)
41719           P(IR2,5)=P(IR2,5)+PLS
41720   410   CONTINUE
41721         PSS=0D0
41722         DO 420 I=N+1,N+NJET
41723           IF(K(I,1).NE.0) PSS=PSS+P(I,4)/(PECM*(0.8D0*P(I,5)+0.2D0))
41724   420   CONTINUE
41725         DO 440 I=NSAV+NJET+1,N
41726           IR1=K(I,3)
41727           IR2=N+IR1-NSAV
41728           PLS=(P(I,1)*P(IR1,1)+P(I,2)*P(IR1,2)+P(I,3)*P(IR1,3))/
41729      &    (P(IR1,1)**2+P(IR1,2)**2+P(IR1,3)**2)
41730           DO 430 J=1,3
41731             P(I,J)=P(I,J)-P(IR2,J)/K(IR2,1)+(1D0/(P(IR2,5)*PSS)-1D0)*
41732      &      PLS*P(IR1,J)
41733   430     CONTINUE
41734           P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
41735   440   CONTINUE
41736       ENDIF
41737  
41738 C...Scale momenta for energy conservation.
41739       IF(MOD(MSTJ(3),5).NE.0) THEN
41740         PMS=0D0
41741         PES=0D0
41742         PQS=0D0
41743         DO 450 I=NSAV+NJET+1,N
41744           PMS=PMS+P(I,5)
41745           PES=PES+P(I,4)
41746           PQS=PQS+P(I,5)**2/P(I,4)
41747   450   CONTINUE
41748         IF(PMS.GE.PECM) GOTO 150
41749         NECO=0
41750   460   NECO=NECO+1
41751         PFAC=(PECM-PQS)/(PES-PQS)
41752         PES=0D0
41753         PQS=0D0
41754         DO 480 I=NSAV+NJET+1,N
41755           DO 470 J=1,3
41756             P(I,J)=PFAC*P(I,J)
41757   470     CONTINUE
41758           P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
41759           PES=PES+P(I,4)
41760           PQS=PQS+P(I,5)**2/P(I,4)
41761   480   CONTINUE
41762         IF(NECO.LT.10.AND.ABS(PECM-PES).GT.2D-6*PECM) GOTO 460
41763       ENDIF
41764  
41765 C...Origin of produced particles and parton daughter pointers.
41766   490 DO 500 I=NSAV+NJET+1,N
41767         IF(MSTU(16).NE.2) K(I,3)=NSAV+1
41768         IF(MSTU(16).EQ.2) K(I,3)=K(K(I,3),3)
41769   500 CONTINUE
41770       DO 510 I=NSAV+1,NSAV+NJET
41771         I1=K(I,3)
41772         K(I1,1)=K(I1,1)+10
41773         IF(MSTU(16).NE.2) THEN
41774           K(I1,4)=NSAV+1
41775           K(I1,5)=NSAV+1
41776         ELSE
41777           K(I1,4)=K(I1,4)-NJET+1
41778           K(I1,5)=K(I1,5)-NJET+1
41779           IF(K(I1,5).LT.K(I1,4)) THEN
41780             K(I1,4)=0
41781             K(I1,5)=0
41782           ENDIF
41783         ENDIF
41784   510 CONTINUE
41785  
41786 C...Document independent fragmentation system. Remove copy of jets.
41787       NSAV=NSAV+1
41788       K(NSAV,1)=11
41789       K(NSAV,2)=93
41790       K(NSAV,3)=IP
41791       K(NSAV,4)=NSAV+1
41792       K(NSAV,5)=N-NJET+1
41793       DO 520 J=1,4
41794         P(NSAV,J)=DPS(J)
41795         V(NSAV,J)=V(IP,J)
41796   520 CONTINUE
41797       P(NSAV,5)=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))
41798       V(NSAV,5)=0D0
41799       DO 540 I=NSAV+NJET,N
41800         DO 530 J=1,5
41801           K(I-NJET+1,J)=K(I,J)
41802           P(I-NJET+1,J)=P(I,J)
41803           V(I-NJET+1,J)=V(I,J)
41804   530   CONTINUE
41805   540 CONTINUE
41806       N=N-NJET+1
41807       DO 550 IZ=MSTU90+1,MSTU(90)
41808         MSTU(90+IZ)=MSTU(90+IZ)-NJET+1
41809   550 CONTINUE
41810  
41811 C...Boost back particle system. Set production vertices.
41812       IF(NJET.NE.1) CALL PYROBO(NSAV+1,N,0D0,0D0,DPS(1)/DPS(4),
41813      &DPS(2)/DPS(4),DPS(3)/DPS(4))
41814       DO 570 I=NSAV+1,N
41815         DO 560 J=1,4
41816           V(I,J)=V(IP,J)
41817   560   CONTINUE
41818   570 CONTINUE
41819  
41820       RETURN
41821       END
41822  
41823 C*********************************************************************
41824  
41825 C...PYDECY
41826 C...Handles the decay of unstable particles.
41827  
41828       SUBROUTINE PYDECY(IP)
41829  
41830 C...Double precision and integer declarations.
41831       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
41832       IMPLICIT INTEGER(I-N)
41833       INTEGER PYK,PYCHGE,PYCOMP
41834 C...Commonblocks.
41835       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
41836       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
41837       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
41838       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
41839       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/
41840 C...Local arrays.
41841       DIMENSION VDCY(4),KFLO(4),KFL1(4),PV(10,5),RORD(10),UE(3),BE(3),
41842      &WTCOR(10),PTAU(4),PCMTAU(4),DBETAU(3)
41843       CHARACTER CIDC*4
41844       DATA WTCOR/2D0,5D0,15D0,60D0,250D0,1500D0,1.2D4,1.2D5,150D0,16D0/
41845  
41846 C...Functions: momentum in two-particle decays and four-product.
41847       PAWT(A,B,C)=SQRT((A**2-(B+C)**2)*(A**2-(B-C)**2))/(2D0*A)
41848       FOUR(I,J)=P(I,4)*P(J,4)-P(I,1)*P(J,1)-P(I,2)*P(J,2)-P(I,3)*P(J,3)
41849  
41850 C...Initial values.
41851       NTRY=0
41852       NSAV=N
41853       KFA=IABS(K(IP,2))
41854       KFS=ISIGN(1,K(IP,2))
41855       KC=PYCOMP(KFA)
41856       MSTJ(92)=0
41857  
41858 C...Choose lifetime and determine decay vertex.
41859       IF(K(IP,1).EQ.5) THEN
41860         V(IP,5)=0D0
41861       ELSEIF(K(IP,1).NE.4) THEN
41862         V(IP,5)=-PMAS(KC,4)*LOG(PYR(0))
41863       ENDIF
41864       DO 100 J=1,4
41865         VDCY(J)=V(IP,J)+V(IP,5)*P(IP,J)/P(IP,5)
41866   100 CONTINUE
41867  
41868 C...Determine whether decay allowed or not.
41869       MOUT=0
41870       IF(MSTJ(22).EQ.2) THEN
41871         IF(PMAS(KC,4).GT.PARJ(71)) MOUT=1
41872       ELSEIF(MSTJ(22).EQ.3) THEN
41873         IF(VDCY(1)**2+VDCY(2)**2+VDCY(3)**2.GT.PARJ(72)**2) MOUT=1
41874       ELSEIF(MSTJ(22).EQ.4) THEN
41875         IF(VDCY(1)**2+VDCY(2)**2.GT.PARJ(73)**2) MOUT=1
41876         IF(ABS(VDCY(3)).GT.PARJ(74)) MOUT=1
41877       ENDIF
41878       IF(MOUT.EQ.1.AND.K(IP,1).NE.5) THEN
41879         K(IP,1)=4
41880         RETURN
41881       ENDIF
41882  
41883 C...Interface to external tau decay library (for tau polarization).
41884       IF(KFA.EQ.15.AND.MSTJ(28).GE.1) THEN
41885  
41886 C...Starting values for pointers and momenta.
41887         ITAU=IP
41888         DO 110 J=1,4
41889           PTAU(J)=P(ITAU,J)
41890           PCMTAU(J)=P(ITAU,J)
41891   110   CONTINUE
41892  
41893 C...Iterate to find position and code of mother of tau.
41894         IMTAU=ITAU
41895   120   IMTAU=K(IMTAU,3)
41896  
41897         IF(IMTAU.EQ.0) THEN
41898 C...If no known origin then impossible to do anything further.
41899           KFORIG=0
41900           IORIG=0
41901  
41902         ELSEIF(K(IMTAU,2).EQ.K(ITAU,2)) THEN
41903 C...If tau -> tau + gamma then add gamma energy and loop.
41904           IF(K(K(IMTAU,4),2).EQ.22) THEN
41905             DO 130 J=1,4
41906               PCMTAU(J)=PCMTAU(J)+P(K(IMTAU,4),J)
41907   130       CONTINUE
41908           ELSEIF(K(K(IMTAU,5),2).EQ.22) THEN
41909             DO 140 J=1,4
41910               PCMTAU(J)=PCMTAU(J)+P(K(IMTAU,5),J)
41911   140       CONTINUE
41912           ENDIF
41913           GOTO 120
41914  
41915         ELSEIF(IABS(K(IMTAU,2)).GT.100) THEN
41916 C...If coming from weak decay of hadron then W is not stored in record,
41917 C...but can be reconstructed by adding neutrino momentum.
41918           KFORIG=-ISIGN(24,K(ITAU,2))
41919           IORIG=0
41920           DO 160 II=K(IMTAU,4),K(IMTAU,5)
41921             IF(K(II,2)*ISIGN(1,K(ITAU,2)).EQ.-16) THEN
41922               DO 150 J=1,4
41923                 PCMTAU(J)=PCMTAU(J)+P(II,J)
41924   150         CONTINUE
41925             ENDIF
41926   160     CONTINUE
41927  
41928         ELSE
41929 C...If coming from resonance decay then find latest copy of this
41930 C...resonance (may not completely agree).
41931           KFORIG=K(IMTAU,2)
41932           IORIG=IMTAU
41933           DO 170 II=IMTAU+1,IP-1
41934             IF(K(II,2).EQ.KFORIG.AND.K(II,3).EQ.IORIG.AND.
41935      &      ABS(P(II,5)-P(IORIG,5)).LT.1D-5*P(IORIG,5)) IORIG=II
41936   170     CONTINUE
41937           DO 180 J=1,4
41938             PCMTAU(J)=P(IORIG,J)
41939   180     CONTINUE
41940         ENDIF
41941  
41942 C...Boost tau to rest frame of production process (where known)
41943 C...and rotate it to sit along +z axis.
41944         DO 190 J=1,3
41945           DBETAU(J)=PCMTAU(J)/PCMTAU(4)
41946   190   CONTINUE
41947         IF(KFORIG.NE.0) CALL PYROBO(ITAU,ITAU,0D0,0D0,-DBETAU(1),
41948      &  -DBETAU(2),-DBETAU(3))
41949         PHITAU=PYANGL(P(ITAU,1),P(ITAU,2))
41950         CALL PYROBO(ITAU,ITAU,0D0,-PHITAU,0D0,0D0,0D0)
41951         THETAU=PYANGL(P(ITAU,3),P(ITAU,1))
41952         CALL PYROBO(ITAU,ITAU,-THETAU,0D0,0D0,0D0,0D0)
41953  
41954 C...Call tau decay routine (if meaningful) and fill extra info.
41955         IF(KFORIG.NE.0.OR.MSTJ(28).EQ.2) THEN
41956           CALL PYTAUD(ITAU,IORIG,KFORIG,NDECAY)
41957           DO 200 II=NSAV+1,NSAV+NDECAY
41958             K(II,1)=1
41959             K(II,3)=IP
41960             K(II,4)=0
41961             K(II,5)=0
41962   200     CONTINUE
41963           N=NSAV+NDECAY
41964         ENDIF
41965  
41966 C...Boost back decay tau and decay products.
41967         DO 210 J=1,4
41968           P(ITAU,J)=PTAU(J)
41969   210   CONTINUE
41970         IF(KFORIG.NE.0.OR.MSTJ(28).EQ.2) THEN
41971           CALL PYROBO(NSAV+1,N,THETAU,PHITAU,0D0,0D0,0D0)
41972           IF(KFORIG.NE.0) CALL PYROBO(NSAV+1,N,0D0,0D0,DBETAU(1),
41973      &    DBETAU(2),DBETAU(3))
41974  
41975 C...Skip past ordinary tau decay treatment.
41976           MMAT=0
41977           MBST=0
41978           ND=0
41979           GOTO 630
41980         ENDIF
41981       ENDIF
41982  
41983 C...B-Bbar mixing: flip sign of meson appropriately.
41984       MMIX=0
41985       IF((KFA.EQ.511.OR.KFA.EQ.531).AND.MSTJ(26).GE.1) THEN
41986         XBBMIX=PARJ(76)
41987         IF(KFA.EQ.531) XBBMIX=PARJ(77)
41988         IF(SIN(0.5D0*XBBMIX*V(IP,5)/PMAS(KC,4))**2.GT.PYR(0)) MMIX=1
41989         IF(MMIX.EQ.1) KFS=-KFS
41990       ENDIF
41991  
41992 C...Check existence of decay channels. Particle/antiparticle rules.
41993       KCA=KC
41994       IF(MDCY(KC,2).GT.0) THEN
41995         MDMDCY=MDME(MDCY(KC,2),2)
41996         IF(MDMDCY.GT.80.AND.MDMDCY.LE.90) KCA=MDMDCY
41997       ENDIF
41998       IF(MDCY(KCA,2).LE.0.OR.MDCY(KCA,3).LE.0) THEN
41999         CALL PYERRM(9,'(PYDECY:) no decay channel defined')
42000         RETURN
42001       ENDIF
42002       IF(MOD(KFA/1000,10).EQ.0.AND.KCA.EQ.85) KFS=-KFS
42003       IF(KCHG(KC,3).EQ.0) THEN
42004         KFSP=1
42005         KFSN=0
42006         IF(PYR(0).GT.0.5D0) KFS=-KFS
42007       ELSEIF(KFS.GT.0) THEN
42008         KFSP=1
42009         KFSN=0
42010       ELSE
42011         KFSP=0
42012         KFSN=1
42013       ENDIF
42014  
42015 C...Sum branching ratios of allowed decay channels.
42016   220 NOPE=0
42017       BRSU=0D0
42018       DO 230 IDL=MDCY(KCA,2),MDCY(KCA,2)+MDCY(KCA,3)-1
42019         IF(MDME(IDL,1).NE.1.AND.KFSP*MDME(IDL,1).NE.2.AND.
42020      &  KFSN*MDME(IDL,1).NE.3) GOTO 230
42021         IF(MDME(IDL,2).GT.100) GOTO 230
42022         NOPE=NOPE+1
42023         BRSU=BRSU+BRAT(IDL)
42024   230 CONTINUE
42025       IF(NOPE.EQ.0) THEN
42026         CALL PYERRM(2,'(PYDECY:) all decay channels closed by user')
42027         RETURN
42028       ENDIF
42029  
42030 C...Select decay channel among allowed ones.
42031   240 RBR=BRSU*PYR(0)
42032       IDL=MDCY(KCA,2)-1
42033   250 IDL=IDL+1
42034       IF(MDME(IDL,1).NE.1.AND.KFSP*MDME(IDL,1).NE.2.AND.
42035      &KFSN*MDME(IDL,1).NE.3) THEN
42036         IF(IDL.LT.MDCY(KCA,2)+MDCY(KCA,3)-1) GOTO 250
42037       ELSEIF(MDME(IDL,2).GT.100) THEN
42038         IF(IDL.LT.MDCY(KCA,2)+MDCY(KCA,3)-1) GOTO 250
42039       ELSE
42040         IDC=IDL
42041         RBR=RBR-BRAT(IDL)
42042         IF(IDL.LT.MDCY(KCA,2)+MDCY(KCA,3)-1.AND.RBR.GT.0D0) GOTO 250
42043       ENDIF
42044  
42045 C...Start readout of decay channel: matrix element, reset counters.
42046       MMAT=MDME(IDC,2)
42047   260 NTRY=NTRY+1
42048       IF(MOD(NTRY,200).EQ.0) THEN
42049         WRITE(CIDC,'(I4)') IDC
42050 C...Do not print warning for some well-known special cases.
42051         IF(KFA.NE.113.AND.KFA.NE.115.AND.KFA.NE.215)
42052      &  CALL PYERRM(4,'(PYDECY:) caught in loop for decay channel'//
42053      &  CIDC)
42054         GOTO 240
42055       ENDIF
42056       IF(NTRY.GT.1000) THEN
42057         CALL PYERRM(14,'(PYDECY:) caught in infinite loop')
42058         IF(MSTU(21).GE.1) RETURN
42059       ENDIF
42060       I=N
42061       NP=0
42062       NQ=0
42063       MBST=0
42064       IF(MMAT.GE.11.AND.P(IP,4).GT.20D0*P(IP,5)) MBST=1
42065       DO 270 J=1,4
42066         PV(1,J)=0D0
42067         IF(MBST.EQ.0) PV(1,J)=P(IP,J)
42068   270 CONTINUE
42069       IF(MBST.EQ.1) PV(1,4)=P(IP,5)
42070       PV(1,5)=P(IP,5)
42071       PS=0D0
42072       PSQ=0D0
42073       MREM=0
42074       MHADDY=0
42075       IF(KFA.GT.80) MHADDY=1
42076 C.. Random flavour and popcorn system memory.
42077       IRNDMO=0
42078       JTMO=0
42079       MSTU(121)=0
42080       MSTU(125)=10
42081  
42082 C...Read out decay products. Convert to standard flavour code.
42083       JTMAX=5
42084       IF(MDME(IDC+1,2).EQ.101) JTMAX=10
42085       DO 280 JT=1,JTMAX
42086         IF(JT.LE.5) KP=KFDP(IDC,JT)
42087         IF(JT.GE.6) KP=KFDP(IDC+1,JT-5)
42088         IF(KP.EQ.0) GOTO 280
42089         KPA=IABS(KP)
42090         KCP=PYCOMP(KPA)
42091         IF(KPA.GT.80) MHADDY=1
42092         IF(KCHG(KCP,3).EQ.0.AND.KPA.NE.81.AND.KPA.NE.82) THEN
42093           KFP=KP
42094         ELSEIF(KPA.NE.81.AND.KPA.NE.82) THEN
42095           KFP=KFS*KP
42096         ELSEIF(KPA.EQ.81.AND.MOD(KFA/1000,10).EQ.0) THEN
42097           KFP=-KFS*MOD(KFA/10,10)
42098         ELSEIF(KPA.EQ.81.AND.MOD(KFA/100,10).GE.MOD(KFA/10,10)) THEN
42099           KFP=KFS*(100*MOD(KFA/10,100)+3)
42100         ELSEIF(KPA.EQ.81) THEN
42101           KFP=KFS*(1000*MOD(KFA/10,10)+100*MOD(KFA/100,10)+1)
42102         ELSEIF(KP.EQ.82) THEN
42103           CALL PYDCYK(-KFS*INT(1D0+(2D0+PARJ(2))*PYR(0)),0,KFP,KDUMP)
42104           IF(KFP.EQ.0) GOTO 260
42105           KFP=-KFP
42106           IRNDMO=1
42107           MSTJ(93)=1
42108           IF(PV(1,5).LT.PARJ(32)+2D0*PYMASS(KFP)) GOTO 260
42109         ELSEIF(KP.EQ.-82) THEN
42110           KFP=MSTU(124)
42111         ENDIF
42112         IF(KPA.EQ.81.OR.KPA.EQ.82) KCP=PYCOMP(KFP)
42113  
42114 C...Add decay product to event record or to quark flavour list.
42115         KFPA=IABS(KFP)
42116         KQP=KCHG(KCP,2)
42117         IF(MMAT.GE.11.AND.MMAT.LE.30.AND.KQP.NE.0) THEN
42118           NQ=NQ+1
42119           KFLO(NQ)=KFP
42120 C...set rndmflav popcorn system pointer
42121           IF(KP.EQ.82.AND.MSTU(121).GT.0) JTMO=NQ
42122           MSTJ(93)=2
42123           PSQ=PSQ+PYMASS(KFLO(NQ))
42124         ELSEIF((MMAT.EQ.42.OR.MMAT.EQ.43.OR.MMAT.EQ.48).AND.NP.EQ.3.AND.
42125      &    MOD(NQ,2).EQ.1) THEN
42126           NQ=NQ-1
42127           PS=PS-P(I,5)
42128           K(I,1)=1
42129           KFI=K(I,2)
42130           CALL PYKFDI(KFP,KFI,KFLDMP,K(I,2))
42131           IF(K(I,2).EQ.0) GOTO 260
42132           MSTJ(93)=1
42133           P(I,5)=PYMASS(K(I,2))
42134           PS=PS+P(I,5)
42135         ELSE
42136           I=I+1
42137           NP=NP+1
42138           IF(MMAT.NE.33.AND.KQP.NE.0) NQ=NQ+1
42139           IF(MMAT.EQ.33.AND.KQP.NE.0.AND.KQP.NE.2) NQ=NQ+1
42140           K(I,1)=1+MOD(NQ,2)
42141           IF(MMAT.EQ.4.AND.JT.LE.2.AND.KFP.EQ.21) K(I,1)=2
42142           IF(MMAT.EQ.4.AND.JT.EQ.3) K(I,1)=1
42143           K(I,2)=KFP
42144           K(I,3)=IP
42145           K(I,4)=0
42146           K(I,5)=0
42147           P(I,5)=PYMASS(KFP)
42148           PS=PS+P(I,5)
42149         ENDIF
42150   280 CONTINUE
42151  
42152 C...Check masses for resonance decays.
42153       IF(MHADDY.EQ.0) THEN
42154         IF(PS+PARJ(64).GT.PV(1,5)) GOTO 240
42155       ENDIF
42156  
42157 C...Choose decay multiplicity in phase space model.
42158   290 IF(MMAT.GE.11.AND.MMAT.LE.30) THEN
42159         PSP=PS
42160         CNDE=PARJ(61)*LOG(MAX((PV(1,5)-PS-PSQ)/PARJ(62),1.1D0))
42161         IF(MMAT.EQ.12) CNDE=CNDE+PARJ(63)
42162   300   NTRY=NTRY+1
42163 C...Reset popcorn flags if new attempt. Re-select rndmflav if failed.
42164         IF(IRNDMO.EQ.0) THEN
42165            MSTU(121)=0
42166            JTMO=0
42167         ELSEIF(IRNDMO.EQ.1) THEN
42168            IRNDMO=2
42169         ELSE
42170            GOTO 260
42171         ENDIF
42172         IF(NTRY.GT.1000) THEN
42173           CALL PYERRM(14,'(PYDECY:) caught in infinite loop')
42174           IF(MSTU(21).GE.1) RETURN
42175         ENDIF
42176         IF(MMAT.LE.20) THEN
42177           GAUSS=SQRT(-2D0*CNDE*LOG(MAX(1D-10,PYR(0))))*
42178      &    SIN(PARU(2)*PYR(0))
42179           ND=0.5D0+0.5D0*NP+0.25D0*NQ+CNDE+GAUSS
42180           IF(ND.LT.NP+NQ/2.OR.ND.LT.2.OR.ND.GT.10) GOTO 300
42181           IF(MMAT.EQ.13.AND.ND.EQ.2) GOTO 300
42182           IF(MMAT.EQ.14.AND.ND.LE.3) GOTO 300
42183           IF(MMAT.EQ.15.AND.ND.LE.4) GOTO 300
42184         ELSE
42185           ND=MMAT-20
42186         ENDIF
42187 C.. Set maximum popcorn meson number. Test rndmflav popcorn size.
42188         MSTU(125)=ND-NQ/2
42189         IF(MSTU(121).GT.MSTU(125)) GOTO 300
42190  
42191 C...Form hadrons from flavour content.
42192         DO 310 JT=1,NQ
42193           KFL1(JT)=KFLO(JT)
42194   310   CONTINUE
42195         IF(ND.EQ.NP+NQ/2) GOTO 330
42196         DO 320 I=N+NP+1,N+ND-NQ/2
42197 C.. Stick to started popcorn system, else pick side at random
42198           JT=JTMO
42199           IF(JT.EQ.0) JT=1+INT((NQ-1)*PYR(0))
42200           CALL PYDCYK(KFL1(JT),0,KFL2,K(I,2))
42201           IF(K(I,2).EQ.0) GOTO 300
42202           MSTU(125)=MSTU(125)-1
42203           JTMO=0
42204           IF(MSTU(121).GT.0) JTMO=JT
42205           KFL1(JT)=-KFL2
42206   320   CONTINUE
42207   330   JT=2
42208         JT2=3
42209         JT3=4
42210         IF(NQ.EQ.4.AND.PYR(0).LT.PARJ(66)) JT=4
42211         IF(JT.EQ.4.AND.ISIGN(1,KFL1(1)*(10-IABS(KFL1(1))))*
42212      &  ISIGN(1,KFL1(JT)*(10-IABS(KFL1(JT)))).GT.0) JT=3
42213         IF(JT.EQ.3) JT2=2
42214         IF(JT.EQ.4) JT3=2
42215         CALL PYDCYK(KFL1(1),KFL1(JT),KFLDMP,K(N+ND-NQ/2+1,2))
42216         IF(K(N+ND-NQ/2+1,2).EQ.0) GOTO 300
42217         IF(NQ.EQ.4) CALL PYDCYK(KFL1(JT2),KFL1(JT3),KFLDMP,K(N+ND,2))
42218         IF(NQ.EQ.4.AND.K(N+ND,2).EQ.0) GOTO 300
42219  
42220 C...Check that sum of decay product masses not too large.
42221         PS=PSP
42222         DO 340 I=N+NP+1,N+ND
42223           K(I,1)=1
42224           K(I,3)=IP
42225           K(I,4)=0
42226           K(I,5)=0
42227           P(I,5)=PYMASS(K(I,2))
42228           PS=PS+P(I,5)
42229   340   CONTINUE
42230         IF(PS+PARJ(64).GT.PV(1,5)) GOTO 300
42231  
42232 C...Rescale energy to subtract off spectator quark mass.
42233       ELSEIF((MMAT.EQ.31.OR.MMAT.EQ.33.OR.MMAT.EQ.44)
42234      &  .AND.NP.GE.3) THEN
42235         PS=PS-P(N+NP,5)
42236         PQT=(P(N+NP,5)+PARJ(65))/PV(1,5)
42237         DO 350 J=1,5
42238           P(N+NP,J)=PQT*PV(1,J)
42239           PV(1,J)=(1D0-PQT)*PV(1,J)
42240   350   CONTINUE
42241         IF(PS+PARJ(64).GT.PV(1,5)) GOTO 260
42242         ND=NP-1
42243         MREM=1
42244  
42245 C...Fully specified final state: check mass broadening effects.
42246       ELSE
42247         IF(NP.GE.2.AND.PS+PARJ(64).GT.PV(1,5)) GOTO 260
42248         ND=NP
42249       ENDIF
42250  
42251 C...Determine position of grandmother, number of sisters.
42252       NM=0
42253       KFAS=0
42254       MSGN=0
42255       IF(MMAT.EQ.3) THEN
42256         IM=K(IP,3)
42257         IF(IM.LT.0.OR.IM.GE.IP) IM=0
42258         IF(IM.NE.0) KFAM=IABS(K(IM,2))
42259         IF(IM.NE.0) THEN
42260           DO 360 IL=MAX(IP-2,IM+1),MIN(IP+2,N)
42261             IF(K(IL,3).EQ.IM) NM=NM+1
42262             IF(K(IL,3).EQ.IM.AND.IL.NE.IP) ISIS=IL
42263   360     CONTINUE
42264           IF(NM.NE.2.OR.KFAM.LE.100.OR.MOD(KFAM,10).NE.1.OR.
42265      &    MOD(KFAM/1000,10).NE.0) NM=0
42266           IF(NM.EQ.2) THEN
42267             KFAS=IABS(K(ISIS,2))
42268             IF((KFAS.LE.100.OR.MOD(KFAS,10).NE.1.OR.
42269      &      MOD(KFAS/1000,10).NE.0).AND.KFAS.NE.22) NM=0
42270           ENDIF
42271         ENDIF
42272       ENDIF
42273  
42274 C...Kinematics of one-particle decays.
42275       IF(ND.EQ.1) THEN
42276         DO 370 J=1,4
42277           P(N+1,J)=P(IP,J)
42278   370   CONTINUE
42279         GOTO 630
42280       ENDIF
42281  
42282 C...Calculate maximum weight ND-particle decay.
42283       PV(ND,5)=P(N+ND,5)
42284       IF(ND.GE.3) THEN
42285         WTMAX=1D0/WTCOR(ND-2)
42286         PMAX=PV(1,5)-PS+P(N+ND,5)
42287         PMIN=0D0
42288         DO 380 IL=ND-1,1,-1
42289           PMAX=PMAX+P(N+IL,5)
42290           PMIN=PMIN+P(N+IL+1,5)
42291           WTMAX=WTMAX*PAWT(PMAX,PMIN,P(N+IL,5))
42292   380   CONTINUE
42293       ENDIF
42294  
42295 C...Find virtual gamma mass in Dalitz decay.
42296   390 IF(ND.EQ.2) THEN
42297       ELSEIF(MMAT.EQ.2) THEN
42298         PMES=4D0*PMAS(11,1)**2
42299         PMRHO2=PMAS(131,1)**2
42300         PGRHO2=PMAS(131,2)**2
42301   400   PMST=PMES*(P(IP,5)**2/PMES)**PYR(0)
42302         WT=(1+0.5D0*PMES/PMST)*SQRT(MAX(0D0,1D0-PMES/PMST))*
42303      &  (1D0-PMST/P(IP,5)**2)**3*(1D0+PGRHO2/PMRHO2)/
42304      &  ((1D0-PMST/PMRHO2)**2+PGRHO2/PMRHO2)
42305         IF(WT.LT.PYR(0)) GOTO 400
42306         PV(2,5)=MAX(2.00001D0*PMAS(11,1),SQRT(PMST))
42307  
42308 C...M-generator gives weight. If rejected, try again.
42309       ELSE
42310   410   RORD(1)=1D0
42311         DO 440 IL1=2,ND-1
42312           RSAV=PYR(0)
42313           DO 420 IL2=IL1-1,1,-1
42314             IF(RSAV.LE.RORD(IL2)) GOTO 430
42315             RORD(IL2+1)=RORD(IL2)
42316   420     CONTINUE
42317   430     RORD(IL2+1)=RSAV
42318   440   CONTINUE
42319         RORD(ND)=0D0
42320         WT=1D0
42321         DO 450 IL=ND-1,1,-1
42322           PV(IL,5)=PV(IL+1,5)+P(N+IL,5)+(RORD(IL)-RORD(IL+1))*
42323      &    (PV(1,5)-PS)
42324           WT=WT*PAWT(PV(IL,5),PV(IL+1,5),P(N+IL,5))
42325   450   CONTINUE
42326         IF(WT.LT.PYR(0)*WTMAX) GOTO 410
42327       ENDIF
42328  
42329 C...Perform two-particle decays in respective CM frame.
42330   460 DO 480 IL=1,ND-1
42331         PA=PAWT(PV(IL,5),PV(IL+1,5),P(N+IL,5))
42332         UE(3)=2D0*PYR(0)-1D0
42333         PHI=PARU(2)*PYR(0)
42334         UE(1)=SQRT(1D0-UE(3)**2)*COS(PHI)
42335         UE(2)=SQRT(1D0-UE(3)**2)*SIN(PHI)
42336         DO 470 J=1,3
42337           P(N+IL,J)=PA*UE(J)
42338           PV(IL+1,J)=-PA*UE(J)
42339   470   CONTINUE
42340         P(N+IL,4)=SQRT(PA**2+P(N+IL,5)**2)
42341         PV(IL+1,4)=SQRT(PA**2+PV(IL+1,5)**2)
42342   480 CONTINUE
42343  
42344 C...Lorentz transform decay products to lab frame.
42345       DO 490 J=1,4
42346         P(N+ND,J)=PV(ND,J)
42347   490 CONTINUE
42348       DO 530 IL=ND-1,1,-1
42349         DO 500 J=1,3
42350           BE(J)=PV(IL,J)/PV(IL,4)
42351   500   CONTINUE
42352         GA=PV(IL,4)/PV(IL,5)
42353         DO 520 I=N+IL,N+ND
42354           BEP=BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
42355           DO 510 J=1,3
42356             P(I,J)=P(I,J)+GA*(GA*BEP/(1D0+GA)+P(I,4))*BE(J)
42357   510     CONTINUE
42358           P(I,4)=GA*(P(I,4)+BEP)
42359   520   CONTINUE
42360   530 CONTINUE
42361  
42362 C...Check that no infinite loop in matrix element weight.
42363       NTRY=NTRY+1
42364       IF(NTRY.GT.800) GOTO 560
42365  
42366 C...Matrix elements for omega and phi decays.
42367       IF(MMAT.EQ.1) THEN
42368         WT=(P(N+1,5)*P(N+2,5)*P(N+3,5))**2-(P(N+1,5)*FOUR(N+2,N+3))**2
42369      &  -(P(N+2,5)*FOUR(N+1,N+3))**2-(P(N+3,5)*FOUR(N+1,N+2))**2
42370      &  +2D0*FOUR(N+1,N+2)*FOUR(N+1,N+3)*FOUR(N+2,N+3)
42371         IF(MAX(WT*WTCOR(9)/P(IP,5)**6,0.001D0).LT.PYR(0)) GOTO 390
42372  
42373 C...Matrix elements for pi0 or eta Dalitz decay to gamma e+ e-.
42374       ELSEIF(MMAT.EQ.2) THEN
42375         FOUR12=FOUR(N+1,N+2)
42376         FOUR13=FOUR(N+1,N+3)
42377         WT=(PMST-0.5D0*PMES)*(FOUR12**2+FOUR13**2)+
42378      &  PMES*(FOUR12*FOUR13+FOUR12**2+FOUR13**2)
42379         IF(WT.LT.PYR(0)*0.25D0*PMST*(P(IP,5)**2-PMST)**2) GOTO 460
42380  
42381 C...Matrix element for S0 -> S1 + V1 -> S1 + S2 + S3 (S scalar,
42382 C...V vector), of form cos**2(theta02) in V1 rest frame, and for
42383 C...S0 -> gamma + V1 -> gamma + S2 + S3, of form sin**2(theta02).
42384       ELSEIF(MMAT.EQ.3.AND.NM.EQ.2) THEN
42385         FOUR10=FOUR(IP,IM)
42386         FOUR12=FOUR(IP,N+1)
42387         FOUR02=FOUR(IM,N+1)
42388         PMS1=P(IP,5)**2
42389         PMS0=P(IM,5)**2
42390         PMS2=P(N+1,5)**2
42391         IF(KFAS.NE.22) HNUM=(FOUR10*FOUR12-PMS1*FOUR02)**2
42392         IF(KFAS.EQ.22) HNUM=PMS1*(2D0*FOUR10*FOUR12*FOUR02-
42393      &  PMS1*FOUR02**2-PMS0*FOUR12**2-PMS2*FOUR10**2+PMS1*PMS0*PMS2)
42394         HNUM=MAX(1D-6*PMS1**2*PMS0*PMS2,HNUM)
42395         HDEN=(FOUR10**2-PMS1*PMS0)*(FOUR12**2-PMS1*PMS2)
42396         IF(HNUM.LT.PYR(0)*HDEN) GOTO 460
42397  
42398 C...Matrix element for "onium" -> g + g + g or gamma + g + g.
42399       ELSEIF(MMAT.EQ.4) THEN
42400         HX1=2D0*FOUR(IP,N+1)/P(IP,5)**2
42401         HX2=2D0*FOUR(IP,N+2)/P(IP,5)**2
42402         HX3=2D0*FOUR(IP,N+3)/P(IP,5)**2
42403         WT=((1D0-HX1)/(HX2*HX3))**2+((1D0-HX2)/(HX1*HX3))**2+
42404      &  ((1D0-HX3)/(HX1*HX2))**2
42405         IF(WT.LT.2D0*PYR(0)) GOTO 390
42406         IF(K(IP+1,2).EQ.22.AND.(1D0-HX1)*P(IP,5)**2.LT.4D0*PARJ(32)**2)
42407      &  GOTO 390
42408  
42409 C...Effective matrix element for nu spectrum in tau -> nu + hadrons.
42410       ELSEIF(MMAT.EQ.41) THEN
42411         HX1=2D0*FOUR(IP,N+1)/P(IP,5)**2
42412         HXM=MIN(0.75D0,2D0*(1D0-PS/P(IP,5)))
42413         IF(HX1*(3D0-2D0*HX1).LT.PYR(0)*HXM*(3D0-2D0*HXM)) GOTO 390
42414  
42415 C...Matrix elements for weak decays (only semileptonic for c and b)
42416       ELSEIF((MMAT.EQ.42.OR.MMAT.EQ.43.OR.MMAT.EQ.44.OR.MMAT.EQ.48)
42417      &  .AND.ND.EQ.3) THEN
42418         IF(MBST.EQ.0) WT=FOUR(IP,N+1)*FOUR(N+2,N+3)
42419         IF(MBST.EQ.1) WT=P(IP,5)*P(N+1,4)*FOUR(N+2,N+3)
42420         IF(WT.LT.PYR(0)*P(IP,5)*PV(1,5)**3/WTCOR(10)) GOTO 390
42421       ELSEIF(MMAT.EQ.42.OR.MMAT.EQ.43.OR.MMAT.EQ.44.OR.MMAT.EQ.48) THEN
42422         DO 550 J=1,4
42423           P(N+NP+1,J)=0D0
42424           DO 540 IS=N+3,N+NP
42425             P(N+NP+1,J)=P(N+NP+1,J)+P(IS,J)
42426   540     CONTINUE
42427   550   CONTINUE
42428         IF(MBST.EQ.0) WT=FOUR(IP,N+1)*FOUR(N+2,N+NP+1)
42429         IF(MBST.EQ.1) WT=P(IP,5)*P(N+1,4)*FOUR(N+2,N+NP+1)
42430         IF(WT.LT.PYR(0)*P(IP,5)*PV(1,5)**3/WTCOR(10)) GOTO 390
42431       ENDIF
42432  
42433 C...Scale back energy and reattach spectator.
42434   560 IF(MREM.EQ.1) THEN
42435         DO 570 J=1,5
42436           PV(1,J)=PV(1,J)/(1D0-PQT)
42437   570   CONTINUE
42438         ND=ND+1
42439         MREM=0
42440       ENDIF
42441  
42442 C...Low invariant mass for system with spectator quark gives particle,
42443 C...not two jets. Readjust momenta accordingly.
42444       IF(MMAT.EQ.31.AND.ND.EQ.3) THEN
42445         MSTJ(93)=1
42446         PM2=PYMASS(K(N+2,2))
42447         MSTJ(93)=1
42448         PM3=PYMASS(K(N+3,2))
42449         IF(P(N+2,5)**2+P(N+3,5)**2+2D0*FOUR(N+2,N+3).GE.
42450      &  (PARJ(32)+PM2+PM3)**2) GOTO 630
42451         K(N+2,1)=1
42452         KFTEMP=K(N+2,2)
42453         CALL PYKFDI(KFTEMP,K(N+3,2),KFLDMP,K(N+2,2))
42454         IF(K(N+2,2).EQ.0) GOTO 260
42455         P(N+2,5)=PYMASS(K(N+2,2))
42456         PS=P(N+1,5)+P(N+2,5)
42457         PV(2,5)=P(N+2,5)
42458         MMAT=0
42459         ND=2
42460         GOTO 460
42461       ELSEIF(MMAT.EQ.44) THEN
42462         MSTJ(93)=1
42463         PM3=PYMASS(K(N+3,2))
42464         MSTJ(93)=1
42465         PM4=PYMASS(K(N+4,2))
42466         IF(P(N+3,5)**2+P(N+4,5)**2+2D0*FOUR(N+3,N+4).GE.
42467      &  (PARJ(32)+PM3+PM4)**2) GOTO 600
42468         K(N+3,1)=1
42469         KFTEMP=K(N+3,2)
42470         CALL PYKFDI(KFTEMP,K(N+4,2),KFLDMP,K(N+3,2))
42471         IF(K(N+3,2).EQ.0) GOTO 260
42472         P(N+3,5)=PYMASS(K(N+3,2))
42473         DO 580 J=1,3
42474           P(N+3,J)=P(N+3,J)+P(N+4,J)
42475   580   CONTINUE
42476         P(N+3,4)=SQRT(P(N+3,1)**2+P(N+3,2)**2+P(N+3,3)**2+P(N+3,5)**2)
42477         HA=P(N+1,4)**2-P(N+2,4)**2
42478         HB=HA-(P(N+1,5)**2-P(N+2,5)**2)
42479         HC=(P(N+1,1)-P(N+2,1))**2+(P(N+1,2)-P(N+2,2))**2+
42480      &  (P(N+1,3)-P(N+2,3))**2
42481         HD=(PV(1,4)-P(N+3,4))**2
42482         HE=HA**2-2D0*HD*(P(N+1,4)**2+P(N+2,4)**2)+HD**2
42483         HF=HD*HC-HB**2
42484         HG=HD*HC-HA*HB
42485         HH=(SQRT(HG**2+HE*HF)-HG)/(2D0*HF)
42486         DO 590 J=1,3
42487           PCOR=HH*(P(N+1,J)-P(N+2,J))
42488           P(N+1,J)=P(N+1,J)+PCOR
42489           P(N+2,J)=P(N+2,J)-PCOR
42490   590   CONTINUE
42491         P(N+1,4)=SQRT(P(N+1,1)**2+P(N+1,2)**2+P(N+1,3)**2+P(N+1,5)**2)
42492         P(N+2,4)=SQRT(P(N+2,1)**2+P(N+2,2)**2+P(N+2,3)**2+P(N+2,5)**2)
42493         ND=ND-1
42494       ENDIF
42495  
42496 C...Check invariant mass of W jets. May give one particle or start over.
42497   600 IF((MMAT.EQ.42.OR.MMAT.EQ.43.OR.MMAT.EQ.44.OR.MMAT.EQ.48)
42498      &.AND.IABS(K(N+1,2)).LT.10) THEN
42499         PMR=SQRT(MAX(0D0,P(N+1,5)**2+P(N+2,5)**2+2D0*FOUR(N+1,N+2)))
42500         MSTJ(93)=1
42501         PM1=PYMASS(K(N+1,2))
42502         MSTJ(93)=1
42503         PM2=PYMASS(K(N+2,2))
42504         IF(PMR.GT.PARJ(32)+PM1+PM2) GOTO 610
42505         KFLDUM=INT(1.5D0+PYR(0))
42506         CALL PYKFDI(K(N+1,2),-ISIGN(KFLDUM,K(N+1,2)),KFLDMP,KF1)
42507         CALL PYKFDI(K(N+2,2),-ISIGN(KFLDUM,K(N+2,2)),KFLDMP,KF2)
42508         IF(KF1.EQ.0.OR.KF2.EQ.0) GOTO 260
42509         PSM=PYMASS(KF1)+PYMASS(KF2)
42510         IF((MMAT.EQ.42.OR.MMAT.EQ.48).AND.PMR.GT.PARJ(64)+PSM) GOTO 610
42511         IF(MMAT.GE.43.AND.PMR.GT.0.2D0*PARJ(32)+PSM) GOTO 610
42512         IF(MMAT.EQ.48) GOTO 390
42513         IF(ND.EQ.4.OR.KFA.EQ.15) GOTO 260
42514         K(N+1,1)=1
42515         KFTEMP=K(N+1,2)
42516         CALL PYKFDI(KFTEMP,K(N+2,2),KFLDMP,K(N+1,2))
42517         IF(K(N+1,2).EQ.0) GOTO 260
42518         P(N+1,5)=PYMASS(K(N+1,2))
42519         K(N+2,2)=K(N+3,2)
42520         P(N+2,5)=P(N+3,5)
42521         PS=P(N+1,5)+P(N+2,5)
42522         IF(PS+PARJ(64).GT.PV(1,5)) GOTO 260
42523         PV(2,5)=P(N+3,5)
42524         MMAT=0
42525         ND=2
42526         GOTO 460
42527       ENDIF
42528  
42529 C...Phase space decay of partons from W decay.
42530   610 IF((MMAT.EQ.42.OR.MMAT.EQ.48).AND.IABS(K(N+1,2)).LT.10) THEN
42531         KFLO(1)=K(N+1,2)
42532         KFLO(2)=K(N+2,2)
42533         K(N+1,1)=K(N+3,1)
42534         K(N+1,2)=K(N+3,2)
42535         DO 620 J=1,5
42536           PV(1,J)=P(N+1,J)+P(N+2,J)
42537           P(N+1,J)=P(N+3,J)
42538   620   CONTINUE
42539         PV(1,5)=PMR
42540         N=N+1
42541         NP=0
42542         NQ=2
42543         PS=0D0
42544         MSTJ(93)=2
42545         PSQ=PYMASS(KFLO(1))
42546         MSTJ(93)=2
42547         PSQ=PSQ+PYMASS(KFLO(2))
42548         MMAT=11
42549         GOTO 290
42550       ENDIF
42551  
42552 C...Boost back for rapidly moving particle.
42553   630 N=N+ND
42554       IF(MBST.EQ.1) THEN
42555         DO 640 J=1,3
42556           BE(J)=P(IP,J)/P(IP,4)
42557   640   CONTINUE
42558         GA=P(IP,4)/P(IP,5)
42559         DO 660 I=NSAV+1,N
42560           BEP=BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
42561           DO 650 J=1,3
42562             P(I,J)=P(I,J)+GA*(GA*BEP/(1D0+GA)+P(I,4))*BE(J)
42563   650     CONTINUE
42564           P(I,4)=GA*(P(I,4)+BEP)
42565   660   CONTINUE
42566       ENDIF
42567  
42568 C...Fill in position of decay vertex.
42569       DO 680 I=NSAV+1,N
42570         DO 670 J=1,4
42571           V(I,J)=VDCY(J)
42572   670   CONTINUE
42573         V(I,5)=0D0
42574   680 CONTINUE
42575  
42576 C...Set up for parton shower evolution from jets.
42577       IF(MSTJ(23).GE.1.AND.MMAT.EQ.4.AND.K(NSAV+1,2).EQ.21) THEN
42578         K(NSAV+1,1)=3
42579         K(NSAV+2,1)=3
42580         K(NSAV+3,1)=3
42581         K(NSAV+1,4)=MSTU(5)*(NSAV+2)
42582         K(NSAV+1,5)=MSTU(5)*(NSAV+3)
42583         K(NSAV+2,4)=MSTU(5)*(NSAV+3)
42584         K(NSAV+2,5)=MSTU(5)*(NSAV+1)
42585         K(NSAV+3,4)=MSTU(5)*(NSAV+1)
42586         K(NSAV+3,5)=MSTU(5)*(NSAV+2)
42587         MSTJ(92)=-(NSAV+1)
42588       ELSEIF(MSTJ(23).GE.1.AND.MMAT.EQ.4) THEN
42589         K(NSAV+2,1)=3
42590         K(NSAV+3,1)=3
42591         K(NSAV+2,4)=MSTU(5)*(NSAV+3)
42592         K(NSAV+2,5)=MSTU(5)*(NSAV+3)
42593         K(NSAV+3,4)=MSTU(5)*(NSAV+2)
42594         K(NSAV+3,5)=MSTU(5)*(NSAV+2)
42595         MSTJ(92)=NSAV+2
42596       ELSEIF(MSTJ(23).GE.1.AND.(MMAT.EQ.32.OR.MMAT.EQ.44).AND.
42597      &  IABS(K(NSAV+1,2)).LE.10.AND.IABS(K(NSAV+2,2)).LE.10) THEN
42598         K(NSAV+1,1)=3
42599         K(NSAV+2,1)=3
42600         K(NSAV+1,4)=MSTU(5)*(NSAV+2)
42601         K(NSAV+1,5)=MSTU(5)*(NSAV+2)
42602         K(NSAV+2,4)=MSTU(5)*(NSAV+1)
42603         K(NSAV+2,5)=MSTU(5)*(NSAV+1)
42604         MSTJ(92)=NSAV+1
42605       ELSEIF(MSTJ(23).GE.1.AND.(MMAT.EQ.32.OR.MMAT.EQ.44).AND.
42606      &  IABS(K(NSAV+1,2)).LE.20.AND.IABS(K(NSAV+2,2)).LE.20) THEN
42607         MSTJ(92)=NSAV+1
42608       ELSEIF(MSTJ(23).GE.1.AND.MMAT.EQ.33.AND.IABS(K(NSAV+2,2)).EQ.21)
42609      &  THEN
42610         K(NSAV+1,1)=3
42611         K(NSAV+2,1)=3
42612         K(NSAV+3,1)=3
42613         KCP=PYCOMP(K(NSAV+1,2))
42614         KQP=KCHG(KCP,2)*ISIGN(1,K(NSAV+1,2))
42615         JCON=4
42616         IF(KQP.LT.0) JCON=5
42617         K(NSAV+1,JCON)=MSTU(5)*(NSAV+2)
42618         K(NSAV+2,9-JCON)=MSTU(5)*(NSAV+1)
42619         K(NSAV+2,JCON)=MSTU(5)*(NSAV+3)
42620         K(NSAV+3,9-JCON)=MSTU(5)*(NSAV+2)
42621         MSTJ(92)=NSAV+1
42622       ELSEIF(MSTJ(23).GE.1.AND.MMAT.EQ.33) THEN
42623         K(NSAV+1,1)=3
42624         K(NSAV+3,1)=3
42625         K(NSAV+1,4)=MSTU(5)*(NSAV+3)
42626         K(NSAV+1,5)=MSTU(5)*(NSAV+3)
42627         K(NSAV+3,4)=MSTU(5)*(NSAV+1)
42628         K(NSAV+3,5)=MSTU(5)*(NSAV+1)
42629         MSTJ(92)=NSAV+1
42630       ENDIF
42631  
42632 C...Mark decayed particle; special option for B-Bbar mixing.
42633       IF(K(IP,1).EQ.5) K(IP,1)=15
42634       IF(K(IP,1).LE.10) K(IP,1)=11
42635       IF(MMIX.EQ.1.AND.MSTJ(26).EQ.2.AND.K(IP,1).EQ.11) K(IP,1)=12
42636       K(IP,4)=NSAV+1
42637       K(IP,5)=N
42638  
42639       RETURN
42640       END
42641  
42642   
42643 C*********************************************************************
42644  
42645 C...PYDCYK
42646 C...Handles flavour production in the decay of unstable particles
42647 C...and small string clusters.
42648  
42649       SUBROUTINE PYDCYK(KFL1,KFL2,KFL3,KF)
42650  
42651 C...Double precision and integer declarations.
42652       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
42653       IMPLICIT INTEGER(I-N)
42654       INTEGER PYK,PYCHGE,PYCOMP
42655 C...Commonblocks.
42656       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
42657       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
42658       SAVE /PYDAT1/,/PYDAT2/
42659  
42660  
42661 C.. Call PYKFDI directly if no popcorn option is on
42662       IF(MSTJ(12).LT.2) THEN
42663          CALL PYKFDI(KFL1,KFL2,KFL3,KF)
42664          MSTU(124)=KFL3
42665          RETURN
42666       ENDIF
42667  
42668       KFL3=0
42669       KF=0
42670       IF(KFL1.EQ.0) RETURN
42671       KF1A=IABS(KFL1)
42672       KF2A=IABS(KFL2)
42673  
42674       NSTO=130
42675       NMAX=MIN(MSTU(125),10)
42676  
42677 C.. Identify rank 0 cluster qq
42678       IRANK=1
42679       IF(KF1A.GT.10.AND.KF1A.LT.10000) IRANK=0
42680  
42681       IF(KF2A.GT.0)THEN
42682 C.. Join jets: Fails if store not empty
42683          IF(MSTU(121).GT.0) THEN
42684             MSTU(121)=0
42685             RETURN
42686          ENDIF
42687          CALL PYKFDI(KFL1,KFL2,KFL3,KF)
42688       ELSEIF(KF1A.GT.10.AND.MSTU(121).GT.0)THEN
42689 C.. Pick popcorn meson from store, return same qq, decrease store
42690          KF=MSTU(NSTO+MSTU(121))
42691          KFL3=-KFL1
42692          MSTU(121)=MSTU(121)-1
42693       ELSE
42694 C.. Generate new flavour. Then done if no diquark is generated
42695   100    CALL PYKFDI(KFL1,0,KFL3,KF)
42696          IF(MSTU(121).EQ.-1) GOTO 100
42697          MSTU(124)=KFL3
42698          IF(KF.EQ.0.OR.IABS(KFL3).LE.10) RETURN
42699  
42700 C.. Simple case if no dynamical popcorn suppressions are considered
42701          IF(MSTJ(12).LT.4) THEN
42702             IF(MSTU(121).EQ.0) RETURN
42703             NMES=1
42704             KFPREV=-KFL3
42705             CALL PYKFDI(KFPREV,0,KFL3,KFM)
42706 C.. Due to eta+eta' suppr., a qq->M+qq attempt might end as qq->B+q
42707             IF(IABS(KFL3).LE.10)THEN
42708                KFL3=-KFPREV
42709                RETURN
42710             ENDIF
42711             GOTO 120
42712          ENDIF
42713  
42714 C test output qq against fake Gamma, then return if no popcorn.
42715          GB=2D0
42716          IF(IRANK.NE.0)THEN
42717             CALL PYZDIS(1,2103,5D0,Z)
42718             GB=5D0*(1D0-Z)/Z
42719             IF(1D0-PARF(192)**GB.LT.PYR(0)) THEN
42720                MSTU(121)=0
42721                GOTO 100
42722             ENDIF
42723          ENDIF
42724          IF(MSTU(121).EQ.0) RETURN
42725  
42726 C..Set store size memory. Pick fake dynamical variables of qq.
42727          NMES=MSTU(121)
42728          CALL PYPTDI(1,PX3,PY3)
42729          X=1D0
42730          POPM=0D0
42731          G=GB
42732          POPG=GB
42733  
42734 C.. Pick next popcorn meson, test with fake dynamical variables
42735   110    KFPREV=-KFL3
42736          PX1=-PX3
42737          PY1=-PY3
42738          CALL PYKFDI(KFPREV,0,KFL3,KFM)
42739          IF(MSTU(121).EQ.-1) GOTO 100
42740          CALL PYPTDI(KFL3,PX3,PY3)
42741          PM=PYMASS(KFM)**2+(PX1+PX3)**2+(PY1+PY3)**2
42742          CALL PYZDIS(KFPREV,KFL3,PM,Z)
42743          G=(1D0-Z)*(G+PM/Z)
42744          X=(1D0-Z)*X
42745  
42746          PTST=1D0
42747          GTST=1D0
42748          RTST=PYR(0)
42749          IF(MSTJ(12).GT.4)THEN
42750             POPMN=SQRT((1D0-X)*(G/X-GB))
42751             POPM=POPM+PMAS(PYCOMP(KFM),1)-PMAS(PYCOMP(KFM),3)
42752             PTST=EXP((POPM-POPMN)*PARF(193))
42753             POPM=POPMN
42754          ENDIF
42755          IF(IRANK.NE.0)THEN
42756             POPGN=X*GB
42757             GTST=(1D0-PARF(192)**POPGN)/(1D0-PARF(192)**POPG)
42758             POPG=POPGN
42759          ENDIF
42760          IF(RTST.GT.PTST*GTST)THEN
42761             MSTU(121)=0
42762             IF(RTST.GT.PTST) MSTU(121)=-1
42763             GOTO 100
42764          ENDIF
42765  
42766 C.. Store meson
42767   120    IF(NMES.LE.NMAX) MSTU(NSTO+MSTU(121)+1)=KFM
42768          IF(MSTU(121).GT.0) GOTO 110
42769  
42770 C.. Test accepted system size. If OK set global popcorn size variable.
42771          IF(NMES.GT.NMAX)THEN
42772             KF=0
42773             KFL3=0
42774             RETURN
42775          ENDIF
42776          MSTU(121)=NMES
42777       ENDIF
42778  
42779       RETURN
42780       END
42781  
42782 C********************************************************************
42783  
42784 C...PYKFDI
42785 C...Generates a new flavour pair and combines off a hadron
42786  
42787       SUBROUTINE PYKFDI(KFL1,KFL2,KFL3,KF)
42788  
42789 C...Double precision and integer declarations.
42790       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
42791       IMPLICIT INTEGER(I-N)
42792       INTEGER PYK,PYCHGE,PYCOMP
42793 C...Commonblocks.
42794       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
42795       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
42796       SAVE /PYDAT1/,/PYDAT2/
42797 C...Local arrays.
42798       DIMENSION PD(7)
42799  
42800       IF(MSTU(123).EQ.0.AND.MSTJ(12).GT.0)  CALL PYKFIN
42801
42802 C...Default flavour values. Input consistency checks.
42803       KF1A=IABS(KFL1)
42804       KF2A=IABS(KFL2)
42805       KFL3=0
42806       KF=0
42807       IF(KF1A.EQ.0) RETURN
42808       IF(KF2A.NE.0)THEN
42809         IF(KF1A.LE.10.AND.KF2A.LE.10.AND.KFL1*KFL2.GT.0) RETURN
42810         IF(KF1A.GT.10.AND.KF2A.GT.10) RETURN
42811         IF((KF1A.GT.10.OR.KF2A.GT.10).AND.KFL1*KFL2.LT.0) RETURN
42812       ENDIF
42813  
42814 C...Check if tabulated flavour probabilities are to be used.
42815       IF(MSTJ(15).EQ.1) THEN
42816         IF(MSTJ(12).GE.5)  CALL PYERRM(29,
42817      &        '(PYKFDI:) Sorry, option MSTJ(15)=1 not available' //
42818      &        ' together with MSTJ(12)>=5 modification')
42819         KTAB1=-1
42820         IF(KF1A.GE.1.AND.KF1A.LE.6) KTAB1=KF1A
42821         KFL1A=MOD(KF1A/1000,10)
42822         KFL1B=MOD(KF1A/100,10)
42823         KFL1S=MOD(KF1A,10)
42824         IF(KFL1A.GE.1.AND.KFL1A.LE.4.AND.KFL1B.GE.1.AND.KFL1B.LE.4)
42825      &  KTAB1=6+KFL1A*(KFL1A-2)+2*KFL1B+(KFL1S-1)/2
42826         IF(KFL1A.GE.1.AND.KFL1A.LE.4.AND.KFL1A.EQ.KFL1B) KTAB1=KTAB1-1
42827         IF(KF1A.GE.1.AND.KF1A.LE.6) KFL1A=KF1A
42828         KTAB2=0
42829         IF(KF2A.NE.0) THEN
42830           KTAB2=-1
42831           IF(KF2A.GE.1.AND.KF2A.LE.6) KTAB2=KF2A
42832           KFL2A=MOD(KF2A/1000,10)
42833           KFL2B=MOD(KF2A/100,10)
42834           KFL2S=MOD(KF2A,10)
42835           IF(KFL2A.GE.1.AND.KFL2A.LE.4.AND.KFL2B.GE.1.AND.KFL2B.LE.4)
42836      &    KTAB2=6+KFL2A*(KFL2A-2)+2*KFL2B+(KFL2S-1)/2
42837           IF(KFL2A.GE.1.AND.KFL2A.LE.4.AND.KFL2A.EQ.KFL2B) KTAB2=KTAB2-1
42838         ENDIF
42839         IF(KTAB1.GE.0.AND.KTAB2.GE.0) GOTO 140
42840       ENDIF
42841  
42842 C.. Recognize rank 0 diquark case
42843   100 IRANK=1
42844       KFDIQ=MAX(KF1A,KF2A)
42845       IF(KFDIQ.GT.10.AND.KFDIQ.LT.10000) IRANK=0
42846  
42847 C.. Join two flavours to meson or baryon. Test for popcorn.
42848       IF(KF2A.GT.0)THEN
42849         MBARY=0
42850         IF(KFDIQ.GT.10) THEN
42851           IF(IRANK.EQ.0.AND.MSTJ(12).LT.5)
42852      &         CALL PYNMES(KFDIQ)
42853           IF(MSTU(121).NE.0) THEN
42854              MSTU(121)=0
42855              RETURN
42856           ENDIF
42857           MBARY=2
42858         ENDIF
42859         KFQOLD=KF1A
42860         KFQVER=KF2A
42861         GOTO 130
42862       ENDIF
42863  
42864 C.. Separate incoming flavours, curtain flavour consistency check
42865       KFIN=KFL1
42866       KFQOLD=KF1A
42867       KFQPOP=KF1A/10000
42868       IF(KF1A.GT.10)THEN
42869          KFIN=-KFL1
42870          KFL1A=MOD(KF1A/1000,10)
42871          KFL1B=MOD(KF1A/100,10)
42872          IF(IRANK.EQ.0)THEN
42873             QAWT=1D0
42874             IF(KFL1A.GE.3) QAWT=PARF(136+KFL1A/4)
42875             IF(KFL1B.GE.3) QAWT=QAWT/PARF(136+KFL1B/4)
42876             KFQPOP=KFL1A+(KFL1B-KFL1A)*INT(1D0/(QAWT+1D0)+PYR(0))
42877          ENDIF
42878          IF(KFQPOP.NE.KFL1B.AND.KFQPOP.NE.KFL1A) THEN
42879              MSTU(121)=0
42880              RETURN
42881           ENDIF
42882          KFQOLD=KFL1A+KFL1B-KFQPOP
42883       ENDIF
42884  
42885 C...Meson/baryon choice. Set number of mesons if starting a popcorn
42886 C...system.
42887   110 MBARY=0
42888       IF(KF1A.LE.10.AND.MSTJ(12).GT.0)THEN
42889          IF(MSTU(121).EQ.-1.OR.(1D0+PARJ(1))*PYR(0).GT.1D0)THEN
42890             MBARY=1
42891             CALL PYNMES(0)
42892          ENDIF
42893       ELSEIF(KF1A.GT.10)THEN
42894          MBARY=2
42895          IF(IRANK.EQ.0) CALL PYNMES(KF1A)
42896          IF(MSTU(121).GT.0) MBARY=-1
42897       ENDIF
42898  
42899 C..x->H+q: Choose single vertex quark. Jump to form hadron.
42900       IF(MBARY.EQ.0.OR.MBARY.EQ.2)THEN
42901          KFQVER=1+INT((2D0+PARJ(2))*PYR(0))
42902          KFL3=ISIGN(KFQVER,-KFIN)
42903          GOTO 130
42904       ENDIF
42905  
42906 C..x->H+qq: (IDW=proper PARF position for diquark weights)
42907       IDW=160
42908       IF(MBARY.EQ.1)THEN
42909          IF(MSTU(121).EQ.0) IDW=150
42910          SQWT=PARF(IDW+1)
42911          IF(MSTU(121).GT.0) SQWT=SQWT*PARF(135)*PARF(138)**MSTU(121)
42912          KFQPOP=1+INT((2D0+SQWT)*PYR(0))
42913 C..   Shift to s-curtain parameters if needed
42914          IF(KFQPOP.GE.3.AND.MSTJ(12).GE.5)THEN
42915             PARF(194)=PARF(138)*PARF(139)
42916             PARF(193)=PARJ(8)+PARJ(9)
42917          ENDIF
42918       ENDIF
42919  
42920 C.. x->H+qq: Get vertex quark
42921       IF(MBARY.EQ.-1.AND.MSTJ(12).GE.5)THEN
42922          IDW=MSTU(122)
42923          MSTU(121)=MSTU(121)-1
42924          IF(IDW.EQ.170) THEN
42925             IF(MSTU(121).EQ.0)THEN
42926                IPOS=3*MIN(KFQPOP-1,2)+MIN(KFQOLD-1,2)
42927             ELSE
42928                IPOS=3*3+3*MAX(0,MIN(KFQPOP-2,1))+MIN(KFQOLD-1,2)
42929             ENDIF
42930          ELSE
42931             IF(MSTU(121).EQ.0)THEN
42932                IPOS=3*5+5*MIN(KFQPOP-1,3)+MIN(KFQOLD-1,4)
42933             ELSE
42934                IPOS=3*5+5*4+MIN(KFQOLD-1,4)
42935             ENDIF
42936          ENDIF
42937          IPOS=200+30*IPOS+1
42938  
42939          IMES=-1
42940          RMES=PYR(0)*PARF(194)
42941   120    IMES=IMES+1
42942          RMES=RMES-PARF(IPOS+IMES)
42943          IF(IMES.EQ.30) THEN
42944             MSTU(121)=-1
42945             KF=-111
42946             RETURN
42947          ENDIF
42948          IF(RMES.GT.0D0) GOTO 120
42949          KMUL=IMES/5
42950          KFJ=2*KMUL+1
42951          IF(KMUL.EQ.2) KFJ=10003
42952          IF(KMUL.EQ.3) KFJ=10001
42953          IF(KMUL.EQ.4) KFJ=20003
42954          IF(KMUL.EQ.5) KFJ=5
42955          IDIAG=0
42956          KFQVER=MOD(IMES,5)+1
42957          IF(KFQVER.GE.KFQOLD) KFQVER=KFQVER+1
42958          IF(KFQVER.GT.3)THEN
42959             IDIAG=KFQVER-3
42960             KFQVER=KFQOLD
42961          ENDIF
42962       ELSE
42963          IF(MBARY.EQ.-1) IDW=170
42964          SQWT=PARF(IDW+2)
42965          IF(KFQPOP.EQ.3) SQWT=PARF(IDW+3)
42966          IF(KFQPOP.GT.3) SQWT=PARF(IDW+3)*(1D0/PARF(IDW+5)+1D0)/2D0
42967          KFQVER=MIN(3,1+INT((2D0+SQWT)*PYR(0)))
42968          IF(KFQPOP.LT.3.AND.KFQVER.LT.3)THEN
42969             KFQVER=KFQPOP
42970             IF(PYR(0).GT.PARF(IDW+4)) KFQVER=3-KFQPOP
42971          ENDIF
42972       ENDIF
42973  
42974 C..x->H+qq: form outgoing diquark with KFQPOP flag at 10000-pos
42975       KFLDS=3
42976       IF(KFQPOP.NE.KFQVER)THEN
42977          SWT=PARF(IDW+7)
42978          IF(KFQVER.EQ.3) SWT=PARF(IDW+6)
42979          IF(KFQPOP.GE.3) SWT=PARF(IDW+5)
42980          IF((1D0+SWT)*PYR(0).LT.1D0) KFLDS=1
42981       ENDIF
42982       KFDIQ=900*MAX(KFQVER,KFQPOP)+100*(KFQVER+KFQPOP)+KFLDS
42983      &      +10000*KFQPOP
42984       KFL3=ISIGN(KFDIQ,KFIN)
42985  
42986 C..x->M+y: flavour for meson.
42987   130 IF(MBARY.LE.0)THEN
42988         KFLA=MAX(KFQOLD,KFQVER)
42989         KFLB=MIN(KFQOLD,KFQVER)
42990         KFS=ISIGN(1,KFL1)
42991         IF(KFLA.NE.KFQOLD) KFS=-KFS
42992 C... Form meson, with spin and flavour mixing for diagonal states.
42993         IF(MBARY.EQ.-1.AND.MSTJ(12).GE.5)THEN
42994            IF(IDIAG.GT.0) KF=110*IDIAG+KFJ
42995            IF(IDIAG.EQ.0) KF=(100*KFLA+10*KFLB+KFJ)*KFS*(-1)**KFLA
42996            RETURN
42997         ENDIF
42998         IF(KFLA.LE.2) KMUL=INT(PARJ(11)+PYR(0))
42999         IF(KFLA.EQ.3) KMUL=INT(PARJ(12)+PYR(0))
43000         IF(KFLA.GE.4) KMUL=INT(PARJ(13)+PYR(0))
43001         IF(KMUL.EQ.0.AND.PARJ(14).GT.0D0)THEN
43002           IF(PYR(0).LT.PARJ(14)) KMUL=2
43003         ELSEIF(KMUL.EQ.1.AND.PARJ(15)+PARJ(16)+PARJ(17).GT.0D0)THEN
43004           RMUL=PYR(0)
43005           IF(RMUL.LT.PARJ(15)) KMUL=3
43006           IF(KMUL.EQ.1.AND.RMUL.LT.PARJ(15)+PARJ(16)) KMUL=4
43007           IF(KMUL.EQ.1.AND.RMUL.LT.PARJ(15)+PARJ(16)+PARJ(17)) KMUL=5
43008         ENDIF
43009         KFLS=3
43010         IF(KMUL.EQ.0.OR.KMUL.EQ.3) KFLS=1
43011         IF(KMUL.EQ.5) KFLS=5
43012         IF(KFLA.NE.KFLB)THEN
43013           KF=(100*KFLA+10*KFLB+KFLS)*KFS*(-1)**KFLA
43014         ELSE
43015           RMIX=PYR(0)
43016           IMIX=2*KFLA+10*KMUL
43017           IF(KFLA.LE.3) KF=110*(1+INT(RMIX+PARF(IMIX-1))+
43018      &    INT(RMIX+PARF(IMIX)))+KFLS
43019           IF(KFLA.GE.4) KF=110*KFLA+KFLS
43020         ENDIF
43021         IF(KMUL.EQ.2.OR.KMUL.EQ.3) KF=KF+ISIGN(10000,KF)
43022         IF(KMUL.EQ.4) KF=KF+ISIGN(20000,KF)
43023  
43024 C..Optional extra suppression of eta and eta'.
43025 C..Allow shift to qq->B+q in old version (set IRANK to 0)
43026         IF(KF.EQ.221.OR.KF.EQ.331)THEN
43027            IF(PYR(0).GT.PARJ(25+KF/300))THEN
43028               IF(KF2A.GT.0) GOTO 130
43029               IF(MSTJ(12).LT.4) IRANK=0
43030               GOTO 110
43031            ENDIF
43032         ENDIF
43033         MSTU(121)=0
43034  
43035 C.. x->B+y: Flavour for baryon
43036       ELSE
43037         KFLA=KFQVER
43038         IF(KF1A.LE.10) KFLA=KFQOLD
43039         KFLB=MOD(KFDIQ/1000,10)
43040         KFLC=MOD(KFDIQ/100,10)
43041         KFLDS=MOD(KFDIQ,10)
43042         KFLD=MAX(KFLA,KFLB,KFLC)
43043         KFLF=MIN(KFLA,KFLB,KFLC)
43044         KFLE=KFLA+KFLB+KFLC-KFLD-KFLF
43045  
43046 C...  SU(6) factors for formation of baryon.
43047         KBARY=3
43048         KDMAX=5
43049         KFLG=KFLB
43050         IF(KFLB.NE.KFLC)THEN
43051            KBARY=2*KFLDS-1
43052            KDMAX=1+KFLDS/2
43053            IF(KFLB.GT.2) KDMAX=KDMAX+2
43054         ENDIF
43055         IF(KFLA.NE.KFLB.AND.KFLA.NE.KFLC)THEN
43056            KBARY=KBARY+1
43057            KFLG=KFLA
43058         ENDIF
43059  
43060         SU6MAX=PARF(140+KDMAX)
43061         SU6DEC=PARJ(18)
43062         SU6S  =PARF(146)
43063         IF(MSTJ(12).GE.5.AND.IRANK.EQ.0) THEN
43064            SU6MAX=1D0
43065            SU6DEC=1D0
43066            SU6S  =1D0
43067         ENDIF
43068         SU6OCT=PARF(60+KBARY)
43069         IF(KFLG.GT.MAX(KFLA+KFLB-KFLG,2))THEN
43070            SU6OCT=SU6OCT*4*SU6S/(3*SU6S+1)
43071            IF(KBARY.EQ.2) SU6OCT=PARF(60+KBARY)*4/(3*SU6S+1)
43072         ELSE
43073            IF(KBARY.EQ.6) SU6OCT=SU6OCT*(3+SU6S)/(3*SU6S+1)
43074         ENDIF
43075         SU6WT=SU6OCT+SU6DEC*PARF(70+KBARY)
43076  
43077 C..   SU(6) test. Old options enforce new baryon if q->B+qq is rejected.
43078         IF(SU6WT.LT.PYR(0)*SU6MAX.AND.KF2A.EQ.0)THEN
43079            MSTU(121)=0
43080            IF(MSTJ(12).LE.2.AND.MBARY.EQ.1) MSTU(121)=-1
43081            GOTO 110
43082         ENDIF
43083  
43084 C.. Form baryon. Distinguish Lambda- and Sigmalike baryons.
43085         KSIG=1
43086         KFLS=2
43087         IF(SU6WT*PYR(0).GT.SU6OCT) KFLS=4
43088         IF(KFLS.EQ.2.AND.KFLD.GT.KFLE.AND.KFLE.GT.KFLF)THEN
43089           KSIG=KFLDS/3
43090           IF(KFLA.NE.KFLD) KSIG=INT(3*SU6S/(3*SU6S+KFLDS**2)+PYR(0))
43091         ENDIF
43092         KF=ISIGN(1000*KFLD+100*KFLE+10*KFLF+KFLS,KFL1)
43093         IF(KSIG.EQ.0) KF=ISIGN(1000*KFLD+100*KFLF+10*KFLE+KFLS,KFL1)
43094       ENDIF
43095       RETURN
43096  
43097 C...Use tabulated probabilities to select new flavour and hadron.
43098   140 IF(KTAB2.EQ.0.AND.MSTJ(12).LE.0) THEN
43099         KT3L=1
43100         KT3U=6
43101       ELSEIF(KTAB2.EQ.0.AND.KTAB1.GE.7.AND.MSTJ(12).LE.1) THEN
43102         KT3L=1
43103         KT3U=6
43104       ELSEIF(KTAB2.EQ.0) THEN
43105         KT3L=1
43106         KT3U=22
43107       ELSE
43108         KT3L=KTAB2
43109         KT3U=KTAB2
43110       ENDIF
43111       RFL=0D0
43112       DO 160 KTS=0,2
43113         DO 150 KT3=KT3L,KT3U
43114           RFL=RFL+PARF(120+80*KTAB1+25*KTS+KT3)
43115   150   CONTINUE
43116   160 CONTINUE
43117       RFL=PYR(0)*RFL
43118       DO 180 KTS=0,2
43119         KTABS=KTS
43120         DO 170 KT3=KT3L,KT3U
43121           KTAB3=KT3
43122           RFL=RFL-PARF(120+80*KTAB1+25*KTS+KT3)
43123           IF(RFL.LE.0D0) GOTO 190
43124   170   CONTINUE
43125   180 CONTINUE
43126   190 CONTINUE
43127  
43128 C...Reconstruct flavour of produced quark/diquark.
43129       IF(KTAB3.LE.6) THEN
43130         KFL3A=KTAB3
43131         KFL3B=0
43132         KFL3=ISIGN(KFL3A,KFL1*(2*KTAB1-13))
43133       ELSE
43134         KFL3A=1
43135         IF(KTAB3.GE.8) KFL3A=2
43136         IF(KTAB3.GE.11) KFL3A=3
43137         IF(KTAB3.GE.16) KFL3A=4
43138         KFL3B=(KTAB3-6-KFL3A*(KFL3A-2))/2
43139         KFL3=1000*KFL3A+100*KFL3B+1
43140         IF(KFL3A.EQ.KFL3B.OR.KTAB3.NE.6+KFL3A*(KFL3A-2)+2*KFL3B) KFL3=
43141      &  KFL3+2
43142         KFL3=ISIGN(KFL3,KFL1*(13-2*KTAB1))
43143       ENDIF
43144  
43145 C...Reconstruct meson code.
43146       IF(KFL3A.EQ.KFL1A.AND.KFL3B.EQ.KFL1B.AND.(KFL3A.LE.3.OR.
43147      &KFL3B.NE.0)) THEN
43148         RFL=PYR(0)*(PARF(143+80*KTAB1+25*KTABS)+PARF(144+80*KTAB1+
43149      &  25*KTABS)+PARF(145+80*KTAB1+25*KTABS))
43150         KF=110+2*KTABS+1
43151         IF(RFL.GT.PARF(143+80*KTAB1+25*KTABS)) KF=220+2*KTABS+1
43152         IF(RFL.GT.PARF(143+80*KTAB1+25*KTABS)+PARF(144+80*KTAB1+
43153      &  25*KTABS)) KF=330+2*KTABS+1
43154       ELSEIF(KTAB1.LE.6.AND.KTAB3.LE.6) THEN
43155         KFLA=MAX(KTAB1,KTAB3)
43156         KFLB=MIN(KTAB1,KTAB3)
43157         KFS=ISIGN(1,KFL1)
43158         IF(KFLA.NE.KF1A) KFS=-KFS
43159         KF=(100*KFLA+10*KFLB+2*KTABS+1)*KFS*(-1)**KFLA
43160       ELSEIF(KTAB1.GE.7.AND.KTAB3.GE.7) THEN
43161         KFS=ISIGN(1,KFL1)
43162         IF(KFL1A.EQ.KFL3A) THEN
43163           KFLA=MAX(KFL1B,KFL3B)
43164           KFLB=MIN(KFL1B,KFL3B)
43165           IF(KFLA.NE.KFL1B) KFS=-KFS
43166         ELSEIF(KFL1A.EQ.KFL3B) THEN
43167           KFLA=KFL3A
43168           KFLB=KFL1B
43169           KFS=-KFS
43170         ELSEIF(KFL1B.EQ.KFL3A) THEN
43171           KFLA=KFL1A
43172           KFLB=KFL3B
43173         ELSEIF(KFL1B.EQ.KFL3B) THEN
43174           KFLA=MAX(KFL1A,KFL3A)
43175           KFLB=MIN(KFL1A,KFL3A)
43176           IF(KFLA.NE.KFL1A) KFS=-KFS
43177         ELSE
43178           CALL PYERRM(2,'(PYKFDI:) no matching flavours for qq -> qq')
43179           GOTO 100
43180         ENDIF
43181         KF=(100*KFLA+10*KFLB+2*KTABS+1)*KFS*(-1)**KFLA
43182  
43183 C...Reconstruct baryon code.
43184       ELSE
43185         IF(KTAB1.GE.7) THEN
43186           KFLA=KFL3A
43187           KFLB=KFL1A
43188           KFLC=KFL1B
43189         ELSE
43190           KFLA=KFL1A
43191           KFLB=KFL3A
43192           KFLC=KFL3B
43193         ENDIF
43194         KFLD=MAX(KFLA,KFLB,KFLC)
43195         KFLF=MIN(KFLA,KFLB,KFLC)
43196         KFLE=KFLA+KFLB+KFLC-KFLD-KFLF
43197         IF(KTABS.EQ.0) KF=ISIGN(1000*KFLD+100*KFLF+10*KFLE+2,KFL1)
43198         IF(KTABS.GE.1) KF=ISIGN(1000*KFLD+100*KFLE+10*KFLF+2*KTABS,KFL1)
43199       ENDIF
43200  
43201 C...Check that constructed flavour code is an allowed one.
43202       IF(KFL2.NE.0) KFL3=0
43203       KC=PYCOMP(KF)
43204       IF(KC.EQ.0) THEN
43205         CALL PYERRM(2,'(PYKFDI:) user-defined flavour probabilities '//
43206      &  'failed')
43207         GOTO 100
43208       ENDIF
43209  
43210       RETURN
43211       END
43212
43213 C*********************************************************************
43214  
43215 C...PYNMES
43216 C...Generates number of popcorn mesons and stores some relevant
43217 C...parameters.
43218  
43219       SUBROUTINE PYNMES(KFDIQ)
43220  
43221 C...Double precision and integer declarations.
43222       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
43223       IMPLICIT INTEGER(I-N)
43224       INTEGER PYK,PYCHGE,PYCOMP
43225 C...Commonblocks.
43226       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
43227       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
43228       SAVE /PYDAT1/,/PYDAT2/
43229  
43230       MSTU(121)=0
43231       IF(MSTJ(12).LT.2) RETURN
43232  
43233 C..Old version: Get 1 or 0 popcorn mesons
43234       IF(MSTJ(12).LT.5)THEN
43235          POPWT=PARF(131)
43236          IF(KFDIQ.NE.0) THEN
43237             KFDIQA=IABS(KFDIQ)
43238             KFA=MOD(KFDIQA/1000,10)
43239             KFB=MOD(KFDIQA/100,10)
43240             KFS=MOD(KFDIQA,10)
43241             POPWT=PARF(132)
43242             IF(KFA.EQ.3) POPWT=PARF(133)
43243             IF(KFB.EQ.3) POPWT=PARF(134)
43244             IF(KFS.EQ.1) POPWT=POPWT*SQRT(PARJ(4))
43245          ENDIF
43246          MSTU(121)=INT(POPWT/(1D0+POPWT)+PYR(0))
43247          RETURN
43248       ENDIF
43249  
43250 C..New version: Store popcorn- or rank 0 diquark parameters
43251       MSTU(122)=170
43252       PARF(193)=PARJ(8)
43253       PARF(194)=PARF(139)
43254       IF(KFDIQ.NE.0) THEN
43255          MSTU(122)=180
43256          PARF(193)=PARJ(10)
43257          PARF(194)=PARF(140)
43258       ENDIF
43259       IF(PARF(194).LT.1D-5.OR.PARF(194).GT.1D0-1D-5) THEN
43260          IF(PARF(194).GT.1D0-1D-5) CALL PYERRM(9,
43261      &        '(PYNMES:) Neglecting too large popcorn possibility')
43262          RETURN
43263       ENDIF
43264  
43265 C..New version: Get number of popcorn mesons
43266   100 RTST=PYR(0)
43267       MSTU(121)=-1
43268   110 MSTU(121)=MSTU(121)+1
43269       RTST=RTST/PARF(194)
43270       IF(RTST.LT.1D0) GOTO 110
43271       IF(KFDIQ.EQ.0.AND.PYR(0)*(2D0+PARF(135)*PARF(161)).GT.
43272      &     (2D0+PARF(135)*PARF(161)*PARF(138)**MSTU(121))) GOTO 100
43273       RETURN
43274       END
43275   
43276 C***************************************************************
43277
43278 C...PYKFIN
43279 C...Precalculates a set of diquark and popcorn weights.
43280  
43281       SUBROUTINE PYKFIN
43282  
43283 C...Double precision and integer declarations.
43284       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
43285       IMPLICIT INTEGER(I-N)
43286       INTEGER PYK,PYCHGE,PYCOMP
43287 C...Commonblocks.
43288       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
43289       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
43290       SAVE /PYDAT1/,/PYDAT2/
43291  
43292       DIMENSION SU6(12),SU6M(7),QBB(7),QBM(7),DMB(14)
43293         
43294  
43295       MSTU(123)=1
43296 C..Diquark indices for dimensional variables
43297       IUD1=1
43298       IUU1=2
43299       IUS0=3
43300       ISU0=4
43301       IUS1=5
43302       ISU1=6
43303       ISS1=7
43304
43305 C.. *** SU(6) factors **
43306 C..Modify with decuplet- (and Sigma/Lambda-) suppression.
43307       PARF(146)=1D0
43308       IF(MSTJ(12).GE.5) PARF(146)=3D0*PARJ(18)/(2D0*PARJ(18)+1D0)
43309       IF(PARJ(18).LT.1D0-1D-5.AND.MSTJ(12).LT.5) CALL PYERRM(9,
43310      &     '(PYKFIN:) PARJ(18)<1 combined with 0<MSTJ(12)<5 option')
43311       DO 100 I=1,6
43312          SU6(I)=PARF(60+I)
43313          SU6(6+I)=SU6(I)*4*PARF(146)/(3*PARF(146)+1)
43314   100 CONTINUE
43315       SU6(8)=SU6(2)*4/(3*PARF(146)+1)
43316       SU6(6)=SU6(6)*(3+PARF(146))/(3*PARF(146)+1)
43317       DO 110 I=1,6
43318          SU6(I)=SU6(I)+PARJ(18)*PARF(70+I)
43319          SU6(6+I)=SU6(6+I)+PARJ(18)*PARF(70+I)
43320   110 CONTINUE
43321  
43322 C..SU(6)max            q       q'     s,c,b
43323       SU6MUD    =MAX(SU6(1) ,       SU6(8) )
43324       SU6M(IUD1)=MAX(SU6(5) ,       SU6(12))
43325       SU6M(ISU0)=MAX(SU6(7) ,SU6(2),SU6MUD )
43326       SU6M(IUU1)=MAX(SU6(3) ,SU6(4),SU6(10))
43327       SU6M(ISU1)=MAX(SU6(11),SU6(6),SU6M(IUD1))
43328       SU6M(IUS0)=SU6M(ISU0)
43329       SU6M(ISS1)=SU6M(IUU1)
43330       SU6M(IUS1)=SU6M(ISU1)
43331  
43332 C..Store SU(6)max, in order UD0,UD1,US0,US1,QQ1
43333       PARF(141)=SU6MUD
43334       PARF(142)=SU6M(IUD1)
43335       PARF(143)=SU6M(ISU0)
43336       PARF(144)=SU6M(ISU1)
43337       PARF(145)=SU6M(ISS1)
43338
43339 C..diquark SU(6) survival = 
43340 C..sum over quark (quark tunnel weight)*(SU(6)).
43341       PUD0=(2D0*SU6(1)+PARJ(2)*SU6(8))
43342       DMB(ISU0)=(SU6(7)+SU6(2)+PARJ(2)*SU6(1))/PUD0
43343       DMB(IUS0)=DMB(ISU0)
43344       DMB(ISS1)=(2D0*SU6(4)+PARJ(2)*SU6(3))/PUD0
43345       DMB(IUU1)=(SU6(3)+SU6(4)+PARJ(2)*SU6(10))/PUD0
43346       DMB(ISU1)=(SU6(11)+SU6(6)+PARJ(2)*SU6(5))/PUD0
43347       DMB(IUS1)=DMB(ISU1)
43348       DMB(IUD1)=(2D0*SU6(5)+PARJ(2)*SU6(12))/PUD0
43349  
43350 C.. *** Tunneling factors for Diquark production***
43351 C.. T: half a curtain pair = sqrt(curtain pair factor)
43352       IF(MSTJ(12).GE.5) THEN
43353          PMUD0=PYMASS(2101)
43354          PMUD1=PYMASS(2103)-PMUD0
43355          PMUS0=PYMASS(3201)-PMUD0
43356          PMUS1=PYMASS(3203)-PMUS0-PMUD0
43357          PMSS1=PYMASS(3303)-PMUS0-PMUD0
43358          QBB(ISU0)=EXP(-(PARJ(9)+PARJ(8))*PMUS0-PARJ(9)*PARF(191))
43359          QBB(IUS0)=EXP(-PARJ(8)*PMUS0)
43360          QBB(ISS1)=EXP(-(PARJ(9)+PARJ(8))*PMSS1)*QBB(ISU0)
43361          QBB(IUU1)=EXP(-PARJ(8)*PMUD1)
43362          QBB(ISU1)=EXP(-(PARJ(9)+PARJ(8))*PMUS1)*QBB(ISU0)
43363          QBB(IUS1)=EXP(-PARJ(8)*PMUS1)*QBB(IUS0)
43364          QBB(IUD1)=QBB(IUU1)
43365       ELSE
43366          PAR2M=SQRT(PARJ(2))
43367          PAR3M=SQRT(PARJ(3))
43368          PAR4M=SQRT(PARJ(4))
43369          QBB(ISU0)=PAR2M*PAR3M
43370          QBB(IUS0)=PAR3M
43371          QBB(ISS1)=PAR2M*PARJ(3)*PAR4M
43372          QBB(IUU1)=PAR4M
43373          QBB(ISU1)=PAR4M*QBB(ISU0)
43374          QBB(IUS1)=PAR4M*QBB(IUS0)
43375          QBB(IUD1)=PAR4M
43376       ENDIF
43377  
43378 C.. tau: spin*(vertex factor)*(T = half-curtain factor)
43379       QBM(ISU0)=QBB(ISU0)
43380       QBM(IUS0)=PARJ(2)*QBB(IUS0)
43381       QBM(ISS1)=PARJ(2)*6D0*QBB(ISS1)
43382       QBM(IUU1)=6D0*QBB(IUU1)
43383       QBM(ISU1)=3D0*QBB(ISU1)
43384       QBM(IUS1)=PARJ(2)*3D0*QBB(IUS1)
43385       QBM(IUD1)=3D0*QBB(IUD1)
43386
43387 C.. Combine T and tau to diquark weight for q-> B+B+..
43388       DO 120 I=1,7
43389          QBB(I)=QBB(I)*QBM(I)
43390   120 CONTINUE
43391   
43392       IF(MSTJ(12).GE.5)THEN
43393 C..New version: tau  for rank 0 diquark.
43394          DMB(7+ISU0)=EXP(-PARJ(10)*PMUS0)
43395          DMB(7+IUS0)=PARJ(2)*DMB(7+ISU0)
43396          DMB(7+ISS1)=6D0*PARJ(2)*EXP(-PARJ(10)*PMSS1)*DMB(7+ISU0)
43397          DMB(7+IUU1)=6D0*EXP(-PARJ(10)*PMUD1)
43398          DMB(7+ISU1)=3D0*EXP(-PARJ(10)*PMUS1)*DMB(7+ISU0)
43399          DMB(7+IUS1)=PARJ(2)*DMB(7+ISU1)
43400          DMB(7+IUD1)=DMB(7+IUU1)/2D0
43401  
43402 C..New version: curtain flavour ratios.
43403 C.. s/u for q->B+M+...
43404 C.. s/u for rank 0 diquark: su -> ...M+B+...
43405 C.. Q/q for heavy rank 0 diquark: Qu -> ...M+B+...
43406          WU=1D0+QBM(IUD1)+QBM(IUS0)+QBM(IUS1)+QBM(IUU1)
43407          PARF(135)=(2D0*(QBM(ISU0)+QBM(ISU1))+QBM(ISS1))/WU
43408          WU=1D0+DMB(7+IUD1)+DMB(7+IUS0)+DMB(7+IUS1)+DMB(7+IUU1)
43409          PARF(136)=(2D0*(DMB(7+ISU0)+DMB(7+ISU1))+DMB(7+ISS1))/WU
43410          PARF(137)=(DMB(7+ISU0)+DMB(7+ISU1))*
43411      &        (2D0+DMB(7+ISS1)/(2D0*DMB(7+ISU1)))/WU
43412       ELSE
43413 C..Old version: reset unused rank 0 diquark weights and 
43414 C..             unused diquark SU(6) survival weights
43415          DO 130 I=1,7
43416             IF(MSTJ(12).LT.3) DMB(I)=1D0
43417             DMB(7+I)=1D0
43418  130     CONTINUE
43419
43420 C..Old version: Shuffle PARJ(7) into tau
43421          QBM(IUS0)=QBM(IUS0)*PARJ(7)
43422          QBM(ISS1)=QBM(ISS1)*PARJ(7)
43423          QBM(IUS1)=QBM(IUS1)*PARJ(7)
43424  
43425 C..Old version: curtain flavour ratios.
43426 C.. s/u for q->B+M+...
43427 C.. s/u for rank 0 diquark: su -> ...M+B+...
43428 C.. Q/q for heavy rank 0 diquark: Qu -> ...M+B+...
43429          WU=1D0+QBM(IUD1)+QBM(IUS0)+QBM(IUS1)+QBM(IUU1)
43430          PARF(135)=(2D0*(QBM(ISU0)+QBM(ISU1))+QBM(ISS1))/WU
43431          PARF(136)=PARF(135)*PARJ(6)*QBM(ISU0)/QBM(IUS0)
43432          PARF(137)=(1D0+QBM(IUD1))*(2D0+QBM(IUS0))/WU
43433       ENDIF
43434  
43435 C..Combine diquark SU(6) survival, SU(6)max, tau and T into factors for:
43436 C..  rank0 D->M+B+..; D->M+B+..; q->B+M+..; q->B+B..
43437       DO 140 I=1,7
43438          DMB(7+I)=DMB(7+I)*DMB(I)
43439          DMB(I)=DMB(I)*QBM(I)
43440          QBM(I)=QBM(I)*SU6M(I)/SU6MUD
43441          QBB(I)=QBB(I)*SU6M(I)/SU6MUD
43442   140 CONTINUE
43443
43444 C.. *** Popcorn factors ***
43445  
43446       IF(MSTJ(12).LT.5)THEN
43447 C.. Old version: Resulting popcorn weights.
43448          PARF(138)=PARJ(6)
43449          WS=PARF(135)*PARF(138)
43450          WQ=WU*PARJ(5)/3D0
43451          PARF(132)=WQ*QBM(IUD1)/QBB(IUD1)
43452          PARF(133)=WQ*
43453      &        (QBM(IUS1)/QBB(IUS1)+WS*QBM(ISU1)/QBB(ISU1))/2D0
43454          PARF(134)=WQ*WS*QBM(ISS1)/QBB(ISS1)
43455          PARF(131)=WQ*(1D0+QBM(IUD1)+QBM(IUU1)+QBM(IUS0)+QBM(IUS1)+
43456      &                 WS*(QBM(ISU0)+QBM(ISU1)+QBM(ISS1)/2D0))/
43457      &        (1D0+QBB(IUD1)+QBB(IUU1)+
43458      &        2D0*(QBB(IUS0)+QBB(IUS1))+QBB(ISS1)/2D0)
43459       ELSE
43460 C..New version: Store weights for popcorn mesons,
43461 C..get prel. popcorn weights.
43462          DO 150 IPOS=201,1400
43463             PARF(IPOS)=0D0
43464   150    CONTINUE
43465          DO 160 I=138,140
43466             PARF(I)=0D0
43467   160    CONTINUE
43468          IPOS=200
43469          PARF(193)=PARJ(8)
43470          DO 240 MR=0,7,7
43471            IF(MR.EQ.7) PARF(193)=PARJ(10)
43472            SQWT=2D0*(DMB(MR+IUS0)+DMB(MR+IUS1))/
43473      &          (1D0+DMB(MR+IUD1)+DMB(MR+IUU1))
43474            QQWT=DMB(MR+IUU1)/(1D0+DMB(MR+IUD1)+DMB(MR+IUU1))
43475            DO 230 NMES=0,1
43476              IF(NMES.EQ.1) SQWT=PARJ(2)
43477              DO 220 KFQPOP=1,4
43478                IF(MR.EQ.0.AND.KFQPOP.GT.3) GOTO 220
43479                IF(NMES.EQ.0.AND.KFQPOP.GE.3)THEN
43480                   SQWT=DMB(MR+ISS1)/(DMB(MR+ISU0)+DMB(MR+ISU1))
43481                   QQWT=0.5D0
43482                   IF(MR.EQ.0) PARF(193)=PARJ(8)+PARJ(9)
43483                   IF(KFQPOP.EQ.4) SQWT=SQWT*(1D0/DMB(7+ISU1)+1D0)/2D0
43484                ENDIF
43485                DO 210 KFQOLD =1,5
43486                   IF(MR.EQ.0.AND.KFQOLD.GT.3) GOTO 210
43487                   IF(NMES.EQ.1) THEN
43488                      IF(MR.EQ.0.AND.KFQPOP.EQ.1) GOTO 210
43489                      IF(MR.EQ.7.AND.KFQPOP.NE.1) GOTO 210
43490                   ENDIF
43491                   WTTOT=0D0
43492                   WTFAIL=0D0
43493       DO 190 KMUL=0,5
43494          PJWT=PARJ(12+KMUL)
43495          IF(KMUL.EQ.0) PJWT=1D0-PARJ(14)
43496          IF(KMUL.EQ.1) PJWT=1D0-PARJ(15)-PARJ(16)-PARJ(17)
43497          IF(PJWT.LE.0D0) GOTO 190
43498          IF(PJWT.GT.1D0) PJWT=1D0
43499          IMES=5*KMUL
43500          IMIX=2*KFQOLD+10*KMUL
43501          KFJ=2*KMUL+1
43502          IF(KMUL.EQ.2) KFJ=10003
43503          IF(KMUL.EQ.3) KFJ=10001
43504          IF(KMUL.EQ.4) KFJ=20003
43505          IF(KMUL.EQ.5) KFJ=5
43506          DO 180 KFQVER =1,3
43507             KFLA=MAX(KFQOLD,KFQVER)
43508             KFLB=MIN(KFQOLD,KFQVER)
43509             SWT=PARJ(11+KFLA/3+KFLA/4)
43510             IF(KMUL.EQ.0.OR.KMUL.EQ.2) SWT=1D0-SWT
43511             SWT=SWT*PJWT
43512             QWT=SQWT/(2D0+SQWT)
43513             IF(KFQVER.LT.3)THEN
43514                IF(KFQVER.EQ.KFQPOP) QWT=(1D0-QWT)*QQWT
43515                IF(KFQVER.NE.KFQPOP) QWT=(1D0-QWT)*(1D0-QQWT)
43516             ENDIF
43517             IF(KFQVER.NE.KFQOLD)THEN
43518                IMES=IMES+1
43519                KFM=100*KFLA+10*KFLB+KFJ
43520                PMM=PMAS(PYCOMP(KFM),1)-PMAS(PYCOMP(KFM),3)
43521                PARF(IPOS+IMES)=QWT*SWT*EXP(-PARF(193)*PMM)
43522                WTTOT=WTTOT+PARF(IPOS+IMES)
43523             ELSE
43524                DO 170 ID=3,5
43525                   IF(ID.EQ.3) DWT=1D0-PARF(IMIX-1)
43526                   IF(ID.EQ.4) DWT=PARF(IMIX-1)-PARF(IMIX)
43527                   IF(ID.EQ.5) DWT=PARF(IMIX)
43528                   KFM=110*(ID-2)+KFJ
43529                   PMM=PMAS(PYCOMP(KFM),1)-PMAS(PYCOMP(KFM),3)
43530                   PARF(IPOS+5*KMUL+ID)=QWT*SWT*DWT*EXP(-PARF(193)*PMM)
43531                   IF(KMUL.EQ.0.AND.ID.GT.3) THEN
43532                      WTFAIL=WTFAIL+QWT*SWT*DWT*(1D0-PARJ(21+ID))
43533                      PARF(IPOS+5*KMUL+ID)=
43534      &                    PARF(IPOS+5*KMUL+ID)*PARJ(21+ID)
43535                   ENDIF
43536                   WTTOT=WTTOT+PARF(IPOS+5*KMUL+ID)
43537   170          CONTINUE
43538             ENDIF
43539   180    CONTINUE
43540   190 CONTINUE
43541                   DO 200 IMES=1,30
43542                      PARF(IPOS+IMES)=PARF(IPOS+IMES)/(1D0-WTFAIL)
43543   200             CONTINUE
43544                   IF(MR.EQ.7) PARF(140)=
43545      &                 MAX(PARF(140),WTTOT/(1D0-WTFAIL))
43546                   IF(MR.EQ.0) PARF(139-KFQPOP/3)=
43547      &                 MAX(PARF(139-KFQPOP/3),WTTOT/(1D0-WTFAIL))
43548                   IPOS=IPOS+30
43549   210           CONTINUE
43550   220         CONTINUE
43551   230       CONTINUE
43552   240    CONTINUE
43553          IF(PARF(139).GT.1D-10) PARF(138)=PARF(138)/PARF(139)
43554          MSTU(121)=0
43555  
43556       ENDIF
43557  
43558 C..Recombine diquark weights to flavour and spin ratios
43559       PARF(151)=(2D0*(QBB(ISU0)+QBB(ISU1))+QBB(ISS1))/
43560      &        (1D0+QBB(IUD1)+QBB(IUU1)+QBB(IUS0)+QBB(IUS1))
43561       PARF(152)=2D0*(QBB(IUS0)+QBB(IUS1))/(1D0+QBB(IUD1)+QBB(IUU1))
43562       PARF(153)=QBB(ISS1)/(QBB(ISU0)+QBB(ISU1))
43563       PARF(154)=QBB(IUU1)/(1D0+QBB(IUD1)+QBB(IUU1))
43564       PARF(155)=QBB(ISU1)/QBB(ISU0)
43565       PARF(156)=QBB(IUS1)/QBB(IUS0)
43566       PARF(157)=QBB(IUD1)
43567
43568       PARF(161)=(2D0*(QBM(ISU0)+QBM(ISU1))+QBM(ISS1))/
43569      &        (1D0+QBM(IUD1)+QBM(IUU1)+QBM(IUS0)+QBM(IUS1))
43570       PARF(162)=2D0*(QBM(IUS0)+QBM(IUS1))/(1D0+QBM(IUD1)+QBM(IUU1))
43571       PARF(163)=QBM(ISS1)/(QBM(ISU0)+QBM(ISU1))
43572       PARF(164)=QBM(IUU1)/(1D0+QBM(IUD1)+QBM(IUU1))
43573       PARF(165)=QBM(ISU1)/QBM(ISU0)
43574       PARF(166)=QBM(IUS1)/QBM(IUS0)
43575       PARF(167)=QBM(IUD1)
43576
43577       PARF(171)=(2D0*(DMB(ISU0)+DMB(ISU1))+DMB(ISS1))/
43578      &        (1D0+DMB(IUD1)+DMB(IUU1)+DMB(IUS0)+DMB(IUS1))
43579       PARF(172)=2D0*(DMB(IUS0)+DMB(IUS1))/(1D0+DMB(IUD1)+DMB(IUU1))
43580       PARF(173)=DMB(ISS1)/(DMB(ISU0)+DMB(ISU1))
43581       PARF(174)=DMB(IUU1)/(1D0+DMB(IUD1)+DMB(IUU1))
43582       PARF(175)=DMB(ISU1)/DMB(ISU0)
43583       PARF(176)=DMB(IUS1)/DMB(IUS0)
43584       PARF(177)=DMB(IUD1)
43585
43586       PARF(185)=DMB(7+ISU1)/DMB(7+ISU0)
43587       PARF(186)=DMB(7+IUS1)/DMB(7+IUS0)
43588       PARF(187)=DMB(7+IUD1)
43589
43590       RETURN
43591       END
43592  
43593
43594 C*********************************************************************
43595  
43596 C...PYPTDI
43597 C...Generates transverse momentum according to a Gaussian.
43598  
43599       SUBROUTINE PYPTDI(KFL,PX,PY)
43600  
43601 C...Double precision and integer declarations.
43602       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
43603       IMPLICIT INTEGER(I-N)
43604       INTEGER PYK,PYCHGE,PYCOMP
43605 C...Commonblocks.
43606       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
43607       SAVE /PYDAT1/
43608  
43609 C...Generate p_T and azimuthal angle, gives p_x and p_y.
43610       KFLA=IABS(KFL)
43611       PT=PARJ(21)*SQRT(-LOG(MAX(1D-10,PYR(0))))
43612       IF(PARJ(23).GT.PYR(0)) PT=PARJ(24)*PT
43613       IF(MSTJ(91).EQ.1) PT=PARJ(22)*PT
43614       IF(KFLA.EQ.0.AND.MSTJ(13).LE.0) PT=0D0
43615       PHI=PARU(2)*PYR(0)
43616       PX=PT*COS(PHI)
43617       PY=PT*SIN(PHI)
43618  
43619       RETURN
43620       END
43621  
43622 C*********************************************************************
43623  
43624 C...PYZDIS
43625 C...Generates the longitudinal splitting variable z.
43626  
43627       SUBROUTINE PYZDIS(KFL1,KFL2,PR,Z)
43628  
43629 C...Double precision and integer declarations.
43630       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
43631       IMPLICIT INTEGER(I-N)
43632       INTEGER PYK,PYCHGE,PYCOMP
43633 C...Commonblocks.
43634       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
43635       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
43636       SAVE /PYDAT1/,/PYDAT2/
43637  
43638 C...Check if heavy flavour fragmentation.
43639       KFLA=IABS(KFL1)
43640       KFLB=IABS(KFL2)
43641       KFLH=KFLA
43642       IF(KFLA.GE.10) KFLH=MOD(KFLA/1000,10)
43643  
43644 C...Lund symmetric scaling function: determine parameters of shape.
43645       IF(MSTJ(11).EQ.1.OR.(MSTJ(11).EQ.3.AND.KFLH.LE.3).OR.
43646      &MSTJ(11).GE.4) THEN
43647         FA=PARJ(41)
43648         IF(MSTJ(91).EQ.1) FA=PARJ(43)
43649         IF(KFLB.GE.10) FA=FA+PARJ(45)
43650         FBB=PARJ(42)
43651         IF(MSTJ(91).EQ.1) FBB=PARJ(44)
43652         FB=FBB*PR
43653         FC=1D0
43654         IF(KFLA.GE.10) FC=FC-PARJ(45)
43655         IF(KFLB.GE.10) FC=FC+PARJ(45)
43656         IF(MSTJ(11).GE.4.AND.KFLH.GE.4.AND.KFLH.LE.5) THEN
43657           FRED=PARJ(46)
43658           IF(MSTJ(11).EQ.5.AND.KFLH.EQ.5) FRED=PARJ(47)
43659           FC=FC+FRED*FBB*PARF(100+KFLH)**2
43660         ELSEIF(MSTJ(11).GE.4.AND.KFLH.GE.6.AND.KFLH.LE.8) THEN
43661           FRED=PARJ(46)
43662           IF(MSTJ(11).EQ.5) FRED=PARJ(48)
43663           FC=FC+FRED*FBB*PMAS(KFLH,1)**2
43664         ENDIF
43665         MC=1
43666         IF(ABS(FC-1D0).GT.0.01D0) MC=2
43667  
43668 C...Determine position of maximum. Special cases for a = 0 or a = c.
43669         IF(FA.LT.0.02D0) THEN
43670           MA=1
43671           ZMAX=1D0
43672           IF(FC.GT.FB) ZMAX=FB/FC
43673         ELSEIF(ABS(FC-FA).LT.0.01D0) THEN
43674           MA=2
43675           ZMAX=FB/(FB+FC)
43676         ELSE
43677           MA=3
43678           ZMAX=0.5D0*(FB+FC-SQRT((FB-FC)**2+4D0*FA*FB))/(FC-FA)
43679           IF(ZMAX.GT.0.9999D0.AND.FB.GT.100D0) ZMAX=MIN(ZMAX,1D0-FA/FB)
43680         ENDIF
43681  
43682 C...Subdivide z range if distribution very peaked near endpoint.
43683         MMAX=2
43684         IF(ZMAX.LT.0.1D0) THEN
43685           MMAX=1
43686           ZDIV=2.75D0*ZMAX
43687           IF(MC.EQ.1) THEN
43688             FINT=1D0-LOG(ZDIV)
43689           ELSE
43690             ZDIVC=ZDIV**(1D0-FC)
43691             FINT=1D0+(1D0-1D0/ZDIVC)/(FC-1D0)
43692           ENDIF
43693         ELSEIF(ZMAX.GT.0.85D0.AND.FB.GT.1D0) THEN
43694           MMAX=3
43695           FSCB=SQRT(4D0+(FC/FB)**2)
43696           ZDIV=FSCB-1D0/ZMAX-(FC/FB)*LOG(ZMAX*0.5D0*(FSCB+FC/FB))
43697           IF(MA.GE.2) ZDIV=ZDIV+(FA/FB)*LOG(1D0-ZMAX)
43698           ZDIV=MIN(ZMAX,MAX(0D0,ZDIV))
43699           FINT=1D0+FB*(1D0-ZDIV)
43700         ENDIF
43701  
43702 C...Choice of z, preweighted for peaks at low or high z.
43703   100   Z=PYR(0)
43704         FPRE=1D0
43705         IF(MMAX.EQ.1) THEN
43706           IF(FINT*PYR(0).LE.1D0) THEN
43707             Z=ZDIV*Z
43708           ELSEIF(MC.EQ.1) THEN
43709             Z=ZDIV**Z
43710             FPRE=ZDIV/Z
43711           ELSE
43712             Z=(ZDIVC+Z*(1D0-ZDIVC))**(1D0/(1D0-FC))
43713             FPRE=(ZDIV/Z)**FC
43714           ENDIF
43715         ELSEIF(MMAX.EQ.3) THEN
43716           IF(FINT*PYR(0).LE.1D0) THEN
43717             Z=ZDIV+LOG(Z)/FB
43718             FPRE=EXP(FB*(Z-ZDIV))
43719           ELSE
43720             Z=ZDIV+Z*(1D0-ZDIV)
43721           ENDIF
43722         ENDIF
43723  
43724 C...Weighting according to correct formula.
43725         IF(Z.LE.0D0.OR.Z.GE.1D0) GOTO 100
43726         FEXP=FC*LOG(ZMAX/Z)+FB*(1D0/ZMAX-1D0/Z)
43727         IF(MA.GE.2) FEXP=FEXP+FA*LOG((1D0-Z)/(1D0-ZMAX))
43728         FVAL=EXP(MAX(-50D0,MIN(50D0,FEXP)))
43729         IF(FVAL.LT.PYR(0)*FPRE) GOTO 100
43730  
43731 C...Generate z according to Field-Feynman, SLAC, (1-z)**c OR z**c.
43732       ELSE
43733         FC=PARJ(50+MAX(1,KFLH))
43734         IF(MSTJ(91).EQ.1) FC=PARJ(59)
43735   110   Z=PYR(0)
43736         IF(FC.GE.0D0.AND.FC.LE.1D0) THEN
43737           IF(FC.GT.PYR(0)) Z=1D0-Z**(1D0/3D0)
43738         ELSEIF(FC.GT.-1.AND.FC.LT.0D0) THEN
43739           IF(-4D0*FC*Z*(1D0-Z)**2.LT.PYR(0)*((1D0-Z)**2-FC*Z)**2)
43740      &    GOTO 110
43741         ELSE
43742           IF(FC.GT.0D0) Z=1D0-Z**(1D0/FC)
43743           IF(FC.LT.0D0) Z=Z**(-1D0/FC)
43744         ENDIF
43745       ENDIF
43746  
43747       RETURN
43748       END
43749  
43750 C*********************************************************************
43751  
43752 C...PYSHOW
43753 C...Generates timelike parton showers from given partons.
43754  
43755       SUBROUTINE PYSHOW(IP1,IP2,QMAX)
43756  
43757 C...Double precision and integer declarations.
43758       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
43759       IMPLICIT INTEGER(I-N)
43760       INTEGER PYK,PYCHGE,PYCOMP
43761 C...Commonblocks.
43762       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
43763       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
43764       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
43765       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
43766 C...Local arrays.
43767       DIMENSION PMTH(5,50),PS(5),PMA(4),PMSD(4),IEP(4),IPA(4),
43768      &KFLA(4),KFLD(4),KFL(4),ITRY(4),ISI(4),ISL(4),DP(4),DPT(5,4),
43769      &KSH(0:40),KCII(2),NIIS(2),IIIS(2,2),THEIIS(2,2),PHIIIS(2,2),
43770      &ISII(2),ISSET(3)
43771  
43772 C...Check that QMAX not too low.
43773       IF(MSTJ(41).LE.0) THEN
43774         RETURN
43775       ELSEIF(MSTJ(41).EQ.1) THEN
43776         IF(QMAX.LE.PARJ(82).AND.IP2.GT.-5) RETURN
43777       ELSE
43778         IF(QMAX.LE.MIN(PARJ(82),PARJ(83),PARJ(90)).AND.IP2.GT.-5) 
43779      &  RETURN
43780       ENDIF
43781  
43782 C...Initialization of cutoff masses etc.
43783       DO 100 IFL=0,40
43784         KSH(IFL)=0
43785   100 CONTINUE
43786       KSH(21)=1
43787       PMTH(1,21)=PYMASS(21)
43788       PMTH(2,21)=SQRT(PMTH(1,21)**2+0.25D0*PARJ(82)**2)
43789       PMTH(3,21)=2D0*PMTH(2,21)
43790       PMTH(4,21)=PMTH(3,21)
43791       PMTH(5,21)=PMTH(3,21)
43792       PMTH(1,22)=PYMASS(22)
43793       PMTH(2,22)=SQRT(PMTH(1,22)**2+0.25D0*PARJ(83)**2)
43794       PMTH(3,22)=2D0*PMTH(2,22)
43795       PMTH(4,22)=PMTH(3,22)
43796       PMTH(5,22)=PMTH(3,22)
43797       PMQTH1=PARJ(82)
43798       IF(MSTJ(41).GE.2) PMQTH1=MIN(PARJ(82),PARJ(83))
43799       PMQT1E=MIN(PMQTH1,PARJ(90))
43800       PMQTH2=PMTH(2,21)
43801       IF(MSTJ(41).GE.2) PMQTH2=MIN(PMTH(2,21),PMTH(2,22))
43802       PMQT2E=MIN(PMQTH2,0.5D0*PARJ(90))
43803       DO 110 IFL=1,8
43804         KSH(IFL)=1
43805         PMTH(1,IFL)=PYMASS(IFL)
43806         PMTH(2,IFL)=SQRT(PMTH(1,IFL)**2+0.25D0*PMQTH1**2)
43807         PMTH(3,IFL)=PMTH(2,IFL)+PMQTH2
43808         PMTH(4,IFL)=SQRT(PMTH(1,IFL)**2+0.25D0*PARJ(82)**2)+PMTH(2,21)
43809         PMTH(5,IFL)=SQRT(PMTH(1,IFL)**2+0.25D0*PARJ(83)**2)+PMTH(2,22)
43810   110 CONTINUE
43811       DO 120 IFL=11,17,2
43812         IF(MSTJ(41).GE.2) KSH(IFL)=1
43813         PMTH(1,IFL)=PYMASS(IFL)
43814         PMTH(2,IFL)=SQRT(PMTH(1,IFL)**2+0.25D0*PARJ(90)**2)
43815         PMTH(3,IFL)=PMTH(2,IFL)+0.5D0*PARJ(90)
43816         PMTH(4,IFL)=PMTH(3,IFL)
43817         PMTH(5,IFL)=PMTH(3,IFL)
43818   120 CONTINUE
43819       PT2MIN=MAX(0.5D0*PARJ(82),1.1D0*PARJ(81))**2
43820       ALAMS=PARJ(81)**2
43821       ALFM=LOG(PT2MIN/ALAMS)
43822  
43823 C...Store positions of shower initiating partons.
43824       MPSPD=0
43825       IF(IP1.GT.0.AND.IP1.LE.MIN(N,MSTU(4)-MSTU(32)).AND.IP2.EQ.0) THEN
43826         NPA=1
43827         IPA(1)=IP1
43828       ELSEIF(MIN(IP1,IP2).GT.0.AND.MAX(IP1,IP2).LE.MIN(N,MSTU(4)-
43829      &  MSTU(32))) THEN
43830         NPA=2
43831         IPA(1)=IP1
43832         IPA(2)=IP2
43833       ELSEIF(IP1.GT.0.AND.IP1.LE.MIN(N,MSTU(4)-MSTU(32)).AND.IP2.LT.0
43834      &  .AND.IP2.GE.-3) THEN
43835         NPA=IABS(IP2)
43836         DO 130 I=1,NPA
43837           IPA(I)=IP1+I-1
43838   130   CONTINUE
43839       ELSEIF(IP1.GT.0.AND.IP1.LE.MIN(N,MSTU(4)-MSTU(32)).AND.
43840      &IP2.EQ.-8) THEN
43841         MPSPD=1
43842         NPA=2
43843         IPA(1)=IP1+6
43844         IPA(2)=IP1+7  
43845       ELSE
43846         CALL PYERRM(12,
43847      &  '(PYSHOW:) failed to reconstruct showering system')
43848         IF(MSTU(21).GE.1) RETURN
43849       ENDIF
43850  
43851 C...Check on phase space available for emission.
43852       IREJ=0
43853       DO 140 J=1,5
43854         PS(J)=0D0
43855   140 CONTINUE
43856       PM=0D0
43857       DO 160 I=1,NPA
43858         KFLA(I)=IABS(K(IPA(I),2))
43859         PMA(I)=P(IPA(I),5)
43860 C...Special cutoff masses for t, l, h with variable masses.
43861         IFLA=KFLA(I)
43862         IF(KFLA(I).GE.6.AND.KFLA(I).LE.8) THEN
43863           IFLA=37+KFLA(I)+ISIGN(2,K(IPA(I),2))
43864           PMTH(1,IFLA)=PMA(I)
43865           PMTH(2,IFLA)=SQRT(PMTH(1,IFLA)**2+0.25D0*PMQTH1**2)
43866           PMTH(3,IFLA)=PMTH(2,IFLA)+PMQTH2
43867           PMTH(4,IFLA)=SQRT(PMTH(1,IFLA)**2+0.25D0*PARJ(82)**2)+
43868      &    PMTH(2,21)
43869           PMTH(5,IFLA)=SQRT(PMTH(1,IFLA)**2+0.25D0*PARJ(83)**2)+
43870      &    PMTH(2,22)
43871         ENDIF
43872         IF(KFLA(I).LE.40) THEN
43873           IF(KSH(KFLA(I)).EQ.1) PMA(I)=PMTH(3,IFLA)
43874         ENDIF
43875         PM=PM+PMA(I)
43876         IF(KFLA(I).GT.40) THEN
43877           IREJ=IREJ+1
43878         ELSE
43879           IF(KSH(KFLA(I)).EQ.0.OR.PMA(I).GT.QMAX) IREJ=IREJ+1
43880         ENDIF
43881         DO 150 J=1,4
43882           PS(J)=PS(J)+P(IPA(I),J)
43883   150   CONTINUE
43884   160 CONTINUE
43885       IF(IREJ.EQ.NPA.AND.IP2.GT.-5) RETURN
43886       PS(5)=SQRT(MAX(0D0,PS(4)**2-PS(1)**2-PS(2)**2-PS(3)**2))
43887       IF(NPA.EQ.1) PS(5)=PS(4)
43888       IF(PS(5).LE.PM+PMQT1E) RETURN
43889  
43890 C...Check if 3-jet matrix elements to be used.
43891       M3JC=0
43892       IF(NPA.EQ.2.AND.MSTJ(47).GE.1.AND.MPSPD.EQ.0) THEN
43893         IF(KFLA(1).GE.1.AND.KFLA(1).LE.8.AND.KFLA(2).GE.1.AND.
43894      &  KFLA(2).LE.8) M3JC=1
43895         IF((KFLA(1).EQ.11.OR.KFLA(1).EQ.13.OR.KFLA(1).EQ.15.OR.
43896      &  KFLA(1).EQ.17).AND.KFLA(2).EQ.KFLA(1)) M3JC=1
43897         IF((KFLA(1).EQ.11.OR.KFLA(1).EQ.13.OR.KFLA(1).EQ.15.OR.
43898      &  KFLA(1).EQ.17).AND.KFLA(2).EQ.KFLA(1)+1) M3JC=1
43899         IF((KFLA(1).EQ.12.OR.KFLA(1).EQ.14.OR.KFLA(1).EQ.16.OR.
43900      &  KFLA(1).EQ.18).AND.KFLA(2).EQ.KFLA(1)-1) M3JC=1
43901         IF(MSTJ(47).EQ.2.OR.MSTJ(47).EQ.4) M3JC=1
43902         M3JCM=0
43903         IF(M3JC.EQ.1.AND.MSTJ(47).GE.3.AND.KFLA(1).EQ.KFLA(2)) THEN
43904           M3JCM=1
43905           PQMES=PMTH(1,KFLA(1))**2
43906           QME=4D0*PQMES/PS(5)**2
43907           RESCZ=MIN(1D0,LOG(PMTH(2,KFLA(1))/PS(5))/
43908      &    LOG(PMTH(2,21)/PS(5)))
43909         ENDIF
43910       ENDIF
43911  
43912 C...Find if interference with initial state partons.
43913       MIIS=0
43914       IF(MSTJ(50).GE.1.AND.MSTJ(50).LE.3.AND.NPA.EQ.2.AND.MPSPD.EQ.0) 
43915      &MIIS=MSTJ(50)
43916       IF(MIIS.NE.0) THEN
43917         DO 180 I=1,2
43918           KCII(I)=0
43919           KCA=PYCOMP(KFLA(I))
43920           IF(KCA.NE.0) KCII(I)=KCHG(KCA,2)*ISIGN(1,K(IPA(I),2))
43921           NIIS(I)=0
43922           IF(KCII(I).NE.0) THEN
43923             DO 170 J=1,2
43924               ICSI=MOD(K(IPA(I),3+J)/MSTU(5),MSTU(5))
43925               IF(ICSI.GT.0.AND.ICSI.NE.IPA(1).AND.ICSI.NE.IPA(2).AND.
43926      &        (KCII(I).EQ.(-1)**(J+1).OR.KCII(I).EQ.2)) THEN
43927                 NIIS(I)=NIIS(I)+1
43928                 IIIS(I,NIIS(I))=ICSI
43929               ENDIF
43930   170       CONTINUE
43931           ENDIF
43932   180   CONTINUE
43933         IF(NIIS(1)+NIIS(2).EQ.0) MIIS=0
43934       ENDIF
43935  
43936 C...Boost interfering initial partons to rest frame
43937 C...and reconstruct their polar and azimuthal angles.
43938       IF(MIIS.NE.0) THEN
43939         DO 200 I=1,2
43940           DO 190 J=1,5
43941             K(N+I,J)=K(IPA(I),J)
43942             P(N+I,J)=P(IPA(I),J)
43943             V(N+I,J)=0D0
43944   190     CONTINUE
43945   200   CONTINUE
43946         DO 220 I=3,2+NIIS(1)
43947           DO 210 J=1,5
43948             K(N+I,J)=K(IIIS(1,I-2),J)
43949             P(N+I,J)=P(IIIS(1,I-2),J)
43950             V(N+I,J)=0D0
43951   210     CONTINUE
43952   220   CONTINUE
43953         DO 240 I=3+NIIS(1),2+NIIS(1)+NIIS(2)
43954           DO 230 J=1,5
43955             K(N+I,J)=K(IIIS(2,I-2-NIIS(1)),J)
43956             P(N+I,J)=P(IIIS(2,I-2-NIIS(1)),J)
43957             V(N+I,J)=0D0
43958   230     CONTINUE
43959   240   CONTINUE
43960         CALL PYROBO(N+1,N+2+NIIS(1)+NIIS(2),0D0,0D0,-PS(1)/PS(4),
43961      &  -PS(2)/PS(4),-PS(3)/PS(4))
43962         PHI=PYANGL(P(N+1,1),P(N+1,2))
43963         CALL PYROBO(N+1,N+2+NIIS(1)+NIIS(2),0D0,-PHI,0D0,0D0,0D0)
43964         THE=PYANGL(P(N+1,3),P(N+1,1))
43965         CALL PYROBO(N+1,N+2+NIIS(1)+NIIS(2),-THE,0D0,0D0,0D0,0D0)
43966         DO 250 I=3,2+NIIS(1)
43967           THEIIS(1,I-2)=PYANGL(P(N+I,3),SQRT(P(N+I,1)**2+P(N+I,2)**2))
43968           PHIIIS(1,I-2)=PYANGL(P(N+I,1),P(N+I,2))
43969   250   CONTINUE
43970         DO 260 I=3+NIIS(1),2+NIIS(1)+NIIS(2)
43971           THEIIS(2,I-2-NIIS(1))=PARU(1)-PYANGL(P(N+I,3),
43972      &    SQRT(P(N+I,1)**2+P(N+I,2)**2))
43973           PHIIIS(2,I-2-NIIS(1))=PYANGL(P(N+I,1),P(N+I,2))
43974   260   CONTINUE
43975       ENDIF
43976  
43977 C...Define imagined single initiator of shower for parton system.
43978       NS=N
43979       IF(N.GT.MSTU(4)-MSTU(32)-5) THEN
43980         CALL PYERRM(11,'(PYSHOW:) no more memory left in PYJETS')
43981         IF(MSTU(21).GE.1) RETURN
43982       ENDIF
43983   265 N=NS
43984       IF(NPA.GE.2) THEN
43985         K(N+1,1)=11
43986         K(N+1,2)=21
43987         K(N+1,3)=0
43988         K(N+1,4)=0
43989         K(N+1,5)=0
43990         P(N+1,1)=0D0
43991         P(N+1,2)=0D0
43992         P(N+1,3)=0D0
43993         P(N+1,4)=PS(5)
43994         P(N+1,5)=PS(5)
43995         V(N+1,5)=PS(5)**2
43996         N=N+1
43997       ENDIF
43998  
43999 C...Loop over partons that may branch.
44000       NEP=NPA
44001       IM=NS
44002       IF(NPA.EQ.1) IM=NS-1
44003   270 IM=IM+1
44004       IF(N.GT.NS) THEN
44005         IF(IM.GT.N) GOTO 510
44006         KFLM=IABS(K(IM,2))
44007         IF(KFLM.GT.40) GOTO 270
44008         IF(KSH(KFLM).EQ.0) GOTO 270
44009         IFLM=KFLM
44010         IF(KFLM.GE.6.AND.KFLM.LE.8) IFLM=37+KFLM+ISIGN(2,K(IM,2))
44011         IF(P(IM,5).LT.PMTH(2,IFLM)) GOTO 270
44012         IGM=K(IM,3)
44013       ELSE
44014         IGM=-1
44015       ENDIF
44016       IF(N+NEP.GT.MSTU(4)-MSTU(32)-5) THEN
44017         CALL PYERRM(11,'(PYSHOW:) no more memory left in PYJETS')
44018         IF(MSTU(21).GE.1) RETURN
44019       ENDIF
44020  
44021 C...Position of aunt (sister to branching parton).
44022 C...Origin and flavour of daughters.
44023       IAU=0
44024       IF(IGM.GT.0) THEN
44025         IF(K(IM-1,3).EQ.IGM) IAU=IM-1
44026         IF(N.GE.IM+1.AND.K(IM+1,3).EQ.IGM) IAU=IM+1
44027       ENDIF
44028       IF(IGM.GE.0) THEN
44029         K(IM,4)=N+1
44030         DO 280 I=1,NEP
44031           K(N+I,3)=IM
44032   280   CONTINUE
44033       ELSE
44034         K(N+1,3)=IPA(1)
44035       ENDIF
44036       IF(IGM.LE.0) THEN
44037         DO 290 I=1,NEP
44038           K(N+I,2)=K(IPA(I),2)
44039   290   CONTINUE
44040       ELSEIF(KFLM.NE.21) THEN
44041         K(N+1,2)=K(IM,2)
44042         K(N+2,2)=K(IM,5)
44043       ELSEIF(K(IM,5).EQ.21) THEN
44044         K(N+1,2)=21
44045         K(N+2,2)=21
44046       ELSE
44047         K(N+1,2)=K(IM,5)
44048         K(N+2,2)=-K(IM,5)
44049       ENDIF
44050  
44051 C...Reset flags on daughters and tries made.
44052       DO 300 IP=1,NEP
44053         K(N+IP,1)=3
44054         K(N+IP,4)=0
44055         K(N+IP,5)=0
44056         KFLD(IP)=IABS(K(N+IP,2))
44057         IF(KCHG(PYCOMP(KFLD(IP)),2).EQ.0) K(N+IP,1)=1
44058         ITRY(IP)=0
44059         ISL(IP)=0
44060         ISI(IP)=0
44061         IF(KFLD(IP).LE.40) THEN
44062           IF(KSH(KFLD(IP)).EQ.1) ISI(IP)=1
44063         ENDIF
44064   300 CONTINUE
44065       ISLM=0
44066  
44067 C...Maximum virtuality of daughters.
44068       IF(IGM.LE.0) THEN
44069         DO 310 I=1,NPA
44070           IF(NPA.GE.3) P(N+I,4)=(PS(4)*P(IPA(I),4)-PS(1)*P(IPA(I),1)-
44071      &    PS(2)*P(IPA(I),2)-PS(3)*P(IPA(I),3))/PS(5)
44072           P(N+I,5)=MIN(QMAX,PS(5))
44073           IF(IP2.LE.-5) P(N+I,5)=MAX(P(N+I,5),
44074      &    2D0*PMTH(3,IABS(K(N+I,2))))
44075           IF(NPA.GE.3) P(N+I,5)=MIN(P(N+I,5),P(N+I,4))
44076           IF(ISI(I).EQ.0) P(N+I,5)=P(IPA(I),5)
44077   310   CONTINUE
44078       ELSE
44079         IF(MSTJ(43).LE.2) PEM=V(IM,2)
44080         IF(MSTJ(43).GE.3) PEM=P(IM,4)
44081         P(N+1,5)=MIN(P(IM,5),V(IM,1)*PEM)
44082         P(N+2,5)=MIN(P(IM,5),(1D0-V(IM,1))*PEM)
44083         IF(K(N+2,2).EQ.22) P(N+2,5)=PMTH(1,22)
44084       ENDIF
44085       DO 320 I=1,NEP
44086         PMSD(I)=P(N+I,5)
44087         IF(ISI(I).EQ.1) THEN
44088           IFLD=KFLD(I)
44089           IF(KFLD(I).GE.6.AND.KFLD(I).LE.8) IFLD=37+KFLD(I)+
44090      &    ISIGN(2,K(N+I,2))
44091           IF(P(N+I,5).LE.PMTH(3,IFLD)) P(N+I,5)=PMTH(1,IFLD)
44092         ENDIF
44093         V(N+I,5)=P(N+I,5)**2
44094   320 CONTINUE
44095  
44096 C...Choose one of the daughters for evolution.
44097   330 INUM=0
44098       IF(NEP.EQ.1) INUM=1
44099       DO 340 I=1,NEP
44100         IF(INUM.EQ.0.AND.ISL(I).EQ.1) INUM=I
44101   340 CONTINUE
44102       DO 350 I=1,NEP
44103         IF(INUM.EQ.0.AND.ITRY(I).EQ.0.AND.ISI(I).EQ.1) THEN
44104           IFLD=KFLD(I)
44105           IF(KFLD(I).GE.6.AND.KFLD(I).LE.8) IFLD=37+KFLD(I)+
44106      &    ISIGN(2,K(N+I,2))
44107           IF(P(N+I,5).GE.PMTH(2,IFLD)) INUM=I
44108         ENDIF
44109   350 CONTINUE
44110       IF(INUM.EQ.0) THEN
44111         RMAX=0D0
44112         DO 360 I=1,NEP
44113           IF(ISI(I).EQ.1.AND.PMSD(I).GE.PMQT2E) THEN
44114             RPM=P(N+I,5)/PMSD(I)
44115             IFLD=KFLD(I)
44116             IF(KFLD(I).GE.6.AND.KFLD(I).LE.8) IFLD=37+KFLD(I)+
44117      &      ISIGN(2,K(N+I,2))
44118             IF(RPM.GT.RMAX.AND.P(N+I,5).GE.PMTH(2,IFLD)) THEN
44119               RMAX=RPM
44120               INUM=I
44121             ENDIF
44122           ENDIF
44123   360   CONTINUE
44124       ENDIF
44125
44126 C...Cancel choice of predetermined daughter already treated.
44127       INUM=MAX(1,INUM)
44128       INUMT=INUM 
44129       IF(MPSPD.EQ.1.AND.IGM.EQ.0.AND.ITRY(INUMT).GE.1) THEN
44130         IF(K(IP1-1+INUM,4).GT.0) INUM=3-INUM
44131       ELSEIF(MPSPD.EQ.1.AND.IM.EQ.NS+2.AND.ITRY(INUMT).GE.1) THEN
44132         IF(KFLD(INUMT).NE.21.AND.K(IP1+2,4).GT.0) INUM=3-INUM
44133         IF(KFLD(INUMT).EQ.21.AND.K(IP1+3,4).GT.0) INUM=3-INUM
44134       ENDIF
44135        
44136 C...Store information on choice of evolving daughter.
44137       IEP(1)=N+INUM
44138       DO 370 I=2,NEP
44139         IEP(I)=IEP(I-1)+1
44140         IF(IEP(I).GT.N+NEP) IEP(I)=N+1
44141   370 CONTINUE
44142       DO 380 I=1,NEP
44143         KFL(I)=IABS(K(IEP(I),2))
44144   380 CONTINUE
44145       ITRY(INUM)=ITRY(INUM)+1
44146       IF(ITRY(INUM).GT.200) THEN
44147         CALL PYERRM(14,'(PYSHOW:) caught in infinite loop')
44148         IF(MSTU(21).GE.1) RETURN
44149       ENDIF
44150       Z=0.5D0
44151       IF(KFL(1).GT.40) GOTO 430
44152       IF(KSH(KFL(1)).EQ.0) GOTO 430
44153       IFL=KFL(1)
44154       IF(KFL(1).GE.6.AND.KFL(1).LE.8) IFL=37+KFL(1)+
44155      &ISIGN(2,K(IEP(1),2))
44156       IF(P(IEP(1),5).LT.PMTH(2,IFL)) GOTO 430
44157
44158 C...Check if evolution already predetermined for daughter.
44159       IPSPD=0
44160       IF(MPSPD.EQ.1.AND.IGM.EQ.0) THEN
44161         IF(K(IP1-1+INUM,4).GT.0) IPSPD=IP1-1+INUM
44162       ELSEIF(MPSPD.EQ.1.AND.IM.EQ.NS+2) THEN
44163         IF(KFL(1).NE.21.AND.K(IP1+2,4).GT.0) IPSPD=IP1+2
44164         IF(KFL(1).EQ.21.AND.K(IP1+3,4).GT.0) IPSPD=IP1+3
44165       ENDIF
44166       ISSET(INUM)=0
44167       IF(IPSPD.NE.0) ISSET(INUM)=1  
44168  
44169 C...Select side for interference with initial state partons.
44170       IF(MIIS.GE.1.AND.IEP(1).LE.NS+3) THEN
44171         III=IEP(1)-NS-1
44172         ISII(III)=0
44173         IF(IABS(KCII(III)).EQ.1.AND.NIIS(III).EQ.1) THEN
44174           ISII(III)=1
44175         ELSEIF(KCII(III).EQ.2.AND.NIIS(III).EQ.1) THEN
44176           IF(PYR(0).GT.0.5D0) ISII(III)=1
44177         ELSEIF(KCII(III).EQ.2.AND.NIIS(III).EQ.2) THEN
44178           ISII(III)=1
44179           IF(PYR(0).GT.0.5D0) ISII(III)=2
44180         ENDIF
44181       ENDIF
44182  
44183 C...Calculate allowed z range.
44184       IF(NEP.EQ.1) THEN
44185         PMED=PS(4)
44186       ELSEIF(IGM.EQ.0.OR.MSTJ(43).LE.2) THEN
44187         PMED=P(IM,5)
44188       ELSE
44189         IF(INUM.EQ.1) PMED=V(IM,1)*PEM
44190         IF(INUM.EQ.2) PMED=(1D0-V(IM,1))*PEM
44191       ENDIF
44192       IF(MOD(MSTJ(43),2).EQ.1) THEN
44193         ZC=PMTH(2,21)/PMED
44194         ZCE=PMTH(2,22)/PMED
44195         IF(KFL(1).GE.11.AND.KFL(1).LE.18) ZCE=0.5D0*PARJ(90)/PMED
44196       ELSE
44197         ZC=0.5D0*(1D0-SQRT(MAX(0D0,1D0-(2D0*PMTH(2,21)/PMED)**2)))
44198         IF(ZC.LT.1D-6) ZC=(PMTH(2,21)/PMED)**2
44199         PMTMPE=PMTH(2,22)
44200         IF(KFL(1).GE.11.AND.KFL(1).LE.18) PMTMPE=0.5D0*PARJ(90)
44201         ZCE=0.5D0*(1D0-SQRT(MAX(0D0,1D0-(2D0*PMTMPE/PMED)**2)))
44202         IF(ZCE.LT.1D-6) ZCE=(PMTMPE/PMED)**2
44203       ENDIF
44204       ZC=MIN(ZC,0.491D0)
44205       ZCE=MIN(ZCE,0.49991D0)
44206       IF(((MSTJ(41).EQ.1.AND.ZC.GT.0.49D0).OR.(MSTJ(41).GE.2.AND.
44207      &MIN(ZC,ZCE).GT.0.4999D0)).AND.IPSPD.EQ.0) THEN
44208         P(IEP(1),5)=PMTH(1,IFL)
44209         V(IEP(1),5)=P(IEP(1),5)**2
44210         GOTO 430
44211       ENDIF
44212  
44213 C...Integral of Altarelli-Parisi z kernel for QCD.
44214       IF(MSTJ(49).EQ.0.AND.KFL(1).EQ.21) THEN
44215         FBR=6D0*LOG((1D0-ZC)/ZC)+MSTJ(45)*0.5D0
44216       ELSEIF(MSTJ(49).EQ.0) THEN
44217         FBR=(8D0/3D0)*LOG((1D0-ZC)/ZC)
44218  
44219 C...Integral of Altarelli-Parisi z kernel for scalar gluon.
44220       ELSEIF(MSTJ(49).EQ.1.AND.KFL(1).EQ.21) THEN
44221         FBR=(PARJ(87)+MSTJ(45)*PARJ(88))*(1D0-2D0*ZC)
44222       ELSEIF(MSTJ(49).EQ.1) THEN
44223         FBR=(1D0-2D0*ZC)/3D0
44224         IF(IGM.EQ.0.AND.M3JC.EQ.1) FBR=4D0*FBR
44225  
44226 C...Integral of Altarelli-Parisi z kernel for Abelian vector gluon.
44227       ELSEIF(KFL(1).EQ.21) THEN
44228         FBR=6D0*MSTJ(45)*(0.5D0-ZC)
44229       ELSE
44230         FBR=2D0*LOG((1D0-ZC)/ZC)
44231       ENDIF
44232  
44233 C...Reset QCD probability for lepton.
44234       IF(KFL(1).GE.11.AND.KFL(1).LE.18) FBR=0D0
44235  
44236 C...Integral of Altarelli-Parisi kernel for photon emission.
44237       IF(MSTJ(41).GE.2.AND.KFL(1).GE.1.AND.KFL(1).LE.18) THEN
44238         FBRE=(KCHG(KFL(1),1)/3D0)**2*2D0*LOG((1D0-ZCE)/ZCE)
44239         IF(MSTJ(41).EQ.10) FBRE=PARJ(84)*FBRE
44240       ENDIF
44241  
44242 C...Inner veto algorithm starts. Find maximum mass for evolution.
44243   390 PMS=V(IEP(1),5)
44244       IF(IGM.GE.0) THEN
44245         PM2=0D0
44246         DO 400 I=2,NEP
44247           PM=P(IEP(I),5)
44248           IF(KFL(I).LE.40) THEN
44249             IFLI=KFL(I)
44250             IF(KFL(I).GE.6.AND.KFL(I).LE.8) IFLI=37+KFL(I)+
44251      &      ISIGN(2,K(IEP(I),2))
44252             IF(KSH(KFL(I)).EQ.1) PM=PMTH(2,IFLI)
44253           ENDIF
44254           PM2=PM2+PM
44255   400   CONTINUE
44256         PMS=MIN(PMS,(P(IM,5)-PM2)**2)
44257       ENDIF
44258  
44259 C...Select mass for daughter in QCD evolution.
44260       B0=27D0/6D0
44261       DO 410 IFF=4,MSTJ(45)
44262         IF(PMS.GT.4D0*PMTH(2,IFF)**2) B0=(33D0-2D0*IFF)/6D0
44263   410 CONTINUE
44264 C...Already predetermined choice.
44265       IF(IPSPD.NE.0) THEN
44266         PMSQCD=P(IPSPD,5)**2
44267       ELSEIF(FBR.LT.1D-3) THEN
44268         PMSQCD=0D0
44269       ELSEIF(MSTJ(44).LE.0) THEN
44270         PMSQCD=PMS*EXP(MAX(-50D0,LOG(PYR(0))*PARU(2)/(PARU(111)*FBR)))
44271       ELSEIF(MSTJ(44).EQ.1) THEN
44272         PMSQCD=4D0*ALAMS*(0.25D0*PMS/ALAMS)**(PYR(0)**(B0/FBR))
44273       ELSE
44274         PMSQCD=PMS*EXP(MAX(-50D0,ALFM*B0*LOG(PYR(0))/FBR))
44275       ENDIF
44276       IF(ZC.GT.0.49D0.OR.PMSQCD.LE.PMTH(4,IFL)**2) PMSQCD=
44277      &  PMTH(2,IFL)**2
44278       V(IEP(1),5)=PMSQCD
44279       MCE=1
44280  
44281 C...Select mass for daughter in QED evolution.
44282       IF(MSTJ(41).GE.2.AND.KFL(1).GE.1.AND.KFL(1).LE.18.AND.
44283      &IPSPD.EQ.0) THEN
44284         PMSQED=PMS*EXP(MAX(-50D0,LOG(PYR(0))*PARU(2)/(PARU(101)*FBRE)))
44285         IF(ZCE.GT.0.4999D0.OR.PMSQED.LE.PMTH(5,IFL)**2) PMSQED=
44286      &  PMTH(2,IFL)**2
44287         IF(PMSQED.GT.PMSQCD) THEN
44288           V(IEP(1),5)=PMSQED
44289           MCE=2
44290         ENDIF
44291       ENDIF
44292  
44293 C...Check whether daughter mass below cutoff.
44294       P(IEP(1),5)=SQRT(V(IEP(1),5))
44295       IF(P(IEP(1),5).LE.PMTH(3,IFL)) THEN
44296         P(IEP(1),5)=PMTH(1,IFL)
44297         V(IEP(1),5)=P(IEP(1),5)**2
44298         GOTO 430
44299       ENDIF
44300
44301 C...Already predetermined choice of z, and flavour in g -> qqbar.
44302       IF(IPSPD.NE.0) THEN
44303         IPSGD1=K(IPSPD,4)
44304         IPSGD2=K(IPSPD,5)
44305         PMSGD1=P(IPSGD1,5)**2
44306         PMSGD2=P(IPSGD2,5)**2
44307         ALAMPS=SQRT(MAX(1D-10,(PMSQCD-PMSGD1-PMSGD2)**2-
44308      &  4D0*PMSGD1*PMSGD2))
44309         Z=0.5D0*(PMSQCD*(2D0*P(IPSGD1,4)/P(IPSPD,4)-1D0)+ALAMPS-
44310      &  PMSGD1+PMSGD2)/ALAMPS
44311         Z=MAX(0.00001D0,MIN(0.99999D0,Z))
44312         IF(KFL(1).NE.21) THEN
44313           K(IEP(1),5)=21
44314         ELSE
44315           K(IEP(1),5)=IABS(K(IPSGD1,2))
44316         ENDIF
44317  
44318 C...Select z value of branching: q -> qgamma.
44319       ELSEIF(MCE.EQ.2) THEN
44320         Z=1D0-(1D0-ZCE)*(ZCE/(1D0-ZCE))**PYR(0)
44321         IF(1D0+Z**2.LT.2D0*PYR(0)) GOTO 390
44322         K(IEP(1),5)=22
44323  
44324 C...Select z value of branching: q -> qg, g -> gg, g -> qqbar.
44325       ELSEIF(MSTJ(49).NE.1.AND.KFL(1).NE.21) THEN
44326         Z=1D0-(1D0-ZC)*(ZC/(1D0-ZC))**PYR(0)
44327         IF(IGM.EQ.0.AND.M3JCM.EQ.1) Z=1D0-(1D0-Z)**RESCZ
44328         IF(1D0+Z**2.LT.2D0*PYR(0)) GOTO 390
44329         K(IEP(1),5)=21
44330       ELSEIF(MSTJ(49).EQ.0.AND.MSTJ(45)*0.5D0.LT.PYR(0)*FBR) THEN
44331         Z=(1D0-ZC)*(ZC/(1D0-ZC))**PYR(0)
44332         IF(PYR(0).GT.0.5D0) Z=1D0-Z
44333         IF((1D0-Z*(1D0-Z))**2.LT.PYR(0)) GOTO 390
44334         K(IEP(1),5)=21
44335       ELSEIF(MSTJ(49).NE.1) THEN
44336         Z=PYR(0)
44337         IF(Z**2+(1D0-Z)**2.LT.PYR(0)) GOTO 390
44338         KFLB=1+INT(MSTJ(45)*PYR(0))
44339         PMQ=4D0*PMTH(2,KFLB)**2/V(IEP(1),5)
44340         IF(PMQ.GE.1D0) GOTO 390
44341         IF(MSTJ(44).LE.2) THEN
44342           IF(Z.LT.ZC.OR.Z.GT.1D0-ZC) GOTO 390
44343           PMQ0=4D0*PMTH(2,21)**2/V(IEP(1),5)
44344           IF(MOD(MSTJ(43),2).EQ.0.AND.(1D0+0.5D0*PMQ)*SQRT(1D0-PMQ)
44345      &    .LT.PYR(0)*(1D0+0.5D0*PMQ0)*SQRT(1D0-PMQ0)) GOTO 390
44346         ELSE
44347           IF((1D0+0.5D0*PMQ)*SQRT(1D0-PMQ).LT.PYR(0)) GOTO 390
44348         ENDIF
44349         K(IEP(1),5)=KFLB
44350  
44351 C...Ditto for scalar gluon model.
44352       ELSEIF(KFL(1).NE.21) THEN
44353         Z=1D0-SQRT(ZC**2+PYR(0)*(1D0-2D0*ZC))
44354         K(IEP(1),5)=21
44355       ELSEIF(PYR(0)*(PARJ(87)+MSTJ(45)*PARJ(88)).LE.PARJ(87)) THEN
44356         Z=ZC+(1D0-2D0*ZC)*PYR(0)
44357         K(IEP(1),5)=21
44358       ELSE
44359         Z=ZC+(1D0-2D0*ZC)*PYR(0)
44360         KFLB=1+INT(MSTJ(45)*PYR(0))
44361         PMQ=4D0*PMTH(2,KFLB)**2/V(IEP(1),5)
44362         IF(PMQ.GE.1D0) GOTO 390
44363         K(IEP(1),5)=KFLB
44364       ENDIF
44365
44366 C...Correct to alpha_s(pT^2) (optionally m^2/4 for g -> q qbar).
44367       IF(MCE.EQ.1.AND.MSTJ(44).GE.2.AND.IPSPD.EQ.0) THEN
44368         IF(KFL(1).EQ.21.AND.K(IEP(1),5).LT.10.AND.MSTJ(44).EQ.3) THEN
44369           IF(ALFM/LOG(V(IEP(1),5)*0.25D0/ALAMS).LT.PYR(0)) GOTO 390
44370         ELSE
44371           IF(Z*(1D0-Z)*V(IEP(1),5).LT.PT2MIN) GOTO 390
44372           IF(ALFM/LOG(V(IEP(1),5)*Z*(1D0-Z)/ALAMS).LT.PYR(0)) GOTO 390
44373         ENDIF
44374       ENDIF
44375  
44376 C...Check if z consistent with chosen m.
44377       IF(KFL(1).EQ.21) THEN
44378         KFLGD1=IABS(K(IEP(1),5))
44379         KFLGD2=KFLGD1
44380       ELSE
44381         KFLGD1=KFL(1)
44382         KFLGD2=IABS(K(IEP(1),5))
44383       ENDIF
44384       IF(NEP.EQ.1) THEN
44385         PED=PS(4)
44386       ELSEIF(NEP.GE.3) THEN
44387         PED=P(IEP(1),4)
44388       ELSEIF(IGM.EQ.0.OR.MSTJ(43).LE.2) THEN
44389         PED=0.5D0*(V(IM,5)+V(IEP(1),5)-PM2**2)/P(IM,5)
44390       ELSE
44391         IF(IEP(1).EQ.N+1) PED=V(IM,1)*PEM
44392         IF(IEP(1).EQ.N+2) PED=(1D0-V(IM,1))*PEM
44393       ENDIF
44394       IF(MOD(MSTJ(43),2).EQ.1) THEN
44395         IFLGD1=KFLGD1
44396         IF(KFLGD1.GE.6.AND.KFLGD1.LE.8) IFLGD1=IFL
44397         PMQTH3=0.5D0*PARJ(82)
44398         IF(KFLGD2.EQ.22) PMQTH3=0.5D0*PARJ(83)
44399         IF(KFL(1).GE.11.AND.KFL(1).LE.18) PMQTH3=0.5D0*PARJ(90)
44400         PMQ1=(PMTH(1,IFLGD1)**2+PMQTH3**2)/V(IEP(1),5)
44401         PMQ2=(PMTH(1,KFLGD2)**2+PMQTH3**2)/V(IEP(1),5)
44402         ZD=SQRT(MAX(0D0,(1D0-V(IEP(1),5)/PED**2)*((1D0-PMQ1-PMQ2)**2-
44403      &  4D0*PMQ1*PMQ2)))
44404         ZH=1D0+PMQ1-PMQ2
44405       ELSE
44406         ZD=SQRT(MAX(0D0,1D0-V(IEP(1),5)/PED**2))
44407         ZH=1D0
44408       ENDIF
44409       IF(KFL(1).EQ.21.AND.K(IEP(1),5).LT.10.AND.MSTJ(44).EQ.3) THEN
44410       ELSEIF(IPSPD.NE.0) THEN
44411       ELSE 
44412         ZL=0.5D0*(ZH-ZD)
44413         ZU=0.5D0*(ZH+ZD)
44414         IF(Z.LT.ZL.OR.Z.GT.ZU) GOTO 390
44415       ENDIF
44416       IF(KFL(1).EQ.21) V(IEP(1),3)=LOG(ZU*(1D0-ZL)/MAX(1D-20,ZL*
44417      &(1D0-ZU)))
44418       IF(KFL(1).NE.21) V(IEP(1),3)=LOG((1D0-ZL)/MAX(1D-10,1D0-ZU))
44419  
44420 C...Width suppression for q -> q + g.
44421       IF(MSTJ(40).NE.0.AND.KFL(1).NE.21.AND.IPSPD.EQ.0) THEN
44422         IF(IGM.EQ.0) THEN
44423           EGLU=0.5D0*PS(5)*(1D0-Z)*(1D0+V(IEP(1),5)/V(NS+1,5))
44424         ELSE
44425           EGLU=PMED*(1D0-Z)
44426         ENDIF
44427         CHI=PARJ(89)**2/(PARJ(89)**2+EGLU**2)
44428         IF(MSTJ(40).EQ.1) THEN
44429           IF(CHI.LT.PYR(0)) GOTO 390
44430         ELSEIF(MSTJ(40).EQ.2) THEN
44431           IF(1D0-CHI.LT.PYR(0)) GOTO 390
44432         ENDIF
44433       ENDIF
44434  
44435 C...Three-jet matrix element correction (on both sides).
44436       IF(IGM.EQ.0.AND.M3JC.EQ.1) THEN
44437         X1=Z*(1D0+V(IEP(1),5)/V(NS+1,5))
44438         X2=1D0-V(IEP(1),5)/V(NS+1,5)
44439         X3=(1D0-X1)+(1D0-X2)
44440         IF(MCE.EQ.2) THEN
44441           KI1=K(IPA(INUM),2)
44442           KI2=K(IPA(3-INUM),2)
44443           QF1=KCHG(IABS(KI1),1)*ISIGN(1,KI1)/3D0
44444           QF2=KCHG(IABS(KI2),1)*ISIGN(1,KI2)/3D0
44445           WSHOW=QF1**2*(1D0-X1)/X3*(1D0+(X1/(2D0-X2))**2)+
44446      &    QF2**2*(1D0-X2)/X3*(1D0+(X2/(2D0-X1))**2)
44447           WME=(QF1*(1D0-X1)/X3-QF2*(1D0-X2)/X3)**2*(X1**2+X2**2)
44448         ELSEIF(MSTJ(49).NE.1.AND.M3JCM.NE.1) THEN
44449           WSHOW=1D0+(1D0-X1)/X3*(X1/(2D0-X2))**2+
44450      &    (1D0-X2)/X3*(X2/(2D0-X1))**2
44451           WME=X1**2+X2**2
44452         ELSEIF(MSTJ(49).NE.1) THEN
44453           X1=(1D0+(V(IEP(1),5)-PQMES)/V(NS+1,5))*
44454      &    (Z+(1D0-Z)*PQMES/V(IEP(1),5))
44455           X2=1D0-(V(IEP(1),5)-PQMES)/V(NS+1,5)
44456           X3=(1D0-X1)+(1D0-X2)
44457           Z1SH=(X1-(PQMES/V(NS+1,5))*(X3/MAX(1D-10,1D0-X2)))/(2D0-X2)
44458           Z2SH=(X2-(PQMES/V(NS+1,5))*(X3/MAX(1D-10,1D0-X1)))/(2D0-X1)
44459           WSHOW=(((1D0-X1)/(2D0-X2))*(1D0+Z1SH**2)/MAX(1D-10,1D0-Z1SH)+
44460      &    ((1D0-X2)/(2D0-X1))*(1D0+Z2SH**2)/MAX(1D-10,1D0-Z2SH))/RESCZ
44461           WME=X1**2+X2**2-QME*X3-0.5D0*QME**2-
44462      &    (0.5D0*QME+0.25D0*QME**2)*((1D0-X2)/MAX(1D-10,1D0-X1)+
44463      &    (1D0-X1)/MAX(1D-10,1D0-X2))
44464         ELSE
44465           WSHOW=4D0*X3*((1D0-X1)/(2D0-X2)**2+(1D0-X2)/(2D0-X1)**2)
44466           WME=X3**2
44467           IF(MSTJ(102).GE.2) WME=X3**2-2D0*(1D0+X3)*(1D0-X1)*(1D0-X2)*
44468      &    PARJ(171)
44469         ENDIF
44470         IF(WME.LT.PYR(0)*WSHOW) GOTO 390
44471  
44472 C...Impose angular ordering by rejection of nonordered emission.
44473       ELSEIF(MCE.EQ.1.AND.IGM.GT.0.AND.MSTJ(42).GE.2.AND.IPSPD.EQ.0) 
44474      &THEN
44475         PEMAO=V(IM,1)*P(IM,4)
44476         IF(IEP(1).EQ.N+2) PEMAO=(1D0-V(IM,1))*P(IM,4)
44477         IF(KFL(1).EQ.21.AND.K(IEP(1),5).LE.10.AND.MSTJ(42).EQ.4) THEN
44478           MAOD=0
44479         ELSEIF(KFL(1).EQ.21.AND.K(IEP(1),5).LE.10.AND.MSTJ(42).EQ.3) 
44480      &  THEN
44481           MAOD=1
44482           PMDAO=PMTH(2,K(IEP(1),5))
44483           THE2ID=Z*(1D0-Z)*PEMAO**2/(V(IEP(1),5)-4D0*PMDAO**2)
44484         ELSE
44485           MAOD=1
44486           THE2ID=Z*(1D0-Z)*PEMAO**2/V(IEP(1),5)
44487         ENDIF
44488         MAOM=1
44489         IAOM=IM
44490   420   IF(K(IAOM,5).EQ.22) THEN
44491           IAOM=K(IAOM,3)
44492           IF(K(IAOM,3).LE.NS) MAOM=0
44493           IF(MAOM.EQ.1) GOTO 420
44494         ENDIF
44495         IF(MAOM.EQ.1.AND.MAOD.EQ.1) THEN
44496           THE2IM=V(IAOM,1)*(1D0-V(IAOM,1))*P(IAOM,4)**2/V(IAOM,5)
44497           IF(THE2ID.LT.THE2IM) GOTO 390
44498         ENDIF
44499       ENDIF
44500  
44501 C...Impose user-defined maximum angle at first branching.
44502       IF(MSTJ(48).EQ.1.AND.IPSPD.EQ.0) THEN
44503         IF(NEP.EQ.1.AND.IM.EQ.NS) THEN
44504           THE2ID=Z*(1D0-Z)*PS(4)**2/V(IEP(1),5)
44505           IF(PARJ(85)**2*THE2ID.LT.1D0) GOTO 390
44506         ELSEIF(NEP.EQ.2.AND.IEP(1).EQ.NS+2) THEN
44507           THE2ID=Z*(1D0-Z)*(0.5D0*P(IM,4))**2/V(IEP(1),5)
44508           IF(PARJ(85)**2*THE2ID.LT.1D0) GOTO 390
44509         ELSEIF(NEP.EQ.2.AND.IEP(1).EQ.NS+3) THEN
44510           THE2ID=Z*(1D0-Z)*(0.5D0*P(IM,4))**2/V(IEP(1),5)
44511           IF(PARJ(86)**2*THE2ID.LT.1D0) GOTO 390
44512         ENDIF
44513       ENDIF
44514  
44515 C...Impose angular constraint in first branching from interference
44516 C...with initial state partons.
44517       IF(MIIS.GE.2.AND.IEP(1).LE.NS+3) THEN
44518         THE2D=MAX((1D0-Z)/Z,Z/(1D0-Z))*V(IEP(1),5)/(0.5D0*P(IM,4))**2
44519         IF(IEP(1).EQ.NS+2.AND.ISII(1).GE.1) THEN
44520           IF(THE2D.GT.THEIIS(1,ISII(1))**2) GOTO 390
44521         ELSEIF(IEP(1).EQ.NS+3.AND.ISII(2).GE.1) THEN
44522           IF(THE2D.GT.THEIIS(2,ISII(2))**2) GOTO 390
44523         ENDIF
44524       ENDIF
44525  
44526 C...End of inner veto algorithm. Check if only one leg evolved so far.
44527   430 V(IEP(1),1)=Z
44528       ISL(1)=0
44529       ISL(2)=0
44530       IF(NEP.EQ.1) GOTO 460
44531       IF(NEP.EQ.2.AND.P(IEP(1),5)+P(IEP(2),5).GE.P(IM,5)) GOTO 330
44532       DO 440 I=1,NEP
44533         IF(ITRY(I).EQ.0.AND.KFLD(I).LE.40) THEN
44534           IF(KSH(KFLD(I)).EQ.1) THEN
44535             IFLD=KFLD(I)
44536             IF(KFLD(I).GE.6.AND.KFLD(I).LE.8) IFLD=37+KFLD(I)+
44537      &      ISIGN(2,K(N+I,2))
44538             IF(P(N+I,5).GE.PMTH(2,IFLD)) GOTO 330
44539           ENDIF
44540         ENDIF
44541   440 CONTINUE
44542  
44543 C...Check if chosen multiplet m1,m2,z1,z2 is physical.
44544       IF(NEP.EQ.3) THEN
44545         PA1S=(P(N+1,4)+P(N+1,5))*(P(N+1,4)-P(N+1,5))
44546         PA2S=(P(N+2,4)+P(N+2,5))*(P(N+2,4)-P(N+2,5))
44547         PA3S=(P(N+3,4)+P(N+3,5))*(P(N+3,4)-P(N+3,5))
44548         PTS=0.25D0*(2D0*PA1S*PA2S+2D0*PA1S*PA3S+2D0*PA2S*PA3S-
44549      &  PA1S**2-PA2S**2-PA3S**2)/PA1S
44550         IF(PTS.LE.0D0) GOTO 330
44551       ELSEIF(IGM.EQ.0.OR.MSTJ(43).LE.2.OR.MOD(MSTJ(43),2).EQ.0) THEN
44552         DO 450 I1=N+1,N+2
44553           KFLDA=IABS(K(I1,2))
44554           IF(KFLDA.GT.40) GOTO 450
44555           IF(KSH(KFLDA).EQ.0) GOTO 450
44556           IFLDA=KFLDA
44557           IF(KFLDA.GE.6.AND.KFLDA.LE.8) IFLDA=37+KFLDA+
44558      &    ISIGN(2,K(I1,2))
44559           IF(P(I1,5).LT.PMTH(2,IFLDA)) GOTO 450
44560           IF(KFLDA.EQ.21) THEN
44561             KFLGD1=IABS(K(I1,5))
44562             KFLGD2=KFLGD1
44563           ELSE
44564             KFLGD1=KFLDA
44565             KFLGD2=IABS(K(I1,5))
44566           ENDIF
44567           I2=2*N+3-I1
44568           IF(IGM.EQ.0.OR.MSTJ(43).LE.2) THEN
44569             PED=0.5D0*(V(IM,5)+V(I1,5)-V(I2,5))/P(IM,5)
44570           ELSE
44571             IF(I1.EQ.N+1) ZM=V(IM,1)
44572             IF(I1.EQ.N+2) ZM=1D0-V(IM,1)
44573             PML=SQRT((V(IM,5)-V(N+1,5)-V(N+2,5))**2-
44574      &      4D0*V(N+1,5)*V(N+2,5))
44575             PED=PEM*(0.5D0*(V(IM,5)-PML+V(I1,5)-V(I2,5))+PML*ZM)/
44576      &      V(IM,5)
44577           ENDIF
44578           IF(MOD(MSTJ(43),2).EQ.1) THEN
44579             PMQTH3=0.5D0*PARJ(82)
44580             IF(KFLGD2.EQ.22) PMQTH3=0.5D0*PARJ(83)
44581             IF(KFLDA.GE.11.AND.KFLDA.LE.18) PMQTH3=0.5D0*PARJ(90)
44582             IFLGD1=KFLGD1
44583             IF(KFLGD1.GE.6.AND.KFLGD1.LE.8) IFLGD1=IFLDA
44584             PMQ1=(PMTH(1,IFLGD1)**2+PMQTH3**2)/V(I1,5)
44585             PMQ2=(PMTH(1,KFLGD2)**2+PMQTH3**2)/V(I1,5)
44586             ZD=SQRT(MAX(0D0,(1D0-V(I1,5)/PED**2)*((1D0-PMQ1-PMQ2)**2-
44587      &      4D0*PMQ1*PMQ2)))
44588             ZH=1D0+PMQ1-PMQ2
44589           ELSE
44590             ZD=SQRT(MAX(0D0,1D0-V(I1,5)/PED**2))
44591             ZH=1D0
44592           ENDIF
44593           IF(KFLDA.EQ.21.AND.KFLGD1.LT.10.AND.MSTJ(44).EQ.3) THEN
44594           ELSE 
44595             ZL=0.5D0*(ZH-ZD)
44596             ZU=0.5D0*(ZH+ZD)
44597             IF(I1.EQ.N+1.AND.(V(I1,1).LT.ZL.OR.V(I1,1).GT.ZU).AND.
44598      &      ISSET(1).EQ.0) THEN
44599               ISL(1)=1
44600             ELSEIF(I1.EQ.N+2.AND.(V(I1,1).LT.ZL.OR.V(I1,1).GT.ZU).AND.
44601      &      ISSET(2).EQ.0) THEN 
44602               ISL(2)=1
44603             ENDIF
44604           ENDIF
44605           IF(KFLDA.EQ.21) V(I1,4)=LOG(ZU*(1D0-ZL)/MAX(1D-20,
44606      &    ZL*(1D0-ZU)))
44607           IF(KFLDA.NE.21) V(I1,4)=LOG((1D0-ZL)/MAX(1D-10,1D0-ZU))
44608   450   CONTINUE
44609         IF(ISL(1).EQ.1.AND.ISL(2).EQ.1.AND.ISLM.NE.0) THEN
44610           ISL(3-ISLM)=0
44611           ISLM=3-ISLM
44612         ELSEIF(ISL(1).EQ.1.AND.ISL(2).EQ.1) THEN
44613           ZDR1=MAX(0D0,V(N+1,3)/MAX(1D-6,V(N+1,4))-1D0)
44614           ZDR2=MAX(0D0,V(N+2,3)/MAX(1D-6,V(N+2,4))-1D0)
44615           IF(ZDR2.GT.PYR(0)*(ZDR1+ZDR2)) ISL(1)=0
44616           IF(ISL(1).EQ.1) ISL(2)=0
44617           IF(ISL(1).EQ.0) ISLM=1
44618           IF(ISL(2).EQ.0) ISLM=2
44619         ENDIF
44620         IF(ISL(1).EQ.1.OR.ISL(2).EQ.1) GOTO 330
44621       ENDIF
44622       IFLD1=KFLD(1)
44623       IF(KFLD(1).GE.6.AND.KFLD(1).LE.8) IFLD1=37+KFLD(1)+
44624      &ISIGN(2,K(N+1,2))
44625       IFLD2=KFLD(2)
44626       IF(KFLD(2).GE.6.AND.KFLD(2).LE.8) IFLD2=37+KFLD(2)+
44627      &ISIGN(2,K(N+2,2))
44628       IF(IGM.GT.0) THEN
44629         IF(MOD(MSTJ(43),2).EQ.1.AND.(P(N+1,5).GE.
44630      &  PMTH(2,IFLD1).OR.P(N+2,5).GE.PMTH(2,IFLD2))) THEN
44631           PMQ1=V(N+1,5)/V(IM,5)
44632           PMQ2=V(N+2,5)/V(IM,5)
44633           ZD=SQRT(MAX(0D0,(1D0-V(IM,5)/PEM**2)*((1D0-PMQ1-PMQ2)**2-
44634      &    4D0*PMQ1*PMQ2)))
44635           ZH=1D0+PMQ1-PMQ2
44636           ZL=0.5D0*(ZH-ZD)
44637           ZU=0.5D0*(ZH+ZD)
44638           IF(V(IM,1).LT.ZL.OR.V(IM,1).GT.ZU) GOTO 330
44639         ENDIF
44640       ENDIF
44641  
44642 C...Accepted branch. Construct four-momentum for initial partons.
44643   460 MAZIP=0
44644       MAZIC=0
44645       IF(NEP.EQ.1) THEN
44646         P(N+1,1)=0D0
44647         P(N+1,2)=0D0
44648         P(N+1,3)=SQRT(MAX(0D0,(P(IPA(1),4)+P(N+1,5))*(P(IPA(1),4)-
44649      &  P(N+1,5))))
44650         P(N+1,4)=P(IPA(1),4)
44651         V(N+1,2)=P(N+1,4)
44652       ELSEIF(IGM.EQ.0.AND.NEP.EQ.2) THEN
44653         PED1=0.5D0*(V(IM,5)+V(N+1,5)-V(N+2,5))/P(IM,5)
44654         P(N+1,1)=0D0
44655         P(N+1,2)=0D0
44656         P(N+1,3)=SQRT(MAX(0D0,(PED1+P(N+1,5))*(PED1-P(N+1,5))))
44657         P(N+1,4)=PED1
44658         P(N+2,1)=0D0
44659         P(N+2,2)=0D0
44660         P(N+2,3)=-P(N+1,3)
44661         P(N+2,4)=P(IM,5)-PED1
44662         V(N+1,2)=P(N+1,4)
44663         V(N+2,2)=P(N+2,4)
44664       ELSEIF(NEP.EQ.3) THEN
44665         P(N+1,1)=0D0
44666         P(N+1,2)=0D0
44667         P(N+1,3)=SQRT(MAX(0D0,PA1S))
44668         P(N+2,1)=SQRT(PTS)
44669         P(N+2,2)=0D0
44670         P(N+2,3)=0.5D0*(PA3S-PA2S-PA1S)/P(N+1,3)
44671         P(N+3,1)=-P(N+2,1)
44672         P(N+3,2)=0D0
44673         P(N+3,3)=-(P(N+1,3)+P(N+2,3))
44674         V(N+1,2)=P(N+1,4)
44675         V(N+2,2)=P(N+2,4)
44676         V(N+3,2)=P(N+3,4)
44677  
44678 C...Construct transverse momentum for ordinary branching in shower.
44679       ELSE
44680         ZM=V(IM,1)
44681         LOOPPT=0
44682   465   LOOPPT=LOOPPT+1
44683         PZM=SQRT(MAX(0D0,(PEM+P(IM,5))*(PEM-P(IM,5))))
44684         PMLS=(V(IM,5)-V(N+1,5)-V(N+2,5))**2-4D0*V(N+1,5)*V(N+2,5)
44685         IF(PZM.LE.0D0) THEN
44686           PTS=0D0
44687         ELSEIF(K(IM,2).EQ.21.AND.IABS(K(N+1,2)).LE.10.AND.
44688      &  MSTJ(44).EQ.3) THEN
44689           PTS=PMLS*ZM*(1D0-ZM)/V(IM,5) 
44690         ELSEIF(MOD(MSTJ(43),2).EQ.1) THEN
44691           PTS=(PEM**2*(ZM*(1D0-ZM)*V(IM,5)-(1D0-ZM)*V(N+1,5)-
44692      &    ZM*V(N+2,5))-0.25D0*PMLS)/PZM**2
44693         ELSE
44694           PTS=PMLS*(ZM*(1D0-ZM)*PEM**2/V(IM,5)-0.25D0)/PZM**2
44695         ENDIF
44696         IF(PTS.LT.0D0.AND.LOOPPT.LT.10) THEN
44697           ZM=0.05D0+0.9D0*ZM
44698           GOTO 465
44699         ELSEIF(PTS.LT.0D0) THEN 
44700           GOTO 265
44701         ENDIF 
44702         PT=SQRT(MAX(0D0,PTS))
44703  
44704 C...Find coefficient of azimuthal asymmetry due to gluon polarization.
44705         HAZIP=0D0
44706         IF(MSTJ(49).NE.1.AND.MOD(MSTJ(46),2).EQ.1.AND.K(IM,2).EQ.21
44707      &  .AND.IAU.NE.0) THEN
44708           IF(K(IGM,3).NE.0) MAZIP=1
44709           ZAU=V(IGM,1)
44710           IF(IAU.EQ.IM+1) ZAU=1D0-V(IGM,1)
44711           IF(MAZIP.EQ.0) ZAU=0D0
44712           IF(K(IGM,2).NE.21) THEN
44713             HAZIP=2D0*ZAU/(1D0+ZAU**2)
44714           ELSE
44715             HAZIP=(ZAU/(1D0-ZAU*(1D0-ZAU)))**2
44716           ENDIF
44717           IF(K(N+1,2).NE.21) THEN
44718             HAZIP=HAZIP*(-2D0*ZM*(1D0-ZM))/(1D0-2D0*ZM*(1D0-ZM))
44719           ELSE
44720             HAZIP=HAZIP*(ZM*(1D0-ZM)/(1D0-ZM*(1D0-ZM)))**2
44721           ENDIF
44722         ENDIF
44723  
44724 C...Find coefficient of azimuthal asymmetry due to soft gluon
44725 C...interference.
44726         HAZIC=0D0
44727         IF(MSTJ(49).NE.2.AND.MSTJ(46).GE.2.AND.(K(N+1,2).EQ.21.OR.
44728      &  K(N+2,2).EQ.21).AND.IAU.NE.0) THEN
44729           IF(K(IGM,3).NE.0) MAZIC=N+1
44730           IF(K(IGM,3).NE.0.AND.K(N+1,2).NE.21) MAZIC=N+2
44731           IF(K(IGM,3).NE.0.AND.K(N+1,2).EQ.21.AND.K(N+2,2).EQ.21.AND.
44732      &    ZM.GT.0.5D0) MAZIC=N+2
44733           IF(K(IAU,2).EQ.22) MAZIC=0
44734           ZS=ZM
44735           IF(MAZIC.EQ.N+2) ZS=1D0-ZM
44736           ZGM=V(IGM,1)
44737           IF(IAU.EQ.IM-1) ZGM=1D0-V(IGM,1)
44738           IF(MAZIC.EQ.0) ZGM=1D0
44739           IF(MAZIC.NE.0) HAZIC=(P(IM,5)/P(IGM,5))*
44740      &    SQRT((1D0-ZS)*(1D0-ZGM)/(ZS*ZGM))
44741           HAZIC=MIN(0.95D0,HAZIC)
44742         ENDIF
44743       ENDIF
44744  
44745 C...Construct energies for ordinary branching in shower.
44746   470 IF(NEP.EQ.2.AND.IGM.GT.0) THEN
44747         IF(K(IM,2).EQ.21.AND.IABS(K(N+1,2)).LE.10.AND.
44748      &  MSTJ(44).EQ.3) THEN
44749           P(N+1,4)=0.5D0*(PEM*(V(IM,5)+V(N+1,5)-V(N+2,5))+
44750      &    PZM*SQRT(MAX(0D0,PMLS))*(2D0*ZM-1D0))/V(IM,5)
44751         ELSEIF(MOD(MSTJ(43),2).EQ.1) THEN
44752           P(N+1,4)=PEM*V(IM,1)
44753         ELSE
44754           P(N+1,4)=PEM*(0.5D0*(V(IM,5)-SQRT(PMLS)+V(N+1,5)-V(N+2,5))+
44755      &    SQRT(PMLS)*ZM)/V(IM,5)
44756         ENDIF
44757
44758 C...Already predetermined choice of phi angle or not
44759         PHI=PARU(2)*PYR(0)
44760         IF(MPSPD.EQ.1.AND.IGM.EQ.NS+1) THEN
44761           IPSPD=IP1+IM-NS-2
44762           IF(K(IPSPD,4).GT.0) THEN
44763             IPSGD1=K(IPSPD,4)
44764             IF(IM.EQ.NS+2) THEN
44765               PHI=PYANGL(P(IPSGD1,1),P(IPSGD1,2))
44766             ELSE
44767               PHI=PYANGL(-P(IPSGD1,1),P(IPSGD1,2))
44768             ENDIF
44769           ENDIF
44770         ELSEIF(MPSPD.EQ.1.AND.IGM.EQ.NS+2) THEN
44771           IPSPD=IP1+IM-NS-2
44772           IF(K(IPSPD,4).GT.0) THEN
44773             IPSGD1=K(IPSPD,4)
44774             PHIPSM=PYANGL(P(IPSPD,1),P(IPSPD,2))
44775             THEPSM=PYANGL(P(IPSPD,3),SQRT(P(IPSPD,1)**2+P(IPSPD,2)**2))
44776             CALL PYROBO(IPSGD1,IPSGD1,0D0,-PHIPSM,0D0,0D0,0D0)
44777             CALL PYROBO(IPSGD1,IPSGD1,-THEPSM,0D0,0D0,0D0,0D0)
44778             PHI=PYANGL(P(IPSGD1,1),P(IPSGD1,2))
44779             CALL PYROBO(IPSGD1,IPSGD1,THEPSM,PHIPSM,0D0,0D0,0D0)   
44780           ENDIF
44781         ENDIF
44782
44783 C...Construct momenta for ordinary branching in shower.
44784         P(N+1,1)=PT*COS(PHI)
44785         P(N+1,2)=PT*SIN(PHI)
44786         IF(K(IM,2).EQ.21.AND.IABS(K(N+1,2)).LE.10.AND.
44787      &  MSTJ(44).EQ.3) THEN
44788           P(N+1,3)=0.5D0*(PZM*(V(IM,5)+V(N+1,5)-V(N+2,5))+
44789      &    PEM*SQRT(MAX(0D0,PMLS))*(2D0*ZM-1D0))/V(IM,5)
44790         ELSEIF(PZM.GT.0D0) THEN
44791           P(N+1,3)=0.5D0*(V(N+2,5)-V(N+1,5)-V(IM,5)+
44792      &    2D0*PEM*P(N+1,4))/PZM
44793         ELSE
44794           P(N+1,3)=0D0
44795         ENDIF
44796         P(N+2,1)=-P(N+1,1)
44797         P(N+2,2)=-P(N+1,2)
44798         P(N+2,3)=PZM-P(N+1,3)
44799         P(N+2,4)=PEM-P(N+1,4)
44800         IF(MSTJ(43).LE.2) THEN
44801           V(N+1,2)=(PEM*P(N+1,4)-PZM*P(N+1,3))/P(IM,5)
44802           V(N+2,2)=(PEM*P(N+2,4)-PZM*P(N+2,3))/P(IM,5)
44803         ENDIF
44804       ENDIF
44805  
44806 C...Rotate and boost daughters.
44807       IF(IGM.GT.0) THEN
44808         IF(MSTJ(43).LE.2) THEN
44809           BEX=P(IGM,1)/P(IGM,4)
44810           BEY=P(IGM,2)/P(IGM,4)
44811           BEZ=P(IGM,3)/P(IGM,4)
44812           GA=P(IGM,4)/P(IGM,5)
44813           GABEP=GA*(GA*(BEX*P(IM,1)+BEY*P(IM,2)+BEZ*P(IM,3))/(1D0+GA)-
44814      &    P(IM,4))
44815         ELSE
44816           BEX=0D0
44817           BEY=0D0
44818           BEZ=0D0
44819           GA=1D0
44820           GABEP=0D0
44821         ENDIF
44822         PTIMB=SQRT((P(IM,1)+GABEP*BEX)**2+(P(IM,2)+GABEP*BEY)**2)
44823         THE=PYANGL(P(IM,3)+GABEP*BEZ,PTIMB)
44824         IF(PTIMB.GT.1D-4) THEN
44825           PHI=PYANGL(P(IM,1)+GABEP*BEX,P(IM,2)+GABEP*BEY)
44826         ELSE
44827           PHI=0D0
44828         ENDIF 
44829         DO 480 I=N+1,N+2
44830           DP(1)=COS(THE)*COS(PHI)*P(I,1)-SIN(PHI)*P(I,2)+
44831      &    SIN(THE)*COS(PHI)*P(I,3)
44832           DP(2)=COS(THE)*SIN(PHI)*P(I,1)+COS(PHI)*P(I,2)+
44833      &    SIN(THE)*SIN(PHI)*P(I,3)
44834           DP(3)=-SIN(THE)*P(I,1)+COS(THE)*P(I,3)
44835           DP(4)=P(I,4)
44836           DBP=BEX*DP(1)+BEY*DP(2)+BEZ*DP(3)
44837           DGABP=GA*(GA*DBP/(1D0+GA)+DP(4))
44838           P(I,1)=DP(1)+DGABP*BEX
44839           P(I,2)=DP(2)+DGABP*BEY
44840           P(I,3)=DP(3)+DGABP*BEZ
44841           P(I,4)=GA*(DP(4)+DBP)
44842   480   CONTINUE
44843       ENDIF
44844  
44845 C...Weight with azimuthal distribution, if required.
44846       IF(MAZIP.NE.0.OR.MAZIC.NE.0) THEN
44847         DO 490 J=1,3
44848           DPT(1,J)=P(IM,J)
44849           DPT(2,J)=P(IAU,J)
44850           DPT(3,J)=P(N+1,J)
44851   490   CONTINUE
44852         DPMA=DPT(1,1)*DPT(2,1)+DPT(1,2)*DPT(2,2)+DPT(1,3)*DPT(2,3)
44853         DPMD=DPT(1,1)*DPT(3,1)+DPT(1,2)*DPT(3,2)+DPT(1,3)*DPT(3,3)
44854         DPMM=DPT(1,1)**2+DPT(1,2)**2+DPT(1,3)**2
44855         DO 500 J=1,3
44856           DPT(4,J)=DPT(2,J)-DPMA*DPT(1,J)/MAX(1D-10,DPMM)
44857           DPT(5,J)=DPT(3,J)-DPMD*DPT(1,J)/MAX(1D-10,DPMM)
44858   500   CONTINUE
44859         DPT(4,4)=SQRT(DPT(4,1)**2+DPT(4,2)**2+DPT(4,3)**2)
44860         DPT(5,4)=SQRT(DPT(5,1)**2+DPT(5,2)**2+DPT(5,3)**2)
44861         IF(MIN(DPT(4,4),DPT(5,4)).GT.0.1D0*PARJ(82)) THEN
44862           CAD=(DPT(4,1)*DPT(5,1)+DPT(4,2)*DPT(5,2)+
44863      &    DPT(4,3)*DPT(5,3))/(DPT(4,4)*DPT(5,4))
44864           IF(MAZIP.NE.0) THEN
44865             IF(1D0+HAZIP*(2D0*CAD**2-1D0).LT.PYR(0)*(1D0+ABS(HAZIP)))
44866      &      GOTO 470
44867           ENDIF
44868           IF(MAZIC.NE.0) THEN
44869             IF(MAZIC.EQ.N+2) CAD=-CAD
44870             IF((1D0-HAZIC)*(1D0-HAZIC*CAD)/(1D0+HAZIC**2-2D0*HAZIC*CAD)
44871      &      .LT.PYR(0)) GOTO 470
44872           ENDIF
44873         ENDIF
44874       ENDIF
44875  
44876 C...Azimuthal anisotropy due to interference with initial state partons.
44877       IF(MOD(MIIS,2).EQ.1.AND.IGM.EQ.NS+1.AND.(K(N+1,2).EQ.21.OR.
44878      &K(N+2,2).EQ.21)) THEN
44879         III=IM-NS-1
44880         IF(ISII(III).GE.1) THEN
44881           IAZIID=N+1
44882           IF(K(N+1,2).NE.21) IAZIID=N+2
44883           IF(K(N+1,2).EQ.21.AND.K(N+2,2).EQ.21.AND.
44884      &    P(N+1,4).GT.P(N+2,4)) IAZIID=N+2
44885           THEIID=PYANGL(P(IAZIID,3),SQRT(P(IAZIID,1)**2+P(IAZIID,2)**2))
44886           IF(III.EQ.2) THEIID=PARU(1)-THEIID
44887           PHIIID=PYANGL(P(IAZIID,1),P(IAZIID,2))
44888           HAZII=MIN(0.95D0,THEIID/THEIIS(III,ISII(III)))
44889           CAD=COS(PHIIID-PHIIIS(III,ISII(III)))
44890           PHIREL=ABS(PHIIID-PHIIIS(III,ISII(III)))
44891           IF(PHIREL.GT.PARU(1)) PHIREL=PARU(2)-PHIREL
44892           IF((1D0-HAZII)*(1D0-HAZII*CAD)/(1D0+HAZII**2-2D0*HAZII*CAD)
44893      &    .LT.PYR(0)) GOTO 470
44894         ENDIF
44895       ENDIF
44896  
44897 C...Continue loop over partons that may branch, until none left.
44898       IF(IGM.GE.0) K(IM,1)=14
44899       N=N+NEP
44900       NEP=2
44901       IF(N.GT.MSTU(4)-MSTU(32)-5) THEN
44902         CALL PYERRM(11,'(PYSHOW:) no more memory left in PYJETS')
44903         IF(MSTU(21).GE.1) N=NS
44904         IF(MSTU(21).GE.1) RETURN
44905       ENDIF
44906       GOTO 270
44907  
44908 C...Set information on imagined shower initiator.
44909   510 IF(NPA.GE.2) THEN
44910         K(NS+1,1)=11
44911         K(NS+1,2)=94
44912         K(NS+1,3)=IP1
44913         IF(IP2.GT.0.AND.IP2.LT.IP1) K(NS+1,3)=IP2
44914         K(NS+1,4)=NS+2
44915         K(NS+1,5)=NS+1+NPA
44916         IIM=1
44917       ELSE
44918         IIM=0
44919       ENDIF
44920  
44921 C...Reconstruct string drawing information.
44922       DO 520 I=NS+1+IIM,N
44923         IF(K(I,1).LE.10.AND.K(I,2).EQ.22) THEN
44924           K(I,1)=1
44925         ELSEIF(K(I,1).LE.10.AND.IABS(K(I,2)).GE.11.AND.
44926      &    IABS(K(I,2)).LE.18) THEN
44927           K(I,1)=1
44928         ELSEIF(K(I,1).LE.10) THEN
44929           K(I,4)=MSTU(5)*(K(I,4)/MSTU(5))
44930           K(I,5)=MSTU(5)*(K(I,5)/MSTU(5))
44931         ELSEIF(K(MOD(K(I,4),MSTU(5))+1,2).NE.22) THEN
44932           ID1=MOD(K(I,4),MSTU(5))
44933           IF(K(I,2).GE.1.AND.K(I,2).LE.8) ID1=MOD(K(I,4),MSTU(5))+1
44934           ID2=2*MOD(K(I,4),MSTU(5))+1-ID1
44935           K(I,4)=MSTU(5)*(K(I,4)/MSTU(5))+ID1
44936           K(I,5)=MSTU(5)*(K(I,5)/MSTU(5))+ID2
44937           K(ID1,4)=K(ID1,4)+MSTU(5)*I
44938           K(ID1,5)=K(ID1,5)+MSTU(5)*ID2
44939           K(ID2,4)=K(ID2,4)+MSTU(5)*ID1
44940           K(ID2,5)=K(ID2,5)+MSTU(5)*I
44941         ELSE
44942           ID1=MOD(K(I,4),MSTU(5))
44943           ID2=ID1+1
44944           K(I,4)=MSTU(5)*(K(I,4)/MSTU(5))+ID1
44945           K(I,5)=MSTU(5)*(K(I,5)/MSTU(5))+ID1
44946           IF(IABS(K(I,2)).LE.10.OR.K(ID1,1).GE.11) THEN
44947             K(ID1,4)=K(ID1,4)+MSTU(5)*I
44948             K(ID1,5)=K(ID1,5)+MSTU(5)*I
44949           ELSE
44950             K(ID1,4)=0
44951             K(ID1,5)=0
44952           ENDIF
44953           K(ID2,4)=0
44954           K(ID2,5)=0
44955         ENDIF
44956   520 CONTINUE
44957  
44958 C...Transformation from CM frame.
44959       IF(NPA.GE.2) THEN
44960         BEX=PS(1)/PS(4)
44961         BEY=PS(2)/PS(4)
44962         BEZ=PS(3)/PS(4)
44963         GA=PS(4)/PS(5)
44964         GABEP=GA*(GA*(BEX*P(IPA(1),1)+BEY*P(IPA(1),2)+BEZ*P(IPA(1),3))
44965      &  /(1D0+GA)-P(IPA(1),4))
44966       ELSE
44967         BEX=0D0
44968         BEY=0D0
44969         BEZ=0D0
44970         GABEP=0D0
44971       ENDIF
44972       THE=PYANGL(P(IPA(1),3)+GABEP*BEZ,SQRT((P(IPA(1),1)
44973      &+GABEP*BEX)**2+(P(IPA(1),2)+GABEP*BEY)**2))
44974       PHI=PYANGL(P(IPA(1),1)+GABEP*BEX,P(IPA(1),2)+GABEP*BEY)
44975       IF(NPA.EQ.3) THEN
44976         CHI=PYANGL(COS(THE)*COS(PHI)*(P(IPA(2),1)+GABEP*BEX)+COS(THE)*
44977      &  SIN(PHI)*(P(IPA(2),2)+GABEP*BEY)-SIN(THE)*(P(IPA(2),3)+GABEP*
44978      &  BEZ),-SIN(PHI)*(P(IPA(2),1)+GABEP*BEX)+COS(PHI)*(P(IPA(2),2)+
44979      &  GABEP*BEY))
44980         MSTU(33)=1
44981         CALL PYROBO(NS+1,N,0D0,CHI,0D0,0D0,0D0)
44982       ENDIF
44983       MSTU(33)=1
44984       CALL PYROBO(NS+1,N,THE,PHI,BEX,BEY,BEZ)
44985  
44986 C...Decay vertex of shower.
44987       DO 540 I=NS+1,N
44988         DO 530 J=1,5
44989           V(I,J)=V(IP1,J)
44990   530   CONTINUE
44991   540 CONTINUE
44992  
44993 C...Delete trivial shower, else connect initiators.
44994       IF(N.LE.NS+NPA+IIM) THEN
44995         N=NS
44996       ELSE
44997         DO 550 IP=1,NPA
44998           K(IPA(IP),1)=14
44999           K(IPA(IP),4)=K(IPA(IP),4)+NS+IIM+IP
45000           K(IPA(IP),5)=K(IPA(IP),5)+NS+IIM+IP
45001           K(NS+IIM+IP,3)=IPA(IP)
45002           IF(IIM.EQ.1.AND.MSTU(16).NE.2) K(NS+IIM+IP,3)=NS+1
45003           IF(K(NS+IIM+IP,1).NE.1) THEN
45004             K(NS+IIM+IP,4)=MSTU(5)*IPA(IP)+K(NS+IIM+IP,4)
45005             K(NS+IIM+IP,5)=MSTU(5)*IPA(IP)+K(NS+IIM+IP,5)
45006           ENDIF
45007   550   CONTINUE
45008       ENDIF
45009  
45010       RETURN
45011       END
45012  
45013 C*********************************************************************
45014  
45015 C...PYBOEI
45016 C...Modifies an event so as to approximately take into account
45017 C...Bose-Einstein effects according to a simple phenomenological
45018 C...parametrization.
45019  
45020       SUBROUTINE PYBOEI(NSAV)
45021  
45022 C...Double precision and integer declarations.
45023       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45024       IMPLICIT INTEGER(I-N)
45025       INTEGER PYK,PYCHGE,PYCOMP
45026       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
45027 C...Commonblocks.
45028       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
45029       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45030       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45031       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
45032 C...Local arrays and data.
45033       DIMENSION DPS(4),KFBE(9),NBE(0:10),BEI(100),BEI3(100),
45034      &BEIW(100),BEI3W(100)
45035       DATA KFBE/211,-211,111,321,-321,130,310,221,331/
45036 C...Statement function: squared invariant mass.
45037       SDIP(I,J)=((P(I,4)+P(J,4))**2-(P(I,3)+P(J,3))**2-
45038      &(P(I,2)+P(J,2))**2-(P(I,1)+P(J,1))**2)
45039  
45040 C...Boost event to overall CM frame. Calculate CM energy.
45041       IF((MSTJ(51).NE.1.AND.MSTJ(51).NE.2).OR.N-NSAV.LE.1) RETURN
45042       DO 100 J=1,4
45043         DPS(J)=0D0
45044   100 CONTINUE
45045       DO 120 I=1,N
45046         KFA=IABS(K(I,2))
45047         IF(K(I,1).LE.10.AND.((KFA.GT.10.AND.KFA.LE.20).OR.KFA.EQ.22)
45048      &  .AND.K(I,3).GT.0) THEN
45049           KFMA=IABS(K(K(I,3),2))
45050           IF(KFMA.GT.10.AND.KFMA.LE.80) K(I,1)=-K(I,1)
45051         ENDIF
45052         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 120
45053         DO 110 J=1,4
45054           DPS(J)=DPS(J)+P(I,J)
45055   110   CONTINUE
45056   120 CONTINUE
45057       CALL PYROBO(0,0,0D0,0D0,-DPS(1)/DPS(4),-DPS(2)/DPS(4),
45058      &-DPS(3)/DPS(4))
45059       PECM=0D0
45060       DO 130 I=1,N
45061         IF(K(I,1).GE.1.AND.K(I,1).LE.10) PECM=PECM+P(I,4)
45062   130 CONTINUE
45063  
45064 C...Reserve copy of particles by species at end of record.
45065       IWP=0
45066       IWN=0
45067       NBE(0)=N+MSTU(3)
45068       NMAX=NBE(0)
45069       SMMIN=PECM
45070       DO 180 IBE=1,MIN(10,MSTJ(52)+1)
45071         NBE(IBE)=NBE(IBE-1)
45072         DO 170 I=NSAV+1,N
45073           IF(IBE.EQ.MIN(10,MSTJ(52)+1)) THEN
45074             DO 140 IIBE=1,IBE-1
45075               IF(K(I,2).EQ.KFBE(IIBE)) GOTO 170
45076   140       CONTINUE
45077           ELSE
45078             IF(K(I,2).NE.KFBE(IBE)) GOTO 170
45079           ENDIF
45080           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 170
45081           IF(NBE(IBE).GE.MSTU(4)-MSTU(32)-5) THEN
45082             CALL PYERRM(11,'(PYBOEI:) no more memory left in PYJETS')
45083             RETURN
45084           ENDIF
45085           NBE(IBE)=NBE(IBE)+1
45086           NMAX=NBE(IBE)
45087           K(NBE(IBE),1)=I
45088           K(NBE(IBE),5)=0
45089           SMMIN=MIN(SMMIN,P(I,5))
45090           IF(MSTJ(53).NE.0.OR.MSTJ(56).GT.0) THEN
45091             IM=I
45092   150       IF(K(IM,3).GT.0) THEN
45093               IM=K(IM,3)
45094               IF(ABS(K(IM,2)).NE.24) GOTO 150
45095               K(NBE(IBE),5)=K(IM,2)
45096               IF(IWP.EQ.0.AND.K(IM,2).EQ.24) IWP=IM
45097               IF(IWN.EQ.0.AND.K(IM,2).EQ.-24) IWN=IM
45098             ENDIF
45099           ENDIF
45100           DO 160 J=1,3
45101             P(NBE(IBE),J)=0D0
45102             V(NBE(IBE),J)=0D0
45103   160     CONTINUE
45104           P(NBE(IBE),5)=-1.0D0
45105   170   CONTINUE
45106   180 CONTINUE
45107       IF(NBE(MIN(9,MSTJ(52)))-NBE(0).LE.1) GOTO 500
45108  
45109 C...Calculate separation between W+ and W-
45110       SIGW=PARJ(93)
45111       IF(IWP.GT.0.AND.IWN.GT.0.AND.MSTJ(56).GT.0) THEN
45112         DMW=PMAS(24,1)
45113         DGW=PMAS(24,2)
45114         DMP=P(IWP,5)
45115         DMN=P(IWN,5)
45116         TAUPD=DMP/SQRT((DMP**2-DMW**2)**2+(DGW*(DMP**2)/DMW)**2)
45117         TAUND=DMN/SQRT((DMN**2-DMW**2)**2+(DGW*(DMN**2)/DMW)**2)
45118         TAUP=-TAUPD*LOG(PYR(IDUM))
45119         TAUN=-TAUND*LOG(PYR(IDUM))
45120         DXP=TAUP*PYP(IWP,8)/DMP
45121         DXN=TAUN*PYP(IWN,8)/DMN
45122         DX=DXP+DXN
45123         SIGW=1.0D0/(1.0D0/PARJ(93)+REAL(MSTJ(56))*DX)
45124       ELSE
45125         SIGW=PARJ(93)
45126       ENDIF
45127  
45128       IF(MSTJ(57).EQ.1.AND.MSTJ(54).LT.0) THEN
45129         DO 210 IBE=1,MIN(9,MSTJ(52))
45130           DO 200 I1M=NBE(IBE-1)+1,NBE(IBE)-1
45131             Q2MIN=PECM**2
45132             I1=K(I1M,1)
45133             DO 190 I2M=NBE(IBE-1)+1,NBE(IBE)-1
45134               IF(I2M.EQ.I1M) GOTO 190
45135               I2=K(I2M,1)
45136               Q2=(P(I1,4)+P(I2,4))**2-(P(I1,1)+P(I2,1))**2-
45137      &        (P(I1,2)+P(I2,2))**2-(P(I1,3)+P(I2,3))**2-
45138      &        (P(I1,5)+P(I2,5))**2
45139               IF(Q2.GT.0.0D0.AND.Q2.LT.Q2MIN) THEN
45140                 Q2MIN=Q2
45141               ENDIF
45142   190       CONTINUE
45143             P(I1M,5)=Q2MIN
45144   200     CONTINUE
45145   210   CONTINUE
45146       ENDIF
45147  
45148 C...Tabulate integral for subsequent momentum shift.
45149       DO 390 IBE=1,MIN(9,MSTJ(52))
45150         IF(IBE.NE.1.AND.IBE.NE.4.AND.IBE.LE.7) GOTO 260
45151         IF(IBE.EQ.1.AND.MAX(NBE(1)-NBE(0),NBE(2)-NBE(1),NBE(3)-NBE(2))
45152      &  .LE.1) GOTO 260
45153         IF(IBE.EQ.4.AND.MAX(NBE(4)-NBE(3),NBE(5)-NBE(4),NBE(6)-NBE(5),
45154      &  NBE(7)-NBE(6)).LE.1) GOTO 260
45155         IF(IBE.GE.8.AND.NBE(IBE)-NBE(IBE-1).LE.1) GOTO 260
45156         IF(IBE.EQ.1) PMHQ=2D0*PYMASS(211)
45157         IF(IBE.EQ.4) PMHQ=2D0*PYMASS(321)
45158         IF(IBE.EQ.8) PMHQ=2D0*PYMASS(221)
45159         IF(IBE.EQ.9) PMHQ=2D0*PYMASS(331)
45160         QDEL=0.1D0*MIN(PMHQ,PARJ(93))
45161         QDEL3=0.1D0*MIN(PMHQ,PARJ(93)*3.0D0)
45162         QDELW=0.1D0*MIN(PMHQ,SIGW)
45163         QDEL3W=0.1D0*MIN(PMHQ,SIGW*3.0D0)
45164         IF(MSTJ(51).EQ.1) THEN
45165           NBIN=MIN(100,NINT(9D0*PARJ(93)/QDEL))
45166           NBIN3=MIN(100,NINT(27D0*PARJ(93)/QDEL3))
45167           NBINW=MIN(100,NINT(9D0*SIGW/QDELW))
45168           NBIN3W=MIN(100,NINT(27D0*SIGW/QDEL3W))
45169           BEEX=EXP(0.5D0*QDEL/PARJ(93))
45170           BEEX3=EXP(0.5D0*QDEL3/(3.0D0*PARJ(93)))
45171           BEEXW=EXP(0.5D0*QDELW/SIGW)
45172           BEEX3W=EXP(0.5D0*QDEL3W/(3.0D0*SIGW))
45173           BERT=EXP(-QDEL/PARJ(93))
45174           BERT3=EXP(-QDEL3/(3.0D0*PARJ(93)))
45175           BERTW=EXP(-QDELW/SIGW)
45176           BERT3W=EXP(-QDEL3W/(3.0D0*SIGW))
45177         ELSE
45178           NBIN=MIN(100,NINT(3D0*PARJ(93)/QDEL))
45179           NBIN3=MIN(100,NINT(9D0*PARJ(93)/QDEL3))
45180           NBINW=MIN(100,NINT(3D0*SIGW/QDELW))
45181           NBIN3W=MIN(100,NINT(9D0*SIGW/QDEL3W))
45182         ENDIF
45183         DO 220 IBIN=1,NBIN
45184           QBIN=QDEL*(IBIN-0.5D0)
45185           BEI(IBIN)=QDEL*(QBIN**2+QDEL**2/12D0)/SQRT(QBIN**2+PMHQ**2)
45186           IF(MSTJ(51).EQ.1) THEN
45187             BEEX=BEEX*BERT
45188             BEI(IBIN)=BEI(IBIN)*BEEX
45189           ELSE
45190             BEI(IBIN)=BEI(IBIN)*EXP(-(QBIN/PARJ(93))**2)
45191           ENDIF
45192           IF(IBIN.GE.2) BEI(IBIN)=BEI(IBIN)+BEI(IBIN-1)
45193   220   CONTINUE
45194         DO 230 IBIN=1,NBIN3
45195           QBIN=QDEL3*(IBIN-0.5D0)
45196           BEI3(IBIN)=QDEL3*(QBIN**2+QDEL3**2/12D0)/SQRT(QBIN**2+PMHQ**2)
45197           IF(MSTJ(51).EQ.1) THEN
45198             BEEX3=BEEX3*BERT3
45199             BEI3(IBIN)=BEI3(IBIN)*BEEX3
45200           ELSE
45201             BEI3(IBIN)=BEI3(IBIN)*EXP(-(QBIN/(3.0D0*PARJ(93)))**2)
45202           ENDIF
45203           IF(IBIN.GE.2) BEI3(IBIN)=BEI3(IBIN)+BEI3(IBIN-1)
45204   230   CONTINUE
45205         DO 240 IBIN=1,NBINW
45206           QBIN=QDELW*(IBIN-0.5D0)
45207           BEIW(IBIN)=QDELW*(QBIN**2+QDELW**2/12D0)/SQRT(QBIN**2+PMHQ**2)
45208           IF(MSTJ(51).EQ.1) THEN
45209             BEEXW=BEEXW*BERTW
45210             BEIW(IBIN)=BEIW(IBIN)*BEEXW
45211           ELSE
45212             BEIW(IBIN)=BEIW(IBIN)*EXP(-(QBIN/SIGW)**2)
45213           ENDIF
45214           IF(IBIN.GE.2) BEIW(IBIN)=BEIW(IBIN)+BEIW(IBIN-1)
45215   240   CONTINUE
45216         DO 250 IBIN=1,NBIN3W
45217           QBIN=QDEL3W*(IBIN-0.5D0)
45218           BEI3W(IBIN)=QDEL3W*(QBIN**2+QDEL3W**2/12D0)/
45219      &    SQRT(QBIN**2+PMHQ**2)
45220           IF(MSTJ(51).EQ.1) THEN
45221             BEEX3W=BEEX3W*BERT3W
45222             BEI3W(IBIN)=BEI3W(IBIN)*BEEX3W
45223           ELSE
45224             BEI3W(IBIN)=BEI3W(IBIN)*EXP(-(QBIN/(3.0D0*SIGW))**2)
45225           ENDIF
45226           IF(IBIN.GE.2) BEI3W(IBIN)=BEI3W(IBIN)+BEI3W(IBIN-1)
45227   250   CONTINUE
45228  
45229 C...Loop through particle pairs and find old relative momentum.
45230   260   DO 380 I1M=NBE(IBE-1)+1,NBE(IBE)-1
45231           I1=K(I1M,1)
45232           DO 370 I2M=I1M+1,NBE(IBE)
45233             IF(MSTJ(53).EQ.1.AND.K(I1M,5).NE.K(I2M,5)) GOTO 370
45234             IF(MSTJ(53).EQ.2.AND.K(I1M,5).EQ.K(I2M,5)) GOTO 370
45235             I2=K(I2M,1)
45236             Q2OLD=(P(I1,4)+P(I2,4))**2-(P(I1,1)+P(I2,1))**2-(P(I1,2)+
45237      &      P(I2,2))**2-(P(I1,3)+P(I2,3))**2-(P(I1,5)+P(I2,5))**2
45238             IF(Q2OLD.LE.0.0D0) GOTO 370
45239             QOLD=SQRT(Q2OLD)
45240  
45241 C...Calculate new relative momentum.
45242             QMOV=0.0D0
45243             QMOV3=0.0D0
45244             QMOVW=0.0D0
45245             QMOV3W=0.0D0
45246             IF(QOLD.LT.1D-3*QDEL) THEN
45247               GOTO 270
45248             ELSEIF(QOLD.LE.QDEL) THEN
45249               QMOV=QOLD/3D0
45250             ELSEIF(QOLD.LT.(NBIN-0.1D0)*QDEL) THEN
45251               RBIN=QOLD/QDEL
45252               IBIN=RBIN
45253               RINP=(RBIN**3-IBIN**3)/(3*IBIN*(IBIN+1)+1)
45254               QMOV=(BEI(IBIN)+RINP*(BEI(IBIN+1)-BEI(IBIN)))*
45255      &        SQRT(Q2OLD+PMHQ**2)/Q2OLD
45256             ELSE
45257               QMOV=BEI(NBIN)*SQRT(Q2OLD+PMHQ**2)/Q2OLD
45258             ENDIF
45259   270       Q2NEW=Q2OLD*(QOLD/(QOLD+3D0*PARJ(92)*QMOV))**(2D0/3D0)
45260             IF(QOLD.LT.1D-3*QDEL3) THEN
45261               GOTO 280
45262             ELSEIF(QOLD.LE.QDEL3) THEN
45263               QMOV3=QOLD/3D0
45264             ELSEIF(QOLD.LT.(NBIN3-0.1D0)*QDEL3) THEN
45265               RBIN3=QOLD/QDEL3
45266               IBIN3=RBIN3
45267               RINP3=(RBIN3**3-IBIN3**3)/(3*IBIN3*(IBIN3+1)+1)
45268               QMOV3=(BEI3(IBIN3)+RINP3*(BEI3(IBIN3+1)-BEI3(IBIN3)))*
45269      &        SQRT(Q2OLD+PMHQ**2)/Q2OLD
45270             ELSE
45271               QMOV3=BEI3(NBIN3)*SQRT(Q2OLD+PMHQ**2)/Q2OLD
45272             ENDIF
45273   280       Q2NEW3=Q2OLD*(QOLD/(QOLD+3D0*PARJ(92)*QMOV3))**(2D0/3D0)
45274             RSCALE=1.0D0
45275             IF(MSTJ(54).EQ.2)
45276      &      RSCALE=1.0D0-EXP(-(QOLD/(2D0*PARJ(93)))**2)
45277             IF(MSTJ(56).LE.0.OR.IWP.EQ.0.OR.IWN.EQ.0.OR.
45278      &      K(I1M,5).EQ.K(I2M,5)) GOTO 310
45279  
45280             IF(QOLD.LT.1D-3*QDELW) THEN
45281               GOTO 290
45282             ELSEIF(QOLD.LE.QDELW) THEN
45283               QMOVW=QOLD/3D0
45284             ELSEIF(QOLD.LT.(NBINW-0.1D0)*QDELW) THEN
45285               RBINW=QOLD/QDELW
45286               IBINW=RBINW
45287               RINPW=(RBINW**3-IBINW**3)/(3*IBINW*(IBINW+1)+1)
45288               QMOVW=(BEIW(IBINW)+RINPW*(BEIW(IBINW+1)-BEIW(IBINW)))*
45289      &        SQRT(Q2OLD+PMHQ**2)/Q2OLD
45290             ELSE
45291               QMOVW=BEIW(NBINW)*SQRT(Q2OLD+PMHQ**2)/Q2OLD
45292             ENDIF
45293   290       Q2NEW=Q2OLD*(QOLD/(QOLD+3D0*PARJ(92)*QMOVW))**(2D0/3D0)
45294             IF(QOLD.LT.1D-3*QDEL3W) THEN
45295               GOTO 300
45296             ELSEIF(QOLD.LE.QDEL3W) THEN
45297               QMOV3W=QOLD/3D0
45298             ELSEIF(QOLD.LT.(NBIN3W-0.1D0)*QDEL3W) THEN
45299               RBIN3W=QOLD/QDEL3W
45300               IBIN3W=RBIN3W
45301               RINP3W=(RBIN3W**3-IBIN3W**3)/(3*IBIN3W*(IBIN3W+1)+1)
45302               QMOV3W=(BEI3W(IBIN3W)+RINP3W*(BEI3W(IBIN3W+1)-
45303      &        BEI3W(IBIN3W)))*SQRT(Q2OLD+PMHQ**2)/Q2OLD
45304             ELSE
45305               QMOV3W=BEI3W(NBIN3W)*SQRT(Q2OLD+PMHQ**2)/Q2OLD
45306             ENDIF
45307   300       Q2NEW3=Q2OLD*(QOLD/(QOLD+3D0*PARJ(92)*QMOV3W))**(2D0/3D0)
45308             IF(MSTJ(54).EQ.2)
45309      &      RSCALE=1.0D0-EXP(-(QOLD/(2D0*SIGW))**2)
45310  
45311   310       CALL PYBESQ(I1,I2,NMAX,Q2OLD,Q2NEW)
45312             DO 320 J=1,3
45313               P(I1M,J)=P(I1M,J)+P(NMAX+1,J)
45314               P(I2M,J)=P(I2M,J)+P(NMAX+2,J)
45315   320       CONTINUE
45316             IF(MSTJ(54).GE.1) THEN
45317               CALL PYBESQ(I1,I2,NMAX,Q2OLD,Q2NEW3)
45318               DO 330 J=1,3
45319                 V(I1M,J)=V(I1M,J)+P(NMAX+1,J)*RSCALE
45320                 V(I2M,J)=V(I2M,J)+P(NMAX+2,J)*RSCALE
45321   330         CONTINUE
45322             ELSEIF(MSTJ(54).LE.-1) THEN
45323               EDEL=P(I1,4)+P(I2,4)-
45324      &        SQRT(MAX(Q2NEW-Q2OLD+(P(I1,4)+P(I2,4))**2,0.0D0))
45325               A2=(P(I1,1)-P(I2,1))**2+(P(I1,2)-P(I2,2))**2+
45326      &        (P(I1,3)-P(I2,3))**2
45327               WMAX=-1.0D20
45328               MI3=0
45329               MI4=0
45330               S12=SDIP(I1,I2)
45331               SM1=(P(I1,5)+SMMIN)**2
45332               DO 350 I3M=NBE(0)+1,NBE(MIN(10,MSTJ(52)+1))
45333                 IF(I3M.EQ.I1M.OR.I3M.EQ.I2M) GOTO 350
45334                 IF(MSTJ(53).EQ.1.AND.K(I3M,5).NE.K(I1M,5)) GOTO 350
45335                 IF(MSTJ(53).EQ.-2.AND.K(I1M,5).EQ.K(I2M,5).AND.
45336      &          K(I3M,5).NE.K(I1M,5)) GOTO 350
45337                 I3=K(I3M,1)
45338                 IF(K(I3,2).EQ.K(I1,2)) GOTO 350
45339                 S13=SDIP(I1,I3)
45340                 S23=SDIP(I2,I3)
45341                 SM3=(P(I3,5)+SMMIN)**2
45342                 IF(MSTJ(54).EQ.-2) THEN
45343                   WI=(MIN(S12*SM3,S13*MIN(SM1,SM3),
45344      &            S23*MIN(SM1,SM3))*SM1)
45345                 ELSE
45346                   WI=((P(I1,4)+P(I2,4)+P(I3,4))**2-
45347      &            (P(I1,3)+P(I2,3)+P(I3,3))**2-
45348      &            (P(I1,2)+P(I2,2)+P(I3,2))**2-
45349      &            (P(I1,1)+P(I2,1)+P(I3,1))**2)
45350                 ENDIF
45351                 IF(MSTJ(57).EQ.1.AND.P(I3M,5).GT.0) THEN
45352                   IF (WMAX*WI.GE.(1.0D0-EXP(-P(I3M,5)/(PARJ(93)**2))))
45353      &                 GOTO 350
45354                 ELSE
45355                   IF(WMAX*WI.GE.1.0) GOTO 350
45356                 ENDIF
45357                 DO 340 I4M=I3M+1,NBE(MIN(10,MSTJ(52)+1))
45358                   IF(I4M.EQ.I1M.OR.I4M.EQ.I2M) GOTO 340
45359                   IF(MSTJ(53).EQ.1.AND.K(I4M,5).NE.K(I1M,5)) GOTO 340
45360                   IF(MSTJ(53).EQ.-2.AND.K(I1M,5).EQ.K(I2M,5).AND.
45361      &            K(I4M,5).NE.K(I1M,5)) GOTO 340
45362                   I4=K(I4M,1)
45363                   IF(K(I3,2).EQ.K(I4,2).OR.K(I4,2).EQ.K(I1,2))
45364      &            GOTO 340
45365                   IF((P(I3,4)+P(I4,4)+EDEL)**2.LT.
45366      &            (P(I3,1)+P(I4,1))**2+(P(I3,2)+P(I4,2))**2+
45367      &            (P(I3,3)+P(I4,3))**2+(P(I3,5)+P(I4,5))**2)
45368      &            GOTO 340
45369                   IF(MSTJ(54).EQ.-2) THEN
45370                     S14=SDIP(I1,I4)
45371                     S24=SDIP(I2,I4)
45372                     S34=SDIP(I3,I4)
45373                     W=S12*MIN(MIN(S23,S24),MIN(S13,S14))*S34
45374                     W=MIN(W,S13*MIN(MIN(S23,S34),S12)*S24)
45375                     W=MIN(W,S14*MIN(MIN(S24,S34),S12)*S23)
45376                     W=MIN(W,MIN(S23,S24)*S13*S14)
45377                     W=1.0D0/W
45378                   ELSE
45379 C...weight=1-cos(theta)/mtot2
45380                     S1234=(P(I1,4)+P(I2,4)+P(I3,4)+P(I4,4))**2-
45381      &              (P(I1,3)+P(I2,3)+P(I3,3)+P(I4,3))**2-
45382      &              (P(I1,2)+P(I2,2)+P(I3,2)+P(I4,2))**2-
45383      &              (P(I1,1)+P(I2,1)+P(I3,1)+P(I4,1))**2
45384                     W=1.0D0/S1234
45385                     IF(W.LE.WMAX) GOTO 340
45386                   ENDIF
45387                   IF(MSTJ(57).EQ.1.AND.P(I3M,5).GT.0)
45388      &            W=W*(1.0D0-EXP(-P(I3M,5)/(PARJ(93)**2)))
45389                   IF(MSTJ(57).EQ.1.AND.P(I4M,5).GT.0)
45390      &            W=W*(1.0D0-EXP(-P(I4M,5)/(PARJ(93)**2)))
45391                   IF(W.LE.WMAX) GOTO 340
45392                   MI3=I3M
45393                   MI4=I4M
45394                   WMAX=W
45395   340           CONTINUE
45396   350         CONTINUE
45397               IF(MI4.EQ.0) GOTO 370
45398               I3=K(MI3,1)
45399               I4=K(MI4,1)
45400               EOLD=P(I3,4)+P(I4,4)
45401               ENEW=EOLD+EDEL
45402               P2=(P(I3,1)+P(I4,1))**2+(P(I3,2)+P(I4,2))**2+
45403      &        (P(I3,3)+P(I4,3))**2
45404               Q2NEWP=MAX(0.0D0,ENEW**2-P2-(P(I3,5)+P(I4,5))**2)
45405               Q2OLDP=MAX(0.0D0,EOLD**2-P2-(P(I3,5)+P(I4,5))**2)
45406               CALL PYBESQ(I3,I4,NMAX,Q2OLDP,Q2NEWP)
45407               DO 360 J=1,3
45408                 V(MI3,J)=V(MI3,J)+P(NMAX+1,J)
45409                 V(MI4,J)=V(MI4,J)+P(NMAX+2,J)
45410   360         CONTINUE
45411             ENDIF
45412   370     CONTINUE
45413   380   CONTINUE
45414   390 CONTINUE
45415  
45416 C...Shift momenta and recalculate energies.
45417       ESUMP=0.0D0
45418       ESUM=0.0D0
45419       PROD=0.0D0
45420       DO 420 IM=NBE(0)+1,NBE(MIN(10,MSTJ(52)+1))
45421         I=K(IM,1)
45422         ESUMP=ESUMP+P(I,4)
45423         DO 400 J=1,3
45424           P(I,J)=P(I,J)+P(IM,J)
45425   400   CONTINUE
45426         P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
45427         ESUM=ESUM+P(I,4)
45428         DO 410 J=1,3
45429           PROD=PROD+V(IM,J)*P(I,J)/P(I,4)
45430   410   CONTINUE
45431   420 CONTINUE
45432  
45433       PARJ(96)=0.0D0
45434       IF(MSTJ(54).NE.0.AND.PROD.NE.0.0D0) THEN
45435   430   ALPHA=(ESUMP-ESUM)/PROD
45436         PARJ(96)=PARJ(96)+ALPHA
45437         PROD=0.0D0
45438         ESUM=0.0D0
45439         DO 460 IM=NBE(0)+1,NBE(MIN(10,MSTJ(52)+1))
45440           I=K(IM,1)
45441           DO 440 J=1,3
45442             P(I,J)=P(I,J)+ALPHA*V(IM,J)
45443   440     CONTINUE
45444           P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
45445           ESUM=ESUM+P(I,4)
45446           DO 450 J=1,3
45447             PROD=PROD+V(IM,J)*P(I,J)/P(I,4)
45448   450     CONTINUE
45449   460   CONTINUE
45450         IF(PROD.NE.0.0D0.AND.ABS(ESUMP-ESUM)/PECM.GT.0.00001D0)
45451      &  GOTO 430
45452       ENDIF
45453  
45454 C...Rescale all momenta for energy conservation.
45455       PES=0D0
45456       PQS=0D0
45457       DO 470 I=1,N
45458         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 470
45459         PES=PES+P(I,4)
45460         PQS=PQS+P(I,5)**2/P(I,4)
45461   470 CONTINUE
45462       PARJ(95)=PES-PECM
45463       FAC=(PECM-PQS)/(PES-PQS)
45464       DO 490 I=1,N
45465         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 490
45466         DO 480 J=1,3
45467           P(I,J)=FAC*P(I,J)
45468   480   CONTINUE
45469         P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
45470   490 CONTINUE
45471  
45472 C...Boost back to correct reference frame.
45473   500 CALL PYROBO(0,0,0D0,0D0,DPS(1)/DPS(4),DPS(2)/DPS(4),DPS(3)/DPS(4))
45474       DO 510 I=1,N
45475         IF(K(I,1).LT.0) K(I,1)=-K(I,1)
45476   510 CONTINUE
45477  
45478       RETURN
45479       END
45480  
45481 C*********************************************************************
45482  
45483 C...PYBESQ
45484 C...Calculates the momentum shift in a system of two particles assuming
45485 C...the relative momentum squared should be shifted to Q2NEW. NI is the
45486 C...last position occupied in /PYJETS/.
45487  
45488       SUBROUTINE PYBESQ(I1,I2,NI,Q2OLD,Q2NEW)
45489  
45490 C...Double precision and integer declarations.
45491       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45492       IMPLICIT INTEGER(I-N)
45493       INTEGER PYK,PYCHGE,PYCOMP
45494       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
45495 C...Commonblocks.
45496       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
45497       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45498       SAVE /PYJETS/,/PYDAT1/
45499 C...Local arrays and data.
45500       DIMENSION DP(5)
45501       SAVE HC1
45502  
45503       IF(MSTJ(55).EQ.0) THEN
45504         DQ2=Q2NEW-Q2OLD
45505         DP2=(P(I1,1)-P(I2,1))**2+(P(I1,2)-P(I2,2))**2+
45506      &  (P(I1,3)-P(I2,3))**2
45507         DP12=P(I1,1)**2+P(I1,2)**2+P(I1,3)**2
45508      &  -P(I2,1)**2-P(I2,2)**2-P(I2,3)**2
45509         SE=P(I1,4)+P(I2,4)
45510         DE=P(I1,4)-P(I2,4)
45511         DQ2SE=DQ2+SE**2
45512         DA=SE*DE*DP12-DP2*DQ2SE
45513         DB=DP2*DQ2SE-DP12**2
45514         HA=(DA+SQRT(MAX(DA**2+DQ2*(DQ2+SE**2-DE**2)*DB,0D0)))/(2D0*DB)
45515         DO 100 J=1,3
45516           PD=HA*(P(I1,J)-P(I2,J))
45517           P(NI+1,J)=PD
45518           P(NI+2,J)=-PD
45519   100   CONTINUE
45520         RETURN
45521       ENDIF
45522  
45523       K(NI+1,1)=1
45524       K(NI+2,1)=1
45525       DO 110 J=1,5
45526         P(NI+1,J)=P(I1,J)
45527         P(NI+2,J)=P(I2,J)
45528         DP(J)=P(I1,J)+P(I2,J)
45529   110 CONTINUE
45530  
45531 C...Boost to cms and rotate first particle to z-axis
45532       CALL PYROBO(NI+1,NI+2,0.0D0,0.0D0,
45533      &-DP(1)/DP(4),-DP(2)/DP(4),-DP(3)/DP(4))
45534       PHI=PYANGL(P(NI+1,1),P(NI+1,2))
45535       THE=PYANGL(P(NI+1,3),SQRT(P(NI+1,1)**2+P(NI+1,2)**2))
45536       S=Q2NEW+(P(I1,5)+P(I2,5))**2
45537       PZ=0.5D0*SQRT(Q2NEW*(S-(P(I1,5)-P(I2,5))**2)/S)
45538       P(NI+1,1)=0.0D0
45539       P(NI+1,2)=0.0D0
45540       P(NI+1,3)=PZ
45541       P(NI+1,4)=SQRT(PZ**2+P(I1,5)**2)
45542       P(NI+2,1)=0.0D0
45543       P(NI+2,2)=0.0D0
45544       P(NI+2,3)=-PZ
45545       P(NI+2,4)=SQRT(PZ**2+P(I2,5)**2)
45546       DP(4)=SQRT(DP(1)**2+DP(2)**2+DP(3)**2+S)
45547       CALL PYROBO(NI+1,NI+2,THE,PHI,
45548      &DP(1)/DP(4),DP(2)/DP(4),DP(3)/DP(4))
45549  
45550       DO 120 J=1,3
45551         P(NI+1,J)=P(NI+1,J)-P(I1,J)
45552         P(NI+2,J)=P(NI+2,J)-P(I2,J)
45553   120 CONTINUE
45554  
45555       RETURN
45556       END
45557  
45558 C*********************************************************************
45559  
45560 C...PYMASS
45561 C...Gives the mass of a particle/parton.
45562  
45563       FUNCTION PYMASS(KF)
45564  
45565 C...Double precision and integer declarations.
45566       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45567       IMPLICIT INTEGER(I-N)
45568       INTEGER PYK,PYCHGE,PYCOMP
45569 C...Commonblocks.
45570       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45571       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45572       SAVE /PYDAT1/,/PYDAT2/
45573  
45574 C...Reset variables. Compressed code. Special case for popcorn diquarks.
45575       PYMASS=0D0
45576       KFA=IABS(KF)
45577       KC=PYCOMP(KF)
45578       IF(KC.EQ.0) THEN
45579         MSTJ(93)=0
45580         RETURN
45581       ENDIF
45582  
45583 C...Guarantee use of constituent masses for internal checks.
45584       IF((MSTJ(93).EQ.1.OR.MSTJ(93).EQ.2).AND.
45585      &(KFA.LE.10.OR.MOD(KFA/10,10).EQ.0)) THEN
45586         PARF(106)=PMAS(6,1)
45587         PARF(107)=PMAS(7,1)
45588         PARF(108)=PMAS(8,1)
45589         IF(KFA.LE.10) THEN
45590           PYMASS=PARF(100+KFA)
45591           IF(MSTJ(93).EQ.2) PYMASS=MAX(0D0,PYMASS-PARF(121))
45592         ELSEIF(MSTJ(93).EQ.1) THEN
45593           PYMASS=PARF(100+MOD(KFA/1000,10))+PARF(100+MOD(KFA/100,10))
45594         ELSE
45595           PYMASS=MAX(0D0,PMAS(KC,1)-PARF(122)-2D0*PARF(112)/3D0)
45596         ENDIF
45597  
45598 C...Other masses can be read directly off table.
45599       ELSE
45600         PYMASS=PMAS(KC,1)
45601       ENDIF
45602  
45603 C...Optional mass broadening according to truncated Breit-Wigner
45604 C...(either in m or in m^2).
45605       IF(MSTJ(24).GE.1.AND.PMAS(KC,2).GT.1D-4) THEN
45606         IF(MSTJ(24).EQ.1.OR.(MSTJ(24).EQ.2.AND.KFA.GT.100)) THEN
45607           PYMASS=PYMASS+0.5D0*PMAS(KC,2)*TAN((2D0*PYR(0)-1D0)*
45608      &    ATAN(2D0*PMAS(KC,3)/PMAS(KC,2)))
45609         ELSE
45610           PM0=PYMASS
45611           PMLOW=ATAN((MAX(0D0,PM0-PMAS(KC,3))**2-PM0**2)/
45612      &    (PM0*PMAS(KC,2)))
45613           PMUPP=ATAN(((PM0+PMAS(KC,3))**2-PM0**2)/(PM0*PMAS(KC,2)))
45614           PYMASS=SQRT(MAX(0D0,PM0**2+PM0*PMAS(KC,2)*TAN(PMLOW+
45615      &    (PMUPP-PMLOW)*PYR(0))))
45616         ENDIF
45617       ENDIF
45618       MSTJ(93)=0
45619  
45620       RETURN
45621       END
45622  
45623 C*********************************************************************
45624  
45625 C...PYMRUN
45626 C...Gives the running, current-algebra mass of a d, u, s, c or b quark,
45627 C...for Higgs couplings. Everything else sent on to PYMASS.
45628  
45629       FUNCTION PYMRUN(KF,Q2)
45630  
45631 C...Double precision and integer declarations.
45632       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45633       IMPLICIT INTEGER(I-N)
45634       INTEGER PYK,PYCHGE,PYCOMP
45635 C...Commonblocks.
45636       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45637       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45638       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
45639       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/
45640  
45641 C...Most masses not handled here.
45642       KFA=IABS(KF)
45643       IF(KFA.EQ.0.OR.KFA.GT.5) THEN
45644         PYMRUN=PYMASS(KF)
45645
45646 C...Current-algebra masses, but no Q2 dependence.
45647       ELSEIF(MSTP(37).NE.1.OR.MSTP(2).LE.0) THEN
45648         PYMRUN=PARF(90+KFA)
45649
45650 C...Running current-algebra masses.
45651       ELSE
45652         AS=PYALPS(Q2)
45653         PYMRUN=PARF(90+KFA)*
45654      &  (LOG(MAX(4D0,PARP(37)**2*PARF(90+KFA)**2/PARU(117)**2))/
45655      &  LOG(MAX(4D0,Q2/PARU(117)**2)))**(12D0/(33D0-2D0*MSTU(118)))
45656       ENDIF
45657
45658       RETURN
45659       END
45660  
45661 C*********************************************************************
45662  
45663 C...PYNAME
45664 C...Gives the particle/parton name as a character string.
45665  
45666       SUBROUTINE PYNAME(KF,CHAU)
45667  
45668 C...Double precision and integer declarations.
45669       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45670       IMPLICIT INTEGER(I-N)
45671       INTEGER PYK,PYCHGE,PYCOMP
45672 C...Commonblocks.
45673       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45674       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45675       COMMON/PYDAT4/CHAF(500,2)
45676       CHARACTER CHAF*16
45677       SAVE /PYDAT1/,/PYDAT2/,/PYDAT4/
45678 C...Local character variable.
45679       CHARACTER CHAU*16
45680  
45681 C...Read out code with distinction particle/antiparticle.
45682       CHAU=' '
45683       KC=PYCOMP(KF)
45684       IF(KC.NE.0) CHAU=CHAF(KC,(3-ISIGN(1,KF))/2)
45685  
45686  
45687       RETURN
45688       END
45689  
45690 C*********************************************************************
45691  
45692 C...PYCHGE
45693 C...Gives three times the charge for a particle/parton.
45694  
45695       FUNCTION PYCHGE(KF)
45696  
45697 C...Double precision and integer declarations.
45698       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45699       IMPLICIT INTEGER(I-N)
45700       INTEGER PYK,PYCHGE,PYCOMP
45701 C...Commonblocks.
45702       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45703       SAVE /PYDAT2/
45704  
45705 C...Read out charge and change sign for antiparticle.
45706       PYCHGE=0
45707       KC=PYCOMP(KF)
45708       IF(KC.NE.0) PYCHGE=KCHG(KC,1)*ISIGN(1,KF)
45709  
45710       RETURN
45711       END
45712  
45713 C*********************************************************************
45714  
45715 C...PYCOMP
45716 C...Compress the standard KF codes for use in mass and decay arrays;
45717 C...also checks whether a given code actually is defined.
45718  
45719       FUNCTION PYCOMP(KF)
45720  
45721 C...Double precision and integer declarations.
45722       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45723       IMPLICIT INTEGER(I-N)
45724       INTEGER PYK,PYCHGE,PYCOMP
45725 C...Commonblocks.
45726       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45727       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45728       SAVE /PYDAT1/,/PYDAT2/
45729 C...Local arrays and saved data.
45730       DIMENSION KFORD(100:500),KCORD(101:500)
45731       SAVE KFORD,KCORD,NFORD,KFLAST,KCLAST
45732  
45733 C...Whenever necessary reorder codes for faster search.
45734       IF(MSTU(20).EQ.0) THEN
45735         NFORD=100
45736         KFORD(100)=0
45737         DO 120 I=101,500
45738           KFA=KCHG(I,4)
45739           IF(KFA.LE.100) GOTO 120
45740           NFORD=NFORD+1
45741           DO 100 I1=NFORD-1,0,-1
45742             IF(KFA.GE.KFORD(I1)) GOTO 110
45743             KFORD(I1+1)=KFORD(I1)
45744             KCORD(I1+1)=KCORD(I1)
45745   100     CONTINUE
45746   110     KFORD(I1+1)=KFA
45747           KCORD(I1+1)=I
45748   120   CONTINUE
45749         MSTU(20)=1
45750         KFLAST=0
45751         KCLAST=0
45752       ENDIF
45753  
45754 C...Fast action if same code as in latest call.
45755       IF(KF.EQ.KFLAST) THEN
45756         PYCOMP=KCLAST
45757         RETURN
45758       ENDIF
45759  
45760 C...Starting values. Remove internal diquark flags.
45761       PYCOMP=0
45762       KFA=IABS(KF)
45763       IF(MOD(KFA/10,10).EQ.0.AND.KFA.LT.100000
45764      &     .AND.MOD(KFA/1000,10).GT.0) KFA=MOD(KFA,10000)
45765  
45766 C...Simple cases: direct translation.
45767       IF(KFA.GT.KFORD(NFORD)) THEN
45768       ELSEIF(KFA.LE.100) THEN
45769         PYCOMP=KFA
45770  
45771 C...Else binary search.
45772       ELSE
45773         IMIN=100
45774         IMAX=NFORD+1
45775   130   IAVG=(IMIN+IMAX)/2
45776         IF(KFORD(IAVG).GT.KFA) THEN
45777           IMAX=IAVG
45778           IF(IMAX.GT.IMIN+1) GOTO 130
45779         ELSEIF(KFORD(IAVG).LT.KFA) THEN
45780           IMIN=IAVG
45781           IF(IMAX.GT.IMIN+1) GOTO 130
45782         ELSE
45783           PYCOMP=KCORD(IAVG)
45784         ENDIF
45785       ENDIF
45786  
45787 C...Check if antiparticle allowed.
45788       IF(PYCOMP.NE.0.AND.KF.LT.0) THEN
45789         IF(KCHG(PYCOMP,3).EQ.0) PYCOMP=0
45790       ENDIF
45791  
45792 C...Save codes for possible future fast action.
45793       KFLAST=KF
45794       KCLAST=PYCOMP
45795  
45796       RETURN
45797       END
45798  
45799 C*********************************************************************
45800  
45801 C...PYERRM
45802 C...Informs user of errors in program execution.
45803  
45804       SUBROUTINE PYERRM(MERR,CHMESS)
45805  
45806 C...Double precision and integer declarations.
45807       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45808       IMPLICIT INTEGER(I-N)
45809       INTEGER PYK,PYCHGE,PYCOMP
45810 C...Commonblocks.
45811       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
45812       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45813       SAVE /PYJETS/,/PYDAT1/
45814 C...Local character variable.
45815       CHARACTER CHMESS*(*)
45816  
45817 C...Write first few warnings, then be silent.
45818       IF(MERR.LE.10) THEN
45819         MSTU(27)=MSTU(27)+1
45820         MSTU(28)=MERR
45821         IF(MSTU(25).EQ.1.AND.MSTU(27).LE.MSTU(26)) WRITE(MSTU(11),5000)
45822      &  MERR,MSTU(31),CHMESS
45823  
45824 C...Write first few errors, then be silent or stop program.
45825       ELSEIF(MERR.LE.20) THEN
45826         MSTU(23)=MSTU(23)+1
45827         MSTU(24)=MERR-10
45828         IF(MSTU(21).GE.1.AND.MSTU(23).LE.MSTU(22)) WRITE(MSTU(11),5100)
45829      &  MERR-10,MSTU(31),CHMESS
45830         IF(MSTU(21).GE.2.AND.MSTU(23).GT.MSTU(22)) THEN
45831           WRITE(MSTU(11),5100) MERR-10,MSTU(31),CHMESS
45832           WRITE(MSTU(11),5200)
45833           IF(MERR.NE.17) CALL PYLIST(2)
45834           STOP
45835         ENDIF
45836  
45837 C...Stop program in case of irreparable error.
45838       ELSE
45839         WRITE(MSTU(11),5300) MERR-20,MSTU(31),CHMESS
45840         STOP
45841       ENDIF
45842  
45843 C...Formats for output.
45844  5000 FORMAT(/5X,'Advisory warning type',I2,' given after',I9,
45845      &' PYEXEC calls:'/5X,A)
45846  5100 FORMAT(/5X,'Error type',I2,' has occured after',I9,
45847      &' PYEXEC calls:'/5X,A)
45848  5200 FORMAT(5X,'Execution will be stopped after listing of last ',
45849      &'event!')
45850  5300 FORMAT(/5X,'Fatal error type',I2,' has occured after',I9,
45851      &' PYEXEC calls:'/5X,A/5X,'Execution will now be stopped!')
45852  
45853       RETURN
45854       END
45855  
45856 C*********************************************************************
45857  
45858 C...PYALEM
45859 C...Calculates the running alpha_electromagnetic.
45860  
45861       FUNCTION PYALEM(Q2)
45862  
45863 C...Double precision and integer declarations.
45864       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45865       IMPLICIT INTEGER(I-N)
45866       INTEGER PYK,PYCHGE,PYCOMP
45867 C...Commonblocks.
45868       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45869       SAVE /PYDAT1/
45870  
45871 C...Calculate real part of photon vacuum polarization.
45872 C...For leptons simplify by using asymptotic (Q^2 >> m^2) expressions.
45873 C...For hadrons use parametrization of H. Burkhardt et al.
45874 C...See R. Kleiss et al, CERN 89-08, vol. 3, pp. 129-131.
45875       AEMPI=PARU(101)/(3D0*PARU(1))
45876       IF(MSTU(101).LE.0.OR.Q2.LT.2D-6) THEN
45877         RPIGG=0D0
45878       ELSEIF(MSTU(101).EQ.2.AND.Q2.LT.PARU(104)) THEN
45879         RPIGG=0D0
45880       ELSEIF(MSTU(101).EQ.2) THEN
45881         RPIGG=1D0-PARU(101)/PARU(103)
45882       ELSEIF(Q2.LT.0.09D0) THEN
45883         RPIGG=AEMPI*(13.4916D0+LOG(Q2))+0.00835D0*LOG(1D0+Q2)
45884       ELSEIF(Q2.LT.9D0) THEN
45885         RPIGG=AEMPI*(16.3200D0+2D0*LOG(Q2))+
45886      &  0.00238D0*LOG(1D0+3.927D0*Q2)
45887       ELSEIF(Q2.LT.1D4) THEN
45888         RPIGG=AEMPI*(13.4955D0+3D0*LOG(Q2))+0.00165D0+
45889      &  0.00299D0*LOG(1D0+Q2)
45890       ELSE
45891         RPIGG=AEMPI*(13.4955D0+3D0*LOG(Q2))+0.00221D0+
45892      &  0.00293D0*LOG(1D0+Q2)
45893       ENDIF
45894  
45895 C...Calculate running alpha_em.
45896       PYALEM=PARU(101)/(1D0-RPIGG)
45897       PARU(108)=PYALEM
45898  
45899       RETURN
45900       END
45901  
45902 C*********************************************************************
45903  
45904 C...PYALPS
45905 C...Gives the value of alpha_strong.
45906  
45907       FUNCTION PYALPS(Q2)
45908  
45909 C...Double precision and integer declarations.
45910       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45911       IMPLICIT INTEGER(I-N)
45912       INTEGER PYK,PYCHGE,PYCOMP
45913 C...Commonblocks.
45914       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45915       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45916       SAVE /PYDAT1/,/PYDAT2/
45917  
45918 C...Constant alpha_strong trivial. Pick artificial Lambda.
45919       IF(MSTU(111).LE.0) THEN
45920         PYALPS=PARU(111)
45921         MSTU(118)=MSTU(112)
45922         PARU(117)=0.2D0
45923         IF(Q2.GT.0.04D0) PARU(117)=SQRT(Q2)*EXP(-6D0*PARU(1)/
45924      &  ((33D0-2D0*MSTU(112))*PARU(111)))
45925         PARU(118)=PARU(111)
45926         RETURN
45927       ENDIF
45928  
45929 C...Find effective Q2, number of flavours and Lambda.
45930       Q2EFF=Q2
45931       IF(MSTU(115).GE.2) Q2EFF=MAX(Q2,PARU(114))
45932       NF=MSTU(112)
45933       ALAM2=PARU(112)**2
45934   100 IF(NF.GT.MAX(2,MSTU(113))) THEN
45935         Q2THR=PARU(113)*PMAS(NF,1)**2
45936         IF(Q2EFF.LT.Q2THR) THEN
45937           NF=NF-1
45938           ALAM2=ALAM2*(Q2THR/ALAM2)**(2D0/(33D0-2D0*NF))
45939           GOTO 100
45940         ENDIF
45941       ENDIF
45942   110 IF(NF.LT.MIN(8,MSTU(114))) THEN
45943         Q2THR=PARU(113)*PMAS(NF+1,1)**2
45944         IF(Q2EFF.GT.Q2THR) THEN
45945           NF=NF+1
45946           ALAM2=ALAM2*(ALAM2/Q2THR)**(2D0/(33D0-2D0*NF))
45947           GOTO 110
45948         ENDIF
45949       ENDIF
45950       IF(MSTU(115).EQ.1) Q2EFF=Q2EFF+ALAM2
45951       PARU(117)=SQRT(ALAM2)
45952  
45953 C...Evaluate first or second order alpha_strong.
45954       B0=(33D0-2D0*NF)/6D0
45955       ALGQ=LOG(MAX(1.0001D0,Q2EFF/ALAM2))
45956       IF(MSTU(111).EQ.1) THEN
45957         PYALPS=MIN(PARU(115),PARU(2)/(B0*ALGQ))
45958       ELSE
45959         B1=(153D0-19D0*NF)/6D0
45960         PYALPS=MIN(PARU(115),PARU(2)/(B0*ALGQ)*(1D0-B1*LOG(ALGQ)/
45961      &  (B0**2*ALGQ)))
45962       ENDIF
45963       MSTU(118)=NF
45964       PARU(118)=PYALPS
45965  
45966       RETURN
45967       END
45968  
45969 C*********************************************************************
45970  
45971 C...PYANGL
45972 C...Reconstructs an angle from given x and y coordinates.
45973  
45974       FUNCTION PYANGL(X,Y)
45975  
45976 C...Double precision and integer declarations.
45977       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45978       IMPLICIT INTEGER(I-N)
45979       INTEGER PYK,PYCHGE,PYCOMP
45980 C...Commonblocks.
45981       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45982       SAVE /PYDAT1/
45983  
45984       PYANGL=0D0
45985       R=SQRT(X**2+Y**2)
45986       IF(R.LT.1D-20) RETURN
45987       IF(ABS(X)/R.LT.0.8D0) THEN
45988         PYANGL=SIGN(ACOS(X/R),Y)
45989       ELSE
45990         PYANGL=ASIN(Y/R)
45991         IF(X.LT.0D0.AND.PYANGL.GE.0D0) THEN
45992           PYANGL=PARU(1)-PYANGL
45993         ELSEIF(X.LT.0D0) THEN
45994           PYANGL=-PARU(1)-PYANGL
45995         ENDIF
45996       ENDIF
45997  
45998       RETURN
45999       END
46000  
46001 *C*********************************************************************
46002
46003 *C...PYR
46004 *C...Generates random numbers uniformly distributed between
46005 *C...0 and 1, excluding the endpoints.
46006
46007 *      FUNCTION PYR(IDUMMY)
46008
46009 *C...Double precision and integer declarations.
46010 *      IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46011 *      IMPLICIT INTEGER(I-N)
46012 *      INTEGER PYK,PYCHGE,PYCOMP
46013 *C...Commonblocks.
46014 *      COMMON/PYDATR/MRPY(6),RRPY(100)
46015 *      SAVE /PYDATR/
46016 *C...Equivalence between commonblock and local variables.
46017 *      EQUIVALENCE (MRPY1,MRPY(1)),(MRPY2,MRPY(2)),(MRPY3,MRPY(3)),
46018 *     &(MRPY4,MRPY(4)),(MRPY5,MRPY(5)),(MRPY6,MRPY(6)),
46019 *     &(RRPY98,RRPY(98)),(RRPY99,RRPY(99)),(RRPY00,RRPY(100))
46020
46021 *C...Initialize generation from given seed.
46022 *      IF(MRPY2.EQ.0) THEN
46023 *        IJ=MOD(MRPY1/30082,31329)
46024 *        KL=MOD(MRPY1,30082)
46025 *        I=MOD(IJ/177,177)+2
46026 *        J=MOD(IJ,177)+2
46027 *        K=MOD(KL/169,178)+1
46028 *        L=MOD(KL,169)
46029 *        DO 110 II=1,97
46030 *          S=0D0
46031 *          T=0.5D0
46032 *          DO 100 JJ=1,48
46033 *            M=MOD(MOD(I*J,179)*K,179)
46034 *            I=J
46035 *            J=K
46036 *            K=M
46037 *            L=MOD(53*L+1,169)
46038 *            IF(MOD(L*M,64).GE.32) S=S+T
46039 *            T=0.5D0*T
46040 *  100     CONTINUE
46041 *          RRPY(II)=S
46042 *  110   CONTINUE
46043 *        TWOM24=1D0
46044 *        DO 120 I24=1,24
46045 *          TWOM24=0.5D0*TWOM24
46046 *  120   CONTINUE
46047 *        RRPY98=362436D0*TWOM24
46048 *        RRPY99=7654321D0*TWOM24
46049 *        RRPY00=16777213D0*TWOM24
46050 *        MRPY2=1
46051 *        MRPY3=0
46052 *        MRPY4=97
46053 *        MRPY5=33
46054 *      ENDIF
46055
46056 *C...Generate next random number.
46057 *  130 RUNI=RRPY(MRPY4)-RRPY(MRPY5)
46058 *      IF(RUNI.LT.0D0) RUNI=RUNI+1D0
46059 *      RRPY(MRPY4)=RUNI
46060 *      MRPY4=MRPY4-1
46061 *      IF(MRPY4.EQ.0) MRPY4=97
46062 *      MRPY5=MRPY5-1
46063 *      IF(MRPY5.EQ.0) MRPY5=97
46064 *      RRPY98=RRPY98-RRPY99
46065 *      IF(RRPY98.LT.0D0) RRPY98=RRPY98+RRPY00
46066 *      RUNI=RUNI-RRPY98
46067 *      IF(RUNI.LT.0D0) RUNI=RUNI+1D0
46068 *      IF(RUNI.LE.0D0.OR.RUNI.GE.1D0) GOTO 130
46069
46070 *C...Update counters. Random number to output.
46071 *      MRPY3=MRPY3+1
46072 *      IF(MRPY3.EQ.1000000000) THEN
46073 *        MRPY2=MRPY2+1
46074 *        MRPY3=0
46075 *      ENDIF
46076 *      PYR=RUNI
46077
46078 *      RETURN
46079 *      END
46080
46081 *C*********************************************************************
46082
46083 *C...PYRGET
46084 *C...Dumps the state of the random number generator on a file
46085 *C...for subsequent startup from this state onwards.
46086
46087 *      SUBROUTINE PYRGET(LFN,MOVE)
46088
46089 *C...Double precision and integer declarations.
46090 *      IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46091 *      IMPLICIT INTEGER(I-N)
46092 *      INTEGER PYK,PYCHGE,PYCOMP
46093 *C...Commonblocks.
46094 *      COMMON/PYDATR/MRPY(6),RRPY(100)
46095 *      SAVE /PYDATR/
46096 *C...Local character variable.
46097 *      CHARACTER CHERR*8
46098
46099 *C...Backspace required number of records (or as many as there are).
46100 *      IF(MOVE.LT.0) THEN
46101 *        NBCK=MIN(MRPY(6),-MOVE)
46102 *        DO 100 IBCK=1,NBCK
46103 *          BACKSPACE(LFN,ERR=110,IOSTAT=IERR)
46104 *  100   CONTINUE
46105 *        MRPY(6)=MRPY(6)-NBCK
46106 *      ENDIF
46107
46108 *C...Unformatted write on unit LFN.
46109 *      WRITE(LFN,ERR=110,IOSTAT=IERR) (MRPY(I1),I1=1,5),
46110 *     &(RRPY(I2),I2=1,100)
46111 *      MRPY(6)=MRPY(6)+1
46112 *      RETURN
46113
46114 *C...Write error.
46115 *  110 WRITE(CHERR,'(I8)') IERR
46116 *      CALL PYERRM(18,'(PYRGET:) error when accessing file, IOSTAT ='//
46117 *     &CHERR)
46118
46119 *      RETURN
46120 *      END
46121
46122 *C*********************************************************************
46123
46124 *C...PYRSET
46125 *C...Reads a state of the random number generator from a file
46126 *C...for subsequent generation from this state onwards.
46127
46128 *      SUBROUTINE PYRSET(LFN,MOVE)
46129
46130 *C...Double precision and integer declarations.
46131 *      IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46132 *      IMPLICIT INTEGER(I-N)
46133 *      INTEGER PYK,PYCHGE,PYCOMP
46134 *C...Commonblocks.
46135 *      COMMON/PYDATR/MRPY(6),RRPY(100)
46136 *      SAVE /PYDATR/
46137 *C...Local character variable.
46138 *      CHARACTER CHERR*8
46139
46140 *C...Backspace required number of records (or as many as there are).
46141 *      IF(MOVE.LT.0) THEN
46142 *        NBCK=MIN(MRPY(6),-MOVE)
46143 *        DO 100 IBCK=1,NBCK
46144 *          BACKSPACE(LFN,ERR=120,IOSTAT=IERR)
46145 *  100   CONTINUE
46146 *        MRPY(6)=MRPY(6)-NBCK
46147 *      ENDIF
46148
46149 *C...Unformatted read from unit LFN.
46150 *      NFOR=1+MAX(0,MOVE)
46151 *      DO 110 IFOR=1,NFOR
46152 *        READ(LFN,ERR=120,IOSTAT=IERR) (MRPY(I1),I1=1,5),
46153 *     &  (RRPY(I2),I2=1,100)
46154 *  110 CONTINUE
46155 *      MRPY(6)=MRPY(6)+NFOR
46156 *      RETURN
46157
46158 *C...Write error.
46159 *  120 WRITE(CHERR,'(I8)') IERR
46160 *      CALL PYERRM(18,'(PYRSET:) error when accessing file, IOSTAT ='//
46161 *     &CHERR)
46162
46163 *      RETURN
46164 *      END
46165
46166 C*********************************************************************
46167  
46168 C...PYROBO
46169 C...Performs rotations and boosts.
46170  
46171       SUBROUTINE PYROBO(IMI,IMA,THE,PHI,BEX,BEY,BEZ)
46172  
46173 C...Double precision and integer declarations.
46174       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46175       IMPLICIT INTEGER(I-N)
46176       INTEGER PYK,PYCHGE,PYCOMP
46177 C...Commonblocks.
46178       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
46179       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
46180       SAVE /PYJETS/,/PYDAT1/
46181 C...Local arrays.
46182       DIMENSION ROT(3,3),PR(3),VR(3),DP(4),DV(4)
46183  
46184 C...Find and check range of rotation/boost.
46185       IMIN=IMI
46186       IF(IMIN.LE.0) IMIN=1
46187       IF(MSTU(1).GT.0) IMIN=MSTU(1)
46188       IMAX=IMA
46189       IF(IMAX.LE.0) IMAX=N
46190       IF(MSTU(2).GT.0) IMAX=MSTU(2)
46191       IF(IMIN.GT.MSTU(4).OR.IMAX.GT.MSTU(4)) THEN
46192         CALL PYERRM(11,'(PYROBO:) range outside PYJETS memory')
46193         RETURN
46194       ENDIF
46195  
46196 C...Optional resetting of V (when not set before.)
46197       IF(MSTU(33).NE.0) THEN
46198         DO 110 I=MIN(IMIN,MSTU(4)),MIN(IMAX,MSTU(4))
46199           DO 100 J=1,5
46200             V(I,J)=0D0
46201   100     CONTINUE
46202   110   CONTINUE
46203         MSTU(33)=0
46204       ENDIF
46205  
46206 C...Rotate, typically from z axis to direction (theta,phi).
46207       IF(THE**2+PHI**2.GT.1D-20) THEN
46208         ROT(1,1)=COS(THE)*COS(PHI)
46209         ROT(1,2)=-SIN(PHI)
46210         ROT(1,3)=SIN(THE)*COS(PHI)
46211         ROT(2,1)=COS(THE)*SIN(PHI)
46212         ROT(2,2)=COS(PHI)
46213         ROT(2,3)=SIN(THE)*SIN(PHI)
46214         ROT(3,1)=-SIN(THE)
46215         ROT(3,2)=0D0
46216         ROT(3,3)=COS(THE)
46217         DO 140 I=IMIN,IMAX
46218           IF(K(I,1).LE.0) GOTO 140
46219           DO 120 J=1,3
46220             PR(J)=P(I,J)
46221             VR(J)=V(I,J)
46222   120     CONTINUE
46223           DO 130 J=1,3
46224             P(I,J)=ROT(J,1)*PR(1)+ROT(J,2)*PR(2)+ROT(J,3)*PR(3)
46225             V(I,J)=ROT(J,1)*VR(1)+ROT(J,2)*VR(2)+ROT(J,3)*VR(3)
46226   130     CONTINUE
46227   140   CONTINUE
46228       ENDIF
46229  
46230 C...Boost, typically from rest to momentum/energy=beta.
46231       IF(BEX**2+BEY**2+BEZ**2.GT.1D-20) THEN
46232         DBX=BEX
46233         DBY=BEY
46234         DBZ=BEZ
46235         DB=SQRT(DBX**2+DBY**2+DBZ**2)
46236         EPS1=1D0-1D-12
46237         IF(DB.GT.EPS1) THEN
46238 C...Rescale boost vector if too close to unity.
46239           CALL PYERRM(3,'(PYROBO:) boost vector too large')
46240           DBX=DBX*(EPS1/DB)
46241           DBY=DBY*(EPS1/DB)
46242           DBZ=DBZ*(EPS1/DB)
46243           DB=EPS1
46244         ENDIF
46245         DGA=1D0/SQRT(1D0-DB**2)
46246         DO 160 I=IMIN,IMAX
46247           IF(K(I,1).LE.0) GOTO 160
46248           DO 150 J=1,4
46249             DP(J)=P(I,J)
46250             DV(J)=V(I,J)
46251   150     CONTINUE
46252           DBP=DBX*DP(1)+DBY*DP(2)+DBZ*DP(3)
46253           DGABP=DGA*(DGA*DBP/(1D0+DGA)+DP(4))
46254           P(I,1)=DP(1)+DGABP*DBX
46255           P(I,2)=DP(2)+DGABP*DBY
46256           P(I,3)=DP(3)+DGABP*DBZ
46257           P(I,4)=DGA*(DP(4)+DBP)
46258           DBV=DBX*DV(1)+DBY*DV(2)+DBZ*DV(3)
46259           DGABV=DGA*(DGA*DBV/(1D0+DGA)+DV(4))
46260           V(I,1)=DV(1)+DGABV*DBX
46261           V(I,2)=DV(2)+DGABV*DBY
46262           V(I,3)=DV(3)+DGABV*DBZ
46263           V(I,4)=DGA*(DV(4)+DBV)
46264   160   CONTINUE
46265       ENDIF
46266  
46267       RETURN
46268       END
46269  
46270 C*********************************************************************
46271  
46272 C...PYEDIT
46273 C...Performs global manipulations on the event record, in particular
46274 C...to exclude unstable or undetectable partons/particles.
46275  
46276       SUBROUTINE PYEDIT(MEDIT)
46277  
46278 C...Double precision and integer declarations.
46279       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46280       IMPLICIT INTEGER(I-N)
46281       INTEGER PYK,PYCHGE,PYCOMP
46282 C...Commonblocks.
46283       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
46284       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
46285       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
46286       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
46287 C...Local arrays.
46288       DIMENSION NS(2),PTS(2),PLS(2)
46289  
46290 C...Remove unwanted partons/particles.
46291       IF((MEDIT.GE.0.AND.MEDIT.LE.3).OR.MEDIT.EQ.5) THEN
46292         IMAX=N
46293         IF(MSTU(2).GT.0) IMAX=MSTU(2)
46294         I1=MAX(1,MSTU(1))-1
46295         DO 110 I=MAX(1,MSTU(1)),IMAX
46296           IF(K(I,1).EQ.0.OR.K(I,1).GT.20) GOTO 110
46297           IF(MEDIT.EQ.1) THEN
46298             IF(K(I,1).GT.10) GOTO 110
46299           ELSEIF(MEDIT.EQ.2) THEN
46300             IF(K(I,1).GT.10) GOTO 110
46301             KC=PYCOMP(K(I,2))
46302             IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.KC.EQ.18)
46303      &      GOTO 110
46304           ELSEIF(MEDIT.EQ.3) THEN
46305             IF(K(I,1).GT.10) GOTO 110
46306             KC=PYCOMP(K(I,2))
46307             IF(KC.EQ.0) GOTO 110
46308             IF(KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0) GOTO 110
46309           ELSEIF(MEDIT.EQ.5) THEN
46310             IF(K(I,1).EQ.13.OR.K(I,1).EQ.14) GOTO 110
46311             KC=PYCOMP(K(I,2))
46312             IF(KC.EQ.0) GOTO 110
46313             IF(K(I,1).GE.11.AND.KCHG(KC,2).EQ.0) GOTO 110
46314           ENDIF
46315  
46316 C...Pack remaining partons/particles. Origin no longer known.
46317           I1=I1+1
46318           DO 100 J=1,5
46319             K(I1,J)=K(I,J)
46320             P(I1,J)=P(I,J)
46321             V(I1,J)=V(I,J)
46322   100     CONTINUE
46323           K(I1,3)=0
46324   110   CONTINUE
46325         IF(I1.LT.N) MSTU(3)=0
46326         IF(I1.LT.N) MSTU(70)=0
46327         N=I1
46328  
46329 C...Selective removal of class of entries. New position of retained.
46330       ELSEIF(MEDIT.GE.11.AND.MEDIT.LE.15) THEN
46331         I1=0
46332         DO 120 I=1,N
46333           K(I,3)=MOD(K(I,3),MSTU(5))
46334           IF(MEDIT.EQ.11.AND.K(I,1).LT.0) GOTO 120
46335           IF(MEDIT.EQ.12.AND.K(I,1).EQ.0) GOTO 120
46336           IF(MEDIT.EQ.13.AND.(K(I,1).EQ.11.OR.K(I,1).EQ.12.OR.
46337      &    K(I,1).EQ.15).AND.K(I,2).NE.94) GOTO 120
46338           IF(MEDIT.EQ.14.AND.(K(I,1).EQ.13.OR.K(I,1).EQ.14.OR.
46339      &    K(I,2).EQ.94)) GOTO 120
46340           IF(MEDIT.EQ.15.AND.K(I,1).GE.21) GOTO 120
46341           I1=I1+1
46342           K(I,3)=K(I,3)+MSTU(5)*I1
46343   120   CONTINUE
46344  
46345 C...Find new event history information and replace old.
46346         DO 140 I=1,N
46347           IF(K(I,1).LE.0.OR.K(I,1).GT.20.OR.K(I,3)/MSTU(5).EQ.0)
46348      &    GOTO 140
46349           ID=I
46350   130     IM=MOD(K(ID,3),MSTU(5))
46351           IF(MEDIT.EQ.13.AND.IM.GT.0.AND.IM.LE.N) THEN
46352             IF((K(IM,1).EQ.11.OR.K(IM,1).EQ.12.OR.K(IM,1).EQ.15).AND.
46353      &      K(IM,2).NE.94) THEN
46354               ID=IM
46355               GOTO 130
46356             ENDIF
46357           ELSEIF(MEDIT.EQ.14.AND.IM.GT.0.AND.IM.LE.N) THEN
46358             IF(K(IM,1).EQ.13.OR.K(IM,1).EQ.14.OR.K(IM,2).EQ.94) THEN
46359               ID=IM
46360               GOTO 130
46361             ENDIF
46362           ENDIF
46363           K(I,3)=MSTU(5)*(K(I,3)/MSTU(5))
46364           IF(IM.NE.0) K(I,3)=K(I,3)+K(IM,3)/MSTU(5)
46365           IF(K(I,1).NE.3.AND.K(I,1).NE.13.AND.K(I,1).NE.14) THEN
46366             IF(K(I,4).GT.0.AND.K(I,4).LE.MSTU(4)) K(I,4)=
46367      &      K(K(I,4),3)/MSTU(5)
46368             IF(K(I,5).GT.0.AND.K(I,5).LE.MSTU(4)) K(I,5)=
46369      &      K(K(I,5),3)/MSTU(5)
46370           ELSE
46371             KCM=MOD(K(I,4)/MSTU(5),MSTU(5))
46372             IF(KCM.GT.0.AND.KCM.LE.MSTU(4)) KCM=K(KCM,3)/MSTU(5)
46373             KCD=MOD(K(I,4),MSTU(5))
46374             IF(KCD.GT.0.AND.KCD.LE.MSTU(4)) KCD=K(KCD,3)/MSTU(5)
46375             K(I,4)=MSTU(5)**2*(K(I,4)/MSTU(5)**2)+MSTU(5)*KCM+KCD
46376             KCM=MOD(K(I,5)/MSTU(5),MSTU(5))
46377             IF(KCM.GT.0.AND.KCM.LE.MSTU(4)) KCM=K(KCM,3)/MSTU(5)
46378             KCD=MOD(K(I,5),MSTU(5))
46379             IF(KCD.GT.0.AND.KCD.LE.MSTU(4)) KCD=K(KCD,3)/MSTU(5)
46380             K(I,5)=MSTU(5)**2*(K(I,5)/MSTU(5)**2)+MSTU(5)*KCM+KCD
46381           ENDIF
46382   140   CONTINUE
46383  
46384 C...Pack remaining entries.
46385         I1=0
46386         MSTU90=MSTU(90)
46387         MSTU(90)=0
46388         DO 170 I=1,N
46389           IF(K(I,3)/MSTU(5).EQ.0) GOTO 170
46390           I1=I1+1
46391           DO 150 J=1,5
46392             K(I1,J)=K(I,J)
46393             P(I1,J)=P(I,J)
46394             V(I1,J)=V(I,J)
46395   150     CONTINUE
46396           K(I1,3)=MOD(K(I1,3),MSTU(5))
46397           DO 160 IZ=1,MSTU90
46398             IF(I.EQ.MSTU(90+IZ)) THEN
46399               MSTU(90)=MSTU(90)+1
46400               MSTU(90+MSTU(90))=I1
46401               PARU(90+MSTU(90))=PARU(90+IZ)
46402             ENDIF
46403   160     CONTINUE
46404   170   CONTINUE
46405         IF(I1.LT.N) MSTU(3)=0
46406         IF(I1.LT.N) MSTU(70)=0
46407         N=I1
46408  
46409 C...Fill in some missing daughter pointers (lost in colour flow).
46410       ELSEIF(MEDIT.EQ.16) THEN
46411         DO 220 I=1,N
46412           IF(K(I,1).LE.10.OR.K(I,1).GT.20) GOTO 220
46413           IF(K(I,4).NE.0.OR.K(I,5).NE.0) GOTO 220
46414 C...Find daughters who point to mother.
46415           DO 180 I1=I+1,N
46416             IF(K(I1,3).NE.I) THEN
46417             ELSEIF(K(I,4).EQ.0) THEN
46418               K(I,4)=I1
46419             ELSE
46420               K(I,5)=I1
46421             ENDIF
46422   180     CONTINUE
46423           IF(K(I,5).EQ.0) K(I,5)=K(I,4)
46424           IF(K(I,4).NE.0) GOTO 220
46425 C...Find daughters who point to documentation version of mother.
46426           IM=K(I,3)
46427           IF(IM.LE.0.OR.IM.GE.I) GOTO 220
46428           IF(K(IM,1).LE.20.OR.K(IM,1).GT.30) GOTO 220
46429           IF(K(IM,2).NE.K(I,2).OR.ABS(P(IM,5)-P(I,5)).GT.1D-2) GOTO 220
46430           DO 190 I1=I+1,N
46431             IF(K(I1,3).NE.IM) THEN
46432             ELSEIF(K(I,4).EQ.0) THEN
46433               K(I,4)=I1
46434             ELSE
46435               K(I,5)=I1
46436             ENDIF
46437   190     CONTINUE
46438           IF(K(I,5).EQ.0) K(I,5)=K(I,4)
46439           IF(K(I,4).NE.0) GOTO 220
46440 C...Find daughters who point to documentation daughters who,
46441 C...in their turn, point to documentation mother.
46442           ID1=IM
46443           ID2=IM
46444           DO 200 I1=IM+1,I-1
46445             IF(K(I1,3).EQ.IM.AND.K(I1,1).GT.20.AND.K(I1,1).LE.30) THEN
46446               ID2=I1
46447               IF(ID1.EQ.IM) ID1=I1
46448             ENDIF
46449   200     CONTINUE
46450           DO 210 I1=I+1,N
46451             IF(K(I1,3).NE.ID1.AND.K(I1,3).NE.ID2) THEN
46452             ELSEIF(K(I,4).EQ.0) THEN
46453               K(I,4)=I1
46454             ELSE
46455               K(I,5)=I1
46456             ENDIF
46457   210     CONTINUE
46458           IF(K(I,5).EQ.0) K(I,5)=K(I,4)
46459   220   CONTINUE
46460  
46461 C...Save top entries at bottom of PYJETS commonblock.
46462       ELSEIF(MEDIT.EQ.21) THEN
46463         IF(2*N.GE.MSTU(4)) THEN
46464           CALL PYERRM(11,'(PYEDIT:) no more memory left in PYJETS')
46465           RETURN
46466         ENDIF
46467         DO 240 I=1,N
46468           DO 230 J=1,5
46469             K(MSTU(4)-I,J)=K(I,J)
46470             P(MSTU(4)-I,J)=P(I,J)
46471             V(MSTU(4)-I,J)=V(I,J)
46472   230     CONTINUE
46473   240   CONTINUE
46474         MSTU(32)=N
46475  
46476 C...Restore bottom entries of commonblock PYJETS to top.
46477       ELSEIF(MEDIT.EQ.22) THEN
46478         DO 260 I=1,MSTU(32)
46479           DO 250 J=1,5
46480             K(I,J)=K(MSTU(4)-I,J)
46481             P(I,J)=P(MSTU(4)-I,J)
46482             V(I,J)=V(MSTU(4)-I,J)
46483   250     CONTINUE
46484   260   CONTINUE
46485         N=MSTU(32)
46486  
46487 C...Mark primary entries at top of commonblock PYJETS as untreated.
46488       ELSEIF(MEDIT.EQ.23) THEN
46489         I1=0
46490         DO 270 I=1,N
46491           KH=K(I,3)
46492           IF(KH.GE.1) THEN
46493             IF(K(KH,1).GT.20) KH=0
46494           ENDIF
46495           IF(KH.NE.0) GOTO 280
46496           I1=I1+1
46497           IF(K(I,1).GT.10.AND.K(I,1).LE.20) K(I,1)=K(I,1)-10
46498   270   CONTINUE
46499   280   N=I1
46500  
46501 C...Place largest axis along z axis and second largest in xy plane.
46502       ELSEIF(MEDIT.EQ.31.OR.MEDIT.EQ.32) THEN
46503         CALL PYROBO(1,N+MSTU(3),0D0,-PYANGL(P(MSTU(61),1),
46504      &  P(MSTU(61),2)),0D0,0D0,0D0)
46505         CALL PYROBO(1,N+MSTU(3),-PYANGL(P(MSTU(61),3),
46506      &  P(MSTU(61),1)),0D0,0D0,0D0,0D0)
46507         CALL PYROBO(1,N+MSTU(3),0D0,-PYANGL(P(MSTU(61)+1,1),
46508      &  P(MSTU(61)+1,2)),0D0,0D0,0D0)
46509         IF(MEDIT.EQ.31) RETURN
46510  
46511 C...Rotate to put slim jet along +z axis.
46512         DO 290 IS=1,2
46513           NS(IS)=0
46514           PTS(IS)=0D0
46515           PLS(IS)=0D0
46516   290   CONTINUE
46517         DO 300 I=1,N
46518           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 300
46519           IF(MSTU(41).GE.2) THEN
46520             KC=PYCOMP(K(I,2))
46521             IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
46522      &      KC.EQ.18) GOTO 300
46523             IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2))
46524      &      .EQ.0) GOTO 300
46525           ENDIF
46526           IS=2D0-SIGN(0.5D0,P(I,3))
46527           NS(IS)=NS(IS)+1
46528           PTS(IS)=PTS(IS)+SQRT(P(I,1)**2+P(I,2)**2)
46529   300   CONTINUE
46530         IF(NS(1)*PTS(2)**2.LT.NS(2)*PTS(1)**2)
46531      &  CALL PYROBO(1,N+MSTU(3),PARU(1),0D0,0D0,0D0,0D0)
46532  
46533 C...Rotate to put second largest jet into -z,+x quadrant.
46534         DO 310 I=1,N
46535           IF(P(I,3).GE.0D0) GOTO 310
46536           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 310
46537           IF(MSTU(41).GE.2) THEN
46538             KC=PYCOMP(K(I,2))
46539             IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
46540      &      KC.EQ.18) GOTO 310
46541             IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2))
46542      &      .EQ.0) GOTO 310
46543           ENDIF
46544           IS=2D0-SIGN(0.5D0,P(I,1))
46545           PLS(IS)=PLS(IS)-P(I,3)
46546   310   CONTINUE
46547         IF(PLS(2).GT.PLS(1)) CALL PYROBO(1,N+MSTU(3),0D0,PARU(1),
46548      &  0D0,0D0,0D0)
46549       ENDIF
46550  
46551       RETURN
46552       END
46553  
46554 C*********************************************************************
46555  
46556 C...PYLIST
46557 C...Gives program heading, or lists an event, or particle
46558 C...data, or current parameter values.
46559  
46560       SUBROUTINE PYLIST(MLIST)
46561  
46562 C...Double precision and integer declarations.
46563       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46564       IMPLICIT INTEGER(I-N)
46565       INTEGER PYK,PYCHGE,PYCOMP
46566 C...Parameter statement to help give large particle numbers.
46567       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
46568 C...Commonblocks.
46569       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
46570       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
46571       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
46572       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
46573       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/
46574 C...Local arrays, character variables and data.
46575       CHARACTER CHAP*16,CHAC*16,CHAN*16,CHAD(5)*16,CHDL(7)*4
46576       DIMENSION PS(6)
46577       DATA CHDL/'(())',' ','()','!!','<>','==','(==)'/
46578  
46579 C...Initialization printout: version number and date of last change.
46580       IF(MLIST.EQ.0.OR.MSTU(12).EQ.1) THEN
46581         CALL PYLOGO
46582         MSTU(12)=0
46583         IF(MLIST.EQ.0) RETURN
46584       ENDIF
46585  
46586 C...List event data, including additional lines after N.
46587       IF(MLIST.GE.1.AND.MLIST.LE.3) THEN
46588         IF(MLIST.EQ.1) WRITE(MSTU(11),5100)
46589         IF(MLIST.EQ.2) WRITE(MSTU(11),5200)
46590         IF(MLIST.EQ.3) WRITE(MSTU(11),5300)
46591         LMX=12
46592         IF(MLIST.GE.2) LMX=16
46593         ISTR=0
46594         IMAX=N
46595         IF(MSTU(2).GT.0) IMAX=MSTU(2)
46596         DO 120 I=MAX(1,MSTU(1)),MAX(IMAX,N+MAX(0,MSTU(3)))
46597           IF((I.GT.IMAX.AND.I.LE.N).OR.K(I,1).LT.0) GOTO 120
46598  
46599 C...Get particle name, pad it and check it is not too long.
46600           CALL PYNAME(K(I,2),CHAP)
46601           LEN=0
46602           DO 100 LEM=1,16
46603             IF(CHAP(LEM:LEM).NE.' ') LEN=LEM
46604   100     CONTINUE
46605           MDL=(K(I,1)+19)/10
46606           LDL=0
46607           IF(MDL.EQ.2.OR.MDL.GE.8) THEN
46608             CHAC=CHAP
46609             IF(LEN.GT.LMX) CHAC(LMX:LMX)='?'
46610           ELSE
46611             LDL=1
46612             IF(MDL.EQ.1.OR.MDL.EQ.7) LDL=2
46613             IF(LEN.EQ.0) THEN
46614               CHAC=CHDL(MDL)(1:2*LDL)//' '
46615             ELSE
46616               CHAC=CHDL(MDL)(1:LDL)//CHAP(1:MIN(LEN,LMX-2*LDL))//
46617      &        CHDL(MDL)(LDL+1:2*LDL)//' '
46618               IF(LEN+2*LDL.GT.LMX) CHAC(LMX:LMX)='?'
46619             ENDIF
46620           ENDIF
46621  
46622 C...Add information on string connection.
46623           IF(K(I,1).EQ.1.OR.K(I,1).EQ.2.OR.K(I,1).EQ.11.OR.K(I,1).EQ.12)
46624      &    THEN
46625             KC=PYCOMP(K(I,2))
46626             KCC=0
46627             IF(KC.NE.0) KCC=KCHG(KC,2)
46628             IF(IABS(K(I,2)).EQ.39) THEN
46629               IF(LEN+2*LDL+3.LE.LMX) CHAC(LMX-1:LMX-1)='X'
46630             ELSEIF(KCC.NE.0.AND.ISTR.EQ.0) THEN
46631               ISTR=1
46632               IF(LEN+2*LDL+3.LE.LMX) CHAC(LMX-1:LMX-1)='A'
46633             ELSEIF(KCC.NE.0.AND.(K(I,1).EQ.2.OR.K(I,1).EQ.12)) THEN
46634               IF(LEN+2*LDL+3.LE.LMX) CHAC(LMX-1:LMX-1)='I'
46635             ELSEIF(KCC.NE.0) THEN
46636               ISTR=0
46637               IF(LEN+2*LDL+3.LE.LMX) CHAC(LMX-1:LMX-1)='V'
46638             ENDIF
46639           ENDIF
46640  
46641 C...Write data for particle/jet.
46642           IF(MLIST.EQ.1.AND.ABS(P(I,4)).LT.9999D0) THEN
46643             WRITE(MSTU(11),5400) I,CHAC(1:12),(K(I,J1),J1=1,3),
46644      &      (P(I,J2),J2=1,5)
46645           ELSEIF(MLIST.EQ.1.AND.ABS(P(I,4)).LT.99999D0) THEN
46646             WRITE(MSTU(11),5500) I,CHAC(1:12),(K(I,J1),J1=1,3),
46647      &      (P(I,J2),J2=1,5)
46648           ELSEIF(MLIST.EQ.1) THEN
46649             WRITE(MSTU(11),5600) I,CHAC(1:12),(K(I,J1),J1=1,3),
46650      &      (P(I,J2),J2=1,5)
46651           ELSEIF(MSTU(5).EQ.10000.AND.(K(I,1).EQ.3.OR.K(I,1).EQ.13.OR.
46652      &      K(I,1).EQ.14)) THEN
46653             WRITE(MSTU(11),5700) I,CHAC,(K(I,J1),J1=1,3),
46654      &      K(I,4)/100000000,MOD(K(I,4)/10000,10000),MOD(K(I,4),10000),
46655      &      K(I,5)/100000000,MOD(K(I,5)/10000,10000),MOD(K(I,5),10000),
46656      &      (P(I,J2),J2=1,5)
46657           ELSE
46658             WRITE(MSTU(11),5800) I,CHAC,(K(I,J1),J1=1,5),
46659      &      (P(I,J2),J2=1,5)
46660           ENDIF
46661           IF(MLIST.EQ.3) WRITE(MSTU(11),5900) (V(I,J),J=1,5)
46662  
46663 C...Insert extra separator lines specified by user.
46664           IF(MSTU(70).GE.1) THEN
46665             ISEP=0
46666             DO 110 J=1,MIN(10,MSTU(70))
46667               IF(I.EQ.MSTU(70+J)) ISEP=1
46668   110       CONTINUE
46669             IF(ISEP.EQ.1.AND.MLIST.EQ.1) WRITE(MSTU(11),6000)
46670             IF(ISEP.EQ.1.AND.MLIST.GE.2) WRITE(MSTU(11),6100)
46671           ENDIF
46672   120   CONTINUE
46673  
46674 C...Sum of charges and momenta.
46675         DO 130 J=1,6
46676           PS(J)=PYP(0,J)
46677   130   CONTINUE
46678         IF(MLIST.EQ.1.AND.ABS(PS(4)).LT.9999D0) THEN
46679           WRITE(MSTU(11),6200) PS(6),(PS(J),J=1,5)
46680         ELSEIF(MLIST.EQ.1.AND.ABS(PS(4)).LT.99999D0) THEN
46681           WRITE(MSTU(11),6300) PS(6),(PS(J),J=1,5)
46682         ELSEIF(MLIST.EQ.1) THEN
46683           WRITE(MSTU(11),6400) PS(6),(PS(J),J=1,5)
46684         ELSE
46685           WRITE(MSTU(11),6500) PS(6),(PS(J),J=1,5)
46686         ENDIF
46687  
46688 C...Give simple list of KF codes defined in program.
46689       ELSEIF(MLIST.EQ.11) THEN
46690         WRITE(MSTU(11),6600)
46691         DO 140 KF=1,80
46692           CALL PYNAME(KF,CHAP)
46693           CALL PYNAME(-KF,CHAN)
46694           IF(CHAP.NE.' '.AND.CHAN.EQ.' ') WRITE(MSTU(11),6700) KF,CHAP
46695           IF(CHAN.NE.' ') WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46696   140   CONTINUE
46697         DO 170 KFLS=1,3,2
46698           DO 160 KFLA=1,5
46699             DO 150 KFLB=1,KFLA-(3-KFLS)/2
46700               KF=1000*KFLA+100*KFLB+KFLS
46701               CALL PYNAME(KF,CHAP)
46702               CALL PYNAME(-KF,CHAN)
46703               WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46704   150       CONTINUE
46705   160     CONTINUE
46706   170   CONTINUE
46707         KF=130
46708         CALL PYNAME(KF,CHAP)
46709         WRITE(MSTU(11),6700) KF,CHAP
46710         KF=310
46711         CALL PYNAME(KF,CHAP)
46712         WRITE(MSTU(11),6700) KF,CHAP
46713         DO 200 KMUL=0,5
46714           KFLS=3
46715           IF(KMUL.EQ.0.OR.KMUL.EQ.3) KFLS=1
46716           IF(KMUL.EQ.5) KFLS=5
46717           KFLR=0
46718           IF(KMUL.EQ.2.OR.KMUL.EQ.3) KFLR=1
46719           IF(KMUL.EQ.4) KFLR=2
46720           DO 190 KFLB=1,5
46721             DO 180 KFLC=1,KFLB-1
46722               KF=10000*KFLR+100*KFLB+10*KFLC+KFLS
46723               CALL PYNAME(KF,CHAP)
46724               CALL PYNAME(-KF,CHAN)
46725               WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46726   180       CONTINUE
46727             KF=10000*KFLR+110*KFLB+KFLS
46728             CALL PYNAME(KF,CHAP)
46729             WRITE(MSTU(11),6700) KF,CHAP
46730   190     CONTINUE
46731   200   CONTINUE
46732         KF=100443
46733         CALL PYNAME(KF,CHAP)
46734         WRITE(MSTU(11),6700) KF,CHAP
46735         KF=100553
46736         CALL PYNAME(KF,CHAP)
46737         WRITE(MSTU(11),6700) KF,CHAP
46738         DO 240 KFLSP=1,3
46739           KFLS=2+2*(KFLSP/3)
46740           DO 230 KFLA=1,5
46741             DO 220 KFLB=1,KFLA
46742               DO 210 KFLC=1,KFLB
46743                 IF(KFLSP.EQ.1.AND.(KFLA.EQ.KFLB.OR.KFLB.EQ.KFLC))
46744      &          GOTO 210
46745                 IF(KFLSP.EQ.2.AND.KFLA.EQ.KFLC) GOTO 210
46746                 IF(KFLSP.EQ.1) KF=1000*KFLA+100*KFLC+10*KFLB+KFLS
46747                 IF(KFLSP.GE.2) KF=1000*KFLA+100*KFLB+10*KFLC+KFLS
46748                 CALL PYNAME(KF,CHAP)
46749                 CALL PYNAME(-KF,CHAN)
46750                 WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46751   210         CONTINUE
46752   220       CONTINUE
46753   230     CONTINUE
46754   240   CONTINUE
46755         DO 250 KF=KSUSY1+1,KSUSY1+40
46756           CALL PYNAME(KF,CHAP)
46757           CALL PYNAME(-KF,CHAN)
46758           IF(CHAP.NE.' '.AND.CHAN.EQ.' ') WRITE(MSTU(11),6700) KF,CHAP
46759           IF(CHAN.NE.' ') WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46760   250   CONTINUE
46761         DO 260 KF=KSUSY2+1,KSUSY2+40
46762           CALL PYNAME(KF,CHAP)
46763           CALL PYNAME(-KF,CHAN)
46764           IF(CHAP.NE.' '.AND.CHAN.EQ.' ') WRITE(MSTU(11),6700) KF,CHAP
46765           IF(CHAN.NE.' ') WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46766   260   CONTINUE
46767         DO 270 KF=KEXCIT+1,KEXCIT+40
46768           CALL PYNAME(KF,CHAP)
46769           CALL PYNAME(-KF,CHAN)
46770           IF(CHAP.NE.' '.AND.CHAN.EQ.' ') WRITE(MSTU(11),6700) KF,CHAP
46771           IF(CHAN.NE.' ') WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46772   270   CONTINUE
46773  
46774 C...List parton/particle data table. Check whether to be listed.
46775       ELSEIF(MLIST.EQ.12) THEN
46776         WRITE(MSTU(11),6800)
46777         DO 300 KC=1,MSTU(6)
46778           KF=KCHG(KC,4)
46779           IF(KF.EQ.0) GOTO 300
46780           IF(KF.LT.MSTU(1).OR.(MSTU(2).GT.0.AND.KF.GT.MSTU(2)))
46781      &    GOTO 300
46782  
46783 C...Find particle name and mass. Print information.
46784           CALL PYNAME(KF,CHAP)
46785           IF(KF.LE.100.AND.CHAP.EQ.' '.AND.MDCY(KC,2).EQ.0) GOTO 300
46786           CALL PYNAME(-KF,CHAN)
46787           WRITE(MSTU(11),6900) KF,KC,CHAP,CHAN,(KCHG(KC,J1),J1=1,3),
46788      &    (PMAS(KC,J2),J2=1,4),MDCY(KC,1)
46789  
46790 C...Particle decay: channel number, branching ratios, matrix element,
46791 C...decay products.
46792           DO 290 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
46793             DO 280 J=1,5
46794               CALL PYNAME(KFDP(IDC,J),CHAD(J))
46795   280       CONTINUE
46796             WRITE(MSTU(11),7000) IDC,MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
46797      &      (CHAD(J),J=1,5)
46798   290     CONTINUE
46799   300   CONTINUE
46800  
46801 C...List parameter value table.
46802       ELSEIF(MLIST.EQ.13) THEN
46803         WRITE(MSTU(11),7100)
46804         DO 310 I=1,200
46805           WRITE(MSTU(11),7200) I,MSTU(I),PARU(I),MSTJ(I),PARJ(I),PARF(I)
46806   310   CONTINUE
46807       ENDIF
46808  
46809 C...Format statements for output on unit MSTU(11) (by default 6).
46810  5100 FORMAT(///28X,'Event listing (summary)'//4X,'I particle/jet KS',
46811      &5X,'KF  orig    p_x      p_y      p_z       E        m'/)
46812  5200 FORMAT(///28X,'Event listing (standard)'//4X,'I  particle/jet',
46813      &'  K(I,1)   K(I,2) K(I,3)     K(I,4)      K(I,5)       P(I,1)',
46814      &'       P(I,2)       P(I,3)       P(I,4)       P(I,5)'/)
46815  5300 FORMAT(///28X,'Event listing (with vertices)'//4X,'I  particle/j',
46816      &'et  K(I,1)   K(I,2) K(I,3)     K(I,4)      K(I,5)       P(I,1)',
46817      &'       P(I,2)       P(I,3)       P(I,4)       P(I,5)'/73X,
46818      &'V(I,1)       V(I,2)       V(I,3)       V(I,4)       V(I,5)'/)
46819  5400 FORMAT(1X,I4,1X,A12,1X,I2,I8,1X,I4,5F9.3)
46820  5500 FORMAT(1X,I4,1X,A12,1X,I2,I8,1X,I4,5F9.2)
46821  5600 FORMAT(1X,I4,1X,A12,1X,I2,I8,1X,I4,5F9.1)
46822  5700 FORMAT(1X,I4,2X,A16,1X,I3,1X,I9,1X,I4,2(3X,I1,2I4),5F13.5)
46823  5800 FORMAT(1X,I4,2X,A16,1X,I3,1X,I9,1X,I4,2(3X,I9),5F13.5)
46824  5900 FORMAT(66X,5(1X,F12.3))
46825  6000 FORMAT(1X,78('='))
46826  6100 FORMAT(1X,130('='))
46827  6200 FORMAT(19X,'sum:',F6.2,5X,5F9.3)
46828  6300 FORMAT(19X,'sum:',F6.2,5X,5F9.2)
46829  6400 FORMAT(19X,'sum:',F6.2,5X,5F9.1)
46830  6500 FORMAT(19X,'sum charge:',F6.2,3X,'sum momentum and inv. mass:',
46831      &5F13.5)
46832  6600 FORMAT(///20X,'List of KF codes in program'/)
46833  6700 FORMAT(4X,I9,4X,A16,6X,I9,4X,A16)
46834  6800 FORMAT(///30X,'Particle/parton data table'//8X,'KF',5X,'KC',4X,
46835      &'particle',8X,'antiparticle',6X,'chg  col  anti',8X,'mass',7X,
46836      &'width',7X,'w-cut',5X,'lifetime',1X,'decay'/11X,'IDC',1X,'on/off',
46837      &1X,'ME',3X,'Br.rat.',4X,'decay products')
46838  6900 FORMAT(/1X,I9,3X,I4,4X,A16,A16,3I5,1X,F12.5,2(1X,F11.5),
46839      &1X,1P,E13.5,3X,I2)
46840  7000 FORMAT(10X,I4,2X,I3,2X,I3,2X,F10.6,4X,5A16)
46841  7100 FORMAT(///20X,'Parameter value table'//4X,'I',3X,'MSTU(I)',
46842      &8X,'PARU(I)',3X,'MSTJ(I)',8X,'PARJ(I)',8X,'PARF(I)')
46843  7200 FORMAT(1X,I4,1X,I9,1X,F14.5,1X,I9,1X,F14.5,1X,F14.5)
46844  
46845       RETURN
46846       END
46847  
46848 C*********************************************************************
46849  
46850 C...PYLOGO
46851 C...Writes a logo for the program.
46852  
46853       SUBROUTINE PYLOGO
46854  
46855 C...Double precision and integer declarations.
46856       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46857       IMPLICIT INTEGER(I-N)
46858       INTEGER PYK,PYCHGE,PYCOMP
46859 C...Parameter for length of information block.
46860       PARAMETER (IREFER=17)
46861 C...Commonblocks.
46862       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
46863       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
46864       SAVE /PYDAT1/,/PYPARS/
46865 C...Local arrays and character variables.
46866       INTEGER IDATI(6)
46867       CHARACTER MONTH(12)*3, LOGO(48)*32, REFER(2*IREFER)*36, LINE*79,
46868      &VERS*1, SUBV*3, DATE*2, YEAR*4, HOUR*2, MINU*2, SECO*2
46869  
46870 C...Data on months, logo, titles, and references.
46871       DATA MONTH/'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep',
46872      &'Oct','Nov','Dec'/
46873       DATA (LOGO(J),J=1,19)/
46874      &'            *......*            ',
46875      &'       *:::!!:::::::::::*       ',
46876      &'    *::::::!!::::::::::::::*    ',
46877      &'  *::::::::!!::::::::::::::::*  ',
46878      &' *:::::::::!!:::::::::::::::::* ',
46879      &' *:::::::::!!:::::::::::::::::* ',
46880      &'  *::::::::!!::::::::::::::::*! ',
46881      &'    *::::::!!::::::::::::::* !! ',
46882      &'    !! *:::!!:::::::::::*    !! ',
46883      &'    !!     !* -><- *         !! ',
46884      &'    !!     !!                !! ',
46885      &'    !!     !!                !! ',
46886      &'    !!                       !! ',
46887      &'    !!        ep             !! ',
46888      &'    !!                       !! ',
46889      &'    !!                 pp    !! ',
46890      &'    !!   e+e-                !! ',
46891      &'    !!                       !! ',
46892      &'    !!                          '/
46893       DATA (LOGO(J),J=20,38)/
46894      &'Welcome to the Lund Monte Carlo!',
46895      &'                                ',
46896      &'PPP  Y   Y TTTTT H   H III   A  ',
46897      &'P  P  Y Y    T   H   H  I   A A ',
46898      &'PPP    Y     T   HHHHH  I  AAAAA',
46899      &'P      Y     T   H   H  I  A   A',
46900      &'P      Y     T   H   H III A   A',
46901      &'                                ',
46902      &'This is PYTHIA version x.xxx    ',
46903      &'Last date of change: xx xxx 199x',
46904      &'                                ',
46905      &'Now is xx xxx 199x at xx:xx:xx  ',
46906      &'                                ',
46907      &'Disclaimer: this program comes  ',
46908      &'without any guarantees. Beware  ',
46909      &'of errors and use common sense  ',
46910      &'when interpreting results.      ',
46911      &'                                ',
46912      &'Copyright T. Sjostrand (2000)   '/
46913       DATA (REFER(J),J=1,18)/
46914      &'An archive of program versions and d',
46915      &'ocumentation is found on the web:   ',
46916      &'http://www.thep.lu.se/~torbjorn/Pyth',
46917      &'ia.html                             ',
46918      &'                                    ',
46919      &'                                    ',
46920      &'When you cite this program, currentl',
46921      &'y the official reference is         ',
46922      &'T. Sjostrand, Computer Physics Commu',
46923      &'n. 82 (1994) 74.                    ',
46924      &'The supersymmetry extensions are des',
46925      &'cribed in                           ',
46926      &'S. Mrenna, Computer Physics Commun. ',
46927      &'101 (1997) 232                      ',
46928      &'Also remember that the program, to a',
46929      &' large extent, represents original  ',
46930      &'physics research. Other publications',
46931      &' of special relevance to your       '/
46932       DATA (REFER(J),J=19,2*IREFER)/
46933      &'studies may therefore deserve separa',
46934      &'te mention.                         ',
46935      &'                                    ',
46936      &'                                    ',
46937      &'Main author: Torbjorn Sjostrand; Dep',
46938      &'artment of Theoretical Physics 2,   ',
46939      &'  Lund University, Solvegatan 14A, S',
46940      &'-223 62 Lund, Sweden;               ',
46941      &'  phone: + 46 - 46 - 222 48 16; e-ma',
46942      &'il: torbjorn@thep.lu.se             ',
46943      &'SUSY author: Stephen Mrenna, Physics',
46944      &' Department, UC Davis,              ',
46945      &'  One Shields Avenue, Davis, CA 9561',
46946      &'6, USA;                       ',
46947      &'  phone: + 1 - 530 - 752 - 2661; e-m',
46948      &'ail: mrenna@physics.ucdavis.edu     '/
46949  
46950 C...Check that PYDATA linked.
46951       IF(MSTP(183)/10.NE.199.AND.MSTP(183)/10.NE.200) THEN
46952         WRITE(*,'(1X,A)')
46953      &  'Error: PYDATA has not been linked.'
46954         WRITE(*,'(1X,A)') 'Execution stopped!'
46955         STOP
46956  
46957 C...Write current version number and current date+time.
46958       ELSE
46959         WRITE(VERS,'(I1)') MSTP(181)
46960         LOGO(28)(24:24)=VERS
46961         WRITE(SUBV,'(I3)') MSTP(182)
46962         LOGO(28)(26:28)=SUBV
46963         IF(MSTP(182).LT.100) LOGO(28)(26:26)='0'
46964         WRITE(DATE,'(I2)') MSTP(185)
46965         LOGO(29)(22:23)=DATE
46966         LOGO(29)(25:27)=MONTH(MSTP(184))
46967         WRITE(YEAR,'(I4)') MSTP(183)
46968         LOGO(29)(29:32)=YEAR
46969         CALL PYTIME(IDATI)
46970         IF(IDATI(1).LE.0) THEN
46971           LOGO(31)='                                '
46972         ELSE
46973           WRITE(DATE,'(I2)') IDATI(3)
46974           LOGO(31)(8:9)=DATE
46975           LOGO(31)(11:13)=MONTH(MAX(1,MIN(12,IDATI(2))))
46976           WRITE(YEAR,'(I4)') IDATI(1)
46977           LOGO(31)(15:18)=YEAR
46978           WRITE(HOUR,'(I2)') IDATI(4)
46979           LOGO(31)(23:24)=HOUR
46980           WRITE(MINU,'(I2)') IDATI(5)
46981           LOGO(31)(26:27)=MINU
46982           IF(IDATI(5).LT.10) LOGO(31)(26:26)='0'
46983           WRITE(SECO,'(I2)') IDATI(6)
46984           LOGO(31)(29:30)=SECO
46985           IF(IDATI(6).LT.10) LOGO(31)(29:29)='0'
46986         ENDIF
46987       ENDIF
46988  
46989 C...Loop over lines in header. Define page feed and side borders.
46990       DO 100 ILIN=1,29+IREFER
46991         LINE=' '
46992         IF(ILIN.EQ.1) THEN
46993           LINE(1:1)='1'
46994         ELSE
46995           LINE(2:3)='**'
46996           LINE(78:79)='**'
46997         ENDIF
46998  
46999 C...Separator lines and logos.
47000         IF(ILIN.EQ.2.OR.ILIN.EQ.3.OR.ILIN.GE.28+IREFER) THEN
47001           LINE(4:77)='***********************************************'//
47002      &    '***************************'
47003         ELSEIF(ILIN.GE.6.AND.ILIN.LE.24) THEN
47004           LINE(6:37)=LOGO(ILIN-5)
47005           LINE(44:75)=LOGO(ILIN+14)
47006         ELSEIF(ILIN.GE.26.AND.ILIN.LE.25+IREFER) THEN
47007           LINE(5:40)=REFER(2*ILIN-51)
47008           LINE(41:76)=REFER(2*ILIN-50)
47009         ENDIF
47010  
47011 C...Write lines to appropriate unit.
47012         WRITE(MSTU(11),'(A79)') LINE
47013   100 CONTINUE
47014  
47015       RETURN
47016       END
47017  
47018 C*********************************************************************
47019  
47020 C...PYUPDA
47021 C...Facilitates the updating of particle and decay data
47022 C...by allowing it to be done in an external file.
47023  
47024       SUBROUTINE PYUPDA(MUPDA,LFN)
47025  
47026 C...Double precision and integer declarations.
47027       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
47028       IMPLICIT INTEGER(I-N)
47029       INTEGER PYK,PYCHGE,PYCOMP
47030 C...Commonblocks.
47031       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
47032       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
47033       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
47034       COMMON/PYDAT4/CHAF(500,2)
47035       CHARACTER CHAF*16
47036       COMMON/PYINT4/MWID(500),WIDS(500,5)
47037       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYINT4/
47038 C...Local arrays, character variables and data.
47039       CHARACTER CHINL*120,CHKF*9,CHVAR(22)*9,CHLIN*72,
47040      &CHBLK(20)*72,CHOLD*16,CHTMP*16,CHNEW*16,CHCOM*24
47041       DATA CHVAR/ 'KCHG(I,1)','KCHG(I,2)','KCHG(I,3)','KCHG(I,4)',
47042      &'PMAS(I,1)','PMAS(I,2)','PMAS(I,3)','PMAS(I,4)','MDCY(I,1)',
47043      &'MDCY(I,2)','MDCY(I,3)','MDME(I,1)','MDME(I,2)','BRAT(I)  ',
47044      &'KFDP(I,1)','KFDP(I,2)','KFDP(I,3)','KFDP(I,4)','KFDP(I,5)',
47045      &'CHAF(I,1)','CHAF(I,2)','MWID(I)  '/
47046  
47047 C...Write header if not yet done.
47048       IF(MSTU(12).GE.1) CALL PYLIST(0)
47049  
47050 C...Write information on file for editing.
47051       IF(MUPDA.EQ.1) THEN
47052         DO 110 KC=1,500
47053           WRITE(LFN,5000) KCHG(KC,4),(CHAF(KC,J1),J1=1,2),
47054      &    (KCHG(KC,J2),J2=1,3),(PMAS(KC,J3),J3=1,4),
47055      &    MWID(KC),MDCY(KC,1)
47056           DO 100 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
47057             WRITE(LFN,5100) MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
47058      &      (KFDP(IDC,J),J=1,5)
47059   100     CONTINUE
47060   110   CONTINUE
47061  
47062 C...Read complete set of information from edited file or
47063 C...read partial set of new or updated information from edited file.
47064       ELSEIF(MUPDA.EQ.2.OR.MUPDA.EQ.3) THEN
47065  
47066 C...Reset counters.
47067         KCC=100
47068         NDC=0
47069         CHKF='         '
47070         IF(MUPDA.EQ.2) THEN
47071           DO 120 I=1,MSTU(6)
47072             KCHG(I,4)=0
47073   120     CONTINUE
47074         ELSE
47075           DO 130 KC=1,MSTU(6)
47076             IF(KC.GT.100.AND.KCHG(KC,4).GT.100) KCC=KC
47077             NDC=MAX(NDC,MDCY(KC,2)+MDCY(KC,3)-1)
47078   130     CONTINUE
47079         ENDIF
47080  
47081 C...Begin of loop: read new line; unknown whether particle or
47082 C...decay data.
47083   140   READ(LFN,5200,END=190) CHINL
47084  
47085 C...Identify particle code and whether already defined  (for MUPDA=3).
47086         IF(CHINL(2:10).NE.'         ') THEN
47087           CHKF=CHINL(2:10)
47088           READ(CHKF,5300) KF
47089           IF(MUPDA.EQ.2) THEN
47090             IF(KF.LE.100) THEN
47091               KC=KF
47092             ELSE
47093               KCC=KCC+1
47094               KC=KCC
47095             ENDIF
47096           ELSE
47097             KCREP=0
47098             IF(KF.LE.100) THEN
47099               KCREP=KF
47100             ELSE
47101               DO 150 KCR=101,KCC
47102                 IF(KCHG(KCR,4).EQ.KF) KCREP=KCR
47103   150         CONTINUE
47104             ENDIF
47105 C...Remove duplicate old decay data.
47106             IF(KCREP.NE.0.AND.MDCY(KCREP,3).GT.0) THEN
47107               IDCREP=MDCY(KCREP,2)
47108               NDCREP=MDCY(KCREP,3)
47109               DO 160 I=1,KCC
47110                 IF(MDCY(I,2).GT.IDCREP) MDCY(I,2)=MDCY(I,2)-NDCREP
47111   160         CONTINUE
47112               DO 180 I=IDCREP,NDC-NDCREP
47113                 MDME(I,1)=MDME(I+NDCREP,1)
47114                 MDME(I,2)=MDME(I+NDCREP,2)
47115                 BRAT(I)=BRAT(I+NDCREP)
47116                 DO 170 J=1,5
47117                   KFDP(I,J)=KFDP(I+NDCREP,J)
47118   170           CONTINUE
47119   180         CONTINUE
47120               NDC=NDC-NDCREP
47121               KC=KCREP
47122             ELSEIF(KCREP.NE.0) THEN
47123               KC=KCREP
47124             ELSE
47125               KCC=KCC+1
47126               KC=KCC
47127             ENDIF
47128           ENDIF
47129  
47130 C...Study line with particle data.
47131           IF(KC.GT.MSTU(6)) CALL PYERRM(27,
47132      &    '(PYUPDA:) Particle arrays full by KF ='//CHKF)
47133           READ(CHINL,5000) KCHG(KC,4),(CHAF(KC,J1),J1=1,2),
47134      &    (KCHG(KC,J2),J2=1,3),(PMAS(KC,J3),J3=1,4),
47135      &    MWID(KC),MDCY(KC,1)
47136           MDCY(KC,2)=0
47137           MDCY(KC,3)=0
47138  
47139 C...Study line with decay data.
47140         ELSE
47141           NDC=NDC+1
47142           IF(NDC.GT.MSTU(7)) CALL PYERRM(27,
47143      &    '(PYUPDA:) Decay data arrays full by KF ='//CHKF)
47144           IF(MDCY(KC,2).EQ.0) MDCY(KC,2)=NDC
47145           MDCY(KC,3)=MDCY(KC,3)+1
47146           READ(CHINL,5100) MDME(NDC,1),MDME(NDC,2),BRAT(NDC),
47147      &    (KFDP(NDC,J),J=1,5)
47148         ENDIF
47149  
47150 C...End of loop; ensure that PYCOMP tables are updated.
47151         GOTO 140
47152   190   CONTINUE
47153         MSTU(20)=0
47154  
47155 C...Perform possible tests that new information is consistent.
47156         DO 220 KC=1,MSTU(6)
47157           KF=KCHG(KC,4)
47158           IF(KF.EQ.0) GOTO 220
47159           WRITE(CHKF,5300) KF
47160           IF(MIN(PMAS(KC,1),PMAS(KC,2),PMAS(KC,3),PMAS(KC,1)-PMAS(KC,3),
47161      &    PMAS(KC,4)).LT.0D0.OR.MDCY(KC,3).LT.0) CALL PYERRM(17,
47162      &    '(PYUPDA:) Mass/width/life/(# channels) wrong for KF ='//CHKF)
47163           BRSUM=0D0
47164           DO 210 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
47165             IF(MDME(IDC,2).GT.80) GOTO 210
47166             KQ=KCHG(KC,1)
47167             PMS=PMAS(KC,1)-PMAS(KC,3)-PARJ(64)
47168             MERR=0
47169             DO 200 J=1,5
47170               KP=KFDP(IDC,J)
47171               IF(KP.EQ.0.OR.KP.EQ.81.OR.IABS(KP).EQ.82) THEN
47172                 IF(KP.EQ.81) KQ=0
47173               ELSEIF(PYCOMP(KP).EQ.0) THEN
47174                 MERR=3
47175               ELSE
47176                 KQ=KQ-PYCHGE(KP)
47177                 KPC=PYCOMP(KP)
47178                 PMS=PMS-PMAS(KPC,1)
47179                 IF(MSTJ(24).GT.0) PMS=PMS+0.5D0*MIN(PMAS(KPC,2),
47180      &          PMAS(KPC,3))
47181               ENDIF
47182   200       CONTINUE
47183             IF(KQ.NE.0) MERR=MAX(2,MERR)
47184             IF(MWID(KC).EQ.0.AND.KF.NE.311.AND.PMS.LT.0D0)
47185      &      MERR=MAX(1,MERR)
47186             IF(MERR.EQ.3) CALL PYERRM(17,
47187      &      '(PYUPDA:) Unknown particle code in decay of KF ='//CHKF)
47188             IF(MERR.EQ.2) CALL PYERRM(17,
47189      &      '(PYUPDA:) Charge not conserved in decay of KF ='//CHKF)
47190             IF(MERR.EQ.1) CALL PYERRM(7,
47191      &      '(PYUPDA:) Kinematically unallowed decay of KF ='//CHKF)
47192             BRSUM=BRSUM+BRAT(IDC)
47193   210     CONTINUE
47194           WRITE(CHTMP,5500) BRSUM
47195           IF(ABS(BRSUM).GT.0.0005D0.AND.ABS(BRSUM-1D0).GT.0.0005D0)
47196      &    CALL PYERRM(7,'(PYUPDA:) Sum of branching ratios is '//
47197      &    CHTMP(9:16)//' for KF ='//CHKF)
47198   220   CONTINUE
47199  
47200 C...Write DATA statements for inclusion in program.
47201       ELSEIF(MUPDA.EQ.4) THEN
47202  
47203 C...Find out how many codes and decay channels are actually used.
47204         KCC=0
47205         NDC=0
47206         DO 230 I=1,MSTU(6)
47207           IF(KCHG(I,4).NE.0) THEN
47208             KCC=I
47209             NDC=MAX(NDC,MDCY(I,2)+MDCY(I,3)-1)
47210           ENDIF
47211   230   CONTINUE
47212  
47213 C...Initialize writing of DATA statements for inclusion in program.
47214         DO 300 IVAR=1,22
47215           NDIM=MSTU(6)
47216           IF(IVAR.GE.12.AND.IVAR.LE.19) NDIM=MSTU(7)
47217           NLIN=1
47218           CHLIN=' '
47219           CHLIN(7:35)='DATA ('//CHVAR(IVAR)//',I=   1,    )/'
47220           LLIN=35
47221           CHOLD='START'
47222  
47223 C...Loop through variables for conversion to characters.
47224           DO 280 IDIM=1,NDIM
47225             IF(IVAR.EQ.1) WRITE(CHTMP,5400) KCHG(IDIM,1)
47226             IF(IVAR.EQ.2) WRITE(CHTMP,5400) KCHG(IDIM,2)
47227             IF(IVAR.EQ.3) WRITE(CHTMP,5400) KCHG(IDIM,3)
47228             IF(IVAR.EQ.4) WRITE(CHTMP,5400) KCHG(IDIM,4)
47229             IF(IVAR.EQ.5) WRITE(CHTMP,5500) PMAS(IDIM,1)
47230             IF(IVAR.EQ.6) WRITE(CHTMP,5500) PMAS(IDIM,2)
47231             IF(IVAR.EQ.7) WRITE(CHTMP,5500) PMAS(IDIM,3)
47232             IF(IVAR.EQ.8) WRITE(CHTMP,5500) PMAS(IDIM,4)
47233             IF(IVAR.EQ.9) WRITE(CHTMP,5400) MDCY(IDIM,1)
47234             IF(IVAR.EQ.10) WRITE(CHTMP,5400) MDCY(IDIM,2)
47235             IF(IVAR.EQ.11) WRITE(CHTMP,5400) MDCY(IDIM,3)
47236             IF(IVAR.EQ.12) WRITE(CHTMP,5400) MDME(IDIM,1)
47237             IF(IVAR.EQ.13) WRITE(CHTMP,5400) MDME(IDIM,2)
47238             IF(IVAR.EQ.14) WRITE(CHTMP,5600) BRAT(IDIM)
47239             IF(IVAR.EQ.15) WRITE(CHTMP,5400) KFDP(IDIM,1)
47240             IF(IVAR.EQ.16) WRITE(CHTMP,5400) KFDP(IDIM,2)
47241             IF(IVAR.EQ.17) WRITE(CHTMP,5400) KFDP(IDIM,3)
47242             IF(IVAR.EQ.18) WRITE(CHTMP,5400) KFDP(IDIM,4)
47243             IF(IVAR.EQ.19) WRITE(CHTMP,5400) KFDP(IDIM,5)
47244             IF(IVAR.EQ.20) CHTMP=CHAF(IDIM,1)
47245             IF(IVAR.EQ.21) CHTMP=CHAF(IDIM,2)
47246             IF(IVAR.EQ.22) WRITE(CHTMP,5400) MWID(IDIM)
47247  
47248 C...Replace variables beyond what is properly defined.
47249             IF(IVAR.LE.4) THEN
47250               IF(IDIM.GT.KCC) CHTMP='               0'
47251             ELSEIF(IVAR.LE.8) THEN
47252               IF(IDIM.GT.KCC) CHTMP='             0.0'
47253             ELSEIF(IVAR.LE.11) THEN
47254               IF(IDIM.GT.KCC) CHTMP='               0'
47255             ELSEIF(IVAR.LE.13) THEN
47256               IF(IDIM.GT.NDC) CHTMP='               0'
47257             ELSEIF(IVAR.LE.14) THEN
47258               IF(IDIM.GT.NDC) CHTMP='             0.0'
47259             ELSEIF(IVAR.LE.19) THEN
47260               IF(IDIM.GT.NDC) CHTMP='               0'
47261             ELSEIF(IVAR.LE.21) THEN
47262               IF(IDIM.GT.KCC) CHTMP='                '
47263             ELSE
47264               IF(IDIM.GT.KCC) CHTMP='               0'
47265             ENDIF
47266  
47267 C...Length of variable, trailing decimal zeros, quotation marks.
47268             LLOW=1
47269             LHIG=1
47270             DO 240 LL=1,16
47271               IF(CHTMP(17-LL:17-LL).NE.' ') LLOW=17-LL
47272               IF(CHTMP(LL:LL).NE.' ') LHIG=LL
47273   240       CONTINUE
47274             CHNEW=CHTMP(LLOW:LHIG)//' '
47275             LNEW=1+LHIG-LLOW
47276             IF((IVAR.GE.5.AND.IVAR.LE.8).OR.IVAR.EQ.14) THEN
47277               LNEW=LNEW+1
47278   250         LNEW=LNEW-1
47279               IF(LNEW.GE.2.AND.CHNEW(LNEW:LNEW).EQ.'0') GOTO 250
47280               IF(CHNEW(LNEW:LNEW).EQ.'.') LNEW=LNEW-1
47281               IF(LNEW.EQ.0) THEN
47282                 CHNEW(1:3)='0D0'
47283                 LNEW=3
47284               ELSE
47285                 CHNEW(LNEW+1:LNEW+2)='D0'
47286                 LNEW=LNEW+2
47287               ENDIF
47288             ELSEIF(IVAR.EQ.20.OR.IVAR.EQ.21) THEN
47289               DO 260 LL=LNEW,1,-1
47290                 IF(CHNEW(LL:LL).EQ.'''') THEN
47291                   CHTMP=CHNEW
47292                   CHNEW=CHTMP(1:LL)//''''//CHTMP(LL+1:11)
47293                   LNEW=LNEW+1
47294                 ENDIF
47295   260         CONTINUE
47296               LNEW=MIN(14,LNEW)
47297               CHTMP=CHNEW
47298               CHNEW(1:LNEW+2)=''''//CHTMP(1:LNEW)//''''
47299               LNEW=LNEW+2
47300             ENDIF
47301  
47302 C...Form composite character string, often including repetition counter.
47303             IF(CHNEW.NE.CHOLD) THEN
47304               NRPT=1
47305               CHOLD=CHNEW
47306               CHCOM=CHNEW
47307               LCOM=LNEW
47308             ELSE
47309               LRPT=LNEW+1
47310               IF(NRPT.GE.2) LRPT=LNEW+3
47311               IF(NRPT.GE.10) LRPT=LNEW+4
47312               IF(NRPT.GE.100) LRPT=LNEW+5
47313               IF(NRPT.GE.1000) LRPT=LNEW+6
47314               LLIN=LLIN-LRPT
47315               NRPT=NRPT+1
47316               WRITE(CHTMP,5400) NRPT
47317               LRPT=1
47318               IF(NRPT.GE.10) LRPT=2
47319               IF(NRPT.GE.100) LRPT=3
47320               IF(NRPT.GE.1000) LRPT=4
47321               CHCOM(1:LRPT+1+LNEW)=CHTMP(17-LRPT:16)//'*'//CHNEW(1:LNEW)
47322               LCOM=LRPT+1+LNEW
47323             ENDIF
47324  
47325 C...Add characters to end of line, to new line (after storing old line),
47326 C...or to new block of lines (after writing old block).
47327             IF(LLIN+LCOM.LE.70) THEN
47328               CHLIN(LLIN+1:LLIN+LCOM+1)=CHCOM(1:LCOM)//','
47329               LLIN=LLIN+LCOM+1
47330             ELSEIF(NLIN.LE.19) THEN
47331               CHLIN(LLIN+1:72)=' '
47332               CHBLK(NLIN)=CHLIN
47333               NLIN=NLIN+1
47334               CHLIN(6:6+LCOM+1)='&'//CHCOM(1:LCOM)//','
47335               LLIN=6+LCOM+1
47336             ELSE
47337               CHLIN(LLIN:72)='/'//' '
47338               CHBLK(NLIN)=CHLIN
47339               WRITE(CHTMP,5400) IDIM-NRPT
47340               CHBLK(1)(30:33)=CHTMP(13:16)
47341               DO 270 ILIN=1,NLIN
47342                 WRITE(LFN,5700) CHBLK(ILIN)
47343   270         CONTINUE
47344               NLIN=1
47345               CHLIN=' '
47346               CHLIN(7:35+LCOM+1)='DATA ('//CHVAR(IVAR)//
47347      &        ',I=    ,    )/'//CHCOM(1:LCOM)//','
47348               WRITE(CHTMP,5400) IDIM-NRPT+1
47349               CHLIN(25:28)=CHTMP(13:16)
47350               LLIN=35+LCOM+1
47351             ENDIF
47352   280     CONTINUE
47353  
47354 C...Write final block of lines.
47355           CHLIN(LLIN:72)='/'//' '
47356           CHBLK(NLIN)=CHLIN
47357           WRITE(CHTMP,5400) NDIM
47358           CHBLK(1)(30:33)=CHTMP(13:16)
47359           DO 290 ILIN=1,NLIN
47360             WRITE(LFN,5700) CHBLK(ILIN)
47361   290     CONTINUE
47362   300   CONTINUE
47363       ENDIF
47364  
47365 C...Formats for reading and writing particle data.
47366  5000 FORMAT(1X,I9,2X,A16,2X,A16,3I3,3F12.5,1P,E13.5,2I3)
47367  5100 FORMAT(10X,2I5,F12.6,5I10)
47368  5200 FORMAT(A120)
47369  5300 FORMAT(I9)
47370  5400 FORMAT(I16)
47371  5500 FORMAT(F16.5)
47372  5600 FORMAT(F16.6)
47373  5700 FORMAT(A72)
47374  
47375       RETURN
47376       END
47377  
47378 C*********************************************************************
47379  
47380 C...PYK
47381 C...Provides various integer-valued event related data.
47382  
47383       FUNCTION PYK(I,J)
47384  
47385 C...Double precision and integer declarations.
47386       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
47387       IMPLICIT INTEGER(I-N)
47388       INTEGER PYK,PYCHGE,PYCOMP
47389 C...Commonblocks.
47390       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
47391       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
47392       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
47393       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
47394  
47395 C...Default value. For I=0 number of entries, number of stable entries
47396 C...or 3 times total charge.
47397       PYK=0
47398       IF(I.LT.0.OR.I.GT.MSTU(4).OR.J.LE.0) THEN
47399       ELSEIF(I.EQ.0.AND.J.EQ.1) THEN
47400         PYK=N
47401       ELSEIF(I.EQ.0.AND.(J.EQ.2.OR.J.EQ.6)) THEN
47402         DO 100 I1=1,N
47403           IF(J.EQ.2.AND.K(I1,1).GE.1.AND.K(I1,1).LE.10) PYK=PYK+1
47404           IF(J.EQ.6.AND.K(I1,1).GE.1.AND.K(I1,1).LE.10) PYK=PYK+
47405      &    PYCHGE(K(I1,2))
47406   100   CONTINUE
47407       ELSEIF(I.EQ.0) THEN
47408  
47409 C...For I > 0 direct readout of K matrix or charge.
47410       ELSEIF(J.LE.5) THEN
47411         PYK=K(I,J)
47412       ELSEIF(J.EQ.6) THEN
47413         PYK=PYCHGE(K(I,2))
47414  
47415 C...Status (existing/fragmented/decayed), parton/hadron separation.
47416       ELSEIF(J.LE.8) THEN
47417         IF(K(I,1).GE.1.AND.K(I,1).LE.10) PYK=1
47418         IF(J.EQ.8) PYK=PYK*K(I,2)
47419       ELSEIF(J.LE.12) THEN
47420         KFA=IABS(K(I,2))
47421         KC=PYCOMP(KFA)
47422         KQ=0
47423         IF(KC.NE.0) KQ=KCHG(KC,2)
47424         IF(J.EQ.9.AND.KC.NE.0.AND.KQ.NE.0) PYK=K(I,2)
47425         IF(J.EQ.10.AND.KC.NE.0.AND.KQ.EQ.0) PYK=K(I,2)
47426         IF(J.EQ.11) PYK=KC
47427         IF(J.EQ.12) PYK=KQ*ISIGN(1,K(I,2))
47428  
47429 C...Heaviest flavour in hadron/diquark.
47430       ELSEIF(J.EQ.13) THEN
47431         KFA=IABS(K(I,2))
47432         PYK=MOD(KFA/100,10)*(-1)**MOD(KFA/100,10)
47433         IF(KFA.LT.10) PYK=KFA
47434         IF(MOD(KFA/1000,10).NE.0) PYK=MOD(KFA/1000,10)
47435         PYK=PYK*ISIGN(1,K(I,2))
47436  
47437 C...Particle history: generation, ancestor, rank.
47438       ELSEIF(J.LE.15) THEN
47439         I2=I
47440         I1=I
47441   110   PYK=PYK+1
47442         I2=I1
47443         I1=K(I1,3)
47444         IF(I1.GT.0) THEN
47445           IF(K(I1,1).GT.0.AND.K(I1,1).LE.20) GOTO 110
47446         ENDIF
47447         IF(J.EQ.15) PYK=I2
47448       ELSEIF(J.EQ.16) THEN
47449         KFA=IABS(K(I,2))
47450         IF(K(I,1).LE.20.AND.((KFA.GE.11.AND.KFA.LE.20).OR.KFA.EQ.22.OR.
47451      &  (KFA.GT.100.AND.MOD(KFA/10,10).NE.0))) THEN
47452           I1=I
47453   120     I2=I1
47454           I1=K(I1,3)
47455           IF(I1.GT.0) THEN
47456             KFAM=IABS(K(I1,2))
47457             ILP=1
47458             IF(KFAM.NE.0.AND.KFAM.LE.10) ILP=0
47459             IF(KFAM.EQ.21.OR.KFAM.EQ.91.OR.KFAM.EQ.92.OR.KFAM.EQ.93)
47460      &      ILP=0
47461             IF(KFAM.GT.100.AND.MOD(KFAM/10,10).EQ.0) ILP=0
47462             IF(ILP.EQ.1) GOTO 120
47463           ENDIF
47464           IF(K(I1,1).EQ.12) THEN
47465             DO 130 I3=I1+1,I2
47466               IF(K(I3,3).EQ.K(I2,3).AND.K(I3,2).NE.91.AND.K(I3,2).NE.92
47467      &        .AND.K(I3,2).NE.93) PYK=PYK+1
47468   130       CONTINUE
47469           ELSE
47470             I3=I2
47471   140       PYK=PYK+1
47472             I3=I3+1
47473             IF(I3.LT.N.AND.K(I3,3).EQ.K(I2,3)) GOTO 140
47474           ENDIF
47475         ENDIF
47476  
47477 C...Particle coming from collapsing jet system or not.
47478       ELSEIF(J.EQ.17) THEN
47479         I1=I
47480   150   PYK=PYK+1
47481         I3=I1
47482         I1=K(I1,3)
47483         I0=MAX(1,I1)
47484         KC=PYCOMP(K(I0,2))
47485         IF(I1.EQ.0.OR.K(I0,1).LE.0.OR.K(I0,1).GT.20.OR.KC.EQ.0) THEN
47486           IF(PYK.EQ.1) PYK=-1
47487           IF(PYK.GT.1) PYK=0
47488           RETURN
47489         ENDIF
47490         IF(KCHG(KC,2).EQ.0) GOTO 150
47491         IF(K(I1,1).NE.12) PYK=0
47492         IF(K(I1,1).NE.12) RETURN
47493         I2=I1
47494   160   I2=I2+1
47495         IF(I2.LT.N.AND.K(I2,1).NE.11) GOTO 160
47496         K3M=K(I3-1,3)
47497         IF(K3M.GE.I1.AND.K3M.LE.I2) PYK=0
47498         K3P=K(I3+1,3)
47499         IF(I3.LT.N.AND.K3P.GE.I1.AND.K3P.LE.I2) PYK=0
47500  
47501 C...Number of decay products. Colour flow.
47502       ELSEIF(J.EQ.18) THEN
47503         IF(K(I,1).EQ.11.OR.K(I,1).EQ.12) PYK=MAX(0,K(I,5)-K(I,4)+1)
47504         IF(K(I,4).EQ.0.OR.K(I,5).EQ.0) PYK=0
47505       ELSEIF(J.LE.22) THEN
47506         IF(K(I,1).NE.3.AND.K(I,1).NE.13.AND.K(I,1).NE.14) RETURN
47507         IF(J.EQ.19) PYK=MOD(K(I,4)/MSTU(5),MSTU(5))
47508         IF(J.EQ.20) PYK=MOD(K(I,5)/MSTU(5),MSTU(5))
47509         IF(J.EQ.21) PYK=MOD(K(I,4),MSTU(5))
47510         IF(J.EQ.22) PYK=MOD(K(I,5),MSTU(5))
47511       ELSE
47512       ENDIF
47513  
47514       RETURN
47515       END
47516  
47517 C*********************************************************************
47518  
47519 C...PYP
47520 C...Provides various real-valued event related data.
47521  
47522       FUNCTION PYP(I,J)
47523  
47524 C...Double precision and integer declarations.
47525       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
47526       IMPLICIT INTEGER(I-N)
47527       INTEGER PYK,PYCHGE,PYCOMP
47528 C...Commonblocks.
47529       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
47530       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
47531       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
47532       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
47533 C...Local array.
47534       DIMENSION PSUM(4)
47535  
47536 C...Set default value. For I = 0 sum of momenta or charges,
47537 C...or invariant mass of system.
47538       PYP=0D0
47539       IF(I.LT.0.OR.I.GT.MSTU(4).OR.J.LE.0) THEN
47540       ELSEIF(I.EQ.0.AND.J.LE.4) THEN
47541         DO 100 I1=1,N
47542           IF(K(I1,1).GT.0.AND.K(I1,1).LE.10) PYP=PYP+P(I1,J)
47543   100   CONTINUE
47544       ELSEIF(I.EQ.0.AND.J.EQ.5) THEN
47545         DO 120 J1=1,4
47546           PSUM(J1)=0D0
47547           DO 110 I1=1,N
47548             IF(K(I1,1).GT.0.AND.K(I1,1).LE.10) PSUM(J1)=PSUM(J1)+
47549      &      P(I1,J1)
47550   110     CONTINUE
47551   120   CONTINUE
47552         PYP=SQRT(MAX(0D0,PSUM(4)**2-PSUM(1)**2-PSUM(2)**2-PSUM(3)**2))
47553       ELSEIF(I.EQ.0.AND.J.EQ.6) THEN
47554         DO 130 I1=1,N
47555           IF(K(I1,1).GT.0.AND.K(I1,1).LE.10) PYP=PYP+PYCHGE(K(I1,2))/3D0
47556   130   CONTINUE
47557       ELSEIF(I.EQ.0) THEN
47558  
47559 C...Direct readout of P matrix.
47560       ELSEIF(J.LE.5) THEN
47561         PYP=P(I,J)
47562  
47563 C...Charge, total momentum, transverse momentum, transverse mass.
47564       ELSEIF(J.LE.12) THEN
47565         IF(J.EQ.6) PYP=PYCHGE(K(I,2))/3D0
47566         IF(J.EQ.7.OR.J.EQ.8) PYP=P(I,1)**2+P(I,2)**2+P(I,3)**2
47567         IF(J.EQ.9.OR.J.EQ.10) PYP=P(I,1)**2+P(I,2)**2
47568         IF(J.EQ.11.OR.J.EQ.12) PYP=P(I,5)**2+P(I,1)**2+P(I,2)**2
47569         IF(J.EQ.8.OR.J.EQ.10.OR.J.EQ.12) PYP=SQRT(PYP)
47570  
47571 C...Theta and phi angle in radians or degrees.
47572       ELSEIF(J.LE.16) THEN
47573         IF(J.LE.14) PYP=PYANGL(P(I,3),SQRT(P(I,1)**2+P(I,2)**2))
47574         IF(J.GE.15) PYP=PYANGL(P(I,1),P(I,2))
47575         IF(J.EQ.14.OR.J.EQ.16) PYP=PYP*180D0/PARU(1)
47576  
47577 C...True rapidity, rapidity with pion mass, pseudorapidity.
47578       ELSEIF(J.LE.19) THEN
47579         PMR=0D0
47580         IF(J.EQ.17) PMR=P(I,5)
47581         IF(J.EQ.18) PMR=PYMASS(211)
47582         PR=MAX(1D-20,PMR**2+P(I,1)**2+P(I,2)**2)
47583         PYP=SIGN(LOG(MIN((SQRT(PR+P(I,3)**2)+ABS(P(I,3)))/SQRT(PR),
47584      &  1D20)),P(I,3))
47585  
47586 C...Energy and momentum fractions (only to be used in CM frame).
47587       ELSEIF(J.LE.25) THEN
47588         IF(J.EQ.20) PYP=2D0*SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)/PARU(21)
47589         IF(J.EQ.21) PYP=2D0*P(I,3)/PARU(21)
47590         IF(J.EQ.22) PYP=2D0*SQRT(P(I,1)**2+P(I,2)**2)/PARU(21)
47591         IF(J.EQ.23) PYP=2D0*P(I,4)/PARU(21)
47592         IF(J.EQ.24) PYP=(P(I,4)+P(I,3))/PARU(21)
47593         IF(J.EQ.25) PYP=(P(I,4)-P(I,3))/PARU(21)
47594       ENDIF
47595  
47596       RETURN
47597       END
47598  
47599 C*********************************************************************
47600  
47601 C...PYSPHE
47602 C...Performs sphericity tensor analysis to give sphericity,
47603 C...aplanarity and the related event axes.
47604  
47605       SUBROUTINE PYSPHE(SPH,APL)
47606  
47607 C...Double precision and integer declarations.
47608       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
47609       IMPLICIT INTEGER(I-N)
47610       INTEGER PYK,PYCHGE,PYCOMP
47611 C...Commonblocks.
47612       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
47613       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
47614       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
47615       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
47616 C...Local arrays.
47617       DIMENSION SM(3,3),SV(3,3)
47618  
47619 C...Calculate matrix to be diagonalized.
47620       NP=0
47621       DO 110 J1=1,3
47622         DO 100 J2=J1,3
47623           SM(J1,J2)=0D0
47624   100   CONTINUE
47625   110 CONTINUE
47626       PS=0D0
47627       DO 140 I=1,N
47628         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 140
47629         IF(MSTU(41).GE.2) THEN
47630           KC=PYCOMP(K(I,2))
47631           IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
47632      &    KC.EQ.18) GOTO 140
47633           IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
47634      &    GOTO 140
47635         ENDIF
47636         NP=NP+1
47637         PA=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
47638         PWT=1D0
47639         IF(ABS(PARU(41)-2D0).GT.0.001D0) PWT=
47640      &  MAX(1D-10,PA)**(PARU(41)-2D0)
47641         DO 130 J1=1,3
47642           DO 120 J2=J1,3
47643             SM(J1,J2)=SM(J1,J2)+PWT*P(I,J1)*P(I,J2)
47644   120     CONTINUE
47645   130   CONTINUE
47646         PS=PS+PWT*PA**2
47647   140 CONTINUE
47648  
47649 C...Very low multiplicities (0 or 1) not considered.
47650       IF(NP.LE.1) THEN
47651         CALL PYERRM(8,'(PYSPHE:) too few particles for analysis')
47652         SPH=-1D0
47653         APL=-1D0
47654         RETURN
47655       ENDIF
47656       DO 160 J1=1,3
47657         DO 150 J2=J1,3
47658           SM(J1,J2)=SM(J1,J2)/PS
47659   150   CONTINUE
47660   160 CONTINUE
47661  
47662 C...Find eigenvalues to matrix (third degree equation).
47663       SQ=(SM(1,1)*SM(2,2)+SM(1,1)*SM(3,3)+SM(2,2)*SM(3,3)-
47664      &SM(1,2)**2-SM(1,3)**2-SM(2,3)**2)/3D0-1D0/9D0
47665       SR=-0.5D0*(SQ+1D0/9D0+SM(1,1)*SM(2,3)**2+SM(2,2)*SM(1,3)**2+
47666      &SM(3,3)*SM(1,2)**2-SM(1,1)*SM(2,2)*SM(3,3))+
47667      &SM(1,2)*SM(1,3)*SM(2,3)+1D0/27D0
47668       SP=COS(ACOS(MAX(MIN(SR/SQRT(-SQ**3),1D0),-1D0))/3D0)
47669       P(N+1,4)=1D0/3D0+SQRT(-SQ)*MAX(2D0*SP,SQRT(3D0*(1D0-SP**2))-SP)
47670       P(N+3,4)=1D0/3D0+SQRT(-SQ)*MIN(2D0*SP,-SQRT(3D0*(1D0-SP**2))-SP)
47671       P(N+2,4)=1D0-P(N+1,4)-P(N+3,4)
47672       IF(P(N+2,4).LT.1D-5) THEN
47673         CALL PYERRM(8,'(PYSPHE:) all particles back-to-back')
47674         SPH=-1D0
47675         APL=-1D0
47676         RETURN
47677       ENDIF
47678  
47679 C...Find first and last eigenvector by solving equation system.
47680       DO 240 I=1,3,2
47681         DO 180 J1=1,3
47682           SV(J1,J1)=SM(J1,J1)-P(N+I,4)
47683           DO 170 J2=J1+1,3
47684             SV(J1,J2)=SM(J1,J2)
47685             SV(J2,J1)=SM(J1,J2)
47686   170     CONTINUE
47687   180   CONTINUE
47688         SMAX=0D0
47689         DO 200 J1=1,3
47690           DO 190 J2=1,3
47691             IF(ABS(SV(J1,J2)).LE.SMAX) GOTO 190
47692             JA=J1
47693             JB=J2
47694             SMAX=ABS(SV(J1,J2))
47695   190     CONTINUE
47696   200   CONTINUE
47697         SMAX=0D0
47698         DO 220 J3=JA+1,JA+2
47699           J1=J3-3*((J3-1)/3)
47700           RL=SV(J1,JB)/SV(JA,JB)
47701           DO 210 J2=1,3
47702             SV(J1,J2)=SV(J1,J2)-RL*SV(JA,J2)
47703             IF(ABS(SV(J1,J2)).LE.SMAX) GOTO 210
47704             JC=J1
47705             SMAX=ABS(SV(J1,J2))
47706   210     CONTINUE
47707   220   CONTINUE
47708         JB1=JB+1-3*(JB/3)
47709         JB2=JB+2-3*((JB+1)/3)
47710         P(N+I,JB1)=-SV(JC,JB2)
47711         P(N+I,JB2)=SV(JC,JB1)
47712         P(N+I,JB)=-(SV(JA,JB1)*P(N+I,JB1)+SV(JA,JB2)*P(N+I,JB2))/
47713      &  SV(JA,JB)
47714         PA=SQRT(P(N+I,1)**2+P(N+I,2)**2+P(N+I,3)**2)
47715         SGN=(-1D0)**INT(PYR(0)+0.5D0)
47716         DO 230 J=1,3
47717           P(N+I,J)=SGN*P(N+I,J)/PA
47718   230   CONTINUE
47719   240 CONTINUE
47720  
47721 C...Middle axis orthogonal to other two. Fill other codes.
47722       SGN=(-1D0)**INT(PYR(0)+0.5D0)
47723       P(N+2,1)=SGN*(P(N+1,2)*P(N+3,3)-P(N+1,3)*P(N+3,2))
47724       P(N+2,2)=SGN*(P(N+1,3)*P(N+3,1)-P(N+1,1)*P(N+3,3))
47725       P(N+2,3)=SGN*(P(N+1,1)*P(N+3,2)-P(N+1,2)*P(N+3,1))
47726       DO 260 I=1,3
47727         K(N+I,1)=31
47728         K(N+I,2)=95
47729         K(N+I,3)=I
47730         K(N+I,4)=0
47731         K(N+I,5)=0
47732         P(N+I,5)=0D0
47733         DO 250 J=1,5
47734           V(I,J)=0D0
47735   250   CONTINUE
47736   260 CONTINUE
47737  
47738 C...Calculate sphericity and aplanarity. Select storing option.
47739       SPH=1.5D0*(P(N+2,4)+P(N+3,4))
47740       APL=1.5D0*P(N+3,4)
47741       MSTU(61)=N+1
47742       MSTU(62)=NP
47743       IF(MSTU(43).LE.1) MSTU(3)=3
47744       IF(MSTU(43).GE.2) N=N+3
47745  
47746       RETURN
47747       END
47748  
47749 C*********************************************************************
47750  
47751 C...PYTHRU
47752 C...Performs thrust analysis to give thrust, oblateness
47753 C...and the related event axes.
47754  
47755       SUBROUTINE PYTHRU(THR,OBL)
47756  
47757 C...Double precision and integer declarations.
47758       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
47759       IMPLICIT INTEGER(I-N)
47760       INTEGER PYK,PYCHGE,PYCOMP
47761 C...Commonblocks.
47762       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
47763       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
47764       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
47765       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
47766 C...Local arrays.
47767       DIMENSION TDI(3),TPR(3)
47768  
47769 C...Take copy of particles that are to be considered in thrust analysis.
47770       NP=0
47771       PS=0D0
47772       DO 100 I=1,N
47773         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
47774         IF(MSTU(41).GE.2) THEN
47775           KC=PYCOMP(K(I,2))
47776           IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
47777      &    KC.EQ.18) GOTO 100
47778           IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
47779      &    GOTO 100
47780         ENDIF
47781         IF(N+NP+MSTU(44)+15.GE.MSTU(4)-MSTU(32)-5) THEN
47782           CALL PYERRM(11,'(PYTHRU:) no more memory left in PYJETS')
47783           THR=-2D0
47784           OBL=-2D0
47785           RETURN
47786         ENDIF
47787         NP=NP+1
47788         K(N+NP,1)=23
47789         P(N+NP,1)=P(I,1)
47790         P(N+NP,2)=P(I,2)
47791         P(N+NP,3)=P(I,3)
47792         P(N+NP,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
47793         P(N+NP,5)=1D0
47794         IF(ABS(PARU(42)-1D0).GT.0.001D0) P(N+NP,5)=
47795      &  P(N+NP,4)**(PARU(42)-1D0)
47796         PS=PS+P(N+NP,4)*P(N+NP,5)
47797   100 CONTINUE
47798  
47799 C...Very low multiplicities (0 or 1) not considered.
47800       IF(NP.LE.1) THEN
47801         CALL PYERRM(8,'(PYTHRU:) too few particles for analysis')
47802         THR=-1D0
47803         OBL=-1D0
47804         RETURN
47805       ENDIF
47806  
47807 C...Loop over thrust and major. T axis along z direction in latter case.
47808       DO 320 ILD=1,2
47809         IF(ILD.EQ.2) THEN
47810           K(N+NP+1,1)=31
47811           PHI=PYANGL(P(N+NP+1,1),P(N+NP+1,2))
47812           MSTU(33)=1
47813           CALL PYROBO(N+1,N+NP+1,0D0,-PHI,0D0,0D0,0D0)
47814           THE=PYANGL(P(N+NP+1,3),P(N+NP+1,1))
47815           CALL PYROBO(N+1,N+NP+1,-THE,0D0,0D0,0D0,0D0)
47816         ENDIF
47817  
47818 C...Find and order particles with highest p (pT for major).
47819         DO 110 ILF=N+NP+4,N+NP+MSTU(44)+4
47820           P(ILF,4)=0D0
47821   110   CONTINUE
47822         DO 160 I=N+1,N+NP
47823           IF(ILD.EQ.2) P(I,4)=SQRT(P(I,1)**2+P(I,2)**2)
47824           DO 130 ILF=N+NP+MSTU(44)+3,N+NP+4,-1
47825             IF(P(I,4).LE.P(ILF,4)) GOTO 140
47826             DO 120 J=1,5
47827               P(ILF+1,J)=P(ILF,J)
47828   120       CONTINUE
47829   130     CONTINUE
47830           ILF=N+NP+3
47831   140     DO 150 J=1,5
47832             P(ILF+1,J)=P(I,J)
47833   150     CONTINUE
47834   160   CONTINUE
47835  
47836 C...Find and order initial axes with highest thrust (major).
47837         DO 170 ILG=N+NP+MSTU(44)+5,N+NP+MSTU(44)+15
47838           P(ILG,4)=0D0
47839   170   CONTINUE
47840         NC=2**(MIN(MSTU(44),NP)-1)
47841         DO 250 ILC=1,NC
47842           DO 180 J=1,3
47843             TDI(J)=0D0
47844   180     CONTINUE
47845           DO 200 ILF=1,MIN(MSTU(44),NP)
47846             SGN=P(N+NP+ILF+3,5)
47847             IF(2**ILF*((ILC+2**(ILF-1)-1)/2**ILF).GE.ILC) SGN=-SGN
47848             DO 190 J=1,4-ILD
47849               TDI(J)=TDI(J)+SGN*P(N+NP+ILF+3,J)
47850   190       CONTINUE
47851   200     CONTINUE
47852           TDS=TDI(1)**2+TDI(2)**2+TDI(3)**2
47853           DO 220 ILG=N+NP+MSTU(44)+MIN(ILC,10)+4,N+NP+MSTU(44)+5,-1
47854             IF(TDS.LE.P(ILG,4)) GOTO 230
47855             DO 210 J=1,4
47856               P(ILG+1,J)=P(ILG,J)
47857   210       CONTINUE
47858   220     CONTINUE
47859           ILG=N+NP+MSTU(44)+4
47860   230     DO 240 J=1,3
47861             P(ILG+1,J)=TDI(J)
47862   240     CONTINUE
47863           P(ILG+1,4)=TDS
47864   250   CONTINUE
47865  
47866 C...Iterate direction of axis until stable maximum.
47867         P(N+NP+ILD,4)=0D0
47868         ILG=0
47869   260   ILG=ILG+1
47870         THP=0D0
47871   270   THPS=THP
47872         DO 280 J=1,3
47873           IF(THP.LE.1D-10) TDI(J)=P(N+NP+MSTU(44)+4+ILG,J)
47874           IF(THP.GT.1D-10) TDI(J)=TPR(J)
47875           TPR(J)=0D0
47876   280   CONTINUE
47877         DO 300 I=N+1,N+NP
47878           SGN=SIGN(P(I,5),TDI(1)*P(I,1)+TDI(2)*P(I,2)+TDI(3)*P(I,3))
47879           DO 290 J=1,4-ILD
47880             TPR(J)=TPR(J)+SGN*P(I,J)
47881   290     CONTINUE
47882   300   CONTINUE
47883         THP=SQRT(TPR(1)**2+TPR(2)**2+TPR(3)**2)/PS
47884         IF(THP.GE.THPS+PARU(48)) GOTO 270
47885  
47886 C...Save good axis. Try new initial axis until a number of tries agree.
47887         IF(THP.LT.P(N+NP+ILD,4)-PARU(48).AND.ILG.LT.MIN(10,NC)) GOTO 260
47888         IF(THP.GT.P(N+NP+ILD,4)+PARU(48)) THEN
47889           IAGR=0
47890           SGN=(-1D0)**INT(PYR(0)+0.5D0)
47891           DO 310 J=1,3
47892             P(N+NP+ILD,J)=SGN*TPR(J)/(PS*THP)
47893   310     CONTINUE
47894           P(N+NP+ILD,4)=THP
47895           P(N+NP+ILD,5)=0D0
47896         ENDIF
47897         IAGR=IAGR+1
47898         IF(IAGR.LT.MSTU(45).AND.ILG.LT.MIN(10,NC)) GOTO 260
47899   320 CONTINUE
47900  
47901 C...Find minor axis and value by orthogonality.
47902       SGN=(-1D0)**INT(PYR(0)+0.5D0)
47903       P(N+NP+3,1)=-SGN*P(N+NP+2,2)
47904       P(N+NP+3,2)=SGN*P(N+NP+2,1)
47905       P(N+NP+3,3)=0D0
47906       THP=0D0
47907       DO 330 I=N+1,N+NP
47908         THP=THP+P(I,5)*ABS(P(N+NP+3,1)*P(I,1)+P(N+NP+3,2)*P(I,2))
47909   330 CONTINUE
47910       P(N+NP+3,4)=THP/PS
47911       P(N+NP+3,5)=0D0
47912  
47913 C...Fill axis information. Rotate back to original coordinate system.
47914       DO 350 ILD=1,3
47915         K(N+ILD,1)=31
47916         K(N+ILD,2)=96
47917         K(N+ILD,3)=ILD
47918         K(N+ILD,4)=0
47919         K(N+ILD,5)=0
47920         DO 340 J=1,5
47921           P(N+ILD,J)=P(N+NP+ILD,J)
47922           V(N+ILD,J)=0D0
47923   340   CONTINUE
47924   350 CONTINUE
47925       CALL PYROBO(N+1,N+3,THE,PHI,0D0,0D0,0D0)
47926  
47927 C...Calculate thrust and oblateness. Select storing option.
47928       THR=P(N+1,4)
47929       OBL=P(N+2,4)-P(N+3,4)
47930       MSTU(61)=N+1
47931       MSTU(62)=NP
47932       IF(MSTU(43).LE.1) MSTU(3)=3
47933       IF(MSTU(43).GE.2) N=N+3
47934  
47935       RETURN
47936       END
47937  
47938 C*********************************************************************
47939  
47940 C...PYCLUS
47941 C...Subdivides the particle content of an event into jets/clusters.
47942  
47943       SUBROUTINE PYCLUS(NJET)
47944  
47945 C...Double precision and integer declarations.
47946       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
47947       IMPLICIT INTEGER(I-N)
47948       INTEGER PYK,PYCHGE,PYCOMP
47949 C...Commonblocks.
47950       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
47951       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
47952       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
47953       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
47954 C...Local arrays and saved variables.
47955       DIMENSION PS(5)
47956       SAVE NSAV,NP,PS,PSS,RINIT,NPRE,NREM
47957  
47958 C...Functions: distance measure in pT, (pseudo)mass or Durham pT.
47959       R2T(I1,I2)=(P(I1,5)*P(I2,5)-P(I1,1)*P(I2,1)-P(I1,2)*P(I2,2)-
47960      &P(I1,3)*P(I2,3))*2D0*P(I1,5)*P(I2,5)/(0.0001D0+P(I1,5)+P(I2,5))**2
47961       R2M(I1,I2)=2D0*P(I1,4)*P(I2,4)*(1D0-(P(I1,1)*P(I2,1)+P(I1,2)*
47962      &P(I2,2)+P(I1,3)*P(I2,3))/(P(I1,5)*P(I2,5)))
47963       R2D(I1,I2)=2D0*MIN(P(I1,4),P(I2,4))**2*(1D0-(P(I1,1)*P(I2,1)+
47964      &P(I1,2)*P(I2,2)+P(I1,3)*P(I2,3))/(P(I1,5)*P(I2,5)))
47965  
47966 C...If first time, reset. If reentering, skip preliminaries.
47967       IF(MSTU(48).LE.0) THEN
47968         NP=0
47969         DO 100 J=1,5
47970           PS(J)=0D0
47971   100   CONTINUE
47972         PSS=0D0
47973         PIMASS=PMAS(PYCOMP(211),1)
47974       ELSE
47975         NJET=NSAV
47976         IF(MSTU(43).GE.2) N=N-NJET
47977         DO 110 I=N+1,N+NJET
47978           P(I,5)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
47979   110   CONTINUE
47980         IF(MSTU(46).LE.3.OR.MSTU(46).EQ.5) THEN
47981           R2ACC=PARU(44)**2
47982         ELSE
47983           R2ACC=PARU(45)*PS(5)**2
47984         ENDIF
47985         NLOOP=0
47986         GOTO 300
47987       ENDIF
47988  
47989 C...Find which particles are to be considered in cluster search.
47990       DO 140 I=1,N
47991         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 140
47992         IF(MSTU(41).GE.2) THEN
47993           KC=PYCOMP(K(I,2))
47994           IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
47995      &    KC.EQ.18) GOTO 140
47996           IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
47997      &    GOTO 140
47998         ENDIF
47999         IF(N+2*NP.GE.MSTU(4)-MSTU(32)-5) THEN
48000           CALL PYERRM(11,'(PYCLUS:) no more memory left in PYJETS')
48001           NJET=-1
48002           RETURN
48003         ENDIF
48004  
48005 C...Take copy of these particles, with space left for jets later on.
48006         NP=NP+1
48007         K(N+NP,3)=I
48008         DO 120 J=1,5
48009           P(N+NP,J)=P(I,J)
48010   120   CONTINUE
48011         IF(MSTU(42).EQ.0) P(N+NP,5)=0D0
48012         IF(MSTU(42).EQ.1.AND.K(I,2).NE.22) P(N+NP,5)=PIMASS
48013         P(N+NP,4)=SQRT(P(N+NP,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
48014         P(N+NP,5)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
48015         DO 130 J=1,4
48016           PS(J)=PS(J)+P(N+NP,J)
48017   130   CONTINUE
48018         PSS=PSS+P(N+NP,5)
48019   140 CONTINUE
48020       DO 160 I=N+1,N+NP
48021         K(I+NP,3)=K(I,3)
48022         DO 150 J=1,5
48023           P(I+NP,J)=P(I,J)
48024   150   CONTINUE
48025   160 CONTINUE
48026       PS(5)=SQRT(MAX(0D0,PS(4)**2-PS(1)**2-PS(2)**2-PS(3)**2))
48027  
48028 C...Very low multiplicities not considered.
48029       IF(NP.LT.MSTU(47)) THEN
48030         CALL PYERRM(8,'(PYCLUS:) too few particles for analysis')
48031         NJET=-1
48032         RETURN
48033       ENDIF
48034  
48035 C...Find precluster configuration. If too few jets, make harder cuts.
48036       NLOOP=0
48037       IF(MSTU(46).LE.3.OR.MSTU(46).EQ.5) THEN
48038         R2ACC=PARU(44)**2
48039       ELSE
48040         R2ACC=PARU(45)*PS(5)**2
48041       ENDIF
48042       RINIT=1.25D0*PARU(43)
48043       IF(NP.LE.MSTU(47)+2) RINIT=0D0
48044   170 RINIT=0.8D0*RINIT
48045       NPRE=0
48046       NREM=NP
48047       DO 180 I=N+NP+1,N+2*NP
48048         K(I,4)=0
48049   180 CONTINUE
48050  
48051 C...Sum up small momentum region. Jet if enough absolute momentum.
48052       IF(MSTU(46).LE.2) THEN
48053         DO 190 J=1,4
48054           P(N+1,J)=0D0
48055   190   CONTINUE
48056         DO 210 I=N+NP+1,N+2*NP
48057           IF(P(I,5).GT.2D0*RINIT) GOTO 210
48058           NREM=NREM-1
48059           K(I,4)=1
48060           DO 200 J=1,4
48061             P(N+1,J)=P(N+1,J)+P(I,J)
48062   200     CONTINUE
48063   210   CONTINUE
48064         P(N+1,5)=SQRT(P(N+1,1)**2+P(N+1,2)**2+P(N+1,3)**2)
48065         IF(P(N+1,5).GT.2D0*RINIT) NPRE=1
48066         IF(RINIT.GE.0.2D0*PARU(43).AND.NPRE+NREM.LT.MSTU(47)) GOTO 170
48067         IF(NREM.EQ.0) GOTO 170
48068       ENDIF
48069  
48070 C...Find fastest remaining particle.
48071   220 NPRE=NPRE+1
48072       PMAX=0D0
48073       DO 230 I=N+NP+1,N+2*NP
48074         IF(K(I,4).NE.0.OR.P(I,5).LE.PMAX) GOTO 230
48075         IMAX=I
48076         PMAX=P(I,5)
48077   230 CONTINUE
48078       DO 240 J=1,5
48079         P(N+NPRE,J)=P(IMAX,J)
48080   240 CONTINUE
48081       NREM=NREM-1
48082       K(IMAX,4)=NPRE
48083  
48084 C...Sum up precluster around it according to pT separation.
48085       IF(MSTU(46).LE.2) THEN
48086         DO 260 I=N+NP+1,N+2*NP
48087           IF(K(I,4).NE.0) GOTO 260
48088           R2=R2T(I,IMAX)
48089           IF(R2.GT.RINIT**2) GOTO 260
48090           NREM=NREM-1
48091           K(I,4)=NPRE
48092           DO 250 J=1,4
48093             P(N+NPRE,J)=P(N+NPRE,J)+P(I,J)
48094   250     CONTINUE
48095   260   CONTINUE
48096         P(N+NPRE,5)=SQRT(P(N+NPRE,1)**2+P(N+NPRE,2)**2+P(N+NPRE,3)**2)
48097  
48098 C...Sum up precluster around it according to mass or
48099 C...Durham pT separation.
48100       ELSE
48101   270   IMIN=0
48102         R2MIN=RINIT**2
48103         DO 280 I=N+NP+1,N+2*NP
48104           IF(K(I,4).NE.0) GOTO 280
48105           IF(MSTU(46).LE.4) THEN
48106             R2=R2M(I,N+NPRE)
48107           ELSE
48108             R2=R2D(I,N+NPRE)
48109           ENDIF
48110           IF(R2.GE.R2MIN) GOTO 280
48111           IMIN=I
48112           R2MIN=R2
48113   280   CONTINUE
48114         IF(IMIN.NE.0) THEN
48115           DO 290 J=1,4
48116             P(N+NPRE,J)=P(N+NPRE,J)+P(IMIN,J)
48117   290     CONTINUE
48118           P(N+NPRE,5)=SQRT(P(N+NPRE,1)**2+P(N+NPRE,2)**2+P(N+NPRE,3)**2)
48119           NREM=NREM-1
48120           K(IMIN,4)=NPRE
48121           GOTO 270
48122         ENDIF
48123       ENDIF
48124  
48125 C...Check if more preclusters to be found. Start over if too few.
48126       IF(RINIT.GE.0.2D0*PARU(43).AND.NPRE+NREM.LT.MSTU(47)) GOTO 170
48127       IF(NREM.GT.0) GOTO 220
48128       NJET=NPRE
48129  
48130 C...Reassign all particles to nearest jet. Sum up new jet momenta.
48131   300 TSAV=0D0
48132       PSJT=0D0
48133   310 IF(MSTU(46).LE.1) THEN
48134         DO 330 I=N+1,N+NJET
48135           DO 320 J=1,4
48136             V(I,J)=0D0
48137   320     CONTINUE
48138   330   CONTINUE
48139         DO 360 I=N+NP+1,N+2*NP
48140           R2MIN=PSS**2
48141           DO 340 IJET=N+1,N+NJET
48142             IF(P(IJET,5).LT.RINIT) GOTO 340
48143             R2=R2T(I,IJET)
48144             IF(R2.GE.R2MIN) GOTO 340
48145             IMIN=IJET
48146             R2MIN=R2
48147   340     CONTINUE
48148           K(I,4)=IMIN-N
48149           DO 350 J=1,4
48150             V(IMIN,J)=V(IMIN,J)+P(I,J)
48151   350     CONTINUE
48152   360   CONTINUE
48153         PSJT=0D0
48154         DO 380 I=N+1,N+NJET
48155           DO 370 J=1,4
48156             P(I,J)=V(I,J)
48157   370     CONTINUE
48158           P(I,5)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
48159           PSJT=PSJT+P(I,5)
48160   380   CONTINUE
48161       ENDIF
48162  
48163 C...Find two closest jets.
48164       R2MIN=2D0*MAX(R2ACC,PS(5)**2)
48165       DO 400 ITRY1=N+1,N+NJET-1
48166         DO 390 ITRY2=ITRY1+1,N+NJET
48167           IF(MSTU(46).LE.2) THEN
48168             R2=R2T(ITRY1,ITRY2)
48169           ELSEIF(MSTU(46).LE.4) THEN
48170             R2=R2M(ITRY1,ITRY2)
48171           ELSE
48172             R2=R2D(ITRY1,ITRY2)
48173           ENDIF
48174           IF(R2.GE.R2MIN) GOTO 390
48175           IMIN1=ITRY1
48176           IMIN2=ITRY2
48177           R2MIN=R2
48178   390   CONTINUE
48179   400 CONTINUE
48180  
48181 C...If allowed, join two closest jets and start over.
48182       IF(NJET.GT.MSTU(47).AND.R2MIN.LT.R2ACC) THEN
48183         IREC=MIN(IMIN1,IMIN2)
48184         IDEL=MAX(IMIN1,IMIN2)
48185         DO 410 J=1,4
48186           P(IREC,J)=P(IMIN1,J)+P(IMIN2,J)
48187   410   CONTINUE
48188         P(IREC,5)=SQRT(P(IREC,1)**2+P(IREC,2)**2+P(IREC,3)**2)
48189         DO 430 I=IDEL+1,N+NJET
48190           DO 420 J=1,5
48191             P(I-1,J)=P(I,J)
48192   420     CONTINUE
48193   430   CONTINUE
48194         IF(MSTU(46).GE.2) THEN
48195           DO 440 I=N+NP+1,N+2*NP
48196             IORI=N+K(I,4)
48197             IF(IORI.EQ.IDEL) K(I,4)=IREC-N
48198             IF(IORI.GT.IDEL) K(I,4)=K(I,4)-1
48199   440     CONTINUE
48200         ENDIF
48201         NJET=NJET-1
48202         GOTO 300
48203  
48204 C...Divide up broad jet if empty cluster in list of final ones.
48205       ELSEIF(NJET.EQ.MSTU(47).AND.MSTU(46).LE.1.AND.NLOOP.LE.2) THEN
48206         DO 450 I=N+1,N+NJET
48207           K(I,5)=0
48208   450   CONTINUE
48209         DO 460 I=N+NP+1,N+2*NP
48210           K(N+K(I,4),5)=K(N+K(I,4),5)+1
48211   460   CONTINUE
48212         IEMP=0
48213         DO 470 I=N+1,N+NJET
48214           IF(K(I,5).EQ.0) IEMP=I
48215   470   CONTINUE
48216         IF(IEMP.NE.0) THEN
48217           NLOOP=NLOOP+1
48218           ISPL=0
48219           R2MAX=0D0
48220           DO 480 I=N+NP+1,N+2*NP
48221             IF(K(N+K(I,4),5).LE.1.OR.P(I,5).LT.RINIT) GOTO 480
48222             IJET=N+K(I,4)
48223             R2=R2T(I,IJET)
48224             IF(R2.LE.R2MAX) GOTO 480
48225             ISPL=I
48226             R2MAX=R2
48227   480     CONTINUE
48228           IF(ISPL.NE.0) THEN
48229             IJET=N+K(ISPL,4)
48230             DO 490 J=1,4
48231               P(IEMP,J)=P(ISPL,J)
48232               P(IJET,J)=P(IJET,J)-P(ISPL,J)
48233   490       CONTINUE
48234             P(IEMP,5)=P(ISPL,5)
48235             P(IJET,5)=SQRT(P(IJET,1)**2+P(IJET,2)**2+P(IJET,3)**2)
48236             IF(NLOOP.LE.2) GOTO 300
48237           ENDIF
48238         ENDIF
48239       ENDIF
48240  
48241 C...If generalized thrust has not yet converged, continue iteration.
48242       IF(MSTU(46).LE.1.AND.NLOOP.LE.2.AND.PSJT/PSS.GT.TSAV+PARU(48))
48243      &THEN
48244         TSAV=PSJT/PSS
48245         GOTO 310
48246       ENDIF
48247  
48248 C...Reorder jets according to energy.
48249       DO 510 I=N+1,N+NJET
48250         DO 500 J=1,5
48251           V(I,J)=P(I,J)
48252   500   CONTINUE
48253   510 CONTINUE
48254       DO 540 INEW=N+1,N+NJET
48255         PEMAX=0D0
48256         DO 520 ITRY=N+1,N+NJET
48257           IF(V(ITRY,4).LE.PEMAX) GOTO 520
48258           IMAX=ITRY
48259           PEMAX=V(ITRY,4)
48260   520   CONTINUE
48261         K(INEW,1)=31
48262         K(INEW,2)=97
48263         K(INEW,3)=INEW-N
48264         K(INEW,4)=0
48265         DO 530 J=1,5
48266           P(INEW,J)=V(IMAX,J)
48267   530   CONTINUE
48268         V(IMAX,4)=-1D0
48269         K(IMAX,5)=INEW
48270   540 CONTINUE
48271  
48272 C...Clean up particle-jet assignments and jet information.
48273       DO 550 I=N+NP+1,N+2*NP
48274         IORI=K(N+K(I,4),5)
48275         K(I,4)=IORI-N
48276         IF(K(K(I,3),1).NE.3) K(K(I,3),4)=IORI-N
48277         K(IORI,4)=K(IORI,4)+1
48278   550 CONTINUE
48279       IEMP=0
48280       PSJT=0D0
48281       DO 570 I=N+1,N+NJET
48282         K(I,5)=0
48283         PSJT=PSJT+P(I,5)
48284         P(I,5)=SQRT(MAX(P(I,4)**2-P(I,5)**2,0D0))
48285         DO 560 J=1,5
48286           V(I,J)=0D0
48287   560   CONTINUE
48288         IF(K(I,4).EQ.0) IEMP=I
48289   570 CONTINUE
48290  
48291 C...Select storing option. Output variables. Check for failure.
48292       MSTU(61)=N+1
48293       MSTU(62)=NP
48294       MSTU(63)=NPRE
48295       PARU(61)=PS(5)
48296       PARU(62)=PSJT/PSS
48297       PARU(63)=SQRT(R2MIN)
48298       IF(NJET.LE.1) PARU(63)=0D0
48299       IF(IEMP.NE.0) THEN
48300         CALL PYERRM(8,'(PYCLUS:) failed to reconstruct as requested')
48301         NJET=-1
48302         RETURN
48303       ENDIF
48304       IF(MSTU(43).LE.1) MSTU(3)=MAX(0,NJET)
48305       IF(MSTU(43).GE.2) N=N+MAX(0,NJET)
48306       NSAV=NJET
48307  
48308       RETURN
48309       END
48310  
48311 C*********************************************************************
48312  
48313 C...PYCELL
48314 C...Provides a simple way of jet finding in eta-phi-ET coordinates,
48315 C...as used for calorimeters at hadron colliders.
48316  
48317       SUBROUTINE PYCELL(NJET)
48318  
48319 C...Double precision and integer declarations.
48320       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
48321       IMPLICIT INTEGER(I-N)
48322       INTEGER PYK,PYCHGE,PYCOMP
48323 C...Commonblocks.
48324       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
48325       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
48326       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
48327       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
48328  
48329 C...Loop over all particles. Find cell that was hit by given particle.
48330       PTLRAT=1D0/SINH(PARU(51))**2
48331       NP=0
48332       NC=N
48333       DO 110 I=1,N
48334         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 110
48335         IF(P(I,1)**2+P(I,2)**2.LE.PTLRAT*P(I,3)**2) GOTO 110
48336         IF(MSTU(41).GE.2) THEN
48337           KC=PYCOMP(K(I,2))
48338           IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
48339      &    KC.EQ.18) GOTO 110
48340           IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
48341      &    GOTO 110
48342         ENDIF
48343         NP=NP+1
48344         PT=SQRT(P(I,1)**2+P(I,2)**2)
48345         ETA=SIGN(LOG((SQRT(PT**2+P(I,3)**2)+ABS(P(I,3)))/PT),P(I,3))
48346         IETA=MAX(1,MIN(MSTU(51),1+INT(MSTU(51)*0.5D0*
48347      &  (ETA/PARU(51)+1D0))))
48348         PHI=PYANGL(P(I,1),P(I,2))
48349         IPHI=MAX(1,MIN(MSTU(52),1+INT(MSTU(52)*0.5D0*
48350      &  (PHI/PARU(1)+1D0))))
48351         IETPH=MSTU(52)*IETA+IPHI
48352  
48353 C...Add to cell already hit, or book new cell.
48354         DO 100 IC=N+1,NC
48355           IF(IETPH.EQ.K(IC,3)) THEN
48356             K(IC,4)=K(IC,4)+1
48357             P(IC,5)=P(IC,5)+PT
48358             GOTO 110
48359           ENDIF
48360   100   CONTINUE
48361         IF(NC.GE.MSTU(4)-MSTU(32)-5) THEN
48362           CALL PYERRM(11,'(PYCELL:) no more memory left in PYJETS')
48363           NJET=-2
48364           RETURN
48365         ENDIF
48366         NC=NC+1
48367         K(NC,3)=IETPH
48368         K(NC,4)=1
48369         K(NC,5)=2
48370         P(NC,1)=(PARU(51)/MSTU(51))*(2*IETA-1-MSTU(51))
48371         P(NC,2)=(PARU(1)/MSTU(52))*(2*IPHI-1-MSTU(52))
48372         P(NC,5)=PT
48373   110 CONTINUE
48374  
48375 C...Smear true bin content by calorimeter resolution.
48376       IF(MSTU(53).GE.1) THEN
48377         DO 130 IC=N+1,NC
48378           PEI=P(IC,5)
48379           IF(MSTU(53).EQ.2) PEI=P(IC,5)*COSH(P(IC,1))
48380   120     PEF=PEI+PARU(55)*SQRT(-2D0*LOG(MAX(1D-10,PYR(0)))*PEI)*
48381      &    COS(PARU(2)*PYR(0))
48382           IF(PEF.LT.0D0.OR.PEF.GT.PARU(56)*PEI) GOTO 120
48383           P(IC,5)=PEF
48384           IF(MSTU(53).EQ.2) P(IC,5)=PEF/COSH(P(IC,1))
48385   130   CONTINUE
48386       ENDIF
48387  
48388 C...Remove cells below threshold.
48389       IF(PARU(58).GT.0D0) THEN
48390         NCC=NC
48391         NC=N
48392         DO 140 IC=N+1,NCC
48393           IF(P(IC,5).GT.PARU(58)) THEN
48394             NC=NC+1
48395             K(NC,3)=K(IC,3)
48396             K(NC,4)=K(IC,4)
48397             K(NC,5)=K(IC,5)
48398             P(NC,1)=P(IC,1)
48399             P(NC,2)=P(IC,2)
48400             P(NC,5)=P(IC,5)
48401           ENDIF
48402   140   CONTINUE
48403       ENDIF
48404  
48405 C...Find initiator cell: the one with highest pT of not yet used ones.
48406       NJ=NC
48407   150 ETMAX=0D0
48408       DO 160 IC=N+1,NC
48409         IF(K(IC,5).NE.2) GOTO 160
48410         IF(P(IC,5).LE.ETMAX) GOTO 160
48411         ICMAX=IC
48412         ETA=P(IC,1)
48413         PHI=P(IC,2)
48414         ETMAX=P(IC,5)
48415   160 CONTINUE
48416       IF(ETMAX.LT.PARU(52)) GOTO 220
48417       IF(NJ.GE.MSTU(4)-MSTU(32)-5) THEN
48418         CALL PYERRM(11,'(PYCELL:) no more memory left in PYJETS')
48419         NJET=-2
48420         RETURN
48421       ENDIF
48422       K(ICMAX,5)=1
48423       NJ=NJ+1
48424       K(NJ,4)=0
48425       K(NJ,5)=1
48426       P(NJ,1)=ETA
48427       P(NJ,2)=PHI
48428       P(NJ,3)=0D0
48429       P(NJ,4)=0D0
48430       P(NJ,5)=0D0
48431  
48432 C...Sum up unused cells within required distance of initiator.
48433       DO 170 IC=N+1,NC
48434         IF(K(IC,5).EQ.0) GOTO 170
48435         IF(ABS(P(IC,1)-ETA).GT.PARU(54)) GOTO 170
48436         DPHIA=ABS(P(IC,2)-PHI)
48437         IF(DPHIA.GT.PARU(54).AND.DPHIA.LT.PARU(2)-PARU(54)) GOTO 170
48438         PHIC=P(IC,2)
48439         IF(DPHIA.GT.PARU(1)) PHIC=PHIC+SIGN(PARU(2),PHI)
48440         IF((P(IC,1)-ETA)**2+(PHIC-PHI)**2.GT.PARU(54)**2) GOTO 170
48441         K(IC,5)=-K(IC,5)
48442         K(NJ,4)=K(NJ,4)+K(IC,4)
48443         P(NJ,3)=P(NJ,3)+P(IC,5)*P(IC,1)
48444         P(NJ,4)=P(NJ,4)+P(IC,5)*PHIC
48445         P(NJ,5)=P(NJ,5)+P(IC,5)
48446   170 CONTINUE
48447  
48448 C...Reject cluster below minimum ET, else accept.
48449       IF(P(NJ,5).LT.PARU(53)) THEN
48450         NJ=NJ-1
48451         DO 180 IC=N+1,NC
48452           IF(K(IC,5).LT.0) K(IC,5)=-K(IC,5)
48453   180   CONTINUE
48454       ELSEIF(MSTU(54).LE.2) THEN
48455         P(NJ,3)=P(NJ,3)/P(NJ,5)
48456         P(NJ,4)=P(NJ,4)/P(NJ,5)
48457         IF(ABS(P(NJ,4)).GT.PARU(1)) P(NJ,4)=P(NJ,4)-SIGN(PARU(2),
48458      &  P(NJ,4))
48459         DO 190 IC=N+1,NC
48460           IF(K(IC,5).LT.0) K(IC,5)=0
48461   190   CONTINUE
48462       ELSE
48463         DO 200 J=1,4
48464           P(NJ,J)=0D0
48465   200   CONTINUE
48466         DO 210 IC=N+1,NC
48467           IF(K(IC,5).GE.0) GOTO 210
48468           P(NJ,1)=P(NJ,1)+P(IC,5)*COS(P(IC,2))
48469           P(NJ,2)=P(NJ,2)+P(IC,5)*SIN(P(IC,2))
48470           P(NJ,3)=P(NJ,3)+P(IC,5)*SINH(P(IC,1))
48471           P(NJ,4)=P(NJ,4)+P(IC,5)*COSH(P(IC,1))
48472           K(IC,5)=0
48473   210   CONTINUE
48474       ENDIF
48475       GOTO 150
48476  
48477 C...Arrange clusters in falling ET sequence.
48478   220 DO 250 I=1,NJ-NC
48479         ETMAX=0D0
48480         DO 230 IJ=NC+1,NJ
48481           IF(K(IJ,5).EQ.0) GOTO 230
48482           IF(P(IJ,5).LT.ETMAX) GOTO 230
48483           IJMAX=IJ
48484           ETMAX=P(IJ,5)
48485   230   CONTINUE
48486         K(IJMAX,5)=0
48487         K(N+I,1)=31
48488         K(N+I,2)=98
48489         K(N+I,3)=I
48490         K(N+I,4)=K(IJMAX,4)
48491         K(N+I,5)=0
48492         DO 240 J=1,5
48493           P(N+I,J)=P(IJMAX,J)
48494           V(N+I,J)=0D0
48495   240   CONTINUE
48496   250 CONTINUE
48497       NJET=NJ-NC
48498  
48499 C...Convert to massless or massive four-vectors.
48500       IF(MSTU(54).EQ.2) THEN
48501         DO 260 I=N+1,N+NJET
48502           ETA=P(I,3)
48503           P(I,1)=P(I,5)*COS(P(I,4))
48504           P(I,2)=P(I,5)*SIN(P(I,4))
48505           P(I,3)=P(I,5)*SINH(ETA)
48506           P(I,4)=P(I,5)*COSH(ETA)
48507           P(I,5)=0D0
48508   260   CONTINUE
48509       ELSEIF(MSTU(54).GE.3) THEN
48510         DO 270 I=N+1,N+NJET
48511           P(I,5)=SQRT(MAX(0D0,P(I,4)**2-P(I,1)**2-P(I,2)**2-P(I,3)**2))
48512   270   CONTINUE
48513       ENDIF
48514  
48515 C...Information about storage.
48516       MSTU(61)=N+1
48517       MSTU(62)=NP
48518       MSTU(63)=NC-N
48519       IF(MSTU(43).LE.1) MSTU(3)=MAX(0,NJET)
48520       IF(MSTU(43).GE.2) N=N+MAX(0,NJET)
48521  
48522       RETURN
48523       END
48524  
48525 C*********************************************************************
48526  
48527 C...PYJMAS
48528 C...Determines, approximately, the two jet masses that minimize
48529 C...the sum m_H^2 + m_L^2, a la Clavelli and Wyler.
48530  
48531       SUBROUTINE PYJMAS(PMH,PML)
48532  
48533 C...Double precision and integer declarations.
48534       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
48535       IMPLICIT INTEGER(I-N)
48536       INTEGER PYK,PYCHGE,PYCOMP
48537 C...Commonblocks.
48538       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
48539       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
48540       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
48541       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
48542 C...Local arrays.
48543       DIMENSION SM(3,3),SAX(3),PS(3,5)
48544  
48545 C...Reset.
48546       NP=0
48547       DO 120 J1=1,3
48548         DO 100 J2=J1,3
48549           SM(J1,J2)=0D0
48550   100   CONTINUE
48551         DO 110 J2=1,4
48552           PS(J1,J2)=0D0
48553   110   CONTINUE
48554   120 CONTINUE
48555       PSS=0D0
48556       PIMASS=PMAS(PYCOMP(211),1)
48557  
48558 C...Take copy of particles that are to be considered in mass analysis.
48559       DO 170 I=1,N
48560         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 170
48561         IF(MSTU(41).GE.2) THEN
48562           KC=PYCOMP(K(I,2))
48563           IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
48564      &    KC.EQ.18) GOTO 170
48565           IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
48566      &    GOTO 170
48567         ENDIF
48568         IF(N+NP+1.GE.MSTU(4)-MSTU(32)-5) THEN
48569           CALL PYERRM(11,'(PYJMAS:) no more memory left in PYJETS')
48570           PMH=-2D0
48571           PML=-2D0
48572           RETURN
48573         ENDIF
48574         NP=NP+1
48575         DO 130 J=1,5
48576           P(N+NP,J)=P(I,J)
48577   130   CONTINUE
48578         IF(MSTU(42).EQ.0) P(N+NP,5)=0D0
48579         IF(MSTU(42).EQ.1.AND.K(I,2).NE.22) P(N+NP,5)=PIMASS
48580         P(N+NP,4)=SQRT(P(N+NP,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
48581  
48582 C...Fill information in sphericity tensor and total momentum vector.
48583         DO 150 J1=1,3
48584           DO 140 J2=J1,3
48585             SM(J1,J2)=SM(J1,J2)+P(I,J1)*P(I,J2)
48586   140     CONTINUE
48587   150   CONTINUE
48588         PSS=PSS+(P(I,1)**2+P(I,2)**2+P(I,3)**2)
48589         DO 160 J=1,4
48590           PS(3,J)=PS(3,J)+P(N+NP,J)
48591   160   CONTINUE
48592   170 CONTINUE
48593  
48594 C...Very low multiplicities (0 or 1) not considered.
48595       IF(NP.LE.1) THEN
48596         CALL PYERRM(8,'(PYJMAS:) too few particles for analysis')
48597         PMH=-1D0
48598         PML=-1D0
48599         RETURN
48600       ENDIF
48601       PARU(61)=SQRT(MAX(0D0,PS(3,4)**2-PS(3,1)**2-PS(3,2)**2-
48602      &PS(3,3)**2))
48603  
48604 C...Find largest eigenvalue to matrix (third degree equation).
48605       DO 190 J1=1,3
48606         DO 180 J2=J1,3
48607           SM(J1,J2)=SM(J1,J2)/PSS
48608   180   CONTINUE
48609   190 CONTINUE
48610       SQ=(SM(1,1)*SM(2,2)+SM(1,1)*SM(3,3)+SM(2,2)*SM(3,3)-
48611      &SM(1,2)**2-SM(1,3)**2-SM(2,3)**2)/3D0-1D0/9D0
48612       SR=-0.5D0*(SQ+1D0/9D0+SM(1,1)*SM(2,3)**2+SM(2,2)*SM(1,3)**2+
48613      &SM(3,3)*SM(1,2)**2-SM(1,1)*SM(2,2)*SM(3,3))+
48614      &SM(1,2)*SM(1,3)*SM(2,3)+1D0/27D0
48615       SP=COS(ACOS(MAX(MIN(SR/SQRT(-SQ**3),1D0),-1D0))/3D0)
48616       SMA=1D0/3D0+SQRT(-SQ)*MAX(2D0*SP,SQRT(3D0*(1D0-SP**2))-SP)
48617  
48618 C...Find largest eigenvector by solving equation system.
48619       DO 210 J1=1,3
48620         SM(J1,J1)=SM(J1,J1)-SMA
48621         DO 200 J2=J1+1,3
48622           SM(J2,J1)=SM(J1,J2)
48623   200   CONTINUE
48624   210 CONTINUE
48625       SMAX=0D0
48626       DO 230 J1=1,3
48627         DO 220 J2=1,3
48628           IF(ABS(SM(J1,J2)).LE.SMAX) GOTO 220
48629           JA=J1
48630           JB=J2
48631           SMAX=ABS(SM(J1,J2))
48632   220   CONTINUE
48633   230 CONTINUE
48634       SMAX=0D0
48635       DO 250 J3=JA+1,JA+2
48636         J1=J3-3*((J3-1)/3)
48637         RL=SM(J1,JB)/SM(JA,JB)
48638         DO 240 J2=1,3
48639           SM(J1,J2)=SM(J1,J2)-RL*SM(JA,J2)
48640           IF(ABS(SM(J1,J2)).LE.SMAX) GOTO 240
48641           JC=J1
48642           SMAX=ABS(SM(J1,J2))
48643   240   CONTINUE
48644   250 CONTINUE
48645       JB1=JB+1-3*(JB/3)
48646       JB2=JB+2-3*((JB+1)/3)
48647       SAX(JB1)=-SM(JC,JB2)
48648       SAX(JB2)=SM(JC,JB1)
48649       SAX(JB)=-(SM(JA,JB1)*SAX(JB1)+SM(JA,JB2)*SAX(JB2))/SM(JA,JB)
48650  
48651 C...Divide particles into two initial clusters by hemisphere.
48652       DO 270 I=N+1,N+NP
48653         PSAX=P(I,1)*SAX(1)+P(I,2)*SAX(2)+P(I,3)*SAX(3)
48654         IS=1
48655         IF(PSAX.LT.0D0) IS=2
48656         K(I,3)=IS
48657         DO 260 J=1,4
48658           PS(IS,J)=PS(IS,J)+P(I,J)
48659   260   CONTINUE
48660   270 CONTINUE
48661       PMS=MAX(1D-10,PS(1,4)**2-PS(1,1)**2-PS(1,2)**2-PS(1,3)**2)+
48662      &MAX(1D-10,PS(2,4)**2-PS(2,1)**2-PS(2,2)**2-PS(2,3)**2)
48663  
48664 C...Reassign one particle at a time; find maximum decrease of m^2 sum.
48665   280 PMD=0D0
48666       IM=0
48667       DO 290 J=1,4
48668         PS(3,J)=PS(1,J)-PS(2,J)
48669   290 CONTINUE
48670       DO 300 I=N+1,N+NP
48671         PPS=P(I,4)*PS(3,4)-P(I,1)*PS(3,1)-P(I,2)*PS(3,2)-P(I,3)*PS(3,3)
48672         IF(K(I,3).EQ.1) PMDI=2D0*(P(I,5)**2-PPS)
48673         IF(K(I,3).EQ.2) PMDI=2D0*(P(I,5)**2+PPS)
48674         IF(PMDI.LT.PMD) THEN
48675           PMD=PMDI
48676           IM=I
48677         ENDIF
48678   300 CONTINUE
48679  
48680 C...Loop back if significant reduction in sum of m^2.
48681       IF(PMD.LT.-PARU(48)*PMS) THEN
48682         PMS=PMS+PMD
48683         IS=K(IM,3)
48684         DO 310 J=1,4
48685           PS(IS,J)=PS(IS,J)-P(IM,J)
48686           PS(3-IS,J)=PS(3-IS,J)+P(IM,J)
48687   310   CONTINUE
48688         K(IM,3)=3-IS
48689         GOTO 280
48690       ENDIF
48691  
48692 C...Final masses and output.
48693       MSTU(61)=N+1
48694       MSTU(62)=NP
48695       PS(1,5)=SQRT(MAX(0D0,PS(1,4)**2-PS(1,1)**2-PS(1,2)**2-PS(1,3)**2))
48696       PS(2,5)=SQRT(MAX(0D0,PS(2,4)**2-PS(2,1)**2-PS(2,2)**2-PS(2,3)**2))
48697       PMH=MAX(PS(1,5),PS(2,5))
48698       PML=MIN(PS(1,5),PS(2,5))
48699  
48700       RETURN
48701       END
48702  
48703 C*********************************************************************
48704  
48705 C...PYFOWO
48706 C...Calculates the first few Fox-Wolfram moments.
48707  
48708       SUBROUTINE PYFOWO(H10,H20,H30,H40)
48709  
48710 C...Double precision and integer declarations.
48711       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
48712       IMPLICIT INTEGER(I-N)
48713       INTEGER PYK,PYCHGE,PYCOMP
48714 C...Commonblocks.
48715       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
48716       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
48717       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
48718       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
48719  
48720 C...Copy momenta for particles and calculate H0.
48721       NP=0
48722       H0=0D0
48723       HD=0D0
48724       DO 110 I=1,N
48725         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 110
48726         IF(MSTU(41).GE.2) THEN
48727           KC=PYCOMP(K(I,2))
48728           IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
48729      &    KC.EQ.18) GOTO 110
48730           IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
48731      &    GOTO 110
48732         ENDIF
48733         IF(N+NP.GE.MSTU(4)-MSTU(32)-5) THEN
48734           CALL PYERRM(11,'(PYFOWO:) no more memory left in PYJETS')
48735           H10=-1D0
48736           H20=-1D0
48737           H30=-1D0
48738           H40=-1D0
48739           RETURN
48740         ENDIF
48741         NP=NP+1
48742         DO 100 J=1,3
48743           P(N+NP,J)=P(I,J)
48744   100   CONTINUE
48745         P(N+NP,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
48746         H0=H0+P(N+NP,4)
48747         HD=HD+P(N+NP,4)**2
48748   110 CONTINUE
48749       H0=H0**2
48750  
48751 C...Very low multiplicities (0 or 1) not considered.
48752       IF(NP.LE.1) THEN
48753         CALL PYERRM(8,'(PYFOWO:) too few particles for analysis')
48754         H10=-1D0
48755         H20=-1D0
48756         H30=-1D0
48757         H40=-1D0
48758         RETURN
48759       ENDIF
48760  
48761 C...Calculate H1 - H4.
48762       H10=0D0
48763       H20=0D0
48764       H30=0D0
48765       H40=0D0
48766       DO 130 I1=N+1,N+NP
48767         DO 120 I2=I1+1,N+NP
48768           CTHE=(P(I1,1)*P(I2,1)+P(I1,2)*P(I2,2)+P(I1,3)*P(I2,3))/
48769      &    (P(I1,4)*P(I2,4))
48770           H10=H10+P(I1,4)*P(I2,4)*CTHE
48771           H20=H20+P(I1,4)*P(I2,4)*(1.5D0*CTHE**2-0.5D0)
48772           H30=H30+P(I1,4)*P(I2,4)*(2.5D0*CTHE**3-1.5D0*CTHE)
48773           H40=H40+P(I1,4)*P(I2,4)*(4.375D0*CTHE**4-3.75D0*CTHE**2+
48774      &    0.375D0)
48775   120   CONTINUE
48776   130 CONTINUE
48777  
48778 C...Calculate H1/H0 - H4/H0. Output.
48779       MSTU(61)=N+1
48780       MSTU(62)=NP
48781       H10=(HD+2D0*H10)/H0
48782       H20=(HD+2D0*H20)/H0
48783       H30=(HD+2D0*H30)/H0
48784       H40=(HD+2D0*H40)/H0
48785  
48786       RETURN
48787       END
48788  
48789 C*********************************************************************
48790  
48791 C...PYTABU
48792 C...Evaluates various properties of an event, with statistics
48793 C...accumulated during the course of the run and
48794 C...printed at the end.
48795  
48796       SUBROUTINE PYTABU(MTABU)
48797  
48798 C...Double precision and integer declarations.
48799       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
48800       IMPLICIT INTEGER(I-N)
48801       INTEGER PYK,PYCHGE,PYCOMP
48802 C...Commonblocks.
48803       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
48804       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
48805       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
48806       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
48807       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/
48808 C...Local arrays, character variables, saved variables and data.
48809       DIMENSION KFIS(100,2),NPIS(100,0:10),KFFS(400),NPFS(400,4),
48810      &FEVFM(10,4),FM1FM(3,10,4),FM2FM(3,10,4),FMOMA(4),FMOMS(4),
48811      &FEVEE(50),FE1EC(50),FE2EC(50),FE1EA(25),FE2EA(25),
48812      &KFDM(8),KFDC(200,0:8),NPDC(200)
48813       SAVE NEVIS,NKFIS,KFIS,NPIS,NEVFS,NPRFS,NFIFS,NCHFS,NKFFS,
48814      &KFFS,NPFS,NEVFM,NMUFM,FM1FM,FM2FM,NEVEE,FE1EC,FE2EC,FE1EA,
48815      &FE2EA,NEVDC,NKFDC,NREDC,KFDC,NPDC
48816       CHARACTER CHAU*16,CHIS(2)*12,CHDC(8)*12
48817       DATA NEVIS/0/,NKFIS/0/,NEVFS/0/,NPRFS/0/,NFIFS/0/,NCHFS/0/,
48818      &NKFFS/0/,NEVFM/0/,NMUFM/0/,FM1FM/120*0D0/,FM2FM/120*0D0/,
48819      &NEVEE/0/,FE1EC/50*0D0/,FE2EC/50*0D0/,FE1EA/25*0D0/,FE2EA/25*0D0/,
48820      &NEVDC/0/,NKFDC/0/,NREDC/0/
48821  
48822 C...Reset statistics on initial parton state.
48823       IF(MTABU.EQ.10) THEN
48824         NEVIS=0
48825         NKFIS=0
48826  
48827 C...Identify and order flavour content of initial state.
48828       ELSEIF(MTABU.EQ.11) THEN
48829         NEVIS=NEVIS+1
48830         KFM1=2*IABS(MSTU(161))
48831         IF(MSTU(161).GT.0) KFM1=KFM1-1
48832         KFM2=2*IABS(MSTU(162))
48833         IF(MSTU(162).GT.0) KFM2=KFM2-1
48834         KFMN=MIN(KFM1,KFM2)
48835         KFMX=MAX(KFM1,KFM2)
48836         DO 100 I=1,NKFIS
48837           IF(KFMN.EQ.KFIS(I,1).AND.KFMX.EQ.KFIS(I,2)) THEN
48838             IKFIS=-I
48839             GOTO 110
48840           ELSEIF(KFMN.LT.KFIS(I,1).OR.(KFMN.EQ.KFIS(I,1).AND.
48841      &      KFMX.LT.KFIS(I,2))) THEN
48842             IKFIS=I
48843             GOTO 110
48844           ENDIF
48845   100   CONTINUE
48846         IKFIS=NKFIS+1
48847   110   IF(IKFIS.LT.0) THEN
48848           IKFIS=-IKFIS
48849         ELSE
48850           IF(NKFIS.GE.100) RETURN
48851           DO 130 I=NKFIS,IKFIS,-1
48852             KFIS(I+1,1)=KFIS(I,1)
48853             KFIS(I+1,2)=KFIS(I,2)
48854             DO 120 J=0,10
48855               NPIS(I+1,J)=NPIS(I,J)
48856   120       CONTINUE
48857   130     CONTINUE
48858           NKFIS=NKFIS+1
48859           KFIS(IKFIS,1)=KFMN
48860           KFIS(IKFIS,2)=KFMX
48861           DO 140 J=0,10
48862             NPIS(IKFIS,J)=0
48863   140     CONTINUE
48864         ENDIF
48865         NPIS(IKFIS,0)=NPIS(IKFIS,0)+1
48866  
48867 C...Count number of partons in initial state.
48868         NP=0
48869         DO 160 I=1,N
48870           IF(K(I,1).LE.0.OR.K(I,1).GT.12) THEN
48871           ELSEIF(IABS(K(I,2)).GT.80.AND.IABS(K(I,2)).LE.100) THEN
48872           ELSEIF(IABS(K(I,2)).GT.100.AND.MOD(IABS(K(I,2))/10,10).NE.0)
48873      &      THEN
48874           ELSE
48875             IM=I
48876   150       IM=K(IM,3)
48877             IF(IM.LE.0.OR.IM.GT.N) THEN
48878               NP=NP+1
48879             ELSEIF(K(IM,1).LE.0.OR.K(IM,1).GT.20) THEN
48880               NP=NP+1
48881             ELSEIF(IABS(K(IM,2)).GT.80.AND.IABS(K(IM,2)).LE.100) THEN
48882             ELSEIF(IABS(K(IM,2)).GT.100.AND.MOD(IABS(K(IM,2))/10,10)
48883      &        .NE.0) THEN
48884             ELSE
48885               GOTO 150
48886             ENDIF
48887           ENDIF
48888   160   CONTINUE
48889         NPCO=MAX(NP,1)
48890         IF(NP.GE.6) NPCO=6
48891         IF(NP.GE.8) NPCO=7
48892         IF(NP.GE.11) NPCO=8
48893         IF(NP.GE.16) NPCO=9
48894         IF(NP.GE.26) NPCO=10
48895         NPIS(IKFIS,NPCO)=NPIS(IKFIS,NPCO)+1
48896         MSTU(62)=NP
48897  
48898 C...Write statistics on initial parton state.
48899       ELSEIF(MTABU.EQ.12) THEN
48900         FAC=1D0/MAX(1,NEVIS)
48901         WRITE(MSTU(11),5000) NEVIS
48902         DO 170 I=1,NKFIS
48903           KFMN=KFIS(I,1)
48904           IF(KFMN.EQ.0) KFMN=KFIS(I,2)
48905           KFM1=(KFMN+1)/2
48906           IF(2*KFM1.EQ.KFMN) KFM1=-KFM1
48907           CALL PYNAME(KFM1,CHAU)
48908           CHIS(1)=CHAU(1:12)
48909           IF(CHAU(13:13).NE.' ') CHIS(1)(12:12)='?'
48910           KFMX=KFIS(I,2)
48911           IF(KFIS(I,1).EQ.0) KFMX=0
48912           KFM2=(KFMX+1)/2
48913           IF(2*KFM2.EQ.KFMX) KFM2=-KFM2
48914           CALL PYNAME(KFM2,CHAU)
48915           CHIS(2)=CHAU(1:12)
48916           IF(CHAU(13:13).NE.' ') CHIS(2)(12:12)='?'
48917           WRITE(MSTU(11),5100) CHIS(1),CHIS(2),FAC*NPIS(I,0),
48918      &    (NPIS(I,J)/DBLE(NPIS(I,0)),J=1,10)
48919   170   CONTINUE
48920  
48921 C...Copy statistics on initial parton state into /PYJETS/.
48922       ELSEIF(MTABU.EQ.13) THEN
48923         FAC=1D0/MAX(1,NEVIS)
48924         DO 190 I=1,NKFIS
48925           KFMN=KFIS(I,1)
48926           IF(KFMN.EQ.0) KFMN=KFIS(I,2)
48927           KFM1=(KFMN+1)/2
48928           IF(2*KFM1.EQ.KFMN) KFM1=-KFM1
48929           KFMX=KFIS(I,2)
48930           IF(KFIS(I,1).EQ.0) KFMX=0
48931           KFM2=(KFMX+1)/2
48932           IF(2*KFM2.EQ.KFMX) KFM2=-KFM2
48933           K(I,1)=32
48934           K(I,2)=99
48935           K(I,3)=KFM1
48936           K(I,4)=KFM2
48937           K(I,5)=NPIS(I,0)
48938           DO 180 J=1,5
48939             P(I,J)=FAC*NPIS(I,J)
48940             V(I,J)=FAC*NPIS(I,J+5)
48941   180     CONTINUE
48942   190   CONTINUE
48943         N=NKFIS
48944         DO 200 J=1,5
48945           K(N+1,J)=0
48946           P(N+1,J)=0D0
48947           V(N+1,J)=0D0
48948   200   CONTINUE
48949         K(N+1,1)=32
48950         K(N+1,2)=99
48951         K(N+1,5)=NEVIS
48952         MSTU(3)=1
48953  
48954 C...Reset statistics on number of particles/partons.
48955       ELSEIF(MTABU.EQ.20) THEN
48956         NEVFS=0
48957         NPRFS=0
48958         NFIFS=0
48959         NCHFS=0
48960         NKFFS=0
48961  
48962 C...Identify whether particle/parton is primary or not.
48963       ELSEIF(MTABU.EQ.21) THEN
48964         NEVFS=NEVFS+1
48965         MSTU(62)=0
48966         DO 260 I=1,N
48967           IF(K(I,1).LE.0.OR.K(I,1).GT.20.OR.K(I,1).EQ.13) GOTO 260
48968           MSTU(62)=MSTU(62)+1
48969           KC=PYCOMP(K(I,2))
48970           MPRI=0
48971           IF(K(I,3).LE.0.OR.K(I,3).GT.N) THEN
48972             MPRI=1
48973           ELSEIF(K(K(I,3),1).LE.0.OR.K(K(I,3),1).GT.20) THEN
48974             MPRI=1
48975           ELSEIF(K(K(I,3),2).GE.91.AND.K(K(I,3),2).LE.93) THEN
48976             MPRI=1
48977           ELSEIF(KC.EQ.0) THEN
48978           ELSEIF(K(K(I,3),1).EQ.13) THEN
48979             IM=K(K(I,3),3)
48980             IF(IM.LE.0.OR.IM.GT.N) THEN
48981               MPRI=1
48982             ELSEIF(K(IM,1).LE.0.OR.K(IM,1).GT.20) THEN
48983               MPRI=1
48984             ENDIF
48985           ELSEIF(KCHG(KC,2).EQ.0) THEN
48986             KCM=PYCOMP(K(K(I,3),2))
48987             IF(KCM.NE.0) THEN
48988               IF(KCHG(KCM,2).NE.0) MPRI=1
48989             ENDIF
48990           ENDIF
48991           IF(KC.NE.0.AND.MPRI.EQ.1) THEN
48992             IF(KCHG(KC,2).EQ.0) NPRFS=NPRFS+1
48993           ENDIF
48994           IF(K(I,1).LE.10) THEN
48995             NFIFS=NFIFS+1
48996             IF(PYCHGE(K(I,2)).NE.0) NCHFS=NCHFS+1
48997           ENDIF
48998  
48999 C...Fill statistics on number of particles/partons in event.
49000           KFA=IABS(K(I,2))
49001           KFS=3-ISIGN(1,K(I,2))-MPRI
49002           DO 210 IP=1,NKFFS
49003             IF(KFA.EQ.KFFS(IP)) THEN
49004               IKFFS=-IP
49005               GOTO 220
49006             ELSEIF(KFA.LT.KFFS(IP)) THEN
49007               IKFFS=IP
49008               GOTO 220
49009             ENDIF
49010   210     CONTINUE
49011           IKFFS=NKFFS+1
49012   220     IF(IKFFS.LT.0) THEN
49013             IKFFS=-IKFFS
49014           ELSE
49015             IF(NKFFS.GE.400) RETURN
49016             DO 240 IP=NKFFS,IKFFS,-1
49017               KFFS(IP+1)=KFFS(IP)
49018               DO 230 J=1,4
49019                 NPFS(IP+1,J)=NPFS(IP,J)
49020   230         CONTINUE
49021   240       CONTINUE
49022             NKFFS=NKFFS+1
49023             KFFS(IKFFS)=KFA
49024             DO 250 J=1,4
49025               NPFS(IKFFS,J)=0
49026   250       CONTINUE
49027           ENDIF
49028           NPFS(IKFFS,KFS)=NPFS(IKFFS,KFS)+1
49029   260   CONTINUE
49030  
49031 C...Write statistics on particle/parton composition of events.
49032       ELSEIF(MTABU.EQ.22) THEN
49033         FAC=1D0/MAX(1,NEVFS)
49034         WRITE(MSTU(11),5200) NEVFS,FAC*NPRFS,FAC*NFIFS,FAC*NCHFS
49035         DO 270 I=1,NKFFS
49036           CALL PYNAME(KFFS(I),CHAU)
49037           KC=PYCOMP(KFFS(I))
49038           MDCYF=0
49039           IF(KC.NE.0) MDCYF=MDCY(KC,1)
49040           WRITE(MSTU(11),5300) KFFS(I),CHAU,MDCYF,(FAC*NPFS(I,J),J=1,4),
49041      &    FAC*(NPFS(I,1)+NPFS(I,2)+NPFS(I,3)+NPFS(I,4))
49042   270   CONTINUE
49043  
49044 C...Copy particle/parton composition information into /PYJETS/.
49045       ELSEIF(MTABU.EQ.23) THEN
49046         FAC=1D0/MAX(1,NEVFS)
49047         DO 290 I=1,NKFFS
49048           K(I,1)=32
49049           K(I,2)=99
49050           K(I,3)=KFFS(I)
49051           K(I,4)=0
49052           K(I,5)=NPFS(I,1)+NPFS(I,2)+NPFS(I,3)+NPFS(I,4)
49053           DO 280 J=1,4
49054             P(I,J)=FAC*NPFS(I,J)
49055             V(I,J)=0D0
49056   280     CONTINUE
49057           P(I,5)=FAC*K(I,5)
49058           V(I,5)=0D0
49059   290   CONTINUE
49060         N=NKFFS
49061         DO 300 J=1,5
49062           K(N+1,J)=0
49063           P(N+1,J)=0D0
49064           V(N+1,J)=0D0
49065   300   CONTINUE
49066         K(N+1,1)=32
49067         K(N+1,2)=99
49068         K(N+1,5)=NEVFS
49069         P(N+1,1)=FAC*NPRFS
49070         P(N+1,2)=FAC*NFIFS
49071         P(N+1,3)=FAC*NCHFS
49072         MSTU(3)=1
49073  
49074 C...Reset factorial moments statistics.
49075       ELSEIF(MTABU.EQ.30) THEN
49076         NEVFM=0
49077         NMUFM=0
49078         DO 330 IM=1,3
49079           DO 320 IB=1,10
49080             DO 310 IP=1,4
49081               FM1FM(IM,IB,IP)=0D0
49082               FM2FM(IM,IB,IP)=0D0
49083   310       CONTINUE
49084   320     CONTINUE
49085   330   CONTINUE
49086  
49087 C...Find particles to include, with (pion,pseudo)rapidity and azimuth.
49088       ELSEIF(MTABU.EQ.31) THEN
49089         NEVFM=NEVFM+1
49090         NLOW=N+MSTU(3)
49091         NUPP=NLOW
49092         DO 410 I=1,N
49093           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 410
49094           IF(MSTU(41).GE.2) THEN
49095             KC=PYCOMP(K(I,2))
49096             IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
49097      &      KC.EQ.18) GOTO 410
49098             IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.
49099      &      PYCHGE(K(I,2)).EQ.0) GOTO 410
49100           ENDIF
49101           PMR=0D0
49102           IF(MSTU(42).EQ.1.AND.K(I,2).NE.22) PMR=PYMASS(211)
49103           IF(MSTU(42).GE.2) PMR=P(I,5)
49104           PR=MAX(1D-20,PMR**2+P(I,1)**2+P(I,2)**2)
49105           YETA=SIGN(LOG(MIN((SQRT(PR+P(I,3)**2)+ABS(P(I,3)))/SQRT(PR),
49106      &    1D20)),P(I,3))
49107           IF(ABS(YETA).GT.PARU(57)) GOTO 410
49108           PHI=PYANGL(P(I,1),P(I,2))
49109           IYETA=512D0*(YETA+PARU(57))/(2D0*PARU(57))
49110           IYETA=MAX(0,MIN(511,IYETA))
49111           IPHI=512D0*(PHI+PARU(1))/PARU(2)
49112           IPHI=MAX(0,MIN(511,IPHI))
49113           IYEP=0
49114           DO 340 IB=0,9
49115             IYEP=IYEP+4**IB*(2*MOD(IYETA/2**IB,2)+MOD(IPHI/2**IB,2))
49116   340     CONTINUE
49117  
49118 C...Order particles in (pseudo)rapidity and/or azimuth.
49119           IF(NUPP.GT.MSTU(4)-5-MSTU(32)) THEN
49120             CALL PYERRM(11,'(PYTABU:) no more memory left in PYJETS')
49121             RETURN
49122           ENDIF
49123           NUPP=NUPP+1
49124           IF(NUPP.EQ.NLOW+1) THEN
49125             K(NUPP,1)=IYETA
49126             K(NUPP,2)=IPHI
49127             K(NUPP,3)=IYEP
49128           ELSE
49129             DO 350 I1=NUPP-1,NLOW+1,-1
49130               IF(IYETA.GE.K(I1,1)) GOTO 360
49131               K(I1+1,1)=K(I1,1)
49132   350       CONTINUE
49133   360       K(I1+1,1)=IYETA
49134             DO 370 I1=NUPP-1,NLOW+1,-1
49135               IF(IPHI.GE.K(I1,2)) GOTO 380
49136               K(I1+1,2)=K(I1,2)
49137   370       CONTINUE
49138   380       K(I1+1,2)=IPHI
49139             DO 390 I1=NUPP-1,NLOW+1,-1
49140               IF(IYEP.GE.K(I1,3)) GOTO 400
49141               K(I1+1,3)=K(I1,3)
49142   390       CONTINUE
49143   400       K(I1+1,3)=IYEP
49144           ENDIF
49145   410   CONTINUE
49146         K(NUPP+1,1)=2**10
49147         K(NUPP+1,2)=2**10
49148         K(NUPP+1,3)=4**10
49149  
49150 C...Calculate sum of factorial moments in event.
49151         DO 480 IM=1,3
49152           DO 430 IB=1,10
49153             DO 420 IP=1,4
49154               FEVFM(IB,IP)=0D0
49155   420       CONTINUE
49156   430     CONTINUE
49157           DO 450 IB=1,10
49158             IF(IM.LE.2) IBIN=2**(10-IB)
49159             IF(IM.EQ.3) IBIN=4**(10-IB)
49160             IAGR=K(NLOW+1,IM)/IBIN
49161             NAGR=1
49162             DO 440 I=NLOW+2,NUPP+1
49163               ICUT=K(I,IM)/IBIN
49164               IF(ICUT.EQ.IAGR) THEN
49165                 NAGR=NAGR+1
49166               ELSE
49167                 IF(NAGR.EQ.1) THEN
49168                 ELSEIF(NAGR.EQ.2) THEN
49169                   FEVFM(IB,1)=FEVFM(IB,1)+2D0
49170                 ELSEIF(NAGR.EQ.3) THEN
49171                   FEVFM(IB,1)=FEVFM(IB,1)+6D0
49172                   FEVFM(IB,2)=FEVFM(IB,2)+6D0
49173                 ELSEIF(NAGR.EQ.4) THEN
49174                   FEVFM(IB,1)=FEVFM(IB,1)+12D0
49175                   FEVFM(IB,2)=FEVFM(IB,2)+24D0
49176                   FEVFM(IB,3)=FEVFM(IB,3)+24D0
49177                 ELSE
49178                   FEVFM(IB,1)=FEVFM(IB,1)+NAGR*(NAGR-1D0)
49179                   FEVFM(IB,2)=FEVFM(IB,2)+NAGR*(NAGR-1D0)*(NAGR-2D0)
49180                   FEVFM(IB,3)=FEVFM(IB,3)+NAGR*(NAGR-1D0)*(NAGR-2D0)*
49181      &            (NAGR-3D0)
49182                   FEVFM(IB,4)=FEVFM(IB,4)+NAGR*(NAGR-1D0)*(NAGR-2D0)*
49183      &            (NAGR-3D0)*(NAGR-4D0)
49184                 ENDIF
49185                 IAGR=ICUT
49186                 NAGR=1
49187               ENDIF
49188   440       CONTINUE
49189   450     CONTINUE
49190  
49191 C...Add results to total statistics.
49192           DO 470 IB=10,1,-1
49193             DO 460 IP=1,4
49194               IF(FEVFM(1,IP).LT.0.5D0) THEN
49195                 FEVFM(IB,IP)=0D0
49196               ELSEIF(IM.LE.2) THEN
49197                 FEVFM(IB,IP)=2D0**((IB-1)*IP)*FEVFM(IB,IP)/FEVFM(1,IP)
49198               ELSE
49199                 FEVFM(IB,IP)=4D0**((IB-1)*IP)*FEVFM(IB,IP)/FEVFM(1,IP)
49200               ENDIF
49201               FM1FM(IM,IB,IP)=FM1FM(IM,IB,IP)+FEVFM(IB,IP)
49202               FM2FM(IM,IB,IP)=FM2FM(IM,IB,IP)+FEVFM(IB,IP)**2
49203   460       CONTINUE
49204   470     CONTINUE
49205   480   CONTINUE
49206         NMUFM=NMUFM+(NUPP-NLOW)
49207         MSTU(62)=NUPP-NLOW
49208  
49209 C...Write accumulated statistics on factorial moments.
49210       ELSEIF(MTABU.EQ.32) THEN
49211         FAC=1D0/MAX(1,NEVFM)
49212         IF(MSTU(42).LE.0) WRITE(MSTU(11),5400) NEVFM,'eta'
49213         IF(MSTU(42).EQ.1) WRITE(MSTU(11),5400) NEVFM,'ypi'
49214         IF(MSTU(42).GE.2) WRITE(MSTU(11),5400) NEVFM,'y  '
49215         DO 510 IM=1,3
49216           WRITE(MSTU(11),5500)
49217           DO 500 IB=1,10
49218             BYETA=2D0*PARU(57)
49219             IF(IM.NE.2) BYETA=BYETA/2**(IB-1)
49220             BPHI=PARU(2)
49221             IF(IM.NE.1) BPHI=BPHI/2**(IB-1)
49222             IF(IM.LE.2) BNAVE=FAC*NMUFM/DBLE(2**(IB-1))
49223             IF(IM.EQ.3) BNAVE=FAC*NMUFM/DBLE(4**(IB-1))
49224             DO 490 IP=1,4
49225               FMOMA(IP)=FAC*FM1FM(IM,IB,IP)
49226               FMOMS(IP)=SQRT(MAX(0D0,FAC*(FAC*FM2FM(IM,IB,IP)-
49227      &        FMOMA(IP)**2)))
49228   490       CONTINUE
49229             WRITE(MSTU(11),5600) BYETA,BPHI,BNAVE,(FMOMA(IP),FMOMS(IP),
49230      &      IP=1,4)
49231   500     CONTINUE
49232   510   CONTINUE
49233  
49234 C...Copy statistics on factorial moments into /PYJETS/.
49235       ELSEIF(MTABU.EQ.33) THEN
49236         FAC=1D0/MAX(1,NEVFM)
49237         DO 540 IM=1,3
49238           DO 530 IB=1,10
49239             I=10*(IM-1)+IB
49240             K(I,1)=32
49241             K(I,2)=99
49242             K(I,3)=1
49243             IF(IM.NE.2) K(I,3)=2**(IB-1)
49244             K(I,4)=1
49245             IF(IM.NE.1) K(I,4)=2**(IB-1)
49246             K(I,5)=0
49247             P(I,1)=2D0*PARU(57)/K(I,3)
49248             V(I,1)=PARU(2)/K(I,4)
49249             DO 520 IP=1,4
49250               P(I,IP+1)=FAC*FM1FM(IM,IB,IP)
49251               V(I,IP+1)=SQRT(MAX(0D0,FAC*(FAC*FM2FM(IM,IB,IP)-
49252      &        P(I,IP+1)**2)))
49253   520       CONTINUE
49254   530     CONTINUE
49255   540   CONTINUE
49256         N=30
49257         DO 550 J=1,5
49258           K(N+1,J)=0
49259           P(N+1,J)=0D0
49260           V(N+1,J)=0D0
49261   550   CONTINUE
49262         K(N+1,1)=32
49263         K(N+1,2)=99
49264         K(N+1,5)=NEVFM
49265         MSTU(3)=1
49266  
49267 C...Reset statistics on Energy-Energy Correlation.
49268       ELSEIF(MTABU.EQ.40) THEN
49269         NEVEE=0
49270         DO 560 J=1,25
49271           FE1EC(J)=0D0
49272           FE2EC(J)=0D0
49273           FE1EC(51-J)=0D0
49274           FE2EC(51-J)=0D0
49275           FE1EA(J)=0D0
49276           FE2EA(J)=0D0
49277   560   CONTINUE
49278  
49279 C...Find particles to include, with proper assumed mass.
49280       ELSEIF(MTABU.EQ.41) THEN
49281         NEVEE=NEVEE+1
49282         NLOW=N+MSTU(3)
49283         NUPP=NLOW
49284         ECM=0D0
49285         DO 570 I=1,N
49286           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 570
49287           IF(MSTU(41).GE.2) THEN
49288             KC=PYCOMP(K(I,2))
49289             IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
49290      &      KC.EQ.18) GOTO 570
49291             IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.
49292      &      PYCHGE(K(I,2)).EQ.0) GOTO 570
49293           ENDIF
49294           PMR=0D0
49295           IF(MSTU(42).EQ.1.AND.K(I,2).NE.22) PMR=PYMASS(211)
49296           IF(MSTU(42).GE.2) PMR=P(I,5)
49297           IF(NUPP.GT.MSTU(4)-5-MSTU(32)) THEN
49298             CALL PYERRM(11,'(PYTABU:) no more memory left in PYJETS')
49299             RETURN
49300           ENDIF
49301           NUPP=NUPP+1
49302           P(NUPP,1)=P(I,1)
49303           P(NUPP,2)=P(I,2)
49304           P(NUPP,3)=P(I,3)
49305           P(NUPP,4)=SQRT(PMR**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
49306           P(NUPP,5)=MAX(1D-10,SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2))
49307           ECM=ECM+P(NUPP,4)
49308   570   CONTINUE
49309         IF(NUPP.EQ.NLOW) RETURN
49310  
49311 C...Analyze Energy-Energy Correlation in event.
49312         FAC=(2D0/ECM**2)*50D0/PARU(1)
49313         DO 580 J=1,50
49314           FEVEE(J)=0D0
49315   580   CONTINUE
49316         DO 600 I1=NLOW+2,NUPP
49317           DO 590 I2=NLOW+1,I1-1
49318             CTHE=(P(I1,1)*P(I2,1)+P(I1,2)*P(I2,2)+P(I1,3)*P(I2,3))/
49319      &      (P(I1,5)*P(I2,5))
49320             THE=ACOS(MAX(-1D0,MIN(1D0,CTHE)))
49321             ITHE=MAX(1,MIN(50,1+INT(50D0*THE/PARU(1))))
49322             FEVEE(ITHE)=FEVEE(ITHE)+FAC*P(I1,4)*P(I2,4)
49323   590     CONTINUE
49324   600   CONTINUE
49325         DO 610 J=1,25
49326           FE1EC(J)=FE1EC(J)+FEVEE(J)
49327           FE2EC(J)=FE2EC(J)+FEVEE(J)**2
49328           FE1EC(51-J)=FE1EC(51-J)+FEVEE(51-J)
49329           FE2EC(51-J)=FE2EC(51-J)+FEVEE(51-J)**2
49330           FE1EA(J)=FE1EA(J)+(FEVEE(51-J)-FEVEE(J))
49331           FE2EA(J)=FE2EA(J)+(FEVEE(51-J)-FEVEE(J))**2
49332   610   CONTINUE
49333         MSTU(62)=NUPP-NLOW
49334  
49335 C...Write statistics on Energy-Energy Correlation.
49336       ELSEIF(MTABU.EQ.42) THEN
49337         FAC=1D0/MAX(1,NEVEE)
49338         WRITE(MSTU(11),5700) NEVEE
49339         DO 620 J=1,25
49340           FEEC1=FAC*FE1EC(J)
49341           FEES1=SQRT(MAX(0D0,FAC*(FAC*FE2EC(J)-FEEC1**2)))
49342           FEEC2=FAC*FE1EC(51-J)
49343           FEES2=SQRT(MAX(0D0,FAC*(FAC*FE2EC(51-J)-FEEC2**2)))
49344           FEECA=FAC*FE1EA(J)
49345           FEESA=SQRT(MAX(0D0,FAC*(FAC*FE2EA(J)-FEECA**2)))
49346           WRITE(MSTU(11),5800) 3.6D0*(J-1),3.6D0*J,FEEC1,FEES1,
49347      &    FEEC2,FEES2,FEECA,FEESA
49348   620   CONTINUE
49349  
49350 C...Copy statistics on Energy-Energy Correlation into /PYJETS/.
49351       ELSEIF(MTABU.EQ.43) THEN
49352         FAC=1D0/MAX(1,NEVEE)
49353         DO 630 I=1,25
49354           K(I,1)=32
49355           K(I,2)=99
49356           K(I,3)=0
49357           K(I,4)=0
49358           K(I,5)=0
49359           P(I,1)=FAC*FE1EC(I)
49360           V(I,1)=SQRT(MAX(0D0,FAC*(FAC*FE2EC(I)-P(I,1)**2)))
49361           P(I,2)=FAC*FE1EC(51-I)
49362           V(I,2)=SQRT(MAX(0D0,FAC*(FAC*FE2EC(51-I)-P(I,2)**2)))
49363           P(I,3)=FAC*FE1EA(I)
49364           V(I,3)=SQRT(MAX(0D0,FAC*(FAC*FE2EA(I)-P(I,3)**2)))
49365           P(I,4)=PARU(1)*(I-1)/50D0
49366           P(I,5)=PARU(1)*I/50D0
49367           V(I,4)=3.6D0*(I-1)
49368           V(I,5)=3.6D0*I
49369   630   CONTINUE
49370         N=25
49371         DO 640 J=1,5
49372           K(N+1,J)=0
49373           P(N+1,J)=0D0
49374           V(N+1,J)=0D0
49375   640   CONTINUE
49376         K(N+1,1)=32
49377         K(N+1,2)=99
49378         K(N+1,5)=NEVEE
49379         MSTU(3)=1
49380  
49381 C...Reset statistics on decay channels.
49382       ELSEIF(MTABU.EQ.50) THEN
49383         NEVDC=0
49384         NKFDC=0
49385         NREDC=0
49386  
49387 C...Identify and order flavour content of final state.
49388       ELSEIF(MTABU.EQ.51) THEN
49389         NEVDC=NEVDC+1
49390         NDS=0
49391         DO 670 I=1,N
49392           IF(K(I,1).LE.0.OR.K(I,1).GE.6) GOTO 670
49393           NDS=NDS+1
49394           IF(NDS.GT.8) THEN
49395             NREDC=NREDC+1
49396             RETURN
49397           ENDIF
49398           KFM=2*IABS(K(I,2))
49399           IF(K(I,2).LT.0) KFM=KFM-1
49400           DO 650 IDS=NDS-1,1,-1
49401             IIN=IDS+1
49402             IF(KFM.LT.KFDM(IDS)) GOTO 660
49403             KFDM(IDS+1)=KFDM(IDS)
49404   650     CONTINUE
49405           IIN=1
49406   660     KFDM(IIN)=KFM
49407   670   CONTINUE
49408  
49409 C...Find whether old or new final state.
49410         DO 690 IDC=1,NKFDC
49411           IF(NDS.LT.KFDC(IDC,0)) THEN
49412             IKFDC=IDC
49413             GOTO 700
49414           ELSEIF(NDS.EQ.KFDC(IDC,0)) THEN
49415             DO 680 I=1,NDS
49416               IF(KFDM(I).LT.KFDC(IDC,I)) THEN
49417                 IKFDC=IDC
49418                 GOTO 700
49419               ELSEIF(KFDM(I).GT.KFDC(IDC,I)) THEN
49420                 GOTO 690
49421               ENDIF
49422   680       CONTINUE
49423             IKFDC=-IDC
49424             GOTO 700
49425           ENDIF
49426   690   CONTINUE
49427         IKFDC=NKFDC+1
49428   700   IF(IKFDC.LT.0) THEN
49429           IKFDC=-IKFDC
49430         ELSEIF(NKFDC.GE.200) THEN
49431           NREDC=NREDC+1
49432           RETURN
49433         ELSE
49434           DO 720 IDC=NKFDC,IKFDC,-1
49435             NPDC(IDC+1)=NPDC(IDC)
49436             DO 710 I=0,8
49437               KFDC(IDC+1,I)=KFDC(IDC,I)
49438   710       CONTINUE
49439   720     CONTINUE
49440           NKFDC=NKFDC+1
49441           KFDC(IKFDC,0)=NDS
49442           DO 730 I=1,NDS
49443             KFDC(IKFDC,I)=KFDM(I)
49444   730     CONTINUE
49445           NPDC(IKFDC)=0
49446         ENDIF
49447         NPDC(IKFDC)=NPDC(IKFDC)+1
49448  
49449 C...Write statistics on decay channels.
49450       ELSEIF(MTABU.EQ.52) THEN
49451         FAC=1D0/MAX(1,NEVDC)
49452         WRITE(MSTU(11),5900) NEVDC
49453         DO 750 IDC=1,NKFDC
49454           DO 740 I=1,KFDC(IDC,0)
49455             KFM=KFDC(IDC,I)
49456             KF=(KFM+1)/2
49457             IF(2*KF.NE.KFM) KF=-KF
49458             CALL PYNAME(KF,CHAU)
49459             CHDC(I)=CHAU(1:12)
49460             IF(CHAU(13:13).NE.' ') CHDC(I)(12:12)='?'
49461   740     CONTINUE
49462           WRITE(MSTU(11),6000) FAC*NPDC(IDC),(CHDC(I),I=1,KFDC(IDC,0))
49463   750   CONTINUE
49464         IF(NREDC.NE.0) WRITE(MSTU(11),6100) FAC*NREDC
49465  
49466 C...Copy statistics on decay channels into /PYJETS/.
49467       ELSEIF(MTABU.EQ.53) THEN
49468         FAC=1D0/MAX(1,NEVDC)
49469         DO 780 IDC=1,NKFDC
49470           K(IDC,1)=32
49471           K(IDC,2)=99
49472           K(IDC,3)=0
49473           K(IDC,4)=0
49474           K(IDC,5)=KFDC(IDC,0)
49475           DO 760 J=1,5
49476             P(IDC,J)=0D0
49477             V(IDC,J)=0D0
49478   760     CONTINUE
49479           DO 770 I=1,KFDC(IDC,0)
49480             KFM=KFDC(IDC,I)
49481             KF=(KFM+1)/2
49482             IF(2*KF.NE.KFM) KF=-KF
49483             IF(I.LE.5) P(IDC,I)=KF
49484             IF(I.GE.6) V(IDC,I-5)=KF
49485   770     CONTINUE
49486           V(IDC,5)=FAC*NPDC(IDC)
49487   780   CONTINUE
49488         N=NKFDC
49489         DO 790 J=1,5
49490           K(N+1,J)=0
49491           P(N+1,J)=0D0
49492           V(N+1,J)=0D0
49493   790   CONTINUE
49494         K(N+1,1)=32
49495         K(N+1,2)=99
49496         K(N+1,5)=NEVDC
49497         V(N+1,5)=FAC*NREDC
49498         MSTU(3)=1
49499       ENDIF
49500  
49501 C...Format statements for output on unit MSTU(11) (default 6).
49502  5000 FORMAT(///20X,'Event statistics - initial state'/
49503      &20X,'based on an analysis of ',I6,' events'//
49504      &3X,'Main flavours after',8X,'Fraction',4X,'Subfractions ',
49505      &'according to fragmenting system multiplicity'/
49506      &4X,'hard interaction',24X,'1',7X,'2',7X,'3',7X,'4',7X,'5',
49507      &6X,'6-7',5X,'8-10',3X,'11-15',3X,'16-25',4X,'>25'/)
49508  5100 FORMAT(3X,A12,1X,A12,F10.5,1X,10F8.4)
49509  5200 FORMAT(///20X,'Event statistics - final state'/
49510      &20X,'based on an analysis of ',I7,' events'//
49511      &5X,'Mean primary multiplicity =',F10.4/
49512      &5X,'Mean final   multiplicity =',F10.4/
49513      &5X,'Mean charged multiplicity =',F10.4//
49514      &5X,'Number of particles produced per event (directly and via ',
49515      &'decays/branchings)'/
49516      &8X,'KF    Particle/jet  MDCY',10X,'Particles',13X,'Antiparticles',
49517      &8X,'Total'/35X,'prim        seco        prim        seco'/)
49518  5300 FORMAT(1X,I9,4X,A16,I2,5(1X,F11.6))
49519  5400 FORMAT(///20X,'Factorial moments analysis of multiplicity'/
49520      &20X,'based on an analysis of ',I6,' events'//
49521      &3X,'delta-',A3,' delta-phi     <n>/bin',10X,'<F2>',18X,'<F3>',
49522      &18X,'<F4>',18X,'<F5>'/35X,4('     value     error  '))
49523  5500 FORMAT(10X)
49524  5600 FORMAT(2X,2F10.4,F12.4,4(F12.4,F10.4))
49525  5700 FORMAT(///20X,'Energy-Energy Correlation and Asymmetry'/
49526      &20X,'based on an analysis of ',I6,' events'//
49527      &2X,'theta range',8X,'EEC(theta)',8X,'EEC(180-theta)',7X,
49528      &'EECA(theta)'/2X,'in degrees ',3('      value    error')/)
49529  5800 FORMAT(2X,F4.1,' - ',F4.1,3(F11.4,F9.4))
49530  5900 FORMAT(///20X,'Decay channel analysis - final state'/
49531      &20X,'based on an analysis of ',I6,' events'//
49532      &2X,'Probability',10X,'Complete final state'/)
49533  6000 FORMAT(2X,F9.5,5X,8(A12,1X))
49534  6100 FORMAT(2X,F9.5,5X,'into other channels (more than 8 particles ',
49535      &'or table overflow)')
49536  
49537       RETURN
49538       END
49539  
49540 C*********************************************************************
49541  
49542 C...PYEEVT
49543 C...Handles the generation of an e+e- annihilation jet event.
49544  
49545       SUBROUTINE PYEEVT(KFL,ECM)
49546
49547 C...Double precision and integer declarations.
49548       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
49549       IMPLICIT INTEGER(I-N)
49550       INTEGER PYK,PYCHGE,PYCOMP
49551 C...Commonblocks.
49552       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
49553       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
49554       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
49555       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
49556  
49557 C...Check input parameters.
49558       IF(MSTU(12).GE.1) CALL PYLIST(0)
49559       IF(KFL.LT.0.OR.KFL.GT.8) THEN
49560         CALL PYERRM(16,'(PYEEVT:) called with unknown flavour code')
49561         IF(MSTU(21).GE.1) RETURN
49562       ENDIF
49563       IF(KFL.LE.5) ECMMIN=PARJ(127)+2.02D0*PARF(100+MAX(1,KFL))
49564       IF(KFL.GE.6) ECMMIN=PARJ(127)+2.02D0*PMAS(KFL,1)
49565       IF(ECM.LT.ECMMIN) THEN
49566         CALL PYERRM(16,'(PYEEVT:) called with too small CM energy')
49567         IF(MSTU(21).GE.1) RETURN
49568       ENDIF
49569  
49570 C...Check consistency of MSTJ options set.
49571       IF(MSTJ(109).EQ.2.AND.MSTJ(110).NE.1) THEN
49572         CALL PYERRM(6,
49573      &  '(PYEEVT:) MSTJ(109) value requires MSTJ(110) = 1')
49574         MSTJ(110)=1
49575       ENDIF
49576       IF(MSTJ(109).EQ.2.AND.MSTJ(111).NE.0) THEN
49577         CALL PYERRM(6,
49578      &  '(PYEEVT:) MSTJ(109) value requires MSTJ(111) = 0')
49579         MSTJ(111)=0
49580       ENDIF
49581  
49582 C...Initialize alpha_strong and total cross-section.
49583       MSTU(111)=MSTJ(108)
49584       IF(MSTJ(108).EQ.2.AND.(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.1))
49585      &MSTU(111)=1
49586       PARU(112)=PARJ(121)
49587       IF(MSTU(111).EQ.2) PARU(112)=PARJ(122)
49588       IF(MSTJ(116).GT.0.AND.(MSTJ(116).GE.2.OR.ABS(ECM-PARJ(151)).GE.
49589      &PARJ(139).OR.10*MSTJ(102)+KFL.NE.MSTJ(119))) CALL PYXTEE(KFL,ECM,
49590      &XTOT)
49591       IF(MSTJ(116).GE.3) MSTJ(116)=1
49592       PARJ(171)=0D0
49593  
49594 C...Add initial e+e- to event record (documentation only).
49595       NTRY=0
49596   100 NTRY=NTRY+1
49597       IF(NTRY.GT.100) THEN
49598         CALL PYERRM(14,'(PYEEVT:) caught in an infinite loop')
49599         RETURN
49600       ENDIF
49601       MSTU(24)=0
49602       NC=0
49603       IF(MSTJ(115).GE.2) THEN
49604         NC=NC+2
49605         CALL PY1ENT(NC-1,11,0.5D0*ECM,0D0,0D0)
49606         K(NC-1,1)=21
49607         CALL PY1ENT(NC,-11,0.5D0*ECM,PARU(1),0D0)
49608         K(NC,1)=21
49609       ENDIF
49610  
49611 C...Radiative photon (in initial state).
49612       MK=0
49613       ECMC=ECM
49614       IF(MSTJ(107).GE.1.AND.MSTJ(116).GE.1) CALL PYRADK(ECM,MK,PAK,
49615      &THEK,PHIK,ALPK)
49616       IF(MK.EQ.1) ECMC=SQRT(ECM*(ECM-2D0*PAK))
49617       IF(MSTJ(115).GE.1.AND.MK.EQ.1) THEN
49618         NC=NC+1
49619         CALL PY1ENT(NC,22,PAK,THEK,PHIK)
49620         K(NC,3)=MIN(MSTJ(115)/2,1)
49621       ENDIF
49622  
49623 C...Virtual exchange boson (gamma or Z0).
49624       IF(MSTJ(115).GE.3) THEN
49625         NC=NC+1
49626         KF=22
49627         IF(MSTJ(102).EQ.2) KF=23
49628         MSTU10=MSTU(10)
49629         MSTU(10)=1
49630         P(NC,5)=ECMC
49631         CALL PY1ENT(NC,KF,ECMC,0D0,0D0)
49632         K(NC,1)=21
49633         K(NC,3)=1
49634         MSTU(10)=MSTU10
49635       ENDIF
49636  
49637 C...Choice of flavour and jet configuration.
49638       CALL PYXKFL(KFL,ECM,ECMC,KFLC)
49639       IF(KFLC.EQ.0) GOTO 100
49640       CALL PYXJET(ECMC,NJET,CUT)
49641       KFLN=21
49642       IF(NJET.EQ.4) CALL PYX4JT(NJET,CUT,KFLC,ECMC,KFLN,X1,X2,X4,
49643      &X12,X14)
49644       IF(NJET.EQ.3) CALL PYX3JT(NJET,CUT,KFLC,ECMC,X1,X3)
49645       IF(NJET.EQ.2) MSTJ(120)=1
49646  
49647 C...Fill jet configuration and origin.
49648       IF(NJET.EQ.2.AND.MSTJ(101).NE.5) CALL PY2ENT(NC+1,KFLC,-KFLC,ECMC)
49649       IF(NJET.EQ.2.AND.MSTJ(101).EQ.5) CALL PY2ENT(-(NC+1),KFLC,-KFLC,
49650      &ECMC)
49651       IF(NJET.EQ.3) CALL PY3ENT(NC+1,KFLC,21,-KFLC,ECMC,X1,X3)
49652       IF(NJET.EQ.4.AND.KFLN.EQ.21) CALL PY4ENT(NC+1,KFLC,KFLN,KFLN,
49653      &-KFLC,ECMC,X1,X2,X4,X12,X14)
49654       IF(NJET.EQ.4.AND.KFLN.NE.21) CALL PY4ENT(NC+1,KFLC,-KFLN,KFLN,
49655      &-KFLC,ECMC,X1,X2,X4,X12,X14)
49656       IF(MSTU(24).NE.0) GOTO 100
49657       DO 110 IP=NC+1,N
49658         K(IP,3)=K(IP,3)+MIN(MSTJ(115)/2,1)+(MSTJ(115)/3)*(NC-1)
49659   110 CONTINUE
49660  
49661 C...Angular orientation according to matrix element.
49662       IF(MSTJ(106).EQ.1) THEN
49663         CALL PYXDIF(NC,NJET,KFLC,ECMC,CHI,THE,PHI)
49664         CALL PYROBO(NC+1,N,0D0,CHI,0D0,0D0,0D0)
49665         CALL PYROBO(NC+1,N,THE,PHI,0D0,0D0,0D0)
49666       ENDIF
49667  
49668 C...Rotation and boost from radiative photon.
49669       IF(MK.EQ.1) THEN
49670         DBEK=-PAK/(ECM-PAK)
49671         NMIN=NC+1-MSTJ(115)/3
49672         CALL PYROBO(NMIN,N,0D0,-PHIK,0D0,0D0,0D0)
49673         CALL PYROBO(NMIN,N,ALPK,0D0,DBEK*SIN(THEK),0D0,DBEK*COS(THEK))
49674         CALL PYROBO(NMIN,N,0D0,PHIK,0D0,0D0,0D0)
49675       ENDIF
49676  
49677 C...Generate parton shower. Rearrange along strings and check.
49678       IF(MSTJ(101).EQ.5) THEN
49679         CALL PYSHOW(N-1,N,ECMC)
49680         MSTJ14=MSTJ(14)
49681         IF(MSTJ(105).EQ.-1) MSTJ(14)=-1
49682         IF(MSTJ(105).GE.0) MSTU(28)=0
49683         CALL PYPREP(0)
49684         MSTJ(14)=MSTJ14
49685         IF(MSTJ(105).GE.0.AND.MSTU(28).NE.0) GOTO 100
49686       ENDIF
49687  
49688 C...Fragmentation/decay generation. Information for PYTABU.
49689       IF(MSTJ(105).EQ.1) CALL PYEXEC
49690       MSTU(161)=KFLC
49691       MSTU(162)=-KFLC
49692  
49693       RETURN
49694       END
49695  
49696 C*********************************************************************
49697  
49698 C...PYXTEE
49699 C...Calculates total cross-section, including initial state
49700 C...radiation effects.
49701  
49702       SUBROUTINE PYXTEE(KFL,ECM,XTOT)
49703  
49704 C...Double precision and integer declarations.
49705       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
49706       IMPLICIT INTEGER(I-N)
49707       INTEGER PYK,PYCHGE,PYCOMP
49708 C...Commonblocks.
49709       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
49710       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
49711       SAVE /PYDAT1/,/PYDAT2/
49712  
49713 C...Status, (optimized) Q^2 scale, alpha_strong.
49714       PARJ(151)=ECM
49715       MSTJ(119)=10*MSTJ(102)+KFL
49716       IF(MSTJ(111).EQ.0) THEN
49717         Q2R=ECM**2
49718       ELSEIF(MSTU(111).EQ.0) THEN
49719         PARJ(168)=MIN(1D0,MAX(PARJ(128),EXP(-12D0*PARU(1)/
49720      &  ((33D0-2D0*MSTU(112))*PARU(111)))))
49721         Q2R=PARJ(168)*ECM**2
49722       ELSE
49723         PARJ(168)=MIN(1D0,MAX(PARJ(128),PARU(112)/ECM,
49724      &  (2D0*PARU(112)/ECM)**2))
49725         Q2R=PARJ(168)*ECM**2
49726       ENDIF
49727       ALSPI=PYALPS(Q2R)/PARU(1)
49728  
49729 C...QCD corrections factor in R.
49730       IF(MSTJ(101).EQ.0.OR.MSTJ(109).EQ.1) THEN
49731         RQCD=1D0
49732       ELSEIF(IABS(MSTJ(101)).EQ.1.AND.MSTJ(109).EQ.0) THEN
49733         RQCD=1D0+ALSPI
49734       ELSEIF(MSTJ(109).EQ.0) THEN
49735         RQCD=1D0+ALSPI+(1.986D0-0.115D0*MSTU(118))*ALSPI**2
49736         IF(MSTJ(111).EQ.1) RQCD=MAX(1D0,RQCD+(33D0-2D0*MSTU(112))/12D0*
49737      &  LOG(PARJ(168))*ALSPI**2)
49738       ELSEIF(IABS(MSTJ(101)).EQ.1) THEN
49739         RQCD=1D0+(3D0/4D0)*ALSPI
49740       ELSE
49741         RQCD=1D0+(3D0/4D0)*ALSPI-(3D0/32D0+0.519D0*MSTU(118))*ALSPI**2
49742       ENDIF
49743  
49744 C...Calculate Z0 width if default value not acceptable.
49745       IF(MSTJ(102).GE.3) THEN
49746         RVA=3D0*(3D0+(4D0*PARU(102)-1D0)**2)+6D0*RQCD*(2D0+
49747      &  (1D0-8D0*PARU(102)/3D0)**2+(4D0*PARU(102)/3D0-1D0)**2)
49748         DO 100 KFLC=5,6
49749           VQ=1D0
49750           IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(MAX(0D0,1D0-
49751      &    (2D0*PYMASS(KFLC)/ ECM)**2))
49752           IF(KFLC.EQ.5) VF=4D0*PARU(102)/3D0-1D0
49753           IF(KFLC.EQ.6) VF=1D0-8D0*PARU(102)/3D0
49754           RVA=RVA+3D0*RQCD*(0.5D0*VQ*(3D0-VQ**2)*VF**2+VQ**3)
49755   100   CONTINUE
49756         PARJ(124)=PARU(101)*PARJ(123)*RVA/(48D0*PARU(102)*
49757      &  (1D0-PARU(102)))
49758       ENDIF
49759  
49760 C...Calculate propagator and related constants for QFD case.
49761       POLL=1D0-PARJ(131)*PARJ(132)
49762       IF(MSTJ(102).GE.2) THEN
49763         SFF=1D0/(16D0*PARU(102)*(1D0-PARU(102)))
49764         SFW=ECM**4/((ECM**2-PARJ(123)**2)**2+(PARJ(123)*PARJ(124))**2)
49765         SFI=SFW*(1D0-(PARJ(123)/ECM)**2)
49766         VE=4D0*PARU(102)-1D0
49767         SF1I=SFF*(VE*POLL+PARJ(132)-PARJ(131))
49768         SF1W=SFF**2*((VE**2+1D0)*POLL+2D0*VE*(PARJ(132)-PARJ(131)))
49769         HF1I=SFI*SF1I
49770         HF1W=SFW*SF1W
49771       ENDIF
49772  
49773 C...Loop over different flavours: charge, velocity.
49774       RTOT=0D0
49775       RQQ=0D0
49776       RQV=0D0
49777       RVA=0D0
49778       DO 110 KFLC=1,MAX(MSTJ(104),KFL)
49779         IF(KFL.GT.0.AND.KFLC.NE.KFL) GOTO 110
49780         MSTJ(93)=1
49781         PMQ=PYMASS(KFLC)
49782         IF(ECM.LT.2D0*PMQ+PARJ(127)) GOTO 110
49783         QF=KCHG(KFLC,1)/3D0
49784         VQ=1D0
49785         IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(1D0-(2D0*PMQ/ECM)**2)
49786  
49787 C...Calculate R and sum of charges for QED or QFD case.
49788         RQQ=RQQ+3D0*QF**2*POLL
49789         IF(MSTJ(102).LE.1) THEN
49790           RTOT=RTOT+3D0*0.5D0*VQ*(3D0-VQ**2)*QF**2*POLL
49791         ELSE
49792           VF=SIGN(1D0,QF)-4D0*QF*PARU(102)
49793           RQV=RQV-6D0*QF*VF*SF1I
49794           RVA=RVA+3D0*(VF**2+1D0)*SF1W
49795           RTOT=RTOT+3D0*(0.5D0*VQ*(3D0-VQ**2)*(QF**2*POLL-
49796      &    2D0*QF*VF*HF1I+VF**2*HF1W)+VQ**3*HF1W)
49797         ENDIF
49798   110 CONTINUE
49799       RSUM=RQQ
49800       IF(MSTJ(102).GE.2) RSUM=RQQ+SFI*RQV+SFW*RVA
49801  
49802 C...Calculate cross-section, including QCD corrections.
49803       PARJ(141)=RQQ
49804       PARJ(142)=RTOT
49805       PARJ(143)=RTOT*RQCD
49806       PARJ(144)=PARJ(143)
49807       PARJ(145)=PARJ(141)*86.8D0/ECM**2
49808       PARJ(146)=PARJ(142)*86.8D0/ECM**2
49809       PARJ(147)=PARJ(143)*86.8D0/ECM**2
49810       PARJ(148)=PARJ(147)
49811       PARJ(157)=RSUM*RQCD
49812       PARJ(158)=0D0
49813       PARJ(159)=0D0
49814       XTOT=PARJ(147)
49815       IF(MSTJ(107).LE.0) RETURN
49816  
49817 C...Virtual cross-section.
49818       XKL=PARJ(135)
49819       XKU=MIN(PARJ(136),1D0-(2D0*PARJ(127)/ECM)**2)
49820       ALE=2D0*LOG(ECM/PYMASS(11))-1D0
49821       SIGV=ALE/3D0+2D0*LOG(ECM**2/(PYMASS(13)*PYMASS(15)))/3D0-4D0/3D0+
49822      &1.526D0*LOG(ECM**2/0.932D0)
49823  
49824 C...Soft and hard radiative cross-section in QED case.
49825       IF(MSTJ(102).LE.1) THEN
49826         SIGV=1.5D0*ALE-0.5D0+PARU(1)**2/3D0+2D0*SIGV
49827         SIGS=ALE*(2D0*LOG(XKL)-LOG(1D0-XKL)-XKL)
49828         SIGH=ALE*(2D0*LOG(XKU/XKL)-LOG((1D0-XKU)/(1D0-XKL))-(XKU-XKL))
49829  
49830 C...Soft and hard radiative cross-section in QFD case.
49831       ELSE
49832         SZM=1D0-(PARJ(123)/ECM)**2
49833         SZW=PARJ(123)*PARJ(124)/ECM**2
49834         PARJ(161)=-RQQ/RSUM
49835         PARJ(162)=-(RQQ+RQV+RVA)/RSUM
49836         PARJ(163)=(RQV*(1D0-0.5D0*SZM-SFI)+RVA*(1.5D0-SZM-SFW))/RSUM
49837         PARJ(164)=(RQV*SZW**2*(1D0-2D0*SFW)+RVA*(2D0*SFI+SZW**2-
49838      &  4D0+3D0*SZM-SZM**2))/(SZW*RSUM)
49839         SIGV=1.5D0*ALE-0.5D0+PARU(1)**2/3D0+((2D0*RQQ+SFI*RQV)/
49840      &  RSUM)*SIGV+(SZW*SFW*RQV/RSUM)*PARU(1)*20D0/9D0
49841         SIGS=ALE*(2D0*LOG(XKL)+PARJ(161)*LOG(1D0-XKL)+PARJ(162)*XKL+
49842      &  PARJ(163)*LOG(((XKL-SZM)**2+SZW**2)/(SZM**2+SZW**2))+
49843      &  PARJ(164)*(ATAN((XKL-SZM)/SZW)-ATAN(-SZM/SZW)))
49844         SIGH=ALE*(2D0*LOG(XKU/XKL)+PARJ(161)*LOG((1D0-XKU)/
49845      &  (1D0-XKL))+PARJ(162)*(XKU-XKL)+PARJ(163)*
49846      &  LOG(((XKU-SZM)**2+SZW**2)/((XKL-SZM)**2+SZW**2))+
49847      &  PARJ(164)*(ATAN((XKU-SZM)/SZW)-ATAN((XKL-SZM)/SZW)))
49848       ENDIF
49849  
49850 C...Total cross-section and fraction of hard photon events.
49851       PARJ(160)=SIGH/(PARU(1)/PARU(101)+SIGV+SIGS+SIGH)
49852       PARJ(157)=RSUM*(1D0+(PARU(101)/PARU(1))*(SIGV+SIGS+SIGH))*RQCD
49853       PARJ(144)=PARJ(157)
49854       PARJ(148)=PARJ(144)*86.8D0/ECM**2
49855       XTOT=PARJ(148)
49856  
49857       RETURN
49858       END
49859  
49860 C*********************************************************************
49861  
49862 C...PYRADK
49863 C...Generates initial state photon radiation.
49864  
49865       SUBROUTINE PYRADK(ECM,MK,PAK,THEK,PHIK,ALPK)
49866  
49867 C...Double precision and integer declarations.
49868       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
49869       IMPLICIT INTEGER(I-N)
49870       INTEGER PYK,PYCHGE,PYCOMP
49871 C...Commonblocks.
49872       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
49873       SAVE /PYDAT1/
49874  
49875 C...Function: cumulative hard photon spectrum in QFD case.
49876       FXK(XX)=2D0*LOG(XX)+PARJ(161)*LOG(1D0-XX)+PARJ(162)*XX+
49877      &PARJ(163)*LOG((XX-SZM)**2+SZW**2)+PARJ(164)*ATAN((XX-SZM)/SZW)
49878  
49879 C...Determine whether radiative photon or not.
49880       MK=0
49881       PAK=0D0
49882       IF(PARJ(160).LT.PYR(0)) RETURN
49883       MK=1
49884  
49885 C...Photon energy range. Find photon momentum in QED case.
49886       XKL=PARJ(135)
49887       XKU=MIN(PARJ(136),1D0-(2D0*PARJ(127)/ECM)**2)
49888       IF(MSTJ(102).LE.1) THEN
49889   100   XK=1D0/(1D0+(1D0/XKL-1D0)*((1D0/XKU-1D0)/(1D0/XKL-1D0))**PYR(0))
49890         IF(1D0+(1D0-XK)**2.LT.2D0*PYR(0)) GOTO 100
49891  
49892 C...Ditto in QFD case, by numerical inversion of integrated spectrum.
49893       ELSE
49894         SZM=1D0-(PARJ(123)/ECM)**2
49895         SZW=PARJ(123)*PARJ(124)/ECM**2
49896         FXKL=FXK(XKL)
49897         FXKU=FXK(XKU)
49898         FXKD=1D-4*(FXKU-FXKL)
49899         FXKR=FXKL+PYR(0)*(FXKU-FXKL)
49900         NXK=0
49901   110   NXK=NXK+1
49902         XK=0.5D0*(XKL+XKU)
49903         FXKV=FXK(XK)
49904         IF(FXKV.GT.FXKR) THEN
49905           XKU=XK
49906           FXKU=FXKV
49907         ELSE
49908           XKL=XK
49909           FXKL=FXKV
49910         ENDIF
49911         IF(NXK.LT.15.AND.FXKU-FXKL.GT.FXKD) GOTO 110
49912         XK=XKL+(XKU-XKL)*(FXKR-FXKL)/(FXKU-FXKL)
49913       ENDIF
49914       PAK=0.5D0*ECM*XK
49915  
49916 C...Photon polar and azimuthal angle.
49917       PME=2D0*(PYMASS(11)/ECM)**2
49918   120 CTHM=PME*(2D0/PME)**PYR(0)
49919       IF(1D0-(XK**2*CTHM*(1D0-0.5D0*CTHM)+2D0*(1D0-XK)*PME/MAX(PME,
49920      &CTHM*(1D0-0.5D0*CTHM)))/(1D0+(1D0-XK)**2).LT.PYR(0)) GOTO 120
49921       CTHE=1D0-CTHM
49922       IF(PYR(0).GT.0.5D0) CTHE=-CTHE
49923       STHE=SQRT(MAX(0D0,(CTHM-PME)*(2D0-CTHM)))
49924       THEK=PYANGL(CTHE,STHE)
49925       PHIK=PARU(2)*PYR(0)
49926  
49927 C...Rotation angle for hadronic system.
49928       SGN=1D0
49929       IF(0.5D0*(2D0-XK*(1D0-CTHE))**2/((2D0-XK)**2+(XK*CTHE)**2).GT.
49930      &PYR(0)) SGN=-1D0
49931       ALPK=ASIN(SGN*STHE*(XK-SGN*(2D0*SQRT(1D0-XK)-2D0+XK)*CTHE)/
49932      &(2D0-XK*(1D0-SGN*CTHE)))
49933  
49934       RETURN
49935       END
49936  
49937 C*********************************************************************
49938  
49939 C...PYXKFL
49940 C...Selects flavour for produced qqbar pair.
49941  
49942       SUBROUTINE PYXKFL(KFL,ECM,ECMC,KFLC)
49943  
49944 C...Double precision and integer declarations.
49945       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
49946       IMPLICIT INTEGER(I-N)
49947       INTEGER PYK,PYCHGE,PYCOMP
49948 C...Commonblocks.
49949       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
49950       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
49951       SAVE /PYDAT1/,/PYDAT2/
49952  
49953 C...Calculate maximum weight in QED or QFD case.
49954       IF(MSTJ(102).LE.1) THEN
49955         RFMAX=4D0/9D0
49956       ELSE
49957         POLL=1D0-PARJ(131)*PARJ(132)
49958         SFF=1D0/(16D0*PARU(102)*(1D0-PARU(102)))
49959         SFW=ECMC**4/((ECMC**2-PARJ(123)**2)**2+(PARJ(123)*PARJ(124))**2)
49960         SFI=SFW*(1D0-(PARJ(123)/ECMC)**2)
49961         VE=4D0*PARU(102)-1D0
49962         HF1I=SFI*SFF*(VE*POLL+PARJ(132)-PARJ(131))
49963         HF1W=SFW*SFF**2*((VE**2+1D0)*POLL+2D0*VE*(PARJ(132)-PARJ(131)))
49964         RFMAX=MAX(4D0/9D0*POLL-4D0/3D0*(1D0-8D0*PARU(102)/3D0)*HF1I+
49965      &  ((1D0-8D0*PARU(102)/3D0)**2+1D0)*HF1W,1D0/9D0*POLL+2D0/3D0*
49966      &  (-1D0+4D0*PARU(102)/3D0)*HF1I+((-1D0+4D0*PARU(102)/3D0)**2+
49967      &  1D0)*HF1W)
49968       ENDIF
49969  
49970 C...Choose flavour. Gives charge and velocity.
49971       NTRY=0
49972   100 NTRY=NTRY+1
49973       IF(NTRY.GT.100) THEN
49974         CALL PYERRM(14,'(PYXKFL:) caught in an infinite loop')
49975         KFLC=0
49976         RETURN
49977       ENDIF
49978       KFLC=KFL
49979       IF(KFL.LE.0) KFLC=1+INT(MSTJ(104)*PYR(0))
49980       MSTJ(93)=1
49981       PMQ=PYMASS(KFLC)
49982       IF(ECM.LT.2D0*PMQ+PARJ(127)) GOTO 100
49983       QF=KCHG(KFLC,1)/3D0
49984       VQ=1D0
49985       IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(MAX(0D0,1D0-(2D0*PMQ/ECMC)**2))
49986  
49987 C...Calculate weight in QED or QFD case.
49988       IF(MSTJ(102).LE.1) THEN
49989         RF=QF**2
49990         RFV=0.5D0*VQ*(3D0-VQ**2)*QF**2
49991       ELSE
49992         VF=SIGN(1D0,QF)-4D0*QF*PARU(102)
49993         RF=QF**2*POLL-2D0*QF*VF*HF1I+(VF**2+1D0)*HF1W
49994         RFV=0.5D0*VQ*(3D0-VQ**2)*(QF**2*POLL-2D0*QF*VF*HF1I+VF**2*HF1W)+
49995      &  VQ**3*HF1W
49996         IF(RFV.GT.0D0) PARJ(171)=MIN(1D0,VQ**3*HF1W/RFV)
49997       ENDIF
49998  
49999 C...Weighting or new event (radiative photon). Cross-section update.
50000       IF(KFL.LE.0.AND.RF.LT.PYR(0)*RFMAX) GOTO 100
50001       PARJ(158)=PARJ(158)+1D0
50002       IF(ECMC.LT.2D0*PMQ+PARJ(127).OR.RFV.LT.PYR(0)*RF) KFLC=0
50003       IF(MSTJ(107).LE.0.AND.KFLC.EQ.0) GOTO 100
50004       IF(KFLC.NE.0) PARJ(159)=PARJ(159)+1D0
50005       PARJ(144)=PARJ(157)*PARJ(159)/PARJ(158)
50006       PARJ(148)=PARJ(144)*86.8D0/ECM**2
50007  
50008       RETURN
50009       END
50010  
50011 C*********************************************************************
50012  
50013 C...PYXJET
50014 C...Selects number of jets in matrix element approach.
50015  
50016       SUBROUTINE PYXJET(ECM,NJET,CUT)
50017  
50018 C...Double precision and integer declarations.
50019       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50020       IMPLICIT INTEGER(I-N)
50021       INTEGER PYK,PYCHGE,PYCOMP
50022 C...Commonblocks.
50023       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
50024       SAVE /PYDAT1/
50025 C...Local array and data.
50026       DIMENSION ZHUT(5)
50027       DATA ZHUT/3.0922D0, 6.2291D0, 7.4782D0, 7.8440D0, 8.2560D0/
50028  
50029 C...Trivial result for two-jets only, including parton shower.
50030       IF(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.5) THEN
50031         CUT=0D0
50032  
50033 C...QCD and Abelian vector gluon theory: Q^2 for jet rate and R.
50034       ELSEIF(MSTJ(109).EQ.0.OR.MSTJ(109).EQ.2) THEN
50035         CF=4D0/3D0
50036         IF(MSTJ(109).EQ.2) CF=1D0
50037         IF(MSTJ(111).EQ.0) THEN
50038           Q2=ECM**2
50039           Q2R=ECM**2
50040         ELSEIF(MSTU(111).EQ.0) THEN
50041           PARJ(169)=MIN(1D0,PARJ(129))
50042           Q2=PARJ(169)*ECM**2
50043           PARJ(168)=MIN(1D0,MAX(PARJ(128),EXP(-12D0*PARU(1)/
50044      &    ((33D0-2D0*MSTU(112))*PARU(111)))))
50045           Q2R=PARJ(168)*ECM**2
50046         ELSE
50047           PARJ(169)=MIN(1D0,MAX(PARJ(129),(2D0*PARU(112)/ECM)**2))
50048           Q2=PARJ(169)*ECM**2
50049           PARJ(168)=MIN(1D0,MAX(PARJ(128),PARU(112)/ECM,
50050      &    (2D0*PARU(112)/ECM)**2))
50051           Q2R=PARJ(168)*ECM**2
50052         ENDIF
50053  
50054 C...alpha_strong for R and R itself.
50055         ALSPI=(3D0/4D0)*CF*PYALPS(Q2R)/PARU(1)
50056         IF(IABS(MSTJ(101)).EQ.1) THEN
50057           RQCD=1D0+ALSPI
50058         ELSEIF(MSTJ(109).EQ.0) THEN
50059           RQCD=1D0+ALSPI+(1.986D0-0.115D0*MSTU(118))*ALSPI**2
50060           IF(MSTJ(111).EQ.1) RQCD=MAX(1D0,RQCD+
50061      &    (33D0-2D0*MSTU(112))/12D0*LOG(PARJ(168))*ALSPI**2)
50062         ELSE
50063           RQCD=1D0+ALSPI-(3D0/32D0+0.519D0*MSTU(118))*(4D0*ALSPI/3D0)**2
50064         ENDIF
50065  
50066 C...alpha_strong for jet rate. Initial value for y cut.
50067         ALSPI=(3D0/4D0)*CF*PYALPS(Q2)/PARU(1)
50068         CUT=MAX(0.001D0,PARJ(125),(PARJ(126)/ECM)**2)
50069         IF(IABS(MSTJ(101)).LE.1.OR.(MSTJ(109).EQ.0.AND.MSTJ(111).EQ.0))
50070      &  CUT=MAX(CUT,EXP(-SQRT(0.75D0/ALSPI))/2D0)
50071         IF(MSTJ(110).EQ.2) CUT=MAX(0.01D0,MIN(0.05D0,CUT))
50072  
50073 C...Parametrization of first order three-jet cross-section.
50074   100   IF(MSTJ(101).EQ.0.OR.CUT.GE.0.25D0) THEN
50075           PARJ(152)=0D0
50076         ELSE
50077           PARJ(152)=(2D0*ALSPI/3D0)*((3D0-6D0*CUT+2D0*LOG(CUT))*
50078      &    LOG(CUT/(1D0-2D0*CUT))+(2.5D0+1.5D0*CUT-6.571D0)*
50079      &    (1D0-3D0*CUT)+5.833D0*(1D0-3D0*CUT)**2-3.894D0*
50080      &    (1D0-3D0*CUT)**3+1.342D0*(1D0-3D0*CUT)**4)/RQCD
50081           IF(MSTJ(109).EQ.2.AND.(MSTJ(101).EQ.2.OR.MSTJ(101).LE.-2))
50082      &    PARJ(152)=0D0
50083         ENDIF
50084  
50085 C...Parametrization of second order three-jet cross-section.
50086         IF(IABS(MSTJ(101)).LE.1.OR.MSTJ(101).EQ.3.OR.MSTJ(109).EQ.2.OR.
50087      &  CUT.GE.0.25D0) THEN
50088           PARJ(153)=0D0
50089         ELSEIF(MSTJ(110).LE.1) THEN
50090           CT=LOG(1D0/CUT-2D0)
50091           PARJ(153)=ALSPI**2*CT**2*(2.419D0+0.5989D0*CT+0.6782D0*CT**2-
50092      &    0.2661D0*CT**3+0.01159D0*CT**4)/RQCD
50093  
50094 C...Interpolation in second/first order ratio for Zhu parametrization.
50095         ELSEIF(MSTJ(110).EQ.2) THEN
50096           IZA=0
50097           DO 110 IY=1,5
50098             IF(ABS(CUT-0.01D0*IY).LT.0.0001D0) IZA=IY
50099   110     CONTINUE
50100           IF(IZA.NE.0) THEN
50101             ZHURAT=ZHUT(IZA)
50102           ELSE
50103             IZ=100D0*CUT
50104             ZHURAT=ZHUT(IZ)+(100D0*CUT-IZ)*(ZHUT(IZ+1)-ZHUT(IZ))
50105           ENDIF
50106           PARJ(153)=ALSPI*PARJ(152)*ZHURAT
50107         ENDIF
50108  
50109 C...Shift in second order three-jet cross-section with optimized Q^2.
50110         IF(MSTJ(111).EQ.1.AND.IABS(MSTJ(101)).GE.2.AND.MSTJ(101).NE.3
50111      &  .AND.CUT.LT.0.25D0) PARJ(153)=PARJ(153)+
50112      &  (33D0-2D0*MSTU(112))/12D0*LOG(PARJ(169))*ALSPI*PARJ(152)
50113  
50114 C...Parametrization of second order four-jet cross-section.
50115         IF(IABS(MSTJ(101)).LE.1.OR.CUT.GE.0.125D0) THEN
50116           PARJ(154)=0D0
50117         ELSE
50118           CT=LOG(1D0/CUT-5D0)
50119           IF(CUT.LE.0.018D0) THEN
50120             XQQGG=6.349D0-4.330D0*CT+0.8304D0*CT**2
50121             IF(MSTJ(109).EQ.2) XQQGG=(4D0/3D0)**2*(3.035D0-2.091D0*CT+
50122      &      0.4059D0*CT**2)
50123             XQQQQ=1.25D0*(-0.1080D0+0.01486D0*CT+0.009364D0*CT**2)
50124             IF(MSTJ(109).EQ.2) XQQQQ=8D0*XQQQQ
50125           ELSE
50126             XQQGG=-0.09773D0+0.2959D0*CT-0.2764D0*CT**2+0.08832D0*CT**3
50127             IF(MSTJ(109).EQ.2) XQQGG=(4D0/3D0)**2*(-0.04079D0+
50128      &      0.1340D0*CT-0.1326D0*CT**2+0.04365D0*CT**3)
50129             XQQQQ=1.25D0*(0.003661D0-0.004888D0*CT-0.001081D0*CT**2+
50130      &      0.002093D0*CT**3)
50131             IF(MSTJ(109).EQ.2) XQQQQ=8D0*XQQQQ
50132           ENDIF
50133           PARJ(154)=ALSPI**2*CT**2*(XQQGG+XQQQQ)/RQCD
50134           PARJ(155)=XQQQQ/(XQQGG+XQQQQ)
50135         ENDIF
50136  
50137 C...If negative three-jet rate, change y' optimization parameter.
50138         IF(MSTJ(111).EQ.1.AND.PARJ(152)+PARJ(153).LT.0D0.AND.
50139      &  PARJ(169).LT.0.99D0) THEN
50140           PARJ(169)=MIN(1D0,1.2D0*PARJ(169))
50141           Q2=PARJ(169)*ECM**2
50142           ALSPI=(3D0/4D0)*CF*PYALPS(Q2)/PARU(1)
50143           GOTO 100
50144         ENDIF
50145  
50146 C...If too high cross-section, use harder cuts, or fail.
50147         IF(PARJ(152)+PARJ(153)+PARJ(154).GE.1) THEN
50148           IF(MSTJ(110).EQ.2.AND.CUT.GT.0.0499D0.AND.MSTJ(111).EQ.1.AND.
50149      &    PARJ(169).LT.0.99D0) THEN
50150             PARJ(169)=MIN(1D0,1.2D0*PARJ(169))
50151             Q2=PARJ(169)*ECM**2
50152             ALSPI=(3D0/4D0)*CF*PYALPS(Q2)/PARU(1)
50153             GOTO 100
50154           ELSEIF(MSTJ(110).EQ.2.AND.CUT.GT.0.0499D0) THEN
50155             CALL PYERRM(26,
50156      &      '(PYXJET:) no allowed y cut value for Zhu parametrization')
50157           ENDIF
50158           CUT=0.26D0*(4D0*CUT)**(PARJ(152)+PARJ(153)+
50159      &    PARJ(154))**(-1D0/3D0)
50160           IF(MSTJ(110).EQ.2) CUT=MAX(0.01D0,MIN(0.05D0,CUT))
50161           GOTO 100
50162         ENDIF
50163  
50164 C...Scalar gluon (first order only).
50165       ELSE
50166         ALSPI=PYALPS(ECM**2)/PARU(1)
50167         CUT=MAX(0.001D0,PARJ(125),(PARJ(126)/ECM)**2,EXP(-3D0/ALSPI))
50168         PARJ(152)=0D0
50169         IF(CUT.LT.0.25D0) PARJ(152)=(ALSPI/3D0)*((1D0-2D0*CUT)*
50170      &  LOG((1D0-2D0*CUT)/CUT)+0.5D0*(9D0*CUT**2-1D0))
50171         PARJ(153)=0D0
50172         PARJ(154)=0D0
50173       ENDIF
50174  
50175 C...Select number of jets.
50176       PARJ(150)=CUT
50177       IF(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.5) THEN
50178         NJET=2
50179       ELSEIF(MSTJ(101).LE.0) THEN
50180         NJET=MIN(4,2-MSTJ(101))
50181       ELSE
50182         RNJ=PYR(0)
50183         NJET=2
50184         IF(PARJ(152)+PARJ(153)+PARJ(154).GT.RNJ) NJET=3
50185         IF(PARJ(154).GT.RNJ) NJET=4
50186       ENDIF
50187  
50188       RETURN
50189       END
50190  
50191 C*********************************************************************
50192  
50193 C...PYX3JT
50194 C...Selects the kinematical variables of three-jet events.
50195  
50196       SUBROUTINE PYX3JT(NJET,CUT,KFL,ECM,X1,X2)
50197  
50198 C...Double precision and integer declarations.
50199       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50200       IMPLICIT INTEGER(I-N)
50201       INTEGER PYK,PYCHGE,PYCOMP
50202 C...Commonblocks.
50203       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
50204       SAVE /PYDAT1/
50205 C...Local array.
50206       DIMENSION ZHUP(5,12)
50207  
50208 C...Coefficients of Zhu second order parametrization.
50209       DATA ((ZHUP(IC1,IC2),IC2=1,12),IC1=1,5)/
50210      &18.29D0,  89.56D0,  4.541D0,  -52.09D0, -109.8D0,  24.90D0,
50211      &11.63D0,  3.683D0,  17.50D0,0.002440D0, -1.362D0,-0.3537D0,
50212      &11.42D0,  6.299D0, -22.55D0,  -8.915D0,  59.25D0, -5.855D0,
50213      &-32.85D0, -1.054D0, -16.90D0,0.006489D0,-0.8156D0,0.01095D0,
50214      &7.847D0, -3.964D0, -35.83D0,   1.178D0,  29.39D0, 0.2806D0,
50215      &47.82D0, -12.36D0, -56.72D0, 0.04054D0,-0.4365D0, 0.6062D0,
50216      &5.441D0, -56.89D0, -50.27D0,   15.13D0,  114.3D0, -18.19D0,
50217      &97.05D0, -1.890D0, -139.9D0, 0.08153D0,-0.4984D0, 0.9439D0,
50218      &-17.65D0,  51.44D0, -58.32D0,   70.95D0, -255.7D0, -78.99D0,
50219      &476.9D0,  29.65D0, -239.3D0,  0.4745D0, -1.174D0,  6.081D0/
50220  
50221 C...Dilogarithm of x for x<0.5 (x>0.5 obtained by analytic trick).
50222       DILOG(X)=X+X**2/4D0+X**3/9D0+X**4/16D0+X**5/25D0+X**6/36D0+
50223      &X**7/49D0
50224  
50225 C...Event type. Mass effect factors and other common constants.
50226       MSTJ(120)=2
50227       MSTJ(121)=0
50228       PMQ=PYMASS(KFL)
50229       QME=(2D0*PMQ/ECM)**2
50230       IF(MSTJ(109).NE.1) THEN
50231         CUTL=LOG(CUT)
50232         CUTD=LOG(1D0/CUT-2D0)
50233         IF(MSTJ(109).EQ.0) THEN
50234           CF=4D0/3D0
50235           CN=3D0
50236           TR=2D0
50237           WTMX=MIN(20D0,37D0-6D0*CUTD)
50238           IF(MSTJ(110).EQ.2) WTMX=2D0*(7.5D0+80D0*CUT)
50239         ELSE
50240           CF=1D0
50241           CN=0D0
50242           TR=12D0
50243           WTMX=0D0
50244         ENDIF
50245  
50246 C...Alpha_strong and effects of optimized Q^2 scale. Maximum weight.
50247         ALS2PI=PARU(118)/PARU(2)
50248         WTOPT=0D0
50249         IF(MSTJ(111).EQ.1) WTOPT=(33D0-2D0*MSTU(112))/6D0*
50250      &  LOG(PARJ(169))*ALS2PI
50251         WTMAX=MAX(0D0,1D0+WTOPT+ALS2PI*WTMX)
50252  
50253 C...Choose three-jet events in allowed region.
50254   100   NJET=3
50255   110   Y13L=CUTL+CUTD*PYR(0)
50256         Y23L=CUTL+CUTD*PYR(0)
50257         Y13=EXP(Y13L)
50258         Y23=EXP(Y23L)
50259         Y12=1D0-Y13-Y23
50260         IF(Y12.LE.CUT) GOTO 110
50261         IF(Y13**2+Y23**2+2D0*Y12.LE.2D0*PYR(0)) GOTO 110
50262  
50263 C...Second order corrections.
50264         IF(MSTJ(101).EQ.2.AND.MSTJ(110).LE.1) THEN
50265           Y12L=LOG(Y12)
50266           Y13M=LOG(1D0-Y13)
50267           Y23M=LOG(1D0-Y23)
50268           Y12M=LOG(1D0-Y12)
50269           IF(Y13.LE.0.5D0) Y13I=DILOG(Y13)
50270           IF(Y13.GE.0.5D0) Y13I=1.644934D0-Y13L*Y13M-DILOG(1D0-Y13)
50271           IF(Y23.LE.0.5D0) Y23I=DILOG(Y23)
50272           IF(Y23.GE.0.5D0) Y23I=1.644934D0-Y23L*Y23M-DILOG(1D0-Y23)
50273           IF(Y12.LE.0.5D0) Y12I=DILOG(Y12)
50274           IF(Y12.GE.0.5D0) Y12I=1.644934D0-Y12L*Y12M-DILOG(1D0-Y12)
50275           WT1=(Y13**2+Y23**2+2D0*Y12)/(Y13*Y23)
50276           WT2=CF*(-2D0*(CUTL-Y12L)**2-3D0*CUTL-1D0+3.289868D0+
50277      &    2D0*(2D0*CUTL-Y12L)*CUT/Y12)+
50278      &    CN*((CUTL-Y12L)**2-(CUTL-Y13L)**2-(CUTL-Y23L)**2-
50279      &    11D0*CUTL/6D0+67D0/18D0+1.644934D0-(2D0*CUTL-Y12L)*CUT/Y12+
50280      &    (2D0*CUTL-Y13L)*CUT/Y13+(2D0*CUTL-Y23L)*CUT/Y23)+
50281      &    TR*(2D0*CUTL/3D0-10D0/9D0)+
50282      &    CF*(Y12/(Y12+Y13)+Y12/(Y12+Y23)+(Y12+Y23)/Y13+(Y12+Y13)/Y23+
50283      &    Y13L*(4D0*Y12**2+2D0*Y12*Y13+4D0*Y12*Y23+Y13*Y23)/
50284      &    (Y12+Y23)**2+Y23L*(4D0*Y12**2+2D0*Y12*Y23+4D0*Y12*Y13+
50285      &    Y13*Y23)/(Y12+Y13)**2)/WT1+
50286      &    CN*(Y13L*Y13/(Y12+Y23)+Y23L*Y23/(Y12+Y13))/WT1+(CN-2D0*CF)*
50287      &    ((Y12**2+(Y12+Y13)**2)*(Y12L*Y23L-Y12L*Y12M-Y23L*
50288      &    Y23M+1.644934D0-Y12I-Y23I)/(Y13*Y23)+(Y12**2+(Y12+Y23)**2)*
50289      &    (Y12L*Y13L-Y12L*Y12M-Y13L*Y13M+1.644934D0-Y12I-Y13I)/
50290      &    (Y13*Y23)+(Y13**2+Y23**2)/(Y13*Y23*(Y13+Y23))-
50291      &    2D0*Y12L*Y12**2/(Y13+Y23)**2-4D0*Y12L*Y12/(Y13+Y23))/WT1-
50292      &    CN*(Y13L*Y23L-Y13L*Y13M-Y23L*Y23M+1.644934D0-Y13I-Y23I)
50293           IF(1D0+WTOPT+ALS2PI*WT2.LE.0D0) MSTJ(121)=1
50294           IF(1D0+WTOPT+ALS2PI*WT2.LE.WTMAX*PYR(0)) GOTO 110
50295           PARJ(156)=(WTOPT+ALS2PI*WT2)/(1D0+WTOPT+ALS2PI*WT2)
50296  
50297         ELSEIF(MSTJ(101).EQ.2.AND.MSTJ(110).EQ.2) THEN
50298 C...Second order corrections; Zhu parametrization of ERT.
50299           ZX=(Y23-Y13)**2
50300           ZY=1D0-Y12
50301           IZA=0
50302           DO 120 IY=1,5
50303             IF(ABS(CUT-0.01D0*IY).LT.0.0001D0) IZA=IY
50304   120     CONTINUE
50305           IF(IZA.NE.0) THEN
50306             IZ=IZA
50307             WT2=ZHUP(IZ,1)+ZHUP(IZ,2)*ZX+ZHUP(IZ,3)*ZX**2+(ZHUP(IZ,4)+
50308      &      ZHUP(IZ,5)*ZX)*ZY+(ZHUP(IZ,6)+ZHUP(IZ,7)*ZX)*ZY**2+
50309      &      (ZHUP(IZ,8)+ZHUP(IZ,9)*ZX)*ZY**3+ZHUP(IZ,10)/(ZX-ZY**2)+
50310      &      ZHUP(IZ,11)/(1D0-ZY)+ZHUP(IZ,12)/ZY
50311           ELSE
50312             IZ=100D0*CUT
50313             WTL=ZHUP(IZ,1)+ZHUP(IZ,2)*ZX+ZHUP(IZ,3)*ZX**2+(ZHUP(IZ,4)+
50314      &      ZHUP(IZ,5)*ZX)*ZY+(ZHUP(IZ,6)+ZHUP(IZ,7)*ZX)*ZY**2+
50315      &      (ZHUP(IZ,8)+ZHUP(IZ,9)*ZX)*ZY**3+ZHUP(IZ,10)/(ZX-ZY**2)+
50316      &      ZHUP(IZ,11)/(1D0-ZY)+ZHUP(IZ,12)/ZY
50317             IZ=IZ+1
50318             WTU=ZHUP(IZ,1)+ZHUP(IZ,2)*ZX+ZHUP(IZ,3)*ZX**2+(ZHUP(IZ,4)+
50319      &      ZHUP(IZ,5)*ZX)*ZY+(ZHUP(IZ,6)+ZHUP(IZ,7)*ZX)*ZY**2+
50320      &      (ZHUP(IZ,8)+ZHUP(IZ,9)*ZX)*ZY**3+ZHUP(IZ,10)/(ZX-ZY**2)+
50321      &      ZHUP(IZ,11)/(1D0-ZY)+ZHUP(IZ,12)/ZY
50322             WT2=WTL+(WTU-WTL)*(100D0*CUT+1D0-IZ)
50323           ENDIF
50324           IF(1D0+WTOPT+2D0*ALS2PI*WT2.LE.0D0) MSTJ(121)=1
50325           IF(1D0+WTOPT+2D0*ALS2PI*WT2.LE.WTMAX*PYR(0)) GOTO 110
50326           PARJ(156)=(WTOPT+2D0*ALS2PI*WT2)/(1D0+WTOPT+2D0*ALS2PI*WT2)
50327         ENDIF
50328  
50329 C...Impose mass cuts (gives two jets). For fixed jet number new try.
50330         X1=1D0-Y23
50331         X2=1D0-Y13
50332         X3=1D0-Y12
50333         IF(4D0*Y23*Y13*Y12/X3**2.LE.QME) NJET=2
50334         IF(MOD(MSTJ(103),4).GE.2.AND.IABS(MSTJ(101)).LE.1.AND.QME*X3+
50335      &  0.5D0*QME**2+(0.5D0*QME+0.25D0*QME**2)*((1D0-X2)/(1D0-X1)+
50336      &  (1D0-X1)/(1D0-X2)).GT.(X1**2+X2**2)*PYR(0)) NJET=2
50337         IF(MSTJ(101).EQ.-1.AND.NJET.EQ.2) GOTO 100
50338  
50339 C...Scalar gluon model (first order only, no mass effects).
50340       ELSE
50341   130   NJET=3
50342   140   X3=SQRT(4D0*CUT**2+PYR(0)*((1D0-CUT)**2-4D0*CUT**2))
50343         IF(LOG((X3-CUT)/CUT).LE.PYR(0)*LOG((1D0-2D0*CUT)/CUT)) GOTO 140
50344         YD=SIGN(2D0*CUT*((X3-CUT)/CUT)**PYR(0)-X3,PYR(0)-0.5D0)
50345         X1=1D0-0.5D0*(X3+YD)
50346         X2=1D0-0.5D0*(X3-YD)
50347         IF(4D0*(1D0-X1)*(1D0-X2)*(1D0-X3)/X3**2.LE.QME) NJET=2
50348         IF(MSTJ(102).GE.2) THEN
50349           IF(X3**2-2D0*(1D0+X3)*(1D0-X1)*(1D0-X2)*PARJ(171).LT.
50350      &    X3**2*PYR(0)) NJET=2
50351         ENDIF
50352         IF(MSTJ(101).EQ.-1.AND.NJET.EQ.2) GOTO 130
50353       ENDIF
50354  
50355       RETURN
50356       END
50357  
50358 C*********************************************************************
50359  
50360 C...PYX4JT
50361 C...Selects the kinematical variables of four-jet events.
50362  
50363       SUBROUTINE PYX4JT(NJET,CUT,KFL,ECM,KFLN,X1,X2,X4,X12,X14)
50364  
50365 C...Double precision and integer declarations.
50366       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50367       IMPLICIT INTEGER(I-N)
50368       INTEGER PYK,PYCHGE,PYCOMP
50369 C...Commonblocks.
50370       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
50371       SAVE /PYDAT1/
50372 C...Local arrays.
50373       DIMENSION WTA(4),WTB(4),WTC(4),WTD(4),WTE(4)
50374  
50375 C...Common constants. Colour factors for QCD and Abelian gluon theory.
50376       PMQ=PYMASS(KFL)
50377       QME=(2D0*PMQ/ECM)**2
50378       CT=LOG(1D0/CUT-5D0)
50379       IF(MSTJ(109).EQ.0) THEN
50380         CF=4D0/3D0
50381         CN=3D0
50382         TR=2.5D0
50383       ELSE
50384         CF=1D0
50385         CN=0D0
50386         TR=15D0
50387       ENDIF
50388  
50389 C...Choice of process (qqbargg or qqbarqqbar).
50390   100 NJET=4
50391       IT=1
50392       IF(PARJ(155).GT.PYR(0)) IT=2
50393       IF(MSTJ(101).LE.-3) IT=-MSTJ(101)-2
50394       IF(IT.EQ.1) WTMX=0.7D0/CUT**2
50395       IF(IT.EQ.1.AND.MSTJ(109).EQ.2) WTMX=0.6D0/CUT**2
50396       IF(IT.EQ.2) WTMX=0.1125D0*CF*TR/CUT**2
50397       ID=1
50398  
50399 C...Sample the five kinematical variables (for qqgg preweighted in y34).
50400   110 Y134=3D0*CUT+(1D0-6D0*CUT)*PYR(0)
50401       Y234=3D0*CUT+(1D0-6D0*CUT)*PYR(0)
50402       IF(IT.EQ.1) Y34=(1D0-5D0*CUT)*EXP(-CT*PYR(0))
50403       IF(IT.EQ.2) Y34=CUT+(1D0-6D0*CUT)*PYR(0)
50404       IF(Y34.LE.Y134+Y234-1D0.OR.Y34.GE.Y134*Y234) GOTO 110
50405       VT=PYR(0)
50406       CP=COS(PARU(1)*PYR(0))
50407       Y14=(Y134-Y34)*VT
50408       Y13=Y134-Y14-Y34
50409       VB=Y34*(1D0-Y134-Y234+Y34)/((Y134-Y34)*(Y234-Y34))
50410       Y24=0.5D0*(Y234-Y34)*(1D0-4D0*SQRT(MAX(0D0,VT*(1D0-VT)*
50411      &VB*(1D0-VB)))*CP-(1D0-2D0*VT)*(1D0-2D0*VB))
50412       Y23=Y234-Y34-Y24
50413       Y12=1D0-Y134-Y23-Y24
50414       IF(MIN(Y12,Y13,Y14,Y23,Y24).LE.CUT) GOTO 110
50415       Y123=Y12+Y13+Y23
50416       Y124=Y12+Y14+Y24
50417  
50418 C...Calculate matrix elements for qqgg or qqqq process.
50419       IC=0
50420       WTTOT=0D0
50421   120 IC=IC+1
50422       IF(IT.EQ.1) THEN
50423         WTA(IC)=(Y12*Y34**2-Y13*Y24*Y34+Y14*Y23*Y34+3D0*Y12*Y23*Y34+
50424      &  3D0*Y12*Y14*Y34+4D0*Y12**2*Y34-Y13*Y23*Y24+2D0*Y12*Y23*Y24-
50425      &  Y13*Y14*Y24-2D0*Y12*Y13*Y24+2D0*Y12**2*Y24+Y14*Y23**2+2D0*Y12*
50426      &  Y23**2+Y14**2*Y23+4D0*Y12*Y14*Y23+4D0*Y12**2*Y23+2D0*Y12*Y14**2+
50427      &  2D0*Y12*Y13*Y14+4D0*Y12**2*Y14+2D0*Y12**2*Y13+2D0*Y12**3)/
50428      &  (2D0*Y13*Y134*Y234*Y24)+(Y24*Y34+Y12*Y34+Y13*Y24-
50429      &  Y14*Y23+Y12*Y13)/(Y13*Y134**2)+2D0*Y23*(1D0-Y13)/
50430      &  (Y13*Y134*Y24)+Y34/(2D0*Y13*Y24)
50431         WTB(IC)=(Y12*Y24*Y34+Y12*Y14*Y34-Y13*Y24**2+Y13*Y14*Y24+2D0*Y12*
50432      &  Y14*Y24)/(Y13*Y134*Y23*Y14)+Y12*(1D0+Y34)*Y124/(Y134*Y234*Y14*
50433      &  Y24)-(2D0*Y13*Y24+Y14**2+Y13*Y23+2D0*Y12*Y13)/(Y13*Y134*Y14)+
50434      &  Y12*Y123*Y124/(2D0*Y13*Y14*Y23*Y24)
50435         WTC(IC)=-(5D0*Y12*Y34**2+2D0*Y12*Y24*Y34+2D0*Y12*Y23*Y34+
50436      &  2D0*Y12*Y14*Y34+2D0*Y12*Y13*Y34+4D0*Y12**2*Y34-Y13*Y24**2+
50437      &  Y14*Y23*Y24+Y13*Y23*Y24+Y13*Y14*Y24-Y12*Y14*Y24-Y13**2*Y24-
50438      &  3D0*Y12*Y13*Y24-Y14*Y23**2-Y14**2*Y23+Y13*Y14*Y23-
50439      &  3D0*Y12*Y14*Y23-Y12*Y13*Y23)/(4D0*Y134*Y234*Y34**2)+
50440      &  (3D0*Y12*Y34**2-3D0*Y13*Y24*Y34+3D0*Y12*Y24*Y34+
50441      &  3D0*Y14*Y23*Y34-Y13*Y24**2-Y12*Y23*Y34+6D0*Y12*Y14*Y34+
50442      &  2D0*Y12*Y13*Y34-2D0*Y12**2*Y34+Y14*Y23*Y24-3D0*Y13*Y23*Y24-
50443      &  2D0*Y13*Y14*Y24+4D0*Y12*Y14*Y24+2D0*Y12*Y13*Y24+
50444      &  3D0*Y14*Y23**2+2D0*Y14**2*Y23+2D0*Y14**2*Y12+
50445      &  2D0*Y12**2*Y14+6D0*Y12*Y14*Y23-2D0*Y12*Y13**2-
50446      &  2D0*Y12**2*Y13)/(4D0*Y13*Y134*Y234*Y34)
50447         WTC(IC)=WTC(IC)+(2D0*Y12*Y34**2-2D0*Y13*Y24*Y34+Y12*Y24*Y34+
50448      &  4D0*Y13*Y23*Y34+4D0*Y12*Y14*Y34+2D0*Y12*Y13*Y34+2D0*Y12**2*Y34-
50449      &  Y13*Y24**2+3D0*Y14*Y23*Y24+4D0*Y13*Y23*Y24-2D0*Y13*Y14*Y24+
50450      &  4D0*Y12*Y14*Y24+2D0*Y12*Y13*Y24+2D0*Y14*Y23**2+4D0*Y13*Y23**2+
50451      &  2D0*Y13*Y14*Y23+2D0*Y12*Y14*Y23+4D0*Y12*Y13*Y23+2D0*Y12*Y14**2+
50452      &  4D0*Y12**2*Y13+4D0*Y12*Y13*Y14+2D0*Y12**2*Y14)/
50453      &  (4D0*Y13*Y134*Y24*Y34)-(Y12*Y34**2-2D0*Y14*Y24*Y34-
50454      &  2D0*Y13*Y24*Y34-Y14*Y23*Y34+Y13*Y23*Y34+Y12*Y14*Y34+
50455      &  2D0*Y12*Y13*Y34-2D0*Y14**2*Y24-4D0*Y13*Y14*Y24-
50456      &  4D0*Y13**2*Y24-Y14**2*Y23-Y13**2*Y23+Y12*Y13*Y14-
50457      &  Y12*Y13**2)/(2D0*Y13*Y34*Y134**2)+(Y12*Y34**2-
50458      &  4D0*Y14*Y24*Y34-2D0*Y13*Y24*Y34-2D0*Y14*Y23*Y34-
50459      &  4D0*Y13*Y23*Y34-4D0*Y12*Y14*Y34-4D0*Y12*Y13*Y34-
50460      &  2D0*Y13*Y14*Y24+2D0*Y13**2*Y24+2D0*Y14**2*Y23-
50461      &  2D0*Y13*Y14*Y23-Y12*Y14**2-6D0*Y12*Y13*Y14-
50462      &  Y12*Y13**2)/(4D0*Y34**2*Y134**2)
50463         WTTOT=WTTOT+Y34*CF*(CF*WTA(IC)+(CF-0.5D0*CN)*WTB(IC)+
50464      &  CN*WTC(IC))/8D0
50465       ELSE
50466         WTD(IC)=(Y13*Y23*Y34+Y12*Y23*Y34-Y12**2*Y34+Y13*Y23*Y24+2D0*Y12*
50467      &  Y23*Y24-Y14*Y23**2+Y12*Y13*Y24+Y12*Y14*Y23+Y12*Y13*Y14)/(Y13**2*
50468      &  Y123**2)-(Y12*Y34**2-Y13*Y24*Y34+Y12*Y24*Y34-Y14*Y23*Y34-Y12*
50469      &  Y23*Y34-Y13*Y24**2+Y14*Y23*Y24-Y13*Y23*Y24-Y13**2*Y24+Y14*
50470      &  Y23**2)/(Y13**2*Y123*Y134)+(Y13*Y14*Y12+Y34*Y14*Y12-Y34**2*Y12+
50471      &  Y13*Y14*Y24+2D0*Y34*Y14*Y24-Y23*Y14**2+Y34*Y13*Y24+Y34*Y23*Y14+
50472      &  Y34*Y13*Y23)/(Y13**2*Y134**2)-(Y34*Y12**2-Y13*Y24*Y12+Y34*Y24*
50473      &  Y12-Y23*Y14*Y12-Y34*Y14*Y12-Y13*Y24**2+Y23*Y14*Y24-Y13*Y14*Y24-
50474      &  Y13**2*Y24+Y23*Y14**2)/(Y13**2*Y134*Y123)
50475         WTE(IC)=(Y12*Y34*(Y23-Y24+Y14+Y13)+Y13*Y24**2-Y14*Y23*Y24+Y13*
50476      &  Y23*Y24+Y13*Y14*Y24+Y13**2*Y24-Y14*Y23*(Y14+Y23+Y13))/(Y13*Y23*
50477      &  Y123*Y134)-Y12*(Y12*Y34-Y23*Y24-Y13*Y24-Y14*Y23-Y14*Y13)/(Y13*
50478      &  Y23*Y123**2)-(Y14+Y13)*(Y24+Y23)*Y34/(Y13*Y23*Y134*Y234)+
50479      &  (Y12*Y34*(Y14-Y24+Y23+Y13)+Y13*Y24**2-Y23*Y14*Y24+Y13*Y14*Y24+
50480      &  Y13*Y23*Y24+Y13**2*Y24-Y23*Y14*(Y14+Y23+Y13))/(Y13*Y14*Y134*
50481      &  Y123)-Y34*(Y34*Y12-Y14*Y24-Y13*Y24-Y23*Y14-Y23*Y13)/(Y13*Y14*
50482      &  Y134**2)-(Y23+Y13)*(Y24+Y14)*Y12/(Y13*Y14*Y123*Y124)
50483         WTTOT=WTTOT+CF*(TR*WTD(IC)+(CF-0.5D0*CN)*WTE(IC))/16D0
50484       ENDIF
50485  
50486 C...Permutations of momenta in matrix element. Weighting.
50487   130 IF(IC.EQ.1.OR.IC.EQ.3.OR.ID.EQ.2.OR.ID.EQ.3) THEN
50488         YSAV=Y13
50489         Y13=Y14
50490         Y14=YSAV
50491         YSAV=Y23
50492         Y23=Y24
50493         Y24=YSAV
50494         YSAV=Y123
50495         Y123=Y124
50496         Y124=YSAV
50497       ENDIF
50498       IF(IC.EQ.2.OR.IC.EQ.4.OR.ID.EQ.3.OR.ID.EQ.4) THEN
50499         YSAV=Y13
50500         Y13=Y23
50501         Y23=YSAV
50502         YSAV=Y14
50503         Y14=Y24
50504         Y24=YSAV
50505         YSAV=Y134
50506         Y134=Y234
50507         Y234=YSAV
50508       ENDIF
50509       IF(IC.LE.3) GOTO 120
50510       IF(ID.EQ.1.AND.WTTOT.LT.PYR(0)*WTMX) GOTO 110
50511       IC=5
50512  
50513 C...qqgg events: string configuration and event type.
50514       IF(IT.EQ.1) THEN
50515         IF(MSTJ(109).EQ.0.AND.ID.EQ.1) THEN
50516           PARJ(156)=Y34*(2D0*(WTA(1)+WTA(2)+WTA(3)+WTA(4))+4D0*(WTC(1)+
50517      &    WTC(2)+WTC(3)+WTC(4)))/(9D0*WTTOT)
50518           IF(WTA(2)+WTA(4)+2D0*(WTC(2)+WTC(4)).GT.PYR(0)*(WTA(1)+WTA(2)+
50519      &    WTA(3)+WTA(4)+2D0*(WTC(1)+WTC(2)+WTC(3)+WTC(4)))) ID=2
50520           IF(ID.EQ.2) GOTO 130
50521         ELSEIF(MSTJ(109).EQ.2.AND.ID.EQ.1) THEN
50522           PARJ(156)=Y34*(WTA(1)+WTA(2)+WTA(3)+WTA(4))/(8D0*WTTOT)
50523           IF(WTA(2)+WTA(4).GT.PYR(0)*(WTA(1)+WTA(2)+WTA(3)+WTA(4))) ID=2
50524           IF(ID.EQ.2) GOTO 130
50525         ENDIF
50526         MSTJ(120)=3
50527         IF(MSTJ(109).EQ.0.AND.0.5D0*Y34*(WTC(1)+WTC(2)+WTC(3)+
50528      &  WTC(4)).GT.PYR(0)*WTTOT) MSTJ(120)=4
50529         KFLN=21
50530  
50531 C...Mass cuts. Kinematical variables out.
50532         IF(Y12.LE.CUT+QME) NJET=2
50533         IF(NJET.EQ.2) GOTO 150
50534         Q12=0.5D0*(1D0-SQRT(1D0-QME/Y12))
50535         X1=1D0-(1D0-Q12)*Y234-Q12*Y134
50536         X4=1D0-(1D0-Q12)*Y134-Q12*Y234
50537         X2=1D0-Y124
50538         X12=(1D0-Q12)*Y13+Q12*Y23
50539         X14=Y12-0.5D0*QME
50540         IF(Y134*Y234/((1D0-X1)*(1D0-X4)).LE.PYR(0)) NJET=2
50541  
50542 C...qqbarqqbar events: string configuration, choose new flavour.
50543       ELSE
50544         IF(ID.EQ.1) THEN
50545           WTR=PYR(0)*(WTD(1)+WTD(2)+WTD(3)+WTD(4))
50546           IF(WTR.LT.WTD(2)+WTD(3)+WTD(4)) ID=2
50547           IF(WTR.LT.WTD(3)+WTD(4)) ID=3
50548           IF(WTR.LT.WTD(4)) ID=4
50549           IF(ID.GE.2) GOTO 130
50550         ENDIF
50551         MSTJ(120)=5
50552         PARJ(156)=CF*TR*(WTD(1)+WTD(2)+WTD(3)+WTD(4))/(16D0*WTTOT)
50553   140   KFLN=1+INT(5D0*PYR(0))
50554         IF(KFLN.NE.KFL.AND.0.2D0*PARJ(156).LE.PYR(0)) GOTO 140
50555         IF(KFLN.EQ.KFL.AND.1D0-0.8D0*PARJ(156).LE.PYR(0)) GOTO 140
50556         IF(KFLN.GT.MSTJ(104)) NJET=2
50557         PMQN=PYMASS(KFLN)
50558         QMEN=(2D0*PMQN/ECM)**2
50559  
50560 C...Mass cuts. Kinematical variables out.
50561         IF(Y24.LE.CUT+QME.OR.Y13.LE.1.1D0*QMEN) NJET=2
50562         IF(NJET.EQ.2) GOTO 150
50563         Q24=0.5D0*(1D0-SQRT(1D0-QME/Y24))
50564         Q13=0.5D0*(1D0-SQRT(1D0-QMEN/Y13))
50565         X1=1D0-(1D0-Q24)*Y123-Q24*Y134
50566         X4=1D0-(1D0-Q24)*Y134-Q24*Y123
50567         X2=1D0-(1D0-Q13)*Y234-Q13*Y124
50568         X12=(1D0-Q24)*((1D0-Q13)*Y14+Q13*Y34)+Q24*((1D0-Q13)*Y12+
50569      &  Q13*Y23)
50570         X14=Y24-0.5D0*QME
50571         X34=(1D0-Q24)*((1D0-Q13)*Y23+Q13*Y12)+Q24*((1D0-Q13)*Y34+
50572      &  Q13*Y14)
50573         IF(PMQ**2+PMQN**2+MIN(X12,X34)*ECM**2.LE.
50574      &  (PARJ(127)+PMQ+PMQN)**2) NJET=2
50575         IF(Y123*Y134/((1D0-X1)*(1D0-X4)).LE.PYR(0)) NJET=2
50576       ENDIF
50577   150 IF(MSTJ(101).LE.-2.AND.NJET.EQ.2) GOTO 100
50578  
50579       RETURN
50580       END
50581  
50582 C*********************************************************************
50583  
50584 C...PYXDIF
50585 C...Gives the angular orientation of events.
50586  
50587       SUBROUTINE PYXDIF(NC,NJET,KFL,ECM,CHI,THE,PHI)
50588  
50589 C...Double precision and integer declarations.
50590       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50591       IMPLICIT INTEGER(I-N)
50592       INTEGER PYK,PYCHGE,PYCOMP
50593 C...Commonblocks.
50594       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
50595       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
50596       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
50597       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
50598  
50599 C...Charge. Factors depending on polarization for QED case.
50600       QF=KCHG(KFL,1)/3D0
50601       POLL=1D0-PARJ(131)*PARJ(132)
50602       POLD=PARJ(132)-PARJ(131)
50603       IF(MSTJ(102).LE.1.OR.MSTJ(109).EQ.1) THEN
50604         HF1=POLL
50605         HF2=0D0
50606         HF3=PARJ(133)**2
50607         HF4=0D0
50608  
50609 C...Factors depending on flavour, energy and polarization for QFD case.
50610       ELSE
50611         SFF=1D0/(16D0*PARU(102)*(1D0-PARU(102)))
50612         SFW=ECM**4/((ECM**2-PARJ(123)**2)**2+(PARJ(123)*PARJ(124))**2)
50613         SFI=SFW*(1D0-(PARJ(123)/ECM)**2)
50614         AE=-1D0
50615         VE=4D0*PARU(102)-1D0
50616         AF=SIGN(1D0,QF)
50617         VF=AF-4D0*QF*PARU(102)
50618         HF1=QF**2*POLL-2D0*QF*VF*SFI*SFF*(VE*POLL-AE*POLD)+
50619      &  (VF**2+AF**2)*SFW*SFF**2*((VE**2+AE**2)*POLL-2D0*VE*AE*POLD)
50620         HF2=-2D0*QF*AF*SFI*SFF*(AE*POLL-VE*POLD)+2D0*VF*AF*SFW*SFF**2*
50621      &  (2D0*VE*AE*POLL-(VE**2+AE**2)*POLD)
50622         HF3=PARJ(133)**2*(QF**2-2D0*QF*VF*SFI*SFF*VE+(VF**2+AF**2)*
50623      &  SFW*SFF**2*(VE**2-AE**2))
50624         HF4=-PARJ(133)**2*2D0*QF*VF*SFW*(PARJ(123)*PARJ(124)/ECM**2)*
50625      &  SFF*AE
50626       ENDIF
50627  
50628 C...Mass factor. Differential cross-sections for two-jet events.
50629       SQ2=SQRT(2D0)
50630       QME=0D0
50631       IF(MSTJ(103).GE.4.AND.IABS(MSTJ(101)).LE.1.AND.MSTJ(102).LE.1.AND.
50632      &MSTJ(109).NE.1) QME=(2D0*PYMASS(KFL)/ECM)**2
50633       IF(NJET.EQ.2) THEN
50634         SIGU=4D0*SQRT(1D0-QME)
50635         SIGL=2D0*QME*SQRT(1D0-QME)
50636         SIGT=0D0
50637         SIGI=0D0
50638         SIGA=0D0
50639         SIGP=4D0
50640  
50641 C...Kinematical variables. Reduce four-jet event to three-jet one.
50642       ELSE
50643         IF(NJET.EQ.3) THEN
50644           X1=2D0*P(NC+1,4)/ECM
50645           X2=2D0*P(NC+3,4)/ECM
50646         ELSE
50647           ECMR=P(NC+1,4)+P(NC+4,4)+SQRT((P(NC+2,1)+P(NC+3,1))**2+
50648      &    (P(NC+2,2)+P(NC+3,2))**2+(P(NC+2,3)+P(NC+3,3))**2)
50649           X1=2D0*P(NC+1,4)/ECMR
50650           X2=2D0*P(NC+4,4)/ECMR
50651         ENDIF
50652  
50653 C...Differential cross-sections for three-jet (or reduced four-jet).
50654         XQ=(1D0-X1)/(1D0-X2)
50655         CT12=(X1*X2-2D0*X1-2D0*X2+2D0+QME)/SQRT((X1**2-QME)*(X2**2-QME))
50656         ST12=SQRT(1D0-CT12**2)
50657         IF(MSTJ(109).NE.1) THEN
50658           SIGU=2D0*X1**2+X2**2*(1D0+CT12**2)-QME*(3D0+CT12**2-X1-X2)-
50659      &    QME*X1/XQ+0.5D0*QME*((X2**2-QME)*ST12**2-2D0*X2)*XQ
50660           SIGL=(X2*ST12)**2-QME*(3D0-CT12**2-2.5D0*(X1+X2)+X1*X2+QME)+
50661      &    0.5D0*QME*(X1**2-X1-QME)/XQ+0.5D0*QME*((X2**2-QME)*CT12**2-
50662      &    X2)*XQ
50663           SIGT=0.5D0*(X2**2-QME-0.5D0*QME*(X2**2-QME)/XQ)*ST12**2
50664           SIGI=((1D0-0.5D0*QME*XQ)*(X2**2-QME)*ST12*CT12+
50665      &    QME*(1D0-X1-X2+0.5D0*X1*X2+0.5D0*QME)*ST12/CT12)/SQ2
50666           SIGA=X2**2*ST12/SQ2
50667           SIGP=2D0*(X1**2-X2**2*CT12)
50668  
50669 C...Differential cross-sect for scalar gluons (no mass effects).
50670         ELSE
50671           X3=2D0-X1-X2
50672           XT=X2*ST12
50673           CT13=SQRT(MAX(0D0,1D0-(XT/X3)**2))
50674           SIGU=(1D0-PARJ(171))*(X3**2-0.5D0*XT**2)+
50675      &    PARJ(171)*(X3**2-0.5D0*XT**2-4D0*(1D0-X1)*(1D0-X2)**2/X1)
50676           SIGL=(1D0-PARJ(171))*0.5D0*XT**2+
50677      &    PARJ(171)*0.5D0*(1D0-X1)**2*XT**2
50678           SIGT=(1D0-PARJ(171))*0.25D0*XT**2+
50679      &    PARJ(171)*0.25D0*XT**2*(1D0-2D0*X1)
50680           SIGI=-(0.5D0/SQ2)*((1D0-PARJ(171))*XT*X3*CT13+
50681      &    PARJ(171)*XT*((1D0-2D0*X1)*X3*CT13-X1*(X1-X2)))
50682           SIGA=(0.25D0/SQ2)*XT*(2D0*(1D0-X1)-X1*X3)
50683           SIGP=X3**2-2D0*(1D0-X1)*(1D0-X2)/X1
50684         ENDIF
50685       ENDIF
50686  
50687 C...Upper bounds for differential cross-section.
50688       HF1A=ABS(HF1)
50689       HF2A=ABS(HF2)
50690       HF3A=ABS(HF3)
50691       HF4A=ABS(HF4)
50692       SIGMAX=(2D0*HF1A+HF3A+HF4A)*ABS(SIGU)+2D0*(HF1A+HF3A+HF4A)*
50693      &ABS(SIGL)+2D0*(HF1A+2D0*HF3A+2D0*HF4A)*ABS(SIGT)+2D0*SQ2*
50694      &(HF1A+2D0*HF3A+2D0*HF4A)*ABS(SIGI)+4D0*SQ2*HF2A*ABS(SIGA)+
50695      &2D0*HF2A*ABS(SIGP)
50696  
50697 C...Generate angular orientation according to differential cross-sect.
50698   100 CHI=PARU(2)*PYR(0)
50699       CTHE=2D0*PYR(0)-1D0
50700       PHI=PARU(2)*PYR(0)
50701       CCHI=COS(CHI)
50702       SCHI=SIN(CHI)
50703       C2CHI=COS(2D0*CHI)
50704       S2CHI=SIN(2D0*CHI)
50705       THE=ACOS(CTHE)
50706       STHE=SIN(THE)
50707       C2PHI=COS(2D0*(PHI-PARJ(134)))
50708       S2PHI=SIN(2D0*(PHI-PARJ(134)))
50709       SIG=((1D0+CTHE**2)*HF1+STHE**2*(C2PHI*HF3-S2PHI*HF4))*SIGU+
50710      &2D0*(STHE**2*HF1-STHE**2*(C2PHI*HF3-S2PHI*HF4))*SIGL+
50711      &2D0*(STHE**2*C2CHI*HF1+((1D0+CTHE**2)*C2CHI*C2PHI-2D0*CTHE*S2CHI*
50712      &S2PHI)*HF3-((1D0+CTHE**2)*C2CHI*S2PHI+2D0*CTHE*S2CHI*C2PHI)*HF4)*
50713      &SIGT-2D0*SQ2*(2D0*STHE*CTHE*CCHI*HF1-2D0*STHE*(CTHE*CCHI*C2PHI-
50714      &SCHI*S2PHI)*HF3+2D0*STHE*(CTHE*CCHI*S2PHI+SCHI*C2PHI)*HF4)*SIGI+
50715      &4D0*SQ2*STHE*CCHI*HF2*SIGA+2D0*CTHE*HF2*SIGP
50716       IF(SIG.LT.SIGMAX*PYR(0)) GOTO 100
50717  
50718       RETURN
50719       END
50720  
50721 C*********************************************************************
50722  
50723 C...PYONIA
50724 C...Generates Upsilon and toponium decays into three gluons
50725 C...or two gluons and a photon.
50726  
50727       SUBROUTINE PYONIA(KFL,ECM)
50728  
50729 C...Double precision and integer declarations.
50730       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50731       IMPLICIT INTEGER(I-N)
50732       INTEGER PYK,PYCHGE,PYCOMP
50733 C...Commonblocks.
50734       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
50735       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
50736       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
50737       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
50738  
50739 C...Printout. Check input parameters.
50740       IF(MSTU(12).GE.1) CALL PYLIST(0)
50741       IF(KFL.LT.0.OR.KFL.GT.8) THEN
50742         CALL PYERRM(16,'(PYONIA:) called with unknown flavour code')
50743         IF(MSTU(21).GE.1) RETURN
50744       ENDIF
50745       IF(ECM.LT.PARJ(127)+2.02D0*PARF(101)) THEN
50746         CALL PYERRM(16,'(PYONIA:) called with too small CM energy')
50747         IF(MSTU(21).GE.1) RETURN
50748       ENDIF
50749  
50750 C...Initial e+e- and onium state (optional).
50751       NC=0
50752       IF(MSTJ(115).GE.2) THEN
50753         NC=NC+2
50754         CALL PY1ENT(NC-1,11,0.5D0*ECM,0D0,0D0)
50755         K(NC-1,1)=21
50756         CALL PY1ENT(NC,-11,0.5D0*ECM,PARU(1),0D0)
50757         K(NC,1)=21
50758       ENDIF
50759       KFLC=IABS(KFL)
50760       IF(MSTJ(115).GE.3.AND.KFLC.GE.5) THEN
50761         NC=NC+1
50762         KF=110*KFLC+3
50763         MSTU10=MSTU(10)
50764         MSTU(10)=1
50765         P(NC,5)=ECM
50766         CALL PY1ENT(NC,KF,ECM,0D0,0D0)
50767         K(NC,1)=21
50768         K(NC,3)=1
50769         MSTU(10)=MSTU10
50770       ENDIF
50771  
50772 C...Choose x1 and x2 according to matrix element.
50773       NTRY=0
50774   100 X1=PYR(0)
50775       X2=PYR(0)
50776       X3=2D0-X1-X2
50777       IF(X3.GE.1D0.OR.((1D0-X1)/(X2*X3))**2+((1D0-X2)/(X1*X3))**2+
50778      &((1D0-X3)/(X1*X2))**2.LE.2D0*PYR(0)) GOTO 100
50779       NTRY=NTRY+1
50780       NJET=3
50781       IF(MSTJ(101).LE.4) CALL PY3ENT(NC+1,21,21,21,ECM,X1,X3)
50782       IF(MSTJ(101).GE.5) CALL PY3ENT(-(NC+1),21,21,21,ECM,X1,X3)
50783  
50784 C...Photon-gluon-gluon events. Small system modifications. Jet origin.
50785       MSTU(111)=MSTJ(108)
50786       IF(MSTJ(108).EQ.2.AND.(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.1))
50787      &MSTU(111)=1
50788       PARU(112)=PARJ(121)
50789       IF(MSTU(111).EQ.2) PARU(112)=PARJ(122)
50790       QF=0D0
50791       IF(KFLC.NE.0) QF=KCHG(KFLC,1)/3D0
50792       RGAM=7.2D0*QF**2*PARU(101)/PYALPS(ECM**2)
50793       MK=0
50794       ECMC=ECM
50795       IF(PYR(0).GT.RGAM/(1D0+RGAM)) THEN
50796         IF(1D0-MAX(X1,X2,X3).LE.MAX((PARJ(126)/ECM)**2,PARJ(125)))
50797      &  NJET=2
50798         IF(NJET.EQ.2.AND.MSTJ(101).LE.4) CALL PY2ENT(NC+1,21,21,ECM)
50799         IF(NJET.EQ.2.AND.MSTJ(101).GE.5) CALL PY2ENT(-(NC+1),21,21,ECM)
50800       ELSE
50801         MK=1
50802         ECMC=SQRT(1D0-X1)*ECM
50803         IF(ECMC.LT.2D0*PARJ(127)) GOTO 100
50804         K(NC+1,1)=1
50805         K(NC+1,2)=22
50806         K(NC+1,4)=0
50807         K(NC+1,5)=0
50808         IF(MSTJ(101).GE.5) K(NC+2,4)=MSTU(5)*(NC+3)
50809         IF(MSTJ(101).GE.5) K(NC+2,5)=MSTU(5)*(NC+3)
50810         IF(MSTJ(101).GE.5) K(NC+3,4)=MSTU(5)*(NC+2)
50811         IF(MSTJ(101).GE.5) K(NC+3,5)=MSTU(5)*(NC+2)
50812         NJET=2
50813         IF(ECMC.LT.4D0*PARJ(127)) THEN
50814           MSTU10=MSTU(10)
50815           MSTU(10)=1
50816           P(NC+2,5)=ECMC
50817           CALL PY1ENT(NC+2,83,0.5D0*(X2+X3)*ECM,PARU(1),0D0)
50818           MSTU(10)=MSTU10
50819           NJET=0
50820         ENDIF
50821       ENDIF
50822       DO 110 IP=NC+1,N
50823         K(IP,3)=K(IP,3)+(MSTJ(115)/2)+(KFLC/5)*(MSTJ(115)/3)*(NC-1)
50824   110 CONTINUE
50825  
50826 C...Differential cross-sections. Upper limit for cross-section.
50827       IF(MSTJ(106).EQ.1) THEN
50828         SQ2=SQRT(2D0)
50829         HF1=1D0-PARJ(131)*PARJ(132)
50830         HF3=PARJ(133)**2
50831         CT13=(X1*X3-2D0*X1-2D0*X3+2D0)/(X1*X3)
50832         ST13=SQRT(1D0-CT13**2)
50833         SIGL=0.5D0*X3**2*((1D0-X2)**2+(1D0-X3)**2)*ST13**2
50834         SIGU=(X1*(1D0-X1))**2+(X2*(1D0-X2))**2+(X3*(1D0-X3))**2-SIGL
50835         SIGT=0.5D0*SIGL
50836         SIGI=(SIGL*CT13/ST13+0.5D0*X1*X3*(1D0-X2)**2*ST13)/SQ2
50837         SIGMAX=(2D0*HF1+HF3)*ABS(SIGU)+2D0*(HF1+HF3)*ABS(SIGL)+2D0*(HF1+
50838      &  2D0*HF3)*ABS(SIGT)+2D0*SQ2*(HF1+2D0*HF3)*ABS(SIGI)
50839  
50840 C...Angular orientation of event.
50841   120   CHI=PARU(2)*PYR(0)
50842         CTHE=2D0*PYR(0)-1D0
50843         PHI=PARU(2)*PYR(0)
50844         CCHI=COS(CHI)
50845         SCHI=SIN(CHI)
50846         C2CHI=COS(2D0*CHI)
50847         S2CHI=SIN(2D0*CHI)
50848         THE=ACOS(CTHE)
50849         STHE=SIN(THE)
50850         C2PHI=COS(2D0*(PHI-PARJ(134)))
50851         S2PHI=SIN(2D0*(PHI-PARJ(134)))
50852         SIG=((1D0+CTHE**2)*HF1+STHE**2*C2PHI*HF3)*SIGU+2D0*(STHE**2*HF1-
50853      &  STHE**2*C2PHI*HF3)*SIGL+2D0*(STHE**2*C2CHI*HF1+((1D0+CTHE**2)*
50854      &  C2CHI*C2PHI-2D0*CTHE*S2CHI*S2PHI)*HF3)*SIGT-
50855      &  2D0*SQ2*(2D0*STHE*CTHE*CCHI*HF1-2D0*STHE*
50856      &  (CTHE*CCHI*C2PHI-SCHI*S2PHI)*HF3)*SIGI
50857         IF(SIG.LT.SIGMAX*PYR(0)) GOTO 120
50858         CALL PYROBO(NC+1,N,0D0,CHI,0D0,0D0,0D0)
50859         CALL PYROBO(NC+1,N,THE,PHI,0D0,0D0,0D0)
50860       ENDIF
50861  
50862 C...Generate parton shower. Rearrange along strings and check.
50863       IF(MSTJ(101).GE.5.AND.NJET.GE.2) THEN
50864         CALL PYSHOW(NC+MK+1,-NJET,ECMC)
50865         MSTJ14=MSTJ(14)
50866         IF(MSTJ(105).EQ.-1) MSTJ(14)=-1
50867         IF(MSTJ(105).GE.0) MSTU(28)=0
50868         CALL PYPREP(0)
50869         MSTJ(14)=MSTJ14
50870         IF(MSTJ(105).GE.0.AND.MSTU(28).NE.0) GOTO 100
50871       ENDIF
50872  
50873 C...Generate fragmentation. Information for PYTABU:
50874       IF(MSTJ(105).EQ.1) CALL PYEXEC
50875       MSTU(161)=110*KFLC+3
50876       MSTU(162)=0
50877  
50878       RETURN
50879       END
50880  
50881 C*********************************************************************
50882  
50883 C...PYBOOK
50884 C...Books a histogram.
50885  
50886       SUBROUTINE PYBOOK(ID,TITLE,NX,XL,XU)
50887  
50888 C...Double precision declaration.
50889       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50890       IMPLICIT INTEGER(I-N)
50891 C...Commonblock.
50892       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
50893       SAVE /PYBINS/
50894 C...Local character variables.
50895       CHARACTER TITLE*(*), TITFX*60
50896  
50897 C...Check that input is sensible. Find initial address in memory.
50898       IF(ID.LE.0.OR.ID.GT.IHIST(1)) CALL PYERRM(28,
50899      &'(PYBOOK:) not allowed histogram number')
50900       IF(NX.LE.0.OR.NX.GT.100) CALL PYERRM(28,
50901      &'(PYBOOK:) not allowed number of bins')
50902       IF(XL.GE.XU) CALL PYERRM(28,
50903      &'(PYBOOK:) x limits in wrong order')
50904       INDX(ID)=IHIST(4)
50905       IHIST(4)=IHIST(4)+28+NX
50906       IF(IHIST(4).GT.IHIST(2)) CALL PYERRM(28,
50907      &'(PYBOOK:) out of histogram space')
50908       IS=INDX(ID)
50909  
50910 C...Store histogram size and reset contents.
50911       BIN(IS+1)=NX
50912       BIN(IS+2)=XL
50913       BIN(IS+3)=XU
50914       BIN(IS+4)=(XU-XL)/NX
50915       CALL PYNULL(ID)
50916  
50917 C...Store title by conversion to integer to double precision.
50918       TITFX=TITLE//' '
50919       DO 100 IT=1,20
50920         BIN(IS+8+NX+IT)=256**2*ICHAR(TITFX(3*IT-2:3*IT-2))+
50921      &  256*ICHAR(TITFX(3*IT-1:3*IT-1))+ICHAR(TITFX(3*IT:3*IT))
50922   100 CONTINUE
50923  
50924       RETURN
50925       END
50926  
50927 C*********************************************************************
50928  
50929 C...PYFILL
50930 C...Fills entry in histogram.
50931  
50932       SUBROUTINE PYFILL(ID,X,W)
50933  
50934 C...Double precision declaration.
50935       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50936       IMPLICIT INTEGER(I-N)
50937 C...Commonblock.
50938       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
50939       SAVE /PYBINS/
50940  
50941 C...Find initial address in memory. Increase number of entries.
50942       IF(ID.LE.0.OR.ID.GT.IHIST(1)) CALL PYERRM(28,
50943      &'(PYFILL:) not allowed histogram number')
50944       IS=INDX(ID)
50945       IF(IS.EQ.0) CALL PYERRM(28,
50946      &'(PYFILL:) filling unbooked histogram')
50947       BIN(IS+5)=BIN(IS+5)+1D0
50948  
50949 C...Find bin in x, including under/overflow, and fill.
50950       IF(X.LT.BIN(IS+2)) THEN
50951         BIN(IS+6)=BIN(IS+6)+W
50952       ELSEIF(X.GE.BIN(IS+3)) THEN
50953         BIN(IS+8)=BIN(IS+8)+W
50954       ELSE
50955         BIN(IS+7)=BIN(IS+7)+W
50956         IX=(X-BIN(IS+2))/BIN(IS+4)
50957         IX=MAX(0,MIN(NINT(BIN(IS+1))-1,IX))
50958         BIN(IS+9+IX)=BIN(IS+9+IX)+W
50959       ENDIF
50960  
50961       RETURN
50962       END
50963  
50964 C*********************************************************************
50965  
50966 C...PYFACT
50967 C...Multiplies histogram contents by factor.
50968  
50969       SUBROUTINE PYFACT(ID,F)
50970  
50971 C...Double precision declaration.
50972       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50973       IMPLICIT INTEGER(I-N)
50974 C...Commonblock.
50975       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
50976       SAVE /PYBINS/
50977  
50978 C...Find initial address in memory. Multiply all contents bins.
50979       IF(ID.LE.0.OR.ID.GT.IHIST(1)) CALL PYERRM(28,
50980      &'(PYFACT:) not allowed histogram number')
50981       IS=INDX(ID)
50982       IF(IS.EQ.0) CALL PYERRM(28,
50983      &'(PYFACT:) scaling unbooked histogram')
50984       DO 100 IX=IS+6,IS+8+NINT(BIN(IS+1))
50985         BIN(IX)=F*BIN(IX)
50986   100 CONTINUE
50987  
50988       RETURN
50989       END
50990  
50991 C*********************************************************************
50992  
50993 C...PYOPER
50994 C...Performs operations between histograms.
50995  
50996       SUBROUTINE PYOPER(ID1,OPER,ID2,ID3,F1,F2)
50997  
50998 C...Double precision declaration.
50999       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51000       IMPLICIT INTEGER(I-N)
51001 C...Commonblock.
51002       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
51003       SAVE /PYBINS/
51004 C...Character variable.
51005       CHARACTER OPER*(*)
51006  
51007 C...Find initial addresses in memory, and histogram size.
51008       IF(ID1.LE.0.OR.ID1.GT.IHIST(1)) CALL PYERRM(28,
51009      &'(PYFACT:) not allowed histogram number')
51010       IS1=INDX(ID1)
51011       IS2=INDX(MIN(IHIST(1),MAX(1,ID2)))
51012       IS3=INDX(MIN(IHIST(1),MAX(1,ID3)))
51013       NX=NINT(BIN(IS3+1))
51014       IF(OPER.EQ.'M'.AND.ID3.EQ.0) NX=NINT(BIN(IS2+1))
51015  
51016 C...Update info on number of histogram entries.
51017       IF(OPER.EQ.'+'.OR.OPER.EQ.'-'.OR.OPER.EQ.'*'.OR.OPER.EQ.'/') THEN
51018         BIN(IS3+5)=BIN(IS1+5)+BIN(IS2+5)
51019       ELSEIF(OPER.EQ.'A'.OR.OPER.EQ.'S'.OR.OPER.EQ.'L') THEN
51020         BIN(IS3+5)=BIN(IS1+5)
51021       ENDIF
51022  
51023 C...Operations on pair of histograms: addition, subtraction,
51024 C...multiplication, division.
51025       IF(OPER.EQ.'+') THEN
51026         DO 100 IX=6,8+NX
51027           BIN(IS3+IX)=F1*BIN(IS1+IX)+F2*BIN(IS2+IX)
51028   100   CONTINUE
51029       ELSEIF(OPER.EQ.'-') THEN
51030         DO 110 IX=6,8+NX
51031           BIN(IS3+IX)=F1*BIN(IS1+IX)-F2*BIN(IS2+IX)
51032   110   CONTINUE
51033       ELSEIF(OPER.EQ.'*') THEN
51034         DO 120 IX=6,8+NX
51035           BIN(IS3+IX)=F1*BIN(IS1+IX)*F2*BIN(IS2+IX)
51036   120   CONTINUE
51037       ELSEIF(OPER.EQ.'/') THEN
51038         DO 130 IX=6,8+NX
51039           FA2=F2*BIN(IS2+IX)
51040           IF(ABS(FA2).LE.1D-20) THEN
51041             BIN(IS3+IX)=0D0
51042           ELSE
51043             BIN(IS3+IX)=F1*BIN(IS1+IX)/FA2
51044           ENDIF
51045   130   CONTINUE
51046  
51047 C...Operations on single histogram: multiplication+addition,
51048 C...square root+addition, logarithm+addition.
51049       ELSEIF(OPER.EQ.'A') THEN
51050         DO 140 IX=6,8+NX
51051           BIN(IS3+IX)=F1*BIN(IS1+IX)+F2
51052   140   CONTINUE
51053       ELSEIF(OPER.EQ.'S') THEN
51054         DO 150 IX=6,8+NX
51055           BIN(IS3+IX)=F1*SQRT(MAX(0D0,BIN(IS1+IX)))+F2
51056   150   CONTINUE
51057       ELSEIF(OPER.EQ.'L') THEN
51058         ZMIN=1D20
51059         DO 160 IX=9,8+NX
51060           IF(BIN(IS1+IX).LT.ZMIN.AND.BIN(IS1+IX).GT.1D-20)
51061      &    ZMIN=0.8D0*BIN(IS1+IX)
51062   160   CONTINUE
51063         DO 170 IX=6,8+NX
51064           BIN(IS3+IX)=F1*LOG10(MAX(ZMIN,BIN(IS1+IX)))+F2
51065   170   CONTINUE
51066  
51067 C...Operation on two or three histograms: average and
51068 C...standard deviation.
51069       ELSEIF(OPER.EQ.'M') THEN
51070         DO 180 IX=6,8+NX
51071           IF(ABS(BIN(IS1+IX)).LE.1D-20) THEN
51072             BIN(IS2+IX)=0D0
51073           ELSE
51074             BIN(IS2+IX)=BIN(IS2+IX)/BIN(IS1+IX)
51075           ENDIF
51076           IF(ID3.NE.0) THEN
51077             IF(ABS(BIN(IS1+IX)).LE.1D-20) THEN
51078               BIN(IS3+IX)=0D0
51079             ELSE
51080               BIN(IS3+IX)=SQRT(MAX(0D0,BIN(IS3+IX)/BIN(IS1+IX)-
51081      &        BIN(IS2+IX)**2))
51082             ENDIF
51083           ENDIF
51084           BIN(IS1+IX)=F1*BIN(IS1+IX)
51085   180   CONTINUE
51086       ENDIF
51087  
51088       RETURN
51089       END
51090  
51091 C*********************************************************************
51092  
51093 C...PYHIST
51094 C...Prints and resets all histograms.
51095  
51096       SUBROUTINE PYHIST
51097  
51098 C...Double precision declaration.
51099       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51100       IMPLICIT INTEGER(I-N)
51101 C...Commonblock.
51102       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
51103       SAVE /PYBINS/
51104  
51105 C...Loop over histograms, print and reset used ones.
51106       DO 100 ID=1,IHIST(1)
51107         IS=INDX(ID)
51108         IF(IS.NE.0.AND.NINT(BIN(IS+5)).GT.0) THEN
51109           CALL PYPLOT(ID)
51110           CALL PYNULL(ID)
51111         ENDIF
51112   100 CONTINUE
51113  
51114       RETURN
51115       END
51116  
51117 C*********************************************************************
51118  
51119 C...PYPLOT
51120 C...Prints a histogram (but does not reset it).
51121  
51122       SUBROUTINE PYPLOT(ID)
51123  
51124 C...Double precision declaration.
51125       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51126       IMPLICIT INTEGER(I-N)
51127 C...Commonblocks.
51128       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51129       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
51130       SAVE /PYDAT1/,/PYBINS/
51131 C...Local arrays and character variables.
51132       DIMENSION IDATI(6), IROW(100), IFRA(100), DYAC(10)
51133       CHARACTER TITLE*60, OUT*100, CHA(0:11)*1
51134  
51135 C...Steps in histogram scale. Character sequence.
51136       DATA DYAC/.04,.05,.06,.08,.10,.12,.15,.20,.25,.30/
51137       DATA CHA/'0','1','2','3','4','5','6','7','8','9','X','-'/
51138  
51139 C...Find initial address in memory; skip if empty histogram.
51140       IF(ID.LE.0.OR.ID.GT.IHIST(1)) RETURN
51141       IS=INDX(ID)
51142       IF(IS.EQ.0) RETURN
51143       IF(NINT(BIN(IS+5)).LE.0) THEN
51144         WRITE(MSTU(11),5000) ID
51145         RETURN
51146       ENDIF
51147  
51148 C...Number of histogram lines and x bins.
51149       LIN=IHIST(3)-18
51150       NX=NINT(BIN(IS+1))
51151  
51152 C...Extract title by conversion from double precision via integer.
51153       DO 100 IT=1,20
51154         IEQ=NINT(BIN(IS+8+NX+IT))
51155         TITLE(3*IT-2:3*IT)=CHAR(IEQ/256**2)//CHAR(MOD(IEQ,256**2)/256)
51156      &  //CHAR(MOD(IEQ,256))
51157   100 CONTINUE
51158  
51159 C...Find time; print title.
51160       CALL PYTIME(IDATI)
51161       IF(IDATI(1).GT.0) THEN
51162         WRITE(MSTU(11),5100) ID, TITLE, (IDATI(J),J=1,5)
51163       ELSE
51164         WRITE(MSTU(11),5200) ID, TITLE
51165       ENDIF
51166  
51167 C...Find minimum and maximum bin content.
51168       YMIN=BIN(IS+9)
51169       YMAX=BIN(IS+9)
51170       DO 110 IX=IS+10,IS+8+NX
51171         IF(BIN(IX).LT.YMIN) YMIN=BIN(IX)
51172         IF(BIN(IX).GT.YMAX) YMAX=BIN(IX)
51173   110 CONTINUE
51174  
51175 C...Determine scale and step size for y axis.
51176       IF(YMAX-YMIN.GT.LIN*DYAC(1)*1D-9) THEN
51177         IF(YMIN.GT.0D0.AND.YMIN.LT.0.1D0*YMAX) YMIN=0D0
51178         IF(YMAX.LT.0D0.AND.YMAX.GT.0.1D0*YMIN) YMAX=0D0
51179         IPOT=INT(LOG10(YMAX-YMIN)+10D0)-10
51180         IF(YMAX-YMIN.LT.LIN*DYAC(1)*10D0**IPOT) IPOT=IPOT-1
51181         IF(YMAX-YMIN.GT.LIN*DYAC(10)*10D0**IPOT) IPOT=IPOT+1
51182         DELY=DYAC(1)
51183         DO 120 IDEL=1,9
51184           IF(YMAX-YMIN.GE.LIN*DYAC(IDEL)*10D0**IPOT) DELY=DYAC(IDEL+1)
51185   120   CONTINUE
51186         DY=DELY*10D0**IPOT
51187  
51188 C...Convert bin contents to integer form; fractional fill in top row.
51189         DO 130 IX=1,NX
51190           CTA=ABS(BIN(IS+8+IX))/DY
51191           IROW(IX)=SIGN(CTA+0.95D0,BIN(IS+8+IX))
51192           IFRA(IX)=10D0*(CTA+1.05D0-DBLE(INT(CTA+0.95D0)))
51193   130   CONTINUE
51194         IRMI=SIGN(ABS(YMIN)/DY+0.95D0,YMIN)
51195         IRMA=SIGN(ABS(YMAX)/DY+0.95D0,YMAX)
51196  
51197 C...Print histogram row by row.
51198         DO 150 IR=IRMA,IRMI,-1
51199           IF(IR.EQ.0) GOTO 150
51200           OUT=' '
51201           DO 140 IX=1,NX
51202             IF(IR.EQ.IROW(IX)) OUT(IX:IX)=CHA(IFRA(IX))
51203             IF(IR*(IROW(IX)-IR).GT.0) OUT(IX:IX)=CHA(10)
51204   140     CONTINUE
51205           WRITE(MSTU(11),5300) IR*DELY, IPOT, OUT
51206   150   CONTINUE
51207  
51208 C...Print sign and value of bin contents.
51209         IPOT=INT(LOG10(MAX(YMAX,-YMIN))+10.0001D0)-10
51210         OUT=' '
51211         DO 160 IX=1,NX
51212           IF(BIN(IS+8+IX).LT.-10D0**(IPOT-4)) OUT(IX:IX)=CHA(11)
51213           IROW(IX)=NINT(10D0**(3-IPOT)*ABS(BIN(IS+8+IX)))
51214   160   CONTINUE
51215         WRITE(MSTU(11),5400) OUT
51216         DO 180 IR=4,1,-1
51217           DO 170 IX=1,NX
51218             OUT(IX:IX)=CHA(MOD(IROW(IX),10**IR)/10**(IR-1))
51219   170     CONTINUE
51220           WRITE(MSTU(11),5500) IPOT+IR-4, OUT
51221   180   CONTINUE
51222  
51223 C...Print sign and value of lower bin edge.
51224         IPOT=INT(LOG10(MAX(-BIN(IS+2),BIN(IS+3)-BIN(IS+4)))+
51225      &  10.0001D0)-10
51226         OUT=' '
51227         DO 190 IX=1,NX
51228           IF(BIN(IS+2)+(IX-1)*BIN(IS+4).LT.-10D0**(IPOT-3))
51229      &    OUT(IX:IX)=CHA(11)
51230           IROW(IX)=NINT(10D0**(2-IPOT)*ABS(BIN(IS+2)+(IX-1)*BIN(IS+4)))
51231   190   CONTINUE
51232         WRITE(MSTU(11),5600) OUT
51233         DO 210 IR=3,1,-1
51234           DO 200 IX=1,NX
51235             OUT(IX:IX)=CHA(MOD(IROW(IX),10**IR)/10**(IR-1))
51236   200     CONTINUE
51237           WRITE(MSTU(11),5500) IPOT+IR-3, OUT
51238   210   CONTINUE
51239       ENDIF
51240  
51241 C...Calculate and print statistics.
51242       CSUM=0D0
51243       CXSUM=0D0
51244       CXXSUM=0D0
51245       DO 220 IX=1,NX
51246         CTA=ABS(BIN(IS+8+IX))
51247         X=BIN(IS+2)+(IX-0.5D0)*BIN(IS+4)
51248         CSUM=CSUM+CTA
51249         CXSUM=CXSUM+CTA*X
51250         CXXSUM=CXXSUM+CTA*X**2
51251   220 CONTINUE
51252       XMEAN=CXSUM/MAX(CSUM,1D-20)
51253       XRMS=SQRT(MAX(0D0,CXXSUM/MAX(CSUM,1D-20)-XMEAN**2))
51254       WRITE(MSTU(11),5700) NINT(BIN(IS+5)),XMEAN,BIN(IS+6),
51255      &BIN(IS+2),BIN(IS+7),XRMS,BIN(IS+8),BIN(IS+3)
51256  
51257 C...Formats for output.
51258  5000 FORMAT(/5X,'Histogram no',I5,' : no entries')
51259  5100 FORMAT('1'/5X,'Histogram no',I5,6X,A60,5X,I4,'-',I2,'-',I2,1X,
51260      &I2,':',I2/)
51261  5200 FORMAT('1'/5X,'Histogram no',I5,6X,A60/)
51262  5300 FORMAT(2X,F7.2,'*10**',I2,3X,A100)
51263  5400 FORMAT(/8X,'Contents',3X,A100)
51264  5500 FORMAT(9X,'*10**',I2,3X,A100)
51265  5600 FORMAT(/8X,'Low edge',3X,A100)
51266  5700 FORMAT(/5X,'Entries  =',I12,1P,6X,'Mean =',D12.4,6X,'Underflow ='
51267      &,D12.4,6X,'Low edge  =',D12.4/5X,'All chan =',D12.4,6X,
51268      &'Rms  =',D12.4,6X,'Overflow  =',D12.4,6X,'High edge =',D12.4)
51269  
51270       RETURN
51271       END
51272  
51273 C*********************************************************************
51274  
51275 C...PYNULL
51276 C...Resets bin contents of a histogram.
51277  
51278       SUBROUTINE PYNULL(ID)
51279  
51280 C...Double precision declaration.
51281       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51282       IMPLICIT INTEGER(I-N)
51283 C...Commonblock.
51284       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
51285       SAVE /PYBINS/
51286  
51287       IF(ID.LE.0.OR.ID.GT.IHIST(1)) RETURN
51288       IS=INDX(ID)
51289       IF(IS.EQ.0) RETURN
51290       DO 100 IX=IS+5,IS+8+NINT(BIN(IS+1))
51291         BIN(IX)=0D0
51292   100 CONTINUE
51293  
51294       RETURN
51295       END
51296  
51297 C*********************************************************************
51298  
51299 C...PYDUMP
51300 C...Dumps histogram contents on file for reading by other program.
51301 C...Can also read back own dump.
51302  
51303       SUBROUTINE PYDUMP(MDUMP,LFN,NHI,IHI)
51304  
51305 C...Double precision declaration.
51306       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51307       IMPLICIT INTEGER(I-N)
51308 C...Commonblock.
51309       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
51310       SAVE /PYBINS/
51311 C...Local arrays and character variables.
51312       DIMENSION IHI(*),ISS(100),VAL(5)
51313       CHARACTER TITLE*60,FORMAT*13
51314  
51315 C...Dump all histograms that have been booked,
51316 C...including titles and ranges, one after the other.
51317       IF(MDUMP.EQ.1) THEN
51318  
51319 C...Loop over histograms and find which are wanted and booked.
51320         IF(NHI.LE.0) THEN
51321           NW=IHIST(1)
51322         ELSE
51323           NW=NHI
51324         ENDIF
51325         DO 130 IW=1,NW
51326           IF(NHI.EQ.0) THEN
51327             ID=IW
51328           ELSE
51329             ID=IHI(IW)
51330           ENDIF
51331           IS=INDX(ID)
51332           IF(IS.NE.0) THEN
51333  
51334 C...Write title, histogram size, filling statistics.
51335             NX=NINT(BIN(IS+1))
51336             DO 100 IT=1,20
51337               IEQ=NINT(BIN(IS+8+NX+IT))
51338               TITLE(3*IT-2:3*IT)=CHAR(IEQ/256**2)//
51339      &        CHAR(MOD(IEQ,256**2)/256)//CHAR(MOD(IEQ,256))
51340   100       CONTINUE
51341             WRITE(LFN,5100) ID,TITLE
51342             WRITE(LFN,5200) NX,BIN(IS+2),BIN(IS+3)
51343             WRITE(LFN,5300) NINT(BIN(IS+5)),BIN(IS+6),BIN(IS+7),
51344      &      BIN(IS+8)
51345  
51346  
51347 C...Write histogram contents, in groups of five.
51348             DO 120 IXG=1,(NX+4)/5
51349               DO 110 IXV=1,5
51350                 IX=5*IXG+IXV-5
51351                 IF(IX.LE.NX) THEN
51352                   VAL(IXV)=BIN(IS+8+IX)
51353                 ELSE
51354                   VAL(IXV)=0D0
51355                 ENDIF
51356   110         CONTINUE
51357               WRITE(LFN,5400) (VAL(IXV),IXV=1,5)
51358   120       CONTINUE
51359  
51360 C...Go to next histogram; finish.
51361           ELSEIF(NHI.GT.0) THEN
51362             CALL PYERRM(8,'(PYDUMP:) unknown histogram number')
51363           ENDIF
51364   130   CONTINUE
51365  
51366 C...Read back in histograms dumped MDUMP=1.
51367       ELSEIF(MDUMP.EQ.2) THEN
51368  
51369 C...Read histogram number, title and range, and book.
51370   140   READ(LFN,5100,END=170) ID,TITLE
51371         READ(LFN,5200) NX,XL,XU
51372         CALL PYBOOK(ID,TITLE,NX,XL,XU)
51373         IS=INDX(ID)
51374  
51375 C...Read filling statistics.
51376         READ(LFN,5300) NENTRY,BIN(IS+6),BIN(IS+7),BIN(IS+8)
51377         BIN(IS+5)=DBLE(NENTRY)
51378  
51379 C...Read histogram contents, in groups of five.
51380         DO 160 IXG=1,(NX+4)/5
51381           READ(LFN,5400) (VAL(IXV),IXV=1,5)
51382           DO 150 IXV=1,5
51383             IX=5*IXG+IXV-5
51384             IF(IX.LE.NX) BIN(IS+8+IX)=VAL(IXV)
51385   150     CONTINUE
51386   160   CONTINUE
51387  
51388 C...Go to next histogram; finish.
51389         GOTO 140
51390   170   CONTINUE
51391  
51392 C...Write histogram contents in column format,
51393 C...convenient e.g. for GNUPLOT input.
51394       ELSEIF(MDUMP.EQ.3) THEN
51395  
51396 C...Find addresses to wanted histograms.
51397         NSS=0
51398         IF(NHI.LE.0) THEN
51399           NW=IHIST(1)
51400         ELSE
51401           NW=NHI
51402         ENDIF
51403         DO 180 IW=1,NW
51404           IF(NHI.EQ.0) THEN
51405             ID=IW
51406           ELSE
51407             ID=IHI(IW)
51408           ENDIF
51409           IS=INDX(ID)
51410           IF(IS.NE.0.AND.NSS.LT.100) THEN
51411             NSS=NSS+1
51412             ISS(NSS)=IS
51413           ELSEIF(NSS.GE.100) THEN
51414             CALL PYERRM(8,'(PYDUMP:) too many histograms requested')
51415           ELSEIF(NHI.GT.0) THEN
51416             CALL PYERRM(8,'(PYDUMP:) unknown histogram number')
51417           ENDIF
51418   180   CONTINUE
51419  
51420 C...Check that they have common number of x bins. Fix format.
51421         NX=NINT(BIN(ISS(1)+1))
51422         DO 190 IW=2,NSS
51423           IF(NINT(BIN(ISS(IW)+1)).NE.NX) THEN
51424             CALL PYERRM(8,'(PYDUMP:) different number of bins')
51425             RETURN
51426           ENDIF
51427   190   CONTINUE
51428         FORMAT='(1P,000E12.4)'
51429         WRITE(FORMAT(5:7),'(I3)') NSS+1
51430  
51431 C...Write histogram contents; first column x values.
51432         DO 200 IX=1,NX
51433           X=BIN(ISS(1)+2)+(IX-0.5D0)*BIN(ISS(1)+4)
51434           WRITE(LFN,FORMAT) X, (BIN(ISS(IW)+8+IX),IW=1,NSS)
51435   200   CONTINUE
51436  
51437       ENDIF
51438  
51439 C...Formats for output.
51440  5100 FORMAT(I5,5X,A60)
51441  5200 FORMAT(I5,1P,2D12.4)
51442  5300 FORMAT(I12,1P,3D12.4)
51443  5400 FORMAT(1P,5D12.4)
51444  
51445       RETURN
51446       END
51447  
51448 C*********************************************************************
51449  
51450 C...PYKCUT
51451 C...Dummy routine, which the user can replace in order to make cuts on
51452 C...the kinematics on the parton level before the matrix elements are
51453 C...evaluated and the event is generated. The cross-section estimates
51454 C...will automatically take these cuts into account, so the given
51455 C...values are for the allowed phase space region only. MCUT=0 means
51456 C...that the event has passed the cuts, MCUT=1 that it has failed.
51457  
51458       SUBROUTINE PYKCUT(MCUT)
51459  
51460 C...Double precision and integer declarations.
51461       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51462       IMPLICIT INTEGER(I-N)
51463       INTEGER PYK,PYCHGE,PYCOMP
51464 C...Commonblocks.
51465       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51466       COMMON/PYINT1/MINT(400),VINT(400)
51467       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
51468       SAVE /PYDAT1/,/PYINT1/,/PYINT2/
51469  
51470 C...Set default value (accepting event) for MCUT.
51471       MCUT=0
51472  
51473 C...Read out subprocess number.
51474       ISUB=MINT(1)
51475       ISTSB=ISET(ISUB)
51476  
51477 C...Read out tau, y*, cos(theta), tau' (where defined, else =0).
51478       TAU=VINT(21)
51479       YST=VINT(22)
51480       CTH=0D0
51481       IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) CTH=VINT(23)
51482       TAUP=0D0
51483       IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUP=VINT(26)
51484  
51485 C...Calculate x_1, x_2, x_F.
51486       IF(ISTSB.LE.2.OR.ISTSB.GE.5) THEN
51487         X1=SQRT(TAU)*EXP(YST)
51488         X2=SQRT(TAU)*EXP(-YST)
51489       ELSE
51490         X1=SQRT(TAUP)*EXP(YST)
51491         X2=SQRT(TAUP)*EXP(-YST)
51492       ENDIF
51493       XF=X1-X2
51494  
51495 C...Calculate shat, that, uhat, p_T^2.
51496       SHAT=TAU*VINT(2)
51497       SQM3=VINT(63)
51498       SQM4=VINT(64)
51499       RM3=SQM3/SHAT
51500       RM4=SQM4/SHAT
51501       BE34=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4))
51502       RPTS=4D0*VINT(71)**2/SHAT
51503       BE34L=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4-RPTS))
51504       RM34=2D0*RM3*RM4
51505       RSQM=1D0+RM34
51506       RTHM=(4D0*RM3*RM4+RPTS)/(1D0-RM3-RM4+BE34L)
51507       THAT=-0.5D0*SHAT*MAX(RTHM,1D0-RM3-RM4-BE34*CTH)
51508       UHAT=-0.5D0*SHAT*MAX(RTHM,1D0-RM3-RM4+BE34*CTH)
51509       PT2=MAX(VINT(71)**2,0.25D0*SHAT*BE34**2*(1D0-CTH**2))
51510  
51511 C...Decisions by user to be put here.
51512  
51513 C...Stop program if this routine is ever called.
51514 C...You should not copy these lines to your own routine.
51515       WRITE(MSTU(11),5000)
51516       IF(PYR(0).LT.10D0) STOP
51517  
51518 C...Format for error printout.
51519  5000 FORMAT(1X,'Error: you did not link your PYKCUT routine ',
51520      &'correctly.'/1X,'Dummy routine in PYTHIA file called instead.'/
51521      &1X,'Execution stopped!')
51522  
51523       RETURN
51524       END
51525  
51526 C*********************************************************************
51527  
51528 C...PYEVWT
51529 C...Dummy routine, which the user can replace in order to multiply the
51530 C...standard PYTHIA differential cross-section by a process- and
51531 C...kinematics-dependent factor WTXS. For MSTP(142)=1 this corresponds
51532 C...to generation of weighted events, with weight 1/WTXS, while for
51533 C...MSTP(142)=2 it corresponds to a modification of the underlying
51534 C...physics.
51535  
51536       SUBROUTINE PYEVWT(WTXS)
51537  
51538 C...Double precision and integer declarations.
51539       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51540       IMPLICIT INTEGER(I-N)
51541       INTEGER PYK,PYCHGE,PYCOMP
51542 C...Commonblocks.
51543       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51544       COMMON/PYINT1/MINT(400),VINT(400)
51545       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
51546       SAVE /PYDAT1/,/PYINT1/,/PYINT2/
51547  
51548 C...Set default weight for WTXS.
51549       WTXS=1D0
51550  
51551 C...Read out subprocess number.
51552       ISUB=MINT(1)
51553       ISTSB=ISET(ISUB)
51554  
51555 C...Read out tau, y*, cos(theta), tau' (where defined, else =0).
51556       TAU=VINT(21)
51557       YST=VINT(22)
51558       CTH=0D0
51559       IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) CTH=VINT(23)
51560       TAUP=0D0
51561       IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUP=VINT(26)
51562  
51563 C...Read out x_1, x_2, x_F, shat, that, uhat, p_T^2.
51564       X1=VINT(41)
51565       X2=VINT(42)
51566       XF=X1-X2
51567       SHAT=VINT(44)
51568       THAT=VINT(45)
51569       UHAT=VINT(46)
51570       PT2=VINT(48)
51571  
51572 C...Modifications by user to be put here.
51573  
51574 C...Stop program if this routine is ever called.
51575 C...You should not copy these lines to your own routine.
51576       WRITE(MSTU(11),5000)
51577       IF(PYR(0).LT.10D0) STOP
51578  
51579 C...Format for error printout.
51580  5000 FORMAT(1X,'Error: you did not link your PYEVWT routine ',
51581      &'correctly.'/1X,'Dummy routine in PYTHIA file called instead.'/
51582      &1X,'Execution stopped!')
51583  
51584       RETURN
51585       END
51586  
51587 C*********************************************************************
51588  
51589 C...PYUPIN
51590 C...Dummy copy of routine to be called by user to set up a user-defined
51591 C...process.
51592  
51593       SUBROUTINE PYUPIN(ISUB,TITLE,SIGMAX)
51594  
51595 C...Double precision and integer declarations.
51596       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51597       IMPLICIT INTEGER(I-N)
51598       INTEGER PYK,PYCHGE,PYCOMP
51599 C...Commonblocks.
51600       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51601       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
51602       COMMON/PYINT6/PROC(0:500)
51603       CHARACTER PROC*28
51604       SAVE /PYDAT1/,/PYINT2/,/PYINT6/
51605 C...Local character variable.
51606       CHARACTER*(*) TITLE
51607  
51608 C...Check that subprocess number free.
51609       IF(ISUB.LT.1.OR.ISUB.GT.500.OR.ISET(ISUB).GE.0) THEN
51610         WRITE(MSTU(11),5000) ISUB
51611         STOP
51612       ENDIF
51613  
51614 C...Fill information on new process.
51615       ISET(ISUB)=11
51616       COEF(ISUB,1)=SIGMAX
51617       PROC(ISUB)=TITLE//' '
51618  
51619 C...Format for error output.
51620  5000 FORMAT(1X,'Error: user-defined subprocess code ',I4,
51621      &' not allowed.'//1X,'Execution stopped!')
51622  
51623       RETURN
51624       END
51625  
51626 C*********************************************************************
51627  
51628 C...PYUPEV
51629 C...Dummy routine, to be replaced by user. When called from PYTHIA
51630 C...the subprocess number ISUB will be given, and PYUPEV is supposed
51631 C...to generate an event of this type, to be stored in the PYUPPR
51632 C...commonblock. SIGEV gives the differential cross-section associated
51633 C...with the event, i.e. the acceptance probability of the event is
51634 C...taken to be SIGEV/SIGMAX, where SIGMAX was given in the PYUPIN
51635 C...call.
51636  
51637       SUBROUTINE PYUPEV(ISUB,SIGEV)
51638  
51639 C...Double precision and integer declarations.
51640       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51641       IMPLICIT INTEGER(I-N)
51642       INTEGER PYK,PYCHGE,PYCOMP
51643 C...Commonblocks.
51644       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51645       COMMON/PYUPPR/NUP,KUP(20,7),NFUP,IFUP(10,2),PUP(20,5),Q2UP(0:10)
51646       SAVE /PYDAT1/,/PYUPPR/
51647  
51648 C...Stop program if this routine is ever called.
51649 C...You should not copy these lines to your own routine.
51650       WRITE(MSTU(11),5000)
51651       IF(PYR(0).LT.10D0) STOP
51652       SIGEV=ISUB
51653  
51654 C...Format for error printout.
51655  5000 FORMAT(1X,'Error: you did not link your PYUPEV routine ',
51656      &'correctly.'/1X,'Dummy routine in PYTHIA file called instead.'/
51657      &1X,'Execution stopped!')
51658  
51659       RETURN
51660       END
51661  
51662 C*********************************************************************
51663 C...PYTAUD
51664 C...Dummy routine, to be replaced by user, to handle the decay of a
51665 C...polarized tau lepton.
51666 C...Input:
51667 C...ITAU is the position where the decaying tau is stored in /PYJETS/.
51668 C...IORIG is the position where the mother of the tau is stored;
51669 C...     is 0 when the mother is not stored.
51670 C...KFORIG is the flavour of the mother of the tau;
51671 C...     is 0 when the mother is not known.
51672 C...Note that IORIG=0 does not necessarily imply KFORIG=0;
51673 C...     e.g. in B hadron semileptonic decays the W  propagator
51674 C...     is not explicitly stored but the W code is still unambiguous.
51675 C...Output:
51676 C...NDECAY is the number of decay products in the current tau decay.
51677 C...These decay products should be added to the /PYJETS/ common block,
51678 C...in positions N+1 through N+NDECAY. For each product I you must
51679 C...give the flavour codes K(I,2) and the five-momenta P(I,1), P(I,2),
51680 C...P(I,3), P(I,4) and P(I,5). The rest will be stored automatically.
51681  
51682       SUBROUTINE PYTAUD(ITAU,IORIG,KFORIG,NDECAY)
51683  
51684 C...Double precision and integer declarations.
51685       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51686       IMPLICIT INTEGER(I-N)
51687       INTEGER PYK,PYCHGE,PYCOMP
51688 C...Commonblocks.
51689       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
51690       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51691       SAVE /PYJETS/,/PYDAT1/
51692  
51693 C...Stop program if this routine is ever called.
51694 C...You should not copy these lines to your own routine.
51695       NDECAY=ITAU+IORIG+KFORIG
51696       WRITE(MSTU(11),5000)
51697       IF(PYR(0).LT.10D0) STOP
51698  
51699 C...Format for error printout.
51700  5000 FORMAT(1X,'Error: you did not link your PYTAUD routine ',
51701      &'correctly.'/1X,'Dummy routine in PYTHIA file called instead.'/
51702      &1X,'Execution stopped!')
51703  
51704       RETURN
51705       END
51706  
51707 C*********************************************************************
51708  
51709 C...PYTIME
51710 C...Finds current date and time.
51711 C...Since this task is not standardized in Fortran 77, the routine
51712 C...is dummy, to be replaced by the user. Examples are given for
51713 C...the Fortran 90 routine and DEC Fortran 77, and what to do if
51714 C...you do not have access to suitable routines.
51715  
51716       SUBROUTINE PYTIME(IDATI)
51717  
51718 C...Double precision and integer declarations.
51719       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51720       IMPLICIT INTEGER(I-N)
51721       INTEGER PYK,PYCHGE,PYCOMP
51722       CHARACTER*8 ATIME
51723 C...Local array.
51724       INTEGER IDATI(6),IDTEMP(3)
51725  
51726 C...Example 0: if you do not have suitable routines.
51727       DO 100 J=1,6
51728       IDATI(J)=0
51729   100 CONTINUE
51730  
51731 C...Example 1: Fortran 90 routine.
51732 C      INTEGER IVAL(8)
51733 C      CALL DATE_AND_TIME(VALUES=IVAL)
51734 C      IDATI(1)=IVAL(1)
51735 C      IDATI(2)=IVAL(2)
51736 C      IDATI(3)=IVAL(3)
51737 C      IDATI(4)=IVAL(5)
51738 C      IDATI(5)=IVAL(6)
51739 C      IDATI(6)=IVAL(7)
51740  
51741 C...Example 2: DEC Fortran 77. AIX.
51742 C      CALL IDATE(IMON,IDAY,IYEAR)
51743 C      IF(IYEAR.LT.70) THEN
51744 C        IDATI(1)=2000+IYEAR
51745 C      ELSEIF(IYEAR.LT.100) THEN
51746 C        IDATI(1)=1900+IYEAR
51747 C      ELSE
51748 C        IDATI(1)=IYEAR 
51749 C      ENDIF 
51750 C      IDATI(2)=IMON
51751 C      IDATI(3)=IDAY
51752 C      CALL ITIME(IHOUR,IMIN,ISEC)
51753 C      IDATI(4)=IHOUR
51754 C      IDATI(5)=IMIN
51755 C      IDATI(6)=ISEC
51756  
51757 C...Example 3: DEC Fortran, IRIX, IRIX64.
51758 C      CALL IDATE(IMON,IDAY,IYEAR)
51759 C      IF(IYEAR.LT.70) THEN
51760 C        IDATI(1)=2000+IYEAR
51761 C      ELSEIF(IYEAR.LT.100) THEN
51762 C        IDATI(1)=1900+IYEAR
51763 C      ELSE
51764 C        IDATI(1)=IYEAR 
51765 C      ENDIF 
51766 C      IDATI(2)=IMON
51767 C      IDATI(3)=IDAY
51768 C      CALL TIME(ATIME)
51769 C      IHOUR=0
51770 C      IMIN=0
51771 C      ISEC=0
51772 C      READ(ATIME(1:2),'(I2)') IHOUR
51773 C      READ(ATIME(4:5),'(I2)') IMIN
51774 C      READ(ATIME(7:8),'(I2)') ISEC
51775 C      IDATI(4)=IHOUR
51776 C      IDATI(5)=IMIN
51777 C      IDATI(6)=ISEC
51778  
51779 C...Example 4: GNU LINUX libU77, SunOS.
51780 C      CALL IDATE(IDTEMP)
51781 C      IDATI(1)=IDTEMP(3)
51782 C      IDATI(2)=IDTEMP(2)
51783 C      IDATI(3)=IDTEMP(1)
51784 C      CALL ITIME(IDTEMP)
51785 C      IDATI(4)=IDTEMP(1)
51786 C      IDATI(5)=IDTEMP(2)
51787 C      IDATI(6)=IDTEMP(3)
51788  
51789       RETURN
51790       END